Connection pooling은 요청마다 새 연결을 여는 대신, 적은 수의 데이터베이스 연결을 많은 클라이언트 요청에 걸쳐 재사용합니다. PostgreSQL 연결은 비쌉니다(각각 상당한 메모리를 사용하는 별도 프로세스), 따라서 pooling은 부하 하의 성능과 확장성에 필수적입니다. PgBouncer가 표준 pooler입니다.
문제: PostgreSQL 연결은 비쌈
각 PostgreSQL 연결 = 별도 OS 프로세스, 약 5-10MB 메모리 사용.
✗ 연결 열기에 오버헤드 (프로세스 생성, 인증, 설정)
✗ 많은 연결 (예: 바쁜 앱의 수천 개) → 막대한 메모리 사용, 경합
✗ Postgres에 max_connections 제한 (흔히 약 100); 초과 = 오류
→ 요청마다 연결 열기/닫기, 또는 수천 개 유지는 확장되지 않음.
해결책: connection pool
POOL은 Postgres에 대한 적은 수의 재사용 가능한 연결을 유지.
애플리케이션 요청이 pool에서 연결을 빌려 사용하고 반환.
✓ 연결 재사용 (요청별 열기/닫기 오버헤드 없음)
✓ 많은 앱 요청이 적은 DB 연결 공유 (예: 클라이언트 10000개 → 연결 20개)
✓ max_connections 내 유지, 리소스 사용 제어 → 확장
