# PgDog - PostgreSQL를 위한 초고속 트랜잭션 풀링 및 샤딩 관리자

> Clean Markdown view of GeekNews topic #20772. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=20772](https://news.hada.io/topic?id=20772)
- GeekNews Markdown: [https://news.hada.io/topic/20772.md](https://news.hada.io/topic/20772.md)
- Type: news
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2025-05-08T09:31:02+09:00
- Updated: 2025-05-08T09:31:02+09:00
- Original source: [github.com/levkk](https://github.com/levkk/pgdog)
- Points: 17
- Comments: 1

## Summary

Rust와 **Tokio** 기반으로 개발된 도구로, 수백 개 **데이터베이스**와 수십만 개의 연결을 고성능으로 관리합니다. 애플리케이션 계층 프록시로서 **쿼리 분석**과 복제 기능을 제공하며, Kubernetes 및 **Docker** 환경에서 손쉽게 배포하고 클러스터와 로드밸런싱을 단일 구성으로 처리합니다. **Shard key** 추출 및 자동 라우팅, 교차 샤드 쿼리 통합 응답, 무중단 논리적 복제 확장 기능을 갖추었습니다. `.toml` 기반 실시간 설정 변경, **OpenMetrics** 모니터링, Datadog 연동 기능도 지원합니다.

## Topic Body

- Rust + Tokio로 작성된 **PostgreSQL 트랜잭션 풀링 + 샤딩 + 로드밸런싱** 도구, **수백 개의 데이터베이스와 수십만 개의 연결을 효율적으로 관리**  
- PgBouncer처럼 동작하면서도, **쿼리 분석과 복제까지 지원**하는 PostgreSQL 전문 애플리케이션 계층(OSI L7) 프록시  
- Kubernetes 및 Docker로 쉽게 배포 가능하며, 클러스터 구성, 로드밸런싱, 복제, 다중 샤드 관리까지 **단일 구성으로 처리 가능**  
- 자체적인 논리적 복제 관리 기능과 함께, **기존 PostgreSQL 클러스터를 중단 없이 샤딩 확장**할 수 있음  
### 주요 기능   
- # 로드 밸런싱  
  - OSI Layer 7에서 PostgreSQL 쿼리 기반으로 트래픽 분산  
  - `SELECT`는 복제본으로, `INSERT/UPDATE` 등은 기본 노드로 자동 라우팅  
  - 전략: round robin, random, least active connections 등 지원  
  - 장애 발생 시 실시간 헬스체크 및 자동 Failover  
- # 트랜잭션 풀링  
  - PgBouncer와 유사하게, **세션/트랜잭션 단위 풀링** 지원  
  - 수십만 클라이언트를 몇 개의 PostgreSQL 연결로 처리 가능  
- # 샤딩 및 복제  
  - SQL 분석을 통해 **shard key를 추출하고, 해당 샤드에 쿼리 자동 전달**  
  - 교차 샤드 쿼리는 **결과를 메모리에서 조합해 사용자에게 단일 응답 제공**  
  - `COPY` 명령도 샤드 단위로 분할 처리  
  - **논리적 복제 지원**: 무중단 상태에서 기존 DB를 샤딩 확장 가능  
- # 실시간 구성 변경  
  - PgBouncer 스타일의 `.toml` 설정 사용, **재시작 없이 설정 변경 가능**  
  - 사용자별 인증, 데이터베이스별 연결, 샤드 정보까지 설정 가능  
- # 모니터링  
  - 표준 PgBouncer 관리 포트 + OpenMetrics 지원  
  - Datadog 연동 예시 및 대시보드 포함

## Comments



### Comment 38366

- Author: kaydash
- Created: 2025-05-08T23:07:03+09:00
- Points: 1

멀티마스터 구성에 patroni를 사용하고 있는데  
읽기 요청이 많은 구성이라면 maxscale처럼 써볼만하겠어요
