Postgres 18.3 호환을 목표로 한 Rust 기반 Postgres 재구현
pgrust는 Postgres 18.3과 디스크 호환성을 목표로 Rust로 재작성된 데이터베이스이며 46,000개 이상 회귀 쿼리를 활용해 Postgres 출력 일치를 검증하고 있다.
TL;DR
pgrust는 Postgres 18.3의 동작과 디스크 포맷 호환성을 목표로 Rust로 재구현된 데이터베이스 프로젝트이며 Postgres의 공식 회귀 테스트 스위트를 오라클로 사용해 출력 일치를 검증한다. 이 프로젝트는 기존 Postgres 데이터 디렉터리에서 부팅할 수 있는 디스크 호환성을 유지하며 새 개발 분기에서는 process-per-connection 대신 connection당 스레드 모델을 적용해 트랜잭션 워크로드 성능을 개선하려는 설계를 채택했다. README에서 회귀 테스트 수치와 성능 주장을 명시하여 실험용·연구용 대안으로 관심을 끌었지만 프로젝트는 아직 프로덕션 준비가 되지 않았고 일부 확장 및 PL 호환성은 미비하다는 한계가 있다.
주요 기능
- Postgres 18.3과의 출력 호환을 보장하기 위해 Postgres의 회귀 테스트 스위트를 그대로 사용하며 더 이상 의도하지 않은 동작 차이를 남기지 않도록 테스트 출력 일치를 기준으로 삼는다. 이로 인해 기존 Postgres 도구체인과의 상호운용성이 유지되며 데이터 디렉터리에서 직접 부팅하는 시나리오가 가능하다. README는 46,000개 이상의 회귀 쿼리 일치 사실을 명시하고 있다.
- 디스크 레벨 호환성을 제공하여 기존 Postgres 18.3 데이터 디렉터리로부터 pgrust가 바로 부트할 수 있게 설계되어 있으며 이 설계는 마이그레이션 없이 실험적 폴더에서 검증하는 작업을 간소화한다. 디스크 호환성은 운영 중 데이터 이동 비용을 줄이고 기존 백업·파일 기반 워크플로와의 통합을 용이하게 한다. README가 명시한 바와 같이 이 호환성은 프로젝트의 핵심 목표 중 하나이다.
- 멀티스레드 서버 아키텍처 실험을 진행하여 process-per-connection 대신 thread-per-connection 모델을 적용하고자 하며 이 접근은 컨텍스트 전환 비용과 메모리 공유 효율에 직접적인 영향을 준다. README는 새 버전이 thread-per-connection 모델을 사용한다고 명시하고 있으며 이 변경은 트랜잭션 워크로드에서 성능 향상을 목표로 한다. 로드맵에는 내장 연결 풀링 및 빠른 포크/분기 워크플로 같은 런타임 개선 항목이 포함되어 있다.
어떻게 동작하는가
pgrust는 Postgres 18.3의 기대 출력과 동작을 오라클로 삼아 회귀 테스트 스위트에서의 출력 일치성으로 호환성을 증명하는 방식으로 동작한다. 데이터 디렉터리 포맷과 런타임 플래그를 Postgres와 호환되게 유지하여 기존 디스크 이미지로 부팅할 수 있으며 README의 예시는 initdb와 실제 바이너리 실행 흐름을 그대로 재현한다. 최신 개발 분기에서는 프로세스 기반 모델 대신 연결당 스레드 모델을 채택하고 Rust의 안전성과 성능 패턴을 활용해 공유 메모리와 컨텍스트 전환 비용을 줄이는 설계를 적용하고 있다.
해결 문제
기존 Postgres 코드를 직접 수정하거나 복잡한 C 코드베이스에서 실험할 때 발생하는 높은 진입 장벽과 안전성 위험을 줄이고자 pgrust는 Rust로 재구현된 서버로 Postgres 동작을 유지하면서 내부 구조 변경을 더 쉽게 시도할 수 있는 대안을 제시한다. 이 프로젝트는 Postgres의 실제 회귀 테스트를 오라클로 사용하여 호환성 보장을 유지하므로 개발자가 내부 아키텍처를 재설계하더라도 외부적인 동작을 깨뜨리지 않을 수 있게 한다. 또한 디스크 호환성과 기존 클라이언트 도구와의 상호운용성을 제공하여 실험용이나 연구용으로 기존 환경을 쉽게 재활용할 수 있게 한다.
지금 주목받는 이유
프로젝트가 Postgres 18.3과의 높은 호환성 목표를 달성했고 README의 업데이트에서 새 버전이 회귀 테스트 스위트의 100%를 통과했다는 점이 관심을 끌었다. 또한 트랜잭션 및 분석 워크로드 성능에 대한 대담한 수치(트랜잭션 50% 빠름, 분석 워크로드 ~300배)는 데이터베이스 커뮤니티에서 실험적 대안으로서 주목을 받게 한 요인이다. Rust로의 재구현과 AI-assisted programming을 결합한 개발 방식도 기술적 호기심을 자극하고 있다.
차별점
- Postgres의 공식 회귀 테스트 스위트를 직접 사용하여 출력 일치성을 검증하는 점이 차별점이다. 이 접근은 단순한 호환 레이어가 아니라 동작 수준의 일치를 목표로 하여 기존 Postgres와의 상호운용성을 더 강하게 보장한다. README에 명시된 46,000개 이상의 회귀 쿼리 통과 사실이 이 전략을 뒷받침한다.
- 디스크 포맷 호환성을 유지하여 기존 Postgres 데이터 디렉터리로부터 직접 부트할 수 있게 설계한 점이 운영 전환 비용을 낮춘다. 이로 인해 데이터 마이그레이션 절차 없이 실험·검증이 가능하고 기존 백업·복구 도구를 계속 활용할 수 있다. 디스크 호환성은 실제 운영 데이터 재사용과 테스트 신뢰성 측면에서 실질적 이점을 제공한다.
- 프로세스 기반 모델 대신 연결당 스레드 모델을 채택하는 아키텍처 실험을 통해 트랜잭션 워크로드에서 성능 향상 여지를 확보한 점이 핵심적 차별화 요소이다. README는 새 버전이 thread-per-connection 모델을 사용하며 트랜잭션 워크로드에서 50% 빠르다는 주장을 제시하고 있다. 이 아키텍처 변경은 컨텍스트 전환 비용과 메모리 공유 설계를 재고하게 만든다.
사용 사례
- Postgres의 내부 구조를 변경하거나 실험적인 스토리지·스케줄링 전략을 테스트하려는 연구 및 엔지니어링 환경에서 활용할 수 있다. pgrust는 실제 Postgres 회귀 테스트를 오라클로 사용하므로 변경이 외부 동작에 미치는 영향을 신뢰성 있게 검증할 수 있다. 디스크 호환성 덕분에 실험 데이터를 별도 마이그레이션 없이 재사용할 수 있다.
- 경량화된 개발용 또는 테스트용 데이터베이스 인스턴스를 빠르게 띄워서 Postgres 동작을 검증하거나 새로운 내부 최적화를 평가하는 데 유용하다. Docker 이미지와 WebAssembly 데모가 제공되어 로컬 환경이나 브라우저에서 빠르게 시도해볼 수 있다. 개발 흐름에서 기존 Postgres 환경과의 상호운영을 유지한 채 실험을 반복할 수 있다.
- 분석 워크로드 최적화 실험을 위해 설계된 경우 성능 비교 벤치마크를 수행하는 기반으로 사용할 수 있다. README는 특정 분석 벤치마크에서 Postgres보다 대폭 빠르다고 기술하고 있어 저장소 설계·쿼리 실행 계획 관련 실험을 진행하기에 적합하다. Clickbench와 같은 비교 지표로 성능 트레이드오프를 검증할 수 있다.
시작하기
가장 빠른 시도 경로는 제공된 Docker 이미지를 사용하는 것이다. README의 예시는 환경변수 POSTGRES_PASSWORD를 지정하여 컨테이너를 백그라운드로 실행한 뒤 내부의 psql로 연결해 즉시 쿼리를 실행하는 흐름을 보여주며 이 방식으로 별도 빌드 없이 기능을 확인할 수 있다. 소스에서 빌드하려면 vendored된 Postgres share 디렉터리를 가리킨 뒤 cargo build --release로 바이너리를 생성하고 target/release/postgres --initdb로 데이터 디렉터리를 초기화한 다음 RUST_MIN_STACK 등 런타임 변수와 함께 실행하면 된다.
요구사항
- 소스 빌드를 위해서는 Rust toolchain과 cargo가 필요하며 Postgres 18.3의 share 디렉터리를 repository 내 vendor로 준비해야 한다. README는 macOS와 Debian/Ubuntu에서 요구되는 패키지 목록(icu4c, openssl@3, libpq 등)을 명시하고 있어 빌드 전 시스템 의존성을 설치해야 한다. 회귀 테스트 실행을 위해서는 Postgres 18의 psql 클라이언트가 PATH에 있어야 한다.
벤치마크
| 벤치마크 | 지표 | 값 | 비교 |
|---|---|---|---|
| transaction workloads | relative speed | 50% faster than Postgres | vs Postgres |
| analytical workloads | relative speed | ~300x faster than Postgres | vs Postgres |
| clickbench comparison | relative speed | 2x slower than ClickHouse | vs ClickHouse |
2.5k
Stars
67
Forks
+212
Trending
0
조회수
관련 토론
아직 관련 토론이 없습니다.
댓글
댓글을 작성하려면 로그인이 필요합니다.