TL;DR

결제 게이트웨이 연동 설정 변경으로 `pg-gateway` 서비스의 커넥션 풀 크기가 64에서 8로 줄었습니다. 오후 피크 트래픽에서 커넥션이 소진되어 주문 API가 47분간 21%의 502 오류를 반환했습니다. 설정 롤백 및 서비스 재시작으로 복구했으며 데이터 손실은 없습니다.

## 타임라인

14:02
설정 변경 `cfg-gateway-v3`가 프로덕션에 자동 배포됨.
14:07
영향 시작. 결제 API p95 응답시간이 3초를 초과하고 로드 밸런서가 502 반환 시작. 알림 발송: `payment_5xx_rate > 2%`.
로그 발췌 보기
2026-04-22T14:07:11Z ERROR [pg-gateway] connection pool exhausted: waiting 5000ms 2026-04-22T14:07:11Z ERROR [order-api] upstream 502: payment gateway timeout 2026-04-22T14:07:12Z WARN [pg-gateway] queue depth=48, capacity=8
14:09
온콜 담당자 김서준이 알림 확인. 최근 배포 롤백 시도 — 효과 없음.
14:24
박지수가 합류해 게이트웨이 대시보드에서 커넥션 대기 포화 상태 발견. 설정 변경 이력으로 조사 방향 전환.
14:36
완화. `cfg-gateway-v3` 롤백 및 게이트웨이 서비스 재시작. 3분 내 5xx 비율 0.1% 미만으로 감소.
14:49
모니터 5분 정상 유지. 인시던트 종료 선언, 상태 페이지 업데이트.

## 근본 원인

`PR #1204`는 게이트웨이별 커넥션 풀 크기를 설정 가능하게 만들었습니다. `pg-gateway` 키의 기본값은 전역값(64)을 상속받도록 의도했으나, 로컬 테스트 중 8로 하드코딩된 값이 그대로 커밋됐습니다. 설정 린터가 타입만 검사하고 범위는 검사하지 않아 CI를 통과했습니다.

설정 배포와 코드 배포 파이프라인이 분리되어 있어 온콜이 코드 배포를 먼저 롤백하는 데 13분을 소비했습니다.

infra/config/gateway.yaml
connection_pool:
global_max: 64
services:
- pg-gateway: { max_connections: 64 }
+ pg-gateway: { max_connections: 8 } # 로컬 테스트값, 배포 금지
card-validator: { max_connections: 32 }

## 영향

502 오류 요청 수 | ~38,400건
최고 오류율 | 21.3%
영향 사용자 | 약 1,900개 사업자
데이터 손실 | 없음 — 클라이언트 재시도
SLA 위반 | 없음 (월간 예산 내)
매출 영향 | 추정 ~480만 원 (재시도 성공 기준)

## 조치 항목

KS cfg-gateway-v3 롤백 및 커넥션 풀 64로 복구 4월 22일
PJ 설정 린터에 `max_connections` 범위 검사 추가 (경고: < 32) 4월 28일
LH 온콜 대시보드에 "최근 설정 변경" 섹션 추가 (코드 배포와 동일 화면) 5월 5일
CY 설정 변경 10분 단계적 카나리 배포 정책 도입 5월 12일