Connection Pool(커넥션 풀)은 데이터베이스 연결을 미리 만들어서 재사용하도록 관리하는 기술이다.
일반적으로 애플리케이션이 DB에 접근하려면
1. DB 서버와 연결(Connection 생성)
2. SQL 쿼리 실행
3. 결과 처리
4. DB 연결 종료(Disconnect)
이런 과정이 필요한데,
문제는 "연결 생성"과 "연결 종료"가 매우 비용이 크다.
(연결 생성: 네트워크 통신 + 인증 과정
연결 종료: 연결 정리 과정)
이 과정을 매 요청마다 반복하면 성능이 심각하게 저하됩니다.
Hikari는 JDBC커넥션 풀링 라이브러리이다. 일본어로 빛을 의미하고, 그만큼 빠르고 가볍다는 특징이있어 기본 커넥션 풀로 자주 사용된다.
스프링 부트나 자바백엔드 프로젝트에서 다음과 같이 설정하면 된다.
application.yml
spring:
datasource:
url: jdbc:postgresql://localhost:5432/mydb
username: myuser
password: mypassword
driver-class-name: org.postgresql.Driver
hikari:
maximum-pool-size: 10 #최대 커넥션 수
minimum-idle: 2 #최소 유휴 커넥션 수
idle-timeout: 30000 # 유휴 상태 커넥션 유지 시간
max-lifetime: 600000 # 커넥션 최대 수명 (DB에서 오래된 커넥션을 끊어버릴 때 대비)
connection-timeout: 2000 # 커넥션을 얻기 위한 최대 대기 시간
leak-detection-threshold: 2000 # 2초 이상 커넥션이 반납되지 않으면 로그를 남김