JDBC

JDBC는 자바에서 제공하는 데이터베이스와 연결하여 데이터를 주고받을 수 있도록 하는 인터페이스이다.

DBCP(커넥션 풀)

데이터베이스 커넥션을 소스 내에서 설정해놓은 방법이다.
WAS 실행 시 데이터베이스와 연결된 DB Connection을 미리 만들어서 풀(pool) 속에 저장해 두고, DB연결 요청이 있으면 Pool에서 Connection객체를 가져다 쓰고 다시 Pool에 반환한다.
만약 모든 커넥션이 사용중이여서 풀에 남은 커넥션이 없다면 해당 클라이언트는 대기 상태로 전환이 되고, 커넥션이 반환되면 대기하고 있는 순서대로 커넥션이 제공된다.
dbcp동작방식

DBCP 옵션

DBCP를 사용하므로써 설정할 수 있는 옵션
maxActive : 동시에 사용할 수 있는 최대 커넥션 개수
maxIdle : Connection Pool에 반납할 때 최대로 유지할 수 있는 커넥션 개수
minIdle : 최소한으로 유지할 커넥션 개수
initialSize : 최소로 getConnection() 메서드를 통해 커넥션 풀에 채워 넣을 커넥션 개수

JNDI

JNDI는 WAS 단에 DB Pool을 미리 Naming을 시켜두는 방법이다.

JDBC와 DBCP의 차이

JDBC를 사용할 경우 DB접속 시

  1. DB접속을 위한 JDBC 드라이버 로드
  2. getConnection 메소드로 부터 DB커넥션 객체를 얻음
  3. 쿼리 수행을 위한 PreparedStatement 객체 생성
  4. executeQuery를 실행해서 결과를 받아옴

여기서 1번과 2번을 DB연결 할 때 마다 같은 작업을 반복한다.
이 부분을 효율적으로 처리하는 것이 DBCP이다.
DBCP를 이용하면 미리 일정량의 Connection객체를 Pool에 생성하고 DB연결 요청할 때마다 Pool에서 Connection을 가져와 사용하기 때문에 매번 DB연결하지 않아도 된다.

DBCP와 JNDI의 차이

DBCP는 커넥션 풀을 어플리케이션 소스단에서 설정해 놓는다.
JNDI는 WAS단에 커넥션 풀을 미리 네이밍 해둔다.

JNDI의 장점

WAS에 DataSource를 설정하는 이유

  • DB설정 정보를 파악하기 쉽다.
    JNDI를 사용하여 WAS단에 설정정보를 저장해놓으면 디비가 몇개 붙었는지, DB설정정보를 파악하기 쉽다.

  • DB커넥션 풀을 효율적으로 사용 가능
    WAS단에서 DB Pool을 하나로 관리하면 효율이 좋아진다.

참고

https://eongeuni.tistory.com/43
https://ss-o.tistory.com/133