Commons DBCP 이해하기
데이터베이스와 애플리케이션을 효율적으로 연결하는 커넥션 풀(connection pool) 라이브러리는 웹 애플리케이션에서 필수 요소입니다. 웹 애플리케이션 서버로 상용 제품을 사용하다면 보통 제조사에서 제공하는 커넥션 풀 구현체를 사용합니다. 그 외에 오픈소스 라이브러리로 Apache의 Commons DBCP와 Tomcat-JDBC, BoneCP, HikariCP 등이 있습니다.
커넥션 풀 라이브러리를 잘 사용하면 데이터베이스와 애플리케이션의 일부분에서 발생하는 문제가 전체로 전파되지 않게 할 수 있고, 일시적인 문제가 긴 시간 이어지지 않게 할 수 있습니다. 반대로 값을 적절하지 못하게 설정해서 커넥션 풀이 애플리케이션에서 병목 지점이 되는 경우도 있습니다. 웹 애플리케이션의 요청은 대부분 DBMS(database management system)로 연결되기 때문에 커넥션 풀 라이브러리의 설정은 전체 애플리케이션의 성능과 안정성에 영향을 미치는 핵심입니다.
이렇게 중요한 커넥션 풀 라이브러리를 적절하게 사용하려면 라이브러리의 내부 구조와 원리, 속성값의 의미를 이해해야 합니다. 이 글에서는 대표적인 오픈소스 커넥션 풀 라이브러리인 Commons DBCP를 살펴보겠습니다.
버전 선택과 속성 설정 방법
JDK 버전과 Commons DBCP 버전
JDK(Java development kit)의 버전에 따라서 Connection이나 Statement 같은 JDBC(Java database connectivity)의 인터페이스가 조금씩 다르므로 사용하는 JDK의 버전에 맞게 Commons DBCP 버전을 선택해야 안정된 동작을 기대할 수 있다. 예를 들어 JDK 6을 사용하면서 Commons DBCP 1.3.x를 사용한다면 JDBC 4에 추가된 SQLTimeoutException 등을 드라이버에서 전달할 때 Commons DBCP가 정교하게 처리하지 못해 오류 파악하기 어려울 수 있다.
Commons DBCP 주요 버전과 그에 대응하는 JDK 버전과 JDBC 버전은 다음과 같다.