Go로 PostgreSQL 프록시 만들기 (49) - Online Maintenance Mode
Admin API를 통해 런타임 유지보수 모드를 활성화하여 신규 연결/쿼리를 거부하고, 진행 중인 트랜잭션은 안전하게 drain하는 기능을 구현한다.
Admin API를 통해 런타임 유지보수 모드를 활성화하여 신규 연결/쿼리를 거부하고, 진행 중인 트랜잭션은 안전하게 drain하는 기능을 구현한다.
Admin API를 통해 런타임 read-only 모드를 활성화하여 모든 쓰기 쿼리를 프록시 레벨에서 즉시 거부하고, 읽기 서비스는 유지하는 기능을 구현한다.
릴리스 전 하위호환 부채를 청산한다. top-level writer/readers와 databases 맵의 이중 설정 구조를 databases 단일 포맷으로 통합하고, 합성 shim과 분기 로직을 제거한다.
Transaction pooling 환경에서 LISTEN, 세션 SET, DECLARE CURSOR 같은 세션 의존 기능을 감지하고, block/warn/pin 모드로 제어하는 Session Compatibility Guard를 구현한다.
주문·결제·포인트 시스템에서 발생하는 데이터 불일치를 탐지하고 복구하는 Reconciliation 아키텍처를 실무 기준으로 정리합니다.
Hacker News·GeekNews 주말 이슈를 6개로 압축해, 시니어 개발자 기준의 도입 판단과 리스크 대응 포인트를 정리했습니다. MCP vs CLI 에이전틱 도구 논쟁부터 Vite 8의 Rolldown 전환, AI 코딩 한계론까지.
pprof 할당 프로파일링에서 찾은 상위 3개 핫스팟에 sync.Pool과 버퍼 사전할당을 적용한다. 그리고 Go 프록시 성능 최적화의 현실적 한계를 정리한다.
멀티테넌트 환경에서 특정 사용자가 커넥션 풀을 독점하지 못하도록 사용자별/DB별 커넥션 수를 제한하는 ConnTracker를 구현한다.
프록시 레벨 쿼리 타임아웃을 구현한다. time.AfterFunc으로 타이머를 설정하고, 만료 시 CancelRequest 프로토콜을 전송하여 PostgreSQL이 자연스럽게 쿼리를 취소하도록 한다.
유휴 클라이언트를 자동으로 연결 해제하는 Idle Client Timeout을 구현한다. SetReadDeadline으로 타이머 없이 구현하고, 트랜잭션 중에는 비적용하여 안전성을 확보한다.