Go로 PostgreSQL 프록시 만들기 (18) - OpenTelemetry 분산 추적과 설정 자동 리로드
프록시 내부 처리 단계를 OpenTelemetry Span으로 계측하고, fsnotify로 설정 파일 변경을 자동 감지하여 무중단 리로드하는 과정을 다룬다.
프록시 내부 처리 단계를 OpenTelemetry Span으로 계측하고, fsnotify로 설정 파일 변경을 자동 감지하여 무중단 리로드하는 과정을 다룬다.
readers 설정을 선택사항으로 변경하여 Primary 1대만으로도 풀링+캐싱을 사용할 수 있게 한 과정과, 오픈소스 프로젝트의 사용성에 대한 고민을 다룬다.
Go의 mutex와 channel을 조합해 PostgreSQL 프록시용 커넥션 풀을 설계·구현한다. acquire/release 흐름, timeout, 헬스체크, 운영 체크리스트까지 실전 관점으로 정리했다.
설정 파일 Hot Reload 시 concurrent map read/write로 프록시가 즉사하는 Critical 버그를 분석하고, sync.RWMutex로 수정한다.
쿼리를 파싱해서 Writer/Reader로 자동 분산하고, 트랜잭션 추적과 replication lag까지 대응하는 라우팅을 구현한다.
LRU 캐시를 직접 구현하고, 쓰기 시 테이블 기반으로 캐시를 자동 무효화하는 전략을 만든다.
독립적으로 만든 컴포넌트들을 프록시 서버에 통합하고, Docker 환경에서 E2E 테스트로 검증한 뒤, 전체 프로젝트를 돌아본다.
프록시를 운영 가능한 수준으로 고도화한다. Prometheus 메트릭 계측, Extended Query Protocol의 Prepared Statement reader 라우팅, Admin API를 구현한다.
QA 리뷰에서 발견된 Critical/Major 버그 4건을 수정하고, 프록시 수평 확장을 위한 Redis Pub/Sub 캐시 무효화를 구현한다.
프로토콜 레벨 DoS 공격, SQL 문자열 리터럴을 이용한 힌트 인젝션과 키워드 오탐을 수정한다.