개발자 A의 가상의 실수 스토리
- 개발 서버에서 DB 연결 오류
- 커넥션을 닫지 않아서 커넥션 누수 발생
- 커넥션 풀에 있는 모든 커넥션 소진
- 새로운 커넥션을 가져올 수 없는 오류 발생
- 커넥션 최대 연결 시간 설정을 하지 않은 실수
- DBMS 자체적 커넥션 유지 시간 설정되어 있습니다.
- 커넥션의 연결 시간이 DBMS의 설정 시간을 초과
이러한 듯이 DB 관련해서 배포를 하는 과정에서도 많은 실수들이 발생합니다. 프레임 워크를 사용하면서 커넥션을 반환하지 않는 문제는 줄었지만, 커넥션 풀을 잘못 설정해서 DB 연결이 제대로 되지 않는 문제는 지금도 초보자들이 자주 겪는다.
스프링 부트에서 자주 사용되는 커넥션 풀은?
주로 HIkariCP 사용합니다.
- HikariCP는 데이터베이스 연결을 관리해주는 라이브러리입니다.
- 커넥션 풀이 설정된 커넥션의 사이즈만큼의 연결을 허용합니다.
- HTTP 요청에 대해 순차적으로 DB 커넥션을 처리해주는 기능을 수행합니다.
- DBCP(Database Connection Pool)이며 HIKariCP, Common DBCP,Tomcat JDBC Pool 등 라이브러리가 존재하는데 HikariCP는 가볍고 빠르게 처리할 수 있다는 장점이 있습니다.
- 오버헤드 제로의 프로덕션 지원 JDBC 연결 풀입니다.

JDBC 연결 풀이며, JPA에서 사용을 안 하는가??
- spring-boot-starter-data-jpa를 사용하면 내부적으로 Hibernate를 JPA 구현체를 쓴다.
- Hibernate가 DB와 통신할 때 DataSource 필요합니다.
- DataSource를 Spring Boot의 디폴트로 HikariCP가 설정되어 있습니다.
- JPA에서 EntityManger → Session → DB 접근할 경우 HikariCP 커넥션을 사용합니다.
DB 커넥션 풀
- 네트워크에서 DB를 연결하고 종료하는 시간은 전체 응답 시간에 영향을 줍니다.
- 매 요청마다 DB 연결, 종료하면 트래픽이 증가할 때 급격하게 처리량이 떨어진다.
그래서 나온 게 DB 커넥션 풀입니다.
중요한 설정
커넥션 풀 크기
미리 생성 해 둘 커넥션 개수를 지정하는 설정
- 커넥션 풀보다 많은 요청 시
- 커넥션이 없어서 다른 요청이 끝내고 반환할 때까지 기다려야 합니다.
- 일반적으로는 트래픽은 증가했다가 감소하는 패턴
- 트래픽이 적은 시간대는 최소 크기로 유지
- 트래픽이 높은 시간대에는 최대 크기로 확장
- 트래픽이 순간적으로 급증하는 패턴
- 커넥션 풀의 최소 크기를 최대 크기에 맞춘다.
- 트래픽이 급증할 경우 DB 연결 시간도 성능 저하의 주요 원인이 될 수 있습니다.
- 커넥션 풀 크기는 처리량을 늘릴 수 있습니다.
- 커넥션을 무턱대고 늘리면 CPU 사용률 증가가 된다.
- 가해지는 부하가 커지면서 쿼리 실행 시간 급격히 증가
풀에 커넥션이 없을 때 커넥션을 구할 때까지 대기할 시간
커넥션 풀에 사용할 수 있는 커넥션이 없을 때 커넥션을 얻기 위해 기다릴 수 있는 최대 시간
- HikariCP의 기본 값 : 30초
- 예시
- 클라이언트가 커넥션 대기 시간을 기다리지 못한 경우
- 새로운 요청이 추가되어 재 실행한 요청만큼 다시 실행해야 합니다.
- 서버에 가해지는 부하가 커지게 됩니다.
- 대기 시간을 넘은 요청
- 오류 응답을 받습니다.
- 서버 부하를 일정 수준으로 유지 가능
- 서버를 안정적으로 운영하는 데 도움
커넥션의 유지 시간
커넥션이 사용되지 않는 시간이 길어지면 연결이 끊길 수 있습니다.
- DB 클라이언트와 일정 시간 동안 상호작용이 없으면 자동으로 연결을 끊는 기능
- MySQL은 기본적으로 8시간 설정되어 있습니다.
- 최대 유효 시간
- 사용되지 않는 커넥션을 풀에 유지할 수 있는 최대 시간
- 유효성 검사
- 커넥션이 정상적으로 사용할 수 있는 상태인지 여부를 확인하는 절차
- 연결이 유효하지 않은 커넥션을 식별하고 풀에서 제거할 수 있습니다.
- ‘SELECT 1 FROM dual’ 이나 ‘SELECT 1’과 같은 간단한 쿼리 사용
- 최대 유지 시간
- 커넥션이 유효하더라도 커넥션을 닫고 풀에서 제거하는 시간
자료 출처
https://github.com/brettwooldridge/HikariCP?tab=readme-ov-file
https://product.kyobobook.co.kr/detail/S000216376461