HikariCP는 데이터베이스 커넥션 풀(DBCP: DataBase Connection Pool) 라이브러리로서, 웹 개발에서 데이터베이스와의 연결을 효율적으로 관리하기 위해 사용된다.
아래에 몇 가지 주요 옵션과 개념을 정리하였다.
connectionTimeout
커넥션 풀에서 커넥션을 얻어오기 위해 대기하는 최대 시간.
기본값은 30,000ms(30초)이며, 지정한 시간 내에 커넥션을 얻지 못하면 SQLException이 발생한다.
minimumIdle
커넥션 풀에서 유지하는 최소한의 유휴 커넥션 수.
최적의 성능을 위해 minimumIdle을 maximumPoolSize와 동일하게 설정하는 것이 좋다.
트래픽에 따라 커넥션을 늘었다 줄었다하면 고정적인 성능을 낼 수 없다.
DB의 커넥션 자원은 낭비될 수 있지만, MSA로 도메인 별 DB를 각각 구축하는 트렌드 덕분에 풀 사이즈를 최대로 설정하는 편이다.
기본값은 maximumPoolSize와 동일하므로 minimumIdle을 설정하지 않으면 minimumIdle = maximumPoolSize가 된다.
maximumPoolSize
커넥션 풀이 유지할 수 있는 최대 커넥션 수.
유휴 상태와 사용 중인 커넥션을 합친 총 커넥션 수를 의미한다.
예를 들어, 풀에 커넥션이 없고 connectionTimeout 시간 내에 커넥션을 받지 못하면 예외가 발생한다.
이 값은 애플리케이션의 트래픽과 DB 자원을 고려하여 적절히 설정해야 한다.
maxLifetime
커넥션의 최대 유지 시간을 설정.
지정된 시간이 경과하면 커넥션을 다시 연결한다.
사용 중인 커넥션은 maxLifetime과 무관하게 종료되지 않지만, 커넥션 풀로 반환될 때 제거된다.
이 값은 DB의 wait timeout보다 짧게 설정하는 것이 권장된다.
0으로 설정하게 되면 무한 수명을 의미한다.
Ex) 커넥션 설정 예시
connectionTimeout : 30초
maximumPoolSize : 3
maxLifetime : 60초풀 밖에서 사용되고 있는 커넥션은 63초동안 사용되었다. 60초가 지났지만 해제되지 않았다. 이 커넥션은 커넥션풀에 반납되면 해제된다.
60초 연결 유지된 커넥션은 재연결 시도되고, 45초는 아직 재연결 될 시간이 아니다.
idleTimeout
커넥션 풀에 유휴 상태로 놀고 있는 커넥션들의 유지시간이다.
커넥션들이 idleTimeout시간 동안 놀고 있으면 연결 해제 한다.
minimumIdle이 maximumPoolSize보다 작게 설정된 경우에만 해당 옵션이 동작한다.
풀의 최소 갯수까지 떨어지면 더 이상 제거하지 않는다.
그러므로 idleTimeout은 최소 유휴 커넥션수가 최대풀 사이즈보다 작을때 설정하면 된다.
autoCommit
pool에서 반환된 connection의 기본 autoCommit에 관한 설정
기본값은 true 이다.
maxLifeTime이 왜 일초이상 커야 동작할까?
maxLifetime은 재연결 시간으로 idleTimeout보다 작다면 계속 idleTimeout이 되기전에 계속 재연결 해버리기 때문에 실제 커넥션들이 최소 갯수까지 떨어지지 않을것이다.
뛰어난 글이네요, 감사합니다.