← 블로그 목록

Developer Knowledge

개발자가 알아야 할 지식: 커넥션 풀, 연결을 아끼지 않으면 빠른 서비스도 멈춘다

DB와 외부 서비스 커넥션 풀의 크기, 대기열, 타임아웃을 설계하는 법을 정리합니다.

HikariCP
  • 개발자가 알아야 할 지식
  • Databases
  • Performance
  • Reliability

커넥션 풀는 코드가 커지고 사용자가 늘어날수록 조용히 중요해지는 실무 개념입니다. 처음에는 세부 구현처럼 보이지만, 실제로는 시스템이 실패를 어떻게 다룰지 정하는 기준이 됩니다.

왜 개발자가 알아야 하나

커넥션 풀는 작은 코드 조각보다 시스템의 약속에 더 가깝습니다.

이 기준이 없으면 구현은 동작해도 운영 순간에 비용, 장애, 데이터 불일치가 드러납니다.

개발자가 이 개념을 알면 설계 결정의 이유를 더 분명히 설명하고, 장애가 나기 전에 위험을 줄일 수 있습니다.

핵심 개념

첫 번째 핵심은 경계입니다. 커넥션 풀가 적용되는 범위와 적용되지 않는 범위를 구분해야 합니다. 경계가 흐리면 예외 처리가 곳곳에 흩어지고, 나중에는 같은 문제가 서로 다른 방식으로 해결됩니다.

두 번째 핵심은 계약입니다. 서버, 클라이언트, 데이터베이스, 운영 도구가 어떤 값을 믿고 어떤 실패를 허용하는지 문서와 코드에 함께 드러나야 합니다.

세 번째 핵심은 관측 가능성입니다. 제대로 설계했는지 알려면 성공 경로뿐 아니라 거절, 충돌, 지연, 재시도 같은 사건도 로그와 지표로 확인할 수 있어야 합니다.

작은 예시 또는 체크리스트

웹 서버 인스턴스 20대가 각각 DB 커넥션 풀 50개를 열면 최대 1000개 연결이 됩니다. DB가 감당할 수 있는 연결 수보다 크면 요청이 늘어난 순간 처리량이 늘기보다 context switching과 대기만 늘어납니다.

  • 전체 인스턴스 수를 곱한 최대 커넥션 수가 DB 한도 안에 있는가?
  • 풀 대기 시간과 획득 실패를 지표로 보고 있는가?
  • 느린 쿼리가 커넥션을 오래 붙잡고 있지 않은가?
  • 외부 API 클라이언트도 연결과 동시성 한도를 갖고 있는가?
  • 풀 크기 조정이 부하 테스트로 검증되었는가?

실무에서 자주 생기는 오해

  • “풀을 크게 하면 더 빠르다”는 오해가 있습니다. 병렬성이 늘어도 DB가 처리할 수 있는 일의 양은 제한되어 있습니다.

  • “커넥션 에러는 DB 문제”라고만 보면 애플리케이션의 대기열과 timeout 설정을 놓칩니다.

  • “기본값이면 충분하다”는 생각도 위험합니다. 인스턴스 수와 트래픽 패턴에 따라 기본값은 과하거나 부족할 수 있습니다.

오늘 바로 적용해보기

서비스 전체 최대 DB 커넥션 수를 계산하세요.

커넥션 획득 대기 시간을 대시보드에 추가하세요.

느린 쿼리와 풀 고갈이 같은 시간에 발생하는지 비교하세요.

더 알아보기

오늘의 takeaway

커넥션 풀은 많이 열수록 좋은 수도꼭지가 아니라, 병목을 통제하기 위한 제한 장치입니다.