[DB] HikariCP 설정 (DBCP)

wujin·2023년 7월 17일
0

HikariCP 설정

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 -1 > idleTimeout

maxLifeTime이 왜 일초이상 커야 동작할까?
maxLifetime은 재연결 시간으로 idleTimeout보다 작다면 계속 idleTimeout이 되기전에 계속 재연결 해버리기 때문에 실제 커넥션들이 최소 갯수까지 떨어지지 않을것이다.


참고자료
https://javabom.tistory.com/101

3개의 댓글

comment-user-thumbnail
2023년 7월 18일

뛰어난 글이네요, 감사합니다.

1개의 답글
comment-user-thumbnail
2023년 7월 18일

아주 유용한 정보네요!

답글 달기