본문 바로가기

HikariCP maxLifetime을 DB 타임아웃보다 짧게 잡아야 하는 이유

조회 2 · 댓글 0
고구마엔사이다작성자2026년 8월 21일

운영 중 간헐적으로 "connection is closed" 나 broken pipe 계열 에러가 뜬다면, 커넥션 풀이 죽은 커넥션을 들고 있다가 내주는 경우가 많습니다. DB나 중간 방화벽/로드밸런서가 유휴 커넥션을 먼저 끊었는데 풀은 그걸 모르고 재사용해서 생기는 문제라고 보면 됩니다.

HikariCP는 maxLifetime으로 커넥션 최대 수명을 관리합니다. 기본값은 1800000ms(30분)이고, 공식 문서는 이 값을 DB나 인프라가 강제하는 커넥션 시간 제한보다 몇 초 짧게 잡으라고 권장합니다. 예를 들어 DB wait_timeout이 있으면 그보다 짧게 둬서 풀이 먼저 커넥션을 폐기하고 새로 맺게 하는 것입니다. 참고로 최소 허용값은 30000ms(30초)입니다.

커넥션을 오래 유지해야 하는 상황이라면 keepaliveTime을 함께 쓰면 됩니다. 주기적으로 살아있는지 확인해 네트워크/DB가 끊지 못하게 하는 옵션이고 기본값은 120000ms(2분), maxLifetime보다 작아야 합니다. 정리하면 keepaliveTime < maxLifetime < DB 커넥션 제한 순서를 지키는 것이 핵심입니다. 주의할 점은 maxLifetime은 사용 중인 커넥션에는 적용되지 않고 반납된 뒤 폐기된다는 것입니다.

🔗 https://github.com/brettwooldridge/HikariCP

로그인 후 답글을 남길 수 있습니다.