Go로 PostgreSQL 프록시 만들기 (28) - Reload 200 OK 거짓말과 Webhook 고루틴 유실
QA에서 발견된 2가지 버그 — /admin/reload 실패에도 HTTP 200 반환, 감사 로그 Webhook 고루틴 미추적으로 종료 시 유실 — 의 원인과 수정 과정을 정리한다.
QA에서 발견된 2가지 버그 — /admin/reload 실패에도 HTTP 200 반환, 감사 로그 Webhook 고루틴 미추적으로 종료 시 유실 — 의 원인과 수정 과정을 정리한다.
WriteHeader 호출 이후 Content-Type이 사라지는 버그, SetReloadFunc data race, httptest.ResponseRecorder가 감지하지 못하는 회귀의 원인과 수정 과정을 정리한다.
QA 3차 리포트 5건 — AST 분류가 라우팅에 미반영, 캐시 테이블 무효화 no-op, 중복 파싱 5회/요청, 헬스체크 순차 지연, splitStatements 달러쿼팅 미처리 — 의 원인과 수정 과정을 정리한다.
QA 4차 리포트 5건 — 캐시 키 네임스페이스 부재로 JSON/wire 응답 충돌, 읽기 캐시 무효화 실종, balancer 상태 초기화, HTTP 서버 lifecycle 미관리, AST 재파싱 — 의 원인과 수정 과정을 정리한다.
프로덕션 쿼리를 Shadow DB에 비동기 미러링하여 패턴별 P50/P99 레이턴시를 비교하고 성능 회귀를 자동 감지하는 기능을 구현한다. PgBouncer에 없는 pgmux만의 킬러 피처.
PostgreSQL wire protocol을 바이트 레벨로 분석하고, Go로 프록시 서버를 구현하며 핸드셰이크와 쿼리 릴레이를 직접 만들어본다.
PostgreSQL 프록시에서 SSLRequest 기반 TLS 종단과 MD5 프런트엔드 인증을 구현하고, 인증서·접근 제어·백엔드 연결 경계를 분리하는 방법을 다룹니다.
연쇄 장애를 차단하는 Circuit Breaker와 과부하를 방지하는 Token Bucket Rate Limiter를 구현한다.
SIGHUP 시그널과 Admin API로 프록시를 재시작하지 않고 설정을 변경한다. Reader Pool 핫스왑과 Balancer 원자적 갱신.
타이머 지연 대신 PostgreSQL WAL LSN을 추적해 쓰기 직후에도 복제가 완료된 Reader만 선택하고, 읽기 일관성과 복제 지연을 함께 제어하는 방법을 설명합니다.