전체 목록
데이터베이스Medium#215

커넥션 풀은 왜 필요한가요?

#데이터베이스#ConnectionPool#성능#운영

답변 포인트

연결 재사용과 풀 크기 설정를 기준으로 정의, 장점, 한계, 예시를 함께 설명해보세요.

정답 및 해설

빠른 요약

커넥션 풀은 DB 연결을 재사용해 연결 생성 비용을 줄이고 동시 연결 수를 제어합니다. 풀 크기가 너무 작으면 대기, 너무 크면 DB 과부하가 생깁니다.

커넥션 풀은 DB나 외부 서비스와의 연결을 미리 만들어 재사용하는 구조입니다. 요청마다 TCP 연결, TLS handshake, 인증, 세션 초기화를 반복하면 지연과 서버 부하가 커지기 때문에 풀링이 필요합니다.

동작 방식

Text
 -> pool idle connection  ->   -> connection 
                             ( )

커넥션을 닫는 것이 아니라 풀에 반환해야 다음 요청이 재사용할 수 있습니다.

왜 중요한가요?

DB는 동시에 유지할 수 있는 커넥션 수가 제한적입니다. 애플리케이션 인스턴스 20개가 각각 pool size 50을 잡으면 이론상 1000개 커넥션이 DB로 몰립니다. DB max connection보다 크면 장애가 납니다.

설정 예시

YAML
spring:
  datasource:
    hikari:
      maximum-pool-size: 20
      minimum-idle: 5
      connection-timeout: 3000
      idle-timeout: 600000
      max-lifetime: 1800000

실무 주의점

  • 풀 크기는 “크면 빠르다”가 아닙니다. DB CPU, 쿼리 시간, 인스턴스 수를 함께 봐야 합니다.
  • 커넥션을 반납하지 않는 누수는 금방 전체 장애로 이어집니다.
  • 트랜잭션을 길게 잡으면 커넥션 점유 시간이 길어져 대기열이 쌓입니다.
  • maxLifetime은 DB/proxy의 idle timeout보다 짧게 잡아 stale connection을 줄입니다.

면접 답변 포인트

커넥션 풀은 연결 생성 비용을 줄이고 제한된 DB 연결을 안정적으로 관리하기 위한 재사용 구조입니다. 단, 풀 크기와 timeout을 잘못 잡으면 DB 과부하나 요청 대기가 발생하므로 모니터링과 누수 관리가 중요합니다.

관련 질문

같은 카테고리/태그 기준