데이터베이스(쉬운코드)
30. DBCP(DB connection pool)
youbing
2025. 2. 10. 17:23
본 내용은 유튜버 쉬운코드의 강의 "데이터베이스"를 참고하여 작성하였습니다.
DBCP를 안 쓸 때의 문제점
- 보통 Backend 서버와 DB 서버가 다른 컴퓨터에서 동작을 하므로 쿼리 요청/응답을 네트워크 통신(TCP 기반)으로 진행함.
- 높은 송수신 신뢰성 but 연결 지양적인 특징이 있으므로 open/close connection 해야 하는데 이 동작에 시간이 소요됨.
DBCP 개념과 원리
- 미리 DB connection을 만들어두고 연결된 connection들을 pool처럼 관리함.
- 쿼리 요청을 하기 전에 pool에서 connection을 빌려옴.
- connection 재사용 -> 열고 닫는 시간 절약
DBCP와 DB 서버 설정 방법
- DB connection은 backend server와 DB 서버 사이의 연결을 의미하기 때문에 backend server와 DB 서버 각각에서의 설정(configuration) 방법을 잘 알고 있어야 한다.
MySQL에서 중요한 파라미터
- max_connections : client와 맺을 수 있는 최대 connection 수
- DBCP의 최대 connection 수가 4인데 DB 서버의 max_connections이 4이면 트래픽 증가 등의 문제로 다른 백엔드 서버가 DB 서버와 연결하려고 할 때 연결을 맺을 수 없게 됨.
- wait_timeout : connection이 inactive 할 때 다시 요청이 오기까지 얼마의 시간을 기다린 뒤에 close 할 것인지를 결정 (시간 내에 요청이 도착하면 0으로 초기화)
- 비정상적인 connection 종료, connection 다 쓰고 반환이 안됨, 네트워크 단절 등을 해결하기 위해 사용
DBCP 설정
- minimumIdle : pool에서 유지하는 최소한의 idle connection 수 (idle : 유휴 상태의, 사용되지 않고 대기 중인)
- maximumPoolSize : pool이 가질 수 있는 최대 connection 수 (idle + active(in-use) connection 합쳐서 최대 수)
- idle connection 수가 minimumIdle보다 작고, 전체 connection 수도 maximumPoolSize보다 작다면 신속하게 추가로 connection을 만든다.
- 예 : minimumIdle가 2, maximumPoolSize가 4이면 처음에는 2개를 연결해둠.
-> 1개를 사용하게 되면 minimumIdle를 2로 맞추기 위해 한 개를 더 연결함.
-> 4개를 다 사용하다가 다 안 사용하게 되면 2개를 연결 해제함. - (HikariCP에서 권장) minimumIdle의 default는 maximumPoolSiz와 동일(= pool size 고정) -> connection을 연결하는 속도가 느리기 때문.
- maxLifetime : pool에서 connection의 최대 수명
- maxLifetime을 넘기면 idle의 경우 pool에서 바로 제거, active인 경우 pool로 반환된 후 제거
- 만약 pool로 반환이 안되면 maxLifetime 동작 안함. -> DB 서버에서 wait_timeout을 설정해뒀다면 그 시간이 지나고 연결이 끊김. -> 따라서, pool로 반환을 잘 시켜주는 것이 중요
- DB의 connection time limit보다 몇 초 짧게 설정해야 함. (MySQL의 wait_timeout)
- connectionTimeout : pool에서 connection을 받기 위한 대기 시간
-> parameter를 적절하게 다루는 것이 중요!
적절한 connection 수를 찾기 위한 과정
- 모니터링 환경 구축(서버 리소스, 서버 스레드 수, DBCP 등)
- 백엔드 시스템 부하 테스트(nGrinder 등)
- request per second와 avg response time 확인
- 백엔드 서버, DB 서버의 CPU, MEM 등등 리소스 사용률 확인
- thread per request 모델이라면 active thread 수 확인
- DBCP의 active connection 수 확인
- 사용할 백엔드 서버 수를 고려하여 DBCP의 max pool size 결정
-> 이런 식으로 종합적으로 고려하면서 connection 수를 설정할 수 있다.
참고 사항
- 여러 종류의 DBCP가 존재합니다. 현재 사용 중인 DBCP의 사용법을 잘 숙지하는 것이 중요합니다.
- naver D2에서 정리한 자료를 참고하시는 것도 많은 도움이 됩니다.