DBCP의 개념과 주요 설정들

개발새발log·2023년 3월 16일
0

쉬운코드 님의 DBCP (DB connection pool)의 개념부터 설정 방법까지! hikariCP와 MySQL을 예제로 설명합니다을 보고 정리한 글 입니다.

편의상 백엔드 애플리케이션 단은 BE로, 앞으로 설명할 Database Connection Pool은 DBCP로 부르겠습니다.

배경

BE와 DB 통신은 TCP 연결 기반으로, connection open 시에 3-way handshaking, close 시에 4-way handshaking을 한다. 즉, 커넥션을 연결하거나 끊는 과정이 가장 비용이 크다.

매 요청마다 커넥션을 열고 닫는 비용을 덜기 위해 나온 게 Database Connection pool이다. (= DBCP)

DBCP (Database Connection Pool)

미리 커넥션 연결을 지어 놓은 객체들이 모여 있는 곳이다.

직접 connection을 열고 닫는 게 아닌, pool에서 빌리고 다 쓴 뒤 반환하는 방식이다.

DBCP 관련 설정하기

MySQL(DB) / HikariCP(DBCP) 기준

1) DB 입장에서 설정하는 DB 서버 설정과,
2) BE 입장에서 설정하는 DBCP 설정으로 나뉜다

DB 서버 설정

✅ max_connections

client와 맺을 수 있는 최대 connection 수

❔ WHY ?

max_connections를 충분히 늘리면 서버를 늘려도 수용 가능 (BE단의 maximumPoolSize 고려 필요)

✅ wait_timeout

client와의 연결을 끊기까지 임계치

❔ WHY ?

DB의 입장에서 적절한 시점에 connection을 닫을 필요가 있다.

BE단에서 비정상 종료/네트워크문제 등으로 인해 반환을 못할 수도 있기 때문.

그러면 DB단에서는 열려 있다고 간주하고 하염없이 기다릴 수도 있다. 이런 상황을 방지하기 위해 필요하다.

DBCP 설정

✅ minimumIdle

idle connection의 최소 임계치 (default는 10으로, maximumPoolSize와 같다 -> 권장 !)

✅ maximumPoolSize

pool이 가질 수 있는 최대 커넥션 수 (idle + active)

❔ 연관 지어 이해하기

1) 현재 idle connection <= minimumIdle
2) 전체 connection 수 <= maximumPoolSize

이 경우에 추가로 connection을 만들 수 있다.

즉, 상황에 따라 유동적으로 커넥션 추가/삭제 가능

➿ EX.

minimumIdle = 2, maximumPoolSize = 4인 경우

active connection = 1, idle connection = 1라면 ?
1, 2의 조건을 만족하므로 connection++

active connection = 2, idle connection = 1라면 ?
1, 2의 조건을 만족하므로 connection++

active connection = 3, idle connection = 1라면 ?
1은 만족하지만 2는 만족하지 않으므로 더 이상 늘리지 않는다.

디폴트는 minimumIdle = 10, maximumPoolSize = 10로 설정되어 있다고 한다 👉 고정 pool size 권장

✅ maxLifetime

pool에서 connection의 최대 수명

✅ connectionTimeout

client가 pool에서 connection을 받기 위한 대기 시간의 임계치. 사용자가 무한정 기다리는 상황을 방지하기 위함.

다른 파라메터값 설명은 Hikari Github을 참고해주세요 !

profile
⚠️ 주인장의 머릿속을 닮아 두서 없음 주의 ⚠️

0개의 댓글