창욱씨 2020. 3. 26. 12:43

DBCP란

DBCP의 개념

DBCP란 DataBase Connection Pool의 약자로 DB와 커넥션을 맺고 있는 객체를 관리하는 역할을 합니다. 일반적으로 JDBC를 이용한다면 아래와 같은 순서로 DB에 접속합니다.

  1. DB 접속을 위한 JDBC 드라이버 로드
  2. getConnection 메소드로부터 Connection 객체를 얻음
  3. 쿼리 수행을 위한 PreparedStatement 객체 생성
  4. executeQuery를 실행해서 결과를 받아옴
  5. 처리가 완료되면 사용된 리소스들을 close하여 반환

이처럼 JDBC는 DB에 연결할 때마다 드라이버를 로드하고 Connection 객체를 얻는 작업을 반복합니다. 이에 반해 DBCP는 WAS 실행시, 일정량의 Connection 객체를 생성하고 Pool이라는 공간에 저장해 둡니다. 그리고 DB 연결 요청이 있으면, Pool에서 Connection 객체를 쓰고 반환하게 됩니다.

DBCP의 종류

Commons DBCP

JDK의 버전에 따라서 Connection이나 Statement와 같은 JDBC의 인터페이스가 조금씩 다릅니다. 이 때문에 사용하는 JDK의 버전에 맞게 Commons DBCP 버전을 선택해야 안정된 동작을 할 수 있습니다.

Connection Pool의 저장 구조

Connection 개수 설정

HikariCP

HikariCP는 스프링 부트 2.0부터 설정된 default JDBC Connection Pool입니다.기존의 DBCP들 보다 빠르게 작업을 처리하고 가볍습니다.

HikariCP 의 특징
많은 Connection pool 라이브러리들은 PreparedStatement caching을 지원하지만 HikariCP는 지원하지 않습니다. Connection Pool Layer에서 PreparedStatement는 각 커넥션마다 캐싱됩니다. 만약 다른 Connection Pool 라이브러리를 사용하는 애플리케이션에서 250개의 공통 쿼리를 캐싱하고 있고 Connection Pool Size가 20이라면 DB에는 5000개의 쿼리 실행 계획을 hold 하고 있습니다. 그러나 대부분의 Major DB(Oracle, MySQL, PostgreSQL 등등)의 jdbc driver들은 설정을 통해 Statement를 캐싱할 수 있습니다. HikariCP는 이처럼 Statement 캐싱을 Connection Pool에 설정하는 것이 아닌 Driver에 설정한다는 특징이 있습니다.

728x90