PostgreSQL(PG) 데이터베이스를 운영하는 환경에서 마스터와 레플리카 간의 상태를 정확하고 빠르게 파악하는 것은 서비스 안정성에 매우 중요합니다. 최근 공개된 오픈소스 프로젝트 'pg-status'는 이러한 문제를 해결하기 위한 초경량 HTTP 사이드카(sidecar)로, PG 호스트의 마스터/레플리카 여부, 복제 지연(replication lag) 상태 등을 실시간으로 제공합니다. 이 도구는 C언어로 작성되어 9MB 미만의 메모리만 사용하며, 모든 응답을 메모리에서 직접 처리하여 밀리초 단위의 빠른 속도를 자랑합니다.
'pg-status'는 백그라운드에서 주기적으로 PG 호스트들을 폴링(polling)하여 그 상태 정보를 메모리에 저장합니다. 이후 애플리케이션이나 다른 서비스가 HTTP 요청을 통해 마스터 호스트, 특정 지연 시간(lag_ms, lag_bytes) 이내의 레플리카, 또는 특정 LSN(Log Sequence Number)까지 복제를 완료한 레플리카 정보를 요청하면 즉시 응답합니다. 특히 '읽기-쓰기 일관성(read-your-writes consistency)' 패턴을 지원하여, 마스터에 데이터를 쓴 후 해당 LSN을 기준으로 후속 읽기 요청이 항상 최신 데이터를 볼 수 있도록 보장합니다. 예를 들어, 쓰기 작업 후 `pg_current_wal_lsn()`으로 LSN을 획득하고, 이 LSN을 `/replica?min_lsn=X/Y` 엔드포인트에 전달하면 해당 LSN까지 복제된 레플리카를 반환하거나, 없으면 마스터를 반환하여 데이터 일관성을 유지합니다.
이러한 'pg-status'는 분산 시스템 환경에서 PG 데이터베이스의 가용성과 일관성을 높이는 데 크게 기여할 수 있습니다. 애플리케이션은 데이터베이스 상태를 직접 쿼리할 필요 없이 'pg-status'에 가벼운 HTTP 요청만 보내면 되므로, 데이터베이스에 가해지는 부하를 줄이고 응답 시간을 단축할 수 있습니다. 또한, 장애 발생 시 마스터 전환(failover)이나 부하 분산(load balancing) 로직을 더욱 견고하게 구현할 수 있는 기반을 제공합니다. 개발자들은 이 도구를 활용하여 복잡한 데이터베이스 클러스터 관리 로직을 간소화하고, 서비스의 안정성과 성능을 동시에 향상시킬 수 있을 것입니다.