AI Briefing

Postgres 소스를 파고들어 직접 WAL receiver를 만든 이야기

·2026.04.18 12:47

핵심 내용

PostgreSQL 소스를 분석해 Go로 WAL receiver와 백업 체계를 만들었다.

자세히 보기

PostgreSQL의 pg_receivewal 내부가 궁금해져 소스를 파고들었고, 결국 Go로 직접 WAL receiver를 구현했다.

PostgreSQL를 소스에서 빌드해 디버그 모드로 붙인 뒤, tracing을 잔뜩 심어 복제 루프, 연결 끊김 복구, .partial 파일 완료 시점, timeline 전환, fsync 타이밍을 하나씩 확인했다.

기존 도구도 비교했다.

  • pgBackRest: 대규모 환경에 강한, 매우 단단한 엔지니어링 제품
  • Barman: pg_receivewal과 pg_basebackup 위에 얹은 단순하고 신뢰 가능한 오케스트레이터

처음 목표는 pg_receivewal의 동작을 최대한 그대로 재현하는 것이었고, 몇 주 만에 안정적인 프로토타입을 만들었다. 하지만 WAL을 받는 것만으로는 끝나지 않았다.

압축, 암호화, S3/SFTP 업로드, 오래된 파일 정리, 모니터링까지 붙이자, 외부 bash 스크립트에 기대지 않는 내부 관리 구조가 필요해졌다.

  • backup이 겹치지 않도록 제어
  • archiving과 cleanup의 충돌 방지
  • 안전한 종료와 상태 관리
  • job queue, worker pool, supervisor, goroutine coordination으로 작업 수명주기 관리

이후 도구는 여러 백그라운드 프로세스를 조율하는 작은 시스템으로 커졌다. 핵심은 WAL 수신 자체보다, 재시도·정리·전송·보존·종료를 일관되게 제어하는 백업 시스템을 만드는 일이었다.

base backup도 추가했다. 복제 프로토콜의 단일 스레드 한계는 인정했지만, 약 200 GiB 규모의 DB에는 수 시간짜리 야간 작업으로 충분히 실용적이라고 봤다.

반대로 incremental / differential backup은 제외했다. 복원 단계까지 고려하면 pg_combinebackup 수준의 복잡성이 필요해, 현실적으로 범위를 넘는다고 판단했다.

이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.

AI 처리 방식을 확인하거나, 요약 오류와 출처 표기 문제, 삭제 요청을 문의 · 건의로 알려주세요.