개요
- DB server과 Backend Application은 TCP 기반으로 통신
- TCP
- 장점: 높은 송수신 신뢰성
- 단점: connection을 열고 닫을 때 시간이 많이 걸린다.
- 계속 요청을 할 때 마다 계속 connection으로 시간을 쓰게됨.
connection pool
- connection pool을 이용해서 open과 close를 간소화
- connection pool과 DB Server을 미리 connect 시킨다.
- open 시에 connection pool에서 connection을 가져옴
- close 시에 connection pool에 반납
=> connection을 재사용
DBCP: DB connection pool
- mysql과 springboot의 HikariCP로 설명
DB 서버 설정(hikari CP)
max_connections
: client(back)와 맞을 수 있는 최대 connection 수
- 과부하가 생겼을 때 max_connections가 부족해서 불상사가 일어 날 수 있다.
wait-timeout
: connection이 inactive(쉬고있음)일 때 다시 요청이 올 때까지 얼마나 기다렸다가 close할 것인가? DB server측의 connection을 제거하는 것
- 버그나 다른 이유로 connection이 반환되지 않을 경우 DB에서 close해버리는 설정
DBCP 설정
minimumIdle
: Idle connection(대기중인)의 최소 개수
maximumPoolSize
: pool connection이 가질 수 있는 total 최대 connection
- maximumPoolSize까지 도달할 때 까지 Idle connecion을 계속해서 늘리는 형식으로 성능을 높힘.
- 일이 모두 끝나면 minimumIdle만큼 남기고 connection을 삭제
- minimumIdle과 macimumPoolsize를 같게 설정하라고 권장
- connection을 추가하는게 절대 빠르지 않기 때문에 오히려 성능 저하를 일으킬 수 있음.
maxLifetime
: 주어진 시간이 지나면 connection 제거, 단 pool로 반환 되었을 때에만 해당
- wait_timeout보다 몇 초 짧게 설정하는 것을 권장
- connection이 일을 하는 중에 wait_timeout으로 DB쪽 connection이 끊기는 사태를 방지하기 위함
hikari CP