공유 자원 구조

애플리케이션 요청은 각자 DB에 붙지 않고, 하나의 커넥션 풀을 거쳐 같은 연결 집합을 돌려 씁니다.

학습 포인트

close()는 물리 종료가 아니라 풀로 반환입니다. 그래서 생성 비용을 줄이고, 최대치에 도달했을 때만 대기와 타임아웃이 생깁니다.

애플리케이션 요청
요청 스레드 1
요청 스레드 2
요청 스레드 3
유휴가 없으면 대기
공유되는 중심 자원
커넥션 풀
minimumIdle ~ maximumPoolSize
빌릴 때

유휴가 있으면 바로 할당하고, 없으면 새 연결 생성 가능 여부를 먼저 확인합니다.

작업 후

close() 호출 시 연결을 끊지 않고 다시 idle 슬롯으로 되돌립니다.

유휴 있음 바로 빌림 max 미만 새 연결 생성 max 도달 반환까지 대기
쿼리 실행 대상
DB

빌린 커넥션으로만 접근하며, 연결 수는 풀 크기와 DB 한계 안에서 관리됩니다.

정상 경로 idle 존재
이미 열린 연결 하나를 즉시 빌려줍니다.

TCP 연결과 인증을 다시 하지 않으므로 요청은 빠르게 쿼리 단계로 넘어갑니다.

응답 지연 최소화

생성 비용 없이 재사용합니다.

부족한 순간 idle 없음
현재 풀 크기가 최대치보다 작으면 새 연결을 추가합니다.

트래픽이 늘 때 풀은 확장되지만, 무한정 늘어나지 않고 maximumPoolSize에서 멈춥니다.

일시적 확장

부하를 흡수하되 DB 자원 한계를 지킵니다.

포화 상태 max 도달
새로 만들 수 없으면 요청 스레드는 반환을 기다립니다.

connectionTimeout 안에 빈 연결이 생기지 않으면 예외가 발생합니다.

대기 또는 실패

풀 크기 부족과 리크가 여기서 바로 드러납니다.