* 이 포스팅은 zunoxi.github.io/infra/2020/06/20/infra-db-jdbc/님의 깃을 학습한 뒤 추가로 공부한 후 재정리한 글입니다.
* 2차 가공 및 재배포를 금지합니다.
* 오탈자 및 잘못된 내용은 댓글달아주세요.
[참고글]
JDBC 동작 순서 및 SQL 전송에서 Statement, PreparedStatement 차이점 ( 소스코드 포함 )
* 차이점에 대해 알아보기 전 connection pool, datasource에 먼저 살펴보겠습니다.
* Connection pool
- DriverManager.getConnection()은 실제 자바프로그램과 데이터베이스를 네트워크상에서 연결해주는 메소드
- Connection은 네트워크상의 연결 자체를 의미
- Connection Pool의 Connection 객체 각각을 직접 웹 애플리케이션에서 이용하면 체계적인 관리가 힘듦
- Connection 과정은 부담되는 작업이며, 불필요한 연결에 의한 서버 자원의 낭비가 발생
- Connection 객체를 프로그램이 실행될 때마다 생성하는 것이 아니라 웹 애플리케이션이 서비스되기 전에 웹서버에 미리 생성하여 준비한 다음 필요할 때 준비된 Connection을 가져다 사용함으로써 JDBC 프로그래밍 문제점들을 개선
* Datasource
- javax.sql.DataSource라는 인터페이스는 Connection Pool을 관리하는 목적으로 사용되는 객체
- Application에서는 이 Datasource 인터페이스를 통해서 Connection을 얻어오고 반납하는 등의 작업을 구현해야함
- 즉, Connection Pool을 어플리케이션단에서 어떻게 관리할지를 구현하는 인터페이스
- 기존의 DriverManager를 이용한 방식은 내부적으로 static한 필드를 사용 -> 스레드 환경에서 바람직하지 않음 -> 되도록 DataSource를 이용
1. JDBC
* Java DataBase Connectivity
- 데이터베이스를 조작하는 표준 SQL 인터페이스 API
* 특징
- 인터페이스 기반으로 구축 ( 데이터베이스 커넥션 인터페이스 )
- 이론적으로 각 DBMS에 맞는 JDBC를 받아주게 되면 쉽게 DBMS 변경 가능
- 일반적인 JDBC는 Database Pool 방식을 사용하지 않고 DB에서 정보를 가져올 때마다 매번 디비연결을 열고 닫음
- 따라서 매우 비효율적이기 때문에 상용 어플에서 JDBC 방식을 사용하는 경우는 거의 없다.
2. DBCP
* Database Connection Pool
* 특징
- Application을 시작할 때 원하는 만큼 커넥션 객체를 만들어놓고 pool에 넣어 놓은 채 필요할 때마다 가져다 쓰고 다시 반납하는 방식
- 다중스레드를 스레드풀로 관리하는 것과 비슷한 방식
- 보통 Database Connection Pool을 Application 소스단에 설정해놓은 방식
3. JNDI
* Java Naming and Directory Interface
- WAS단에 데이터베이스 커넥션 객체를 미리 네이밍해두는 방식
* 특징
- DB커넥션을 WAS단에서 제어하면서 서버에서 하나의 커넥션 풀을 가짐 ( 공유객체를 사용한다고 이해하면 됨 )
- Application이 DB에 직접 Connection을 요청하는 것이 아니라 JNDI lookup을 통해 Datasource 객체를 획득하고 그것을 Connection 요청
- 장점 1 : DB 설정 정보를 파악하기 쉽다 > WAS단에 설정정보를 통해 디비가 몇 개 붙어있는지 정보를 파악하기 수월
- 장점 2 : DB 커넥션 풀을 효율적으로 사용 가능
* JDBC와의 차이점 ( 중요 )
- 하드코딩하지않아도 됨
- JNDI는 재활용을 하기 위한 코드로 부하가 발생하지 않게 하기 위해 JNDI를 써야함
'programming > Java' 카테고리의 다른 글
JAVA) JNDI DB 연결 소스코드 (0) | 2021.01.06 |
---|---|
JAVA) JDBC 동작 순서 및 DB 연결( 소스코드 포함 ) - 최종 (0) | 2021.01.06 |
JAVA) JDBC 동작 순서 및 SQL 전송에서 Statement, PreparedStatement 차이점 ( 소스코드 포함 ) (0) | 2020.12.31 |
자바 컴파일, 실행 (0) | 2020.11.04 |
자바 IoT 프로그래밍 (import), 파라미터 (paramter), 아규먼트(argument) (0) | 2020.11.04 |
댓글