Go로 PostgreSQL 프록시 만들기 (40) - sync.Pool로 할당 줄이기와 최적화의 한계
pprof 할당 프로파일링에서 찾은 상위 3개 핫스팟에 sync.Pool과 버퍼 사전할당을 적용한다. 그리고 Go 프록시 성능 최적화의 현실적 한계를 정리한다.
pprof 할당 프로파일링에서 찾은 상위 3개 핫스팟에 sync.Pool과 버퍼 사전할당을 적용한다. 그리고 Go 프록시 성능 최적화의 현실적 한계를 정리한다.
멀티테넌트 환경에서 특정 사용자가 커넥션 풀을 독점하지 못하도록 사용자별/DB별 커넥션 수를 제한하는 ConnTracker를 구현한다.
프록시 레벨 쿼리 타임아웃을 구현한다. time.AfterFunc으로 타이머를 설정하고, 만료 시 CancelRequest 프로토콜을 전송하여 PostgreSQL이 자연스럽게 쿼리를 취소하도록 한다.
유휴 클라이언트를 자동으로 연결 해제하는 Idle Client Timeout을 구현한다. SetReadDeadline으로 타이머 없이 구현하고, 트랜잭션 중에는 비적용하여 안전성을 확보한다.
Admin API에 Bearer API Key 인증과 역할 기반 접근 제어(RBAC)를 구현한다. admin/viewer 역할 분리, IP allowlist, hot-reload까지 지원하여 프로덕션 운영 보안을 확보한다.
LB/K8s 연동을 위한 /healthz(liveness)와 /readyz(readiness) 경량 헬스체크 엔드포인트를 구현한다. 기존 /admin/health와의 역할 분리, 인증 없는 probe 설계를 다룬다.
QA에서 올라온 6건의 소견 — Pool race, credential 미갱신, XFF spoofing, reader 격리 실패, 캐시 write-only, 설정 오류 — 을 분석하고 수정한다.
QA 2차 소견 5건 — boundWriter cross-pool 오염, extended cache 파라미터 무시, Pool.Close outstanding borrow, writer CB reload 누락, watcher startup race — 을 분석하고 수정한다.
QA 3차 소견 6건 — fallback 경로 cross-pool 오염, extended cache 포맷 충돌, 깨진 연결 Release, Pool.Acquire close race, boundWriter discard 누락, circuit breaker 일관성 — 을 분석하고 수정한다.
golangci-lint, 테스트, 벤치마크를 자동화하는 CI 파이프라인과 태그 push 시 multi-platform Docker 이미지를 GHCR에 자동 배포하는 Release 파이프라인을 구축한다.