close()는 물리 종료가 아니라 풀로 반환입니다. 그래서 생성 비용을 줄이고, 최대치에 도달했을 때만 대기와 타임아웃이 생깁니다.
유휴가 있으면 바로 할당하고, 없으면 새 연결 생성 가능 여부를 먼저 확인합니다.
close() 호출 시 연결을 끊지 않고 다시 idle 슬롯으로 되돌립니다.
빌린 커넥션으로만 접근하며, 연결 수는 풀 크기와 DB 한계 안에서 관리됩니다.
TCP 연결과 인증을 다시 하지 않으므로 요청은 빠르게 쿼리 단계로 넘어갑니다.
생성 비용 없이 재사용합니다.
트래픽이 늘 때 풀은 확장되지만, 무한정 늘어나지 않고 maximumPoolSize에서 멈춥니다.
부하를 흡수하되 DB 자원 한계를 지킵니다.
connectionTimeout 안에 빈 연결이 생기지 않으면 예외가 발생합니다.
풀 크기 부족과 리크가 여기서 바로 드러납니다.