PostgreSQL 외부 풀

많은 앱 연결 요청을
적은 실제 DB 연결로 압축합니다

pgBouncer는 애플리케이션과 PostgreSQL 사이의 공용 풀로 동작해, 앱 쪽 연결 수와 DB가 유지해야 할 연결 수를 분리합니다.

앱 서버 5대 × 풀 50 = 요청성 연결 250개

하지만 DB 쪽은 예를 들어 20개 정도의 실제 커넥션만 열어 두고 돌아가며 재사용할 수 있습니다.

앱 쪽

250많은 연결 요구

웹 서버마다 자체 풀은 있어도, 요청이 몰리면 DB 세션 수가 그대로 커지기 쉽습니다.

App 1 App 2 App 3+
공용 중간 계층

pgBouncer가 실제 DB 연결을 짧게 빌려주고 바로 돌려받음

앱 연결 하나마다 DB 연결 하나를 붙이지 않고, 트랜잭션 단위로 재사용해 연결 폭증을 흡수합니다.

할당 사용 반환 재사용
DB 쪽

20적은 실제 연결

PostgreSQL은 더 적은 백엔드 프로세스만 유지하므로 메모리와 컨텍스트 스위칭 부담을 낮출 수 있습니다.

DB conn 20 backend 20
핵심 관계: 앱에서 보이는 세션 수와 DB가 실제로 유지하는 커넥션 수는 같을 필요가 없습니다. pgBouncer가 그 차이를 중간에서 흡수합니다.
반환 시점

효율 차이는 언제 연결을 돌려주느냐에서 생깁니다

반환 시점이 짧을수록 같은 DB 연결을 더 많은 요청이 번갈아 쓸 수 있습니다.

모드 반환 시점 의미
session 세션 종료 오래 붙잡아 재사용 효율이 낮음
statement 매 SQL 후 가장 촘촘하지만 호환성 제약이 큼
운영 효과

DB가 관리해야 할 연결 수를 제한하면서도, 애플리케이션 쪽 동시 요청은 더 유연하게 받아낼 수 있습니다.