Go로 PostgreSQL 프록시 만들기 (11) - Circuit Breaker와 Rate Limiting
연쇄 장애를 차단하는 Circuit Breaker와 과부하를 방지하는 Token Bucket Rate Limiter를 구현한다.
연쇄 장애를 차단하는 Circuit Breaker와 과부하를 방지하는 Token Bucket Rate Limiter를 구현한다.
SIGHUP 시그널과 Admin API로 프록시를 재시작하지 않고 설정을 변경한다. Reader Pool 핫스왑과 Balancer 원자적 갱신.
타이머 대신 WAL LSN을 추적하여, 쓰기 직후 읽기에서 정확히 복제된 Reader만 선택한다.
pg_query_go로 PostgreSQL의 실제 파서를 활용하여 정확한 쿼리 분류, 위험 쿼리 차단, 시맨틱 캐시 키를 구현한다.
QA 과정에서 발견된 4건의 보안 취약점 — 캐시 충돌로 인한 개인정보 유출, 무한 재귀, 방화벽 우회, 힌트 주입 — 을 분석하고 수정한다.
비동기 감사 로그와 Slow Query Webhook, K8s Helm Chart, HTTP REST → PG Wire Protocol 변환 Data API를 구현한다.
Webhook 동기 호출이 Audit 이벤트를 마비시키는 Channel Blocking과, 죽은 커넥션이 풀에 반환되는 Connection Poisoning 버그를 분석하고 수정한다.
프록시 내부 처리 단계를 OpenTelemetry Span으로 계측하고, fsnotify로 설정 파일 변경을 자동 감지하여 무중단 리로드하는 과정을 다룬다.
readers 설정을 선택사항으로 변경하여 Primary 1대만으로도 풀링+캐싱을 사용할 수 있게 한 과정과, 오픈소스 프로젝트의 사용성에 대한 고민을 다룬다.
Go의 mutex와 channel을 활용해 커넥션 풀을 직접 구현한다. idle timeout, max lifetime, 헬스체크까지.