🚀 PgDog: Protobuf 제거로 Rust↔C 직접 바인딩 도입, 성능 5.45배 개선
출처: [pgdog.dev] (3 달 전)
📌 핵심 요약 (TL;DR)
- PostgreSQL 확장 프록시 PgDog이 SQL 파싱 성능을 높이기 위해 Protobuf 직렬화대신 Rust 직접 바인딩을 도입.
- 기존 Protobuf 기반 구조를 C–Rust 직접 변환(bindgen + Claude 생성 래퍼) 으로 교체:
- 쿼리 파싱: 5.45 배속도 향상
- 디파싱: 9.64 배속도 향상
- 성능 병목:
pg_query_parse_protobuf함수에서 확인 (캐싱 시도 후에도 근본적 개선 필요). - LLM 활용: Claude 를 활용해 6,000 줄의 Rust–C 변환 코드를 자동 생성.
🔍 PgDog 과 Protobuf 의 한계
PgDog 의 구조
- PostgreSQL 확장 프록시: 내부적으로
libpg_query를 사용해 SQL 쿼리를 파싱. - Protobuf 직렬화 방식: 기존에는 Protobuf 를 통해 C 라이브러리와 통신.
- Protobuf 의 한계: 빠르지만, 직접 바인딩 방식이 더 빠른.
벤치마크 결과
| 함수 | 방식 | QPS | 성능 향상 |
|---|---|---|---|
pg_query::parse | Protobuf | 613 | 기준 |
pg_query::parse_raw | 직접 C–Rust | 3,357 | 5.45 배 ↑ |
pg_query::deparse | Protobuf | 759 | 기준 |
pg_query::deparse_raw | 직접 Rust–C | 7,319 | 9.64 배 ↑ |
💡 성능 병목 분석
1. 프로파일링
- samply 프로파일러 사용으로 CPU 사용 시간 분석.
- 병목 함수:
pg_query_parse_protobuf확인.
2. 캐싱 시도 (불완전한 해결책)
- LRU 알고리즘 기반 해시맵 캐시 구현.
- 쿼리 텍스트를 키로 AST 저장: 준비된 문장 재사용.
- 한계점:
- 일부 ORM 이 수천 개의 고유 쿼리 생성.
- 오래된 PostgreSQL 드라이버가 준비된 문장 지원하지 않아 캐시 효율 낮음.
🤖 LLM 을 활용한 Protobuf 제거
Claude 활용 전략
- 명확하고 검증 가능한 작업 범위 내에서 AI 효과적 사용.
- Claude 작업:
libpg_query의 Protobuf 스펙 기반 C 구조체 ➜ Rust 구조체 매핑.- 2 일간 반복 작업 끝에 6,000 줄의 재귀적 Rust 코드 완성.
- parse, deparse, fingerprint, scan 함수에 적용.
성능 향상
- pgbench 기준 25% 성능 향상.
- 결과:
- CPU 사용량 감소.
- 지연시간 감소.
- PostgreSQL 수평 확률 프록시 효율성 크게 향상.
🔧 구현 세부 구조
1. 안전성 주의
- Rust 와 C 간 변환은 unsafe 함수를 사용해 구조체 직접 매핑.
- C 구조체를 Postgres API 에 전달해 AST 생성, Rust 로 재귀 변환.
2. 전환 함수
- AST 노드: 각 노드 타입별 별도 변환 함수 (
convert_node). - SQL 문법 토큰 매핑:
SELECT,INSERT등 각 노드 타입별 별도 변환 함수.
3. 테스트
- 변환 결과: 기존 Protobuf 구조체 (
protobuf::ParseResult) 재활용하여 byte 단위 비교 검증.
4. 성능 요인
- 재귀 알고리즘: 메모리 할당 적고 CPU 캐시 효율 높아 반복문 기반 구현보다 빠름.
- 반복문 기반 구현: 불필요한 메모리 할당과 해시맵 조회로 오히려 느림.
📊 결론 및 시사점
PgDog 의 발전
- Postgres 파서 오버헤드 감소: 지연시간, 메모리, CPU 사용량 모두 절감.
- 저비용 운영: 더 빠르고 저비용으로 운영 가능한 PostgreSQL 확장 프록시.
- 모집: PostgreSQL 의 수평 확장(next iteration) 이 함께 구축할 엔지니어 모집 중.
핵심 교훈
- Protobuf vs 직접 바인딩: Protobuf 는 빠르지만, 직접 바인딩이 더욱 빠름.
- LLM 활용 효과:
- 명확한 범위 내에서 AI 를 효과적으로 사용.
- 6,000 줄 코드 자동 생성.
- 캐싱의 한계:
- 캐싱만으로는 근본적 개선 불가.
- 구조 변경 필요.
🔗 관련 태그
성형 최적화 PostgreSQL Rust Protobuf 성능병목 PgDog AI 활용 성능 개선 성능 벤치마크 LLM C 바인딩
작성된 파일 경로: /home/bigstones/git/obsidian/bigstone/기술/성능/PgDog_Protobuf_제거_성능_개선.md
참고 파일:
bigstone/기술/반도체/AI_칩_메타_MTIA.md(성능 최적화 전략)bigstone/기술/AI-ML/AI_에이전트_자동화_파이프라인.md(AI 활용 방안)bigstone/기술/AI-ML/AI_엔지니어링_규율.md(성능과 신뢰성 중요성)