🚀 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::parseProtobuf613기준
pg_query::parse_raw직접 C–Rust3,3575.45 배 ↑
pg_query::deparseProtobuf759기준
pg_query::deparse_raw직접 Rust–C7,3199.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 (성능과 신뢰성 중요성)