Connection Pool
- 데이터베이스와의 연결을 미리 생성해 두고 필요할 때 재사용하는 기술
- 매번 연결을 새롭게 생성/종료하는 것보다 훨씬 효율적
- 시스템 부하를 줄이고 성능을 향상시키는 데 도움
Spring Boot는 HikariCP를 기본 Connection Pool로 사용한다.
Hikari CP
- Spring Boot 2.0부터 기본으로 설정되어 있는 DB Connection Pool Library
- 빠른 DB 접속 가능: DB 접속 설정 객체를 미리 생성 및 연결해 메모리 상에 등록해 놓기 때문에 클라이언트가 빠르게 DB에 접속 가능
- 서버 자원 고갈 방지: DB Connection 수를 제한할 수 있어서 과도한 접속으로 인한 서버 자원 고갈을 방지
- 쉬운 유지보수: DB 접속 모듈을 공통화해 DB 서버의 환경이 바뀔 경우 쉽게 유지보수 가능
- 비용 절감: 연결이 끝난 Connection을 재사용함으로써 새 객체 생성 비용을 줄일 수 있음
Hikari CP Property
- maximumPoolSize
- Connection Pool이 가질 수 있는 최대 Connection 개수
- 기본값: 10 / 최대(권장): 50
- minimum-idle
- Connection Pool이 최소한으로 유지하려는 Connection 개수
- 기본값: maximumPoolSize와 동일
- minimum-idel 값을 지정하지 않고, maximumPoolSize를 50으로 지정 시 minimum-idel 도 50
- connectionTimeout
- Client가 Pool에서 Connection을 기다리는 최대 시간
- 시간이 초과하면 SQLException이 발생
- 기본값: 30000(30초) / 최소: 250
- idle-timeout
- Pool에서 Connection이 유휴한 상태로 허용되는 최대 시간
- minimum-idle이 maximumPoolSize보다 작게 정의될 때만 적용
- 기본값: 600000(10분) / 최소: 10000(10초) / 0으로 설정 시 유휴 Connection이 Pool에서 제거 X
- keepaliveTime
- Connection 유효여부 확인 주기 설정
- 유효하지 않은 경우 Connection Pool에서 제거
- maxLifeTime 보다 짧아야 하며, 긴 경우 이미 제거된 이후 검증으로 무의미
- 기본값: 0(disable) / 최소: 30000(30초)
- maxLifetime
- 풀에 존재하는 Connection의 최대 Lifetime(설정하는 것을 권장)
- 사용 중인 Connection은 제거 X, Connection이 닫히고 나서 제거 O
- DB나 Infra의 Connection time보다 짧아야 하며, 같거나 길다면 Infinite Lifetime
- 기본값: 1800000(30분) / 최소: 30000(30초) / 0으로 설정 시에도 Infinite Lifetime
- pool-name: Connection Pool Name(설정하지 않으면 자동 생성)
- validation-timeout
- Connection 유효성 검사에 대한 timeout 설정
- connectionTimeout 보다 짧아야 함
- 기본값: 5000 / 최소: 250
- auto-commit
- auto commit 여부
- 기본값: true
https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing
- 데이터베이스 연결 풀의 크기를 결정하는 데 중요한 원칙 중 하나는 최소한의 연결을 유지하는 것
- 스레드 수가 CPU 코어 수를 초과하면 더 많은 스레드를 추가함으로써 더 느려지게 되므로 최소한으로 유지하는 것이 중요
- A와 B를 동시에 실행하는 것보다 순차적으로 실행하는 것이 항상 더 빠르다.
'TIL(Today I Learned)' 카테고리의 다른 글
TIL - PostMan에서 Token을 Global로 적용 (0) | 2024.07.17 |
---|---|
TIL - IntelliJ에서 Git Flow 사용 (0) | 2024.07.16 |
TIL - Apache Tika로 이미지 타입 검사 (0) | 2024.07.09 |
TIL - Apache JMeter를 이용한 성능 테스트 (0) | 2024.07.08 |
TIL - 조회수 증가 테스트 코드에서 조회수가 반영되지 않는 문제 해결 (0) | 2024.07.05 |