서버와 데이터베이스간의 소통을 위해서는 연결을 해야 한다.
이 연결은 TCP기반으로 동작하기에 연결에 3way-handshake, 연결 해제에 4way-handshake를 진행하므로 해당 과정에서 시간이 많이 소모된다.
매번 서버와 DB간의 connection에 대한 시간적인 비용을 절약하고자 미리 연결해 놓은 connection들을 모아둔 것을 DBCP(커넥션풀)라고 한다.
미리 커넥션풀을 생성해 놓는 것으로
의 과정을 거쳐 서버와 DB간의 connection에 대한 시간적인 비용 없이 처리가 가능하다.
max_connections : client와 맺을 수 있는 최대 커넥션의 수
wait_timeout : 커넥션이 inactive할 떄 다시 요청이 오기까지 얼마의 시간을 기다린 뒤 연결을 끊을 것인지 결정 / 시간 내에 요청이 오면 해당 시점부터 시간 초기화
minimumidle : pool에서 유지하는 최소한의 idle 커넥션 수
maximumPollSize : pool이 가질 수 있는 최대 커넥션 수 (idle(inactive) 과 active(in-use) 커넥션을 합친 수)
- 커넥션풀 2개 생성 후 유지 (idle : 2, active : 0, total : 2)
- 하나의 커넥션풀이 연결되면 idle 커넥션 수가 1개가 되니 커넥션 추가 (idle : 2, active : 1, total : 3)
- 하나의 커넥션풀이 더 연결되면 idle 커넥션 수가 1개가 되니 커넥션 추가 (idle : 2, active : 2, total : 4)
- 하나의 커넥션풀이 더 연결되면 idle 커넥션 수가 1개가 되나, maximumPollSize 보다 높아지므로 추가하지 않음 (idle : 1, active : 3, total : 4)
- 커넥션들이 커넥션풀로 돌아온다면 2개의 idle 커넥션만 존재하도록 2개의 커넥션 연결 해제 (idle : 2, active : 0, total : 2)
권장사항은 minimumidle 과 maximumPollSize를 동일하게 설정한다.
→ 트래픽이 몰릴 경우 커넥션 연결과 해제 시 시간소요를 줄이고자
maxLifetime : pool에서 커넥션의 최대 수명
active상태일 경우 pool로 반환 후 제거
nGrinder와 같은 시스템 부하 테스트를 통하여 RPS(requset per second) 와 ART(avg response time)을 확인하여 설정한다.
→ 부하가 심해지는 시점의 커넥션의 수를 파악하여 max_connections, maximumPoolSize등을 처리
RPS : 초 당 몇 개의 요청을 처리할 수 있는지
ART : 요청 처리 시 평균적인 소요 시간