pgrust: LLM을 활용한 Rust 기반 Postgres 재작성

pgrust: LLM을 활용한 Rust 기반 Postgres 재작성

pgrust 개요

pgrust는 대형 언어 모델(LLM)을 활용해 Rust로 PostgreSQL을 재작성하는 실험적인 프로젝트입니다. 이 프로젝트는 원본 PostgreSQL 사양과의 호환성을 유지하면서 데이터베이스 아키텍처를 현대화하는 것을 목표로 하며, 현재 Postgres 회귀 테스트의 100%를 통과하고 있습니다.

주요 아키텍처 변경 및 성능

작성자 @malisper는 원래 C 기반 구현보다 성능을 향상시키기 위해 데이터베이스 아키텍처에 여러 근본적인 변화를 적용했습니다:

  • 스레딩 모델: pgrust는 PostgreSQL이 사용하던 전통적인 프로세스‑퍼‑커넥션 모델을 스레드‑퍼‑커넥션 모델로 대체합니다.
  • 트랜잭션 워크로드: 이 프로젝트는 트랜잭션 중심 워크로드에서 PostgreSQL 대비 50% 성능 향상을 보고했습니다.
  • 분석 워크로드: pgrust는 분석 워크로드에서 PostgreSQL보다 약 300배 빠르다고 주장하지만, Clickbench 벤치마크에서는 Clickhouse보다 대략 2배 느립니다.

기술적 비판 및 안전성 우려

성능 주장에도 불구하고, 프로젝트는 생성된 코드의 안전성과 품질에 대해 기술 커뮤니티로부터 큰 비판을 받아왔습니다.

Unsafe Rust 사용

리뷰어들이 제기한 주요 우려는 unsafe 블록의 광범위한 사용입니다. 코드베이스 분석 결과 unsafe {가 2,664번, unsafe fn이 1,835번 등장했으며, 일부 비평가들은 이를 "원시 포인터를 광범위하게 사용한 AI 생성 트랜스파일"이라고 비판하고 있습니다. 이는 Rust의 메모리 안전 보장을 활용한 재설계라기보다는 그렇지 않다는 지적입니다.

신뢰성 vs. 테스트 커버리지

커뮤니티 구성원들은 테스트 스위트를 통과하는 것과 실제 프로덕션 준비 상태 사이의 차이를 강조했습니다. 비평가들은 PostgreSQL의 신뢰성이 수십 년에 걸친 "실제 운영 환경에서의 상처"에서 비롯된 것이지 단순히 회귀 테스트 때문이 아니라고 주장합니다. 또한 표준 Postgres 회귀 테스트가 새로운 스레드 아키텍처를 명시적으로 검증하지 않으며, 이는 잠재적인 실패 지점이라는 점이 지적되었습니다.

소프트웨어 재작성에서 LLM의 역할

pgrust 개발은 대규모 시스템 재작성에 LLM을 활용하는 것의 타당성에 대한 광범위한 논쟁을 촉발했습니다.

"AI 재작성" 패러다임

관찰자들은 LLM이 관여될 때 소프트웨어 개발 방식에 변화가 있음을 지적했습니다:

  • 리뷰 가능성: 전통적인 코드 리뷰가 실질적으로 불가능해지고 있습니다. 한 리뷰어는 한 달 이내에 생성된 7,101개의 커밋을 인간이 검토하는 것은 불가능하다고 언급했습니다.
  • 테스트에 대한 과적합: LLM이 테스트 스위트를 문자 그대로 사양으로 간주하고, 특정 데이터 포인트를 통과하도록 코드를 수정하는 식으로 일반적인 동작 구현 대신 테스트에 과적합될 위험이 있습니다.
  • 유지보수: 일부는 AI가 생성한 프로젝트는 유기적인 성장 과정에서 얻어지는 규율이 부족하기 때문에 유지보수가 어렵다고 주장합니다. 향후 기여자는 코드를 이해하거나 수정하기 위해 AI 토큰을 사용해야 할 수도 있습니다.

현대화 가능성

반대로, 일부는 LLM이 레거시 인프라를 현대적인 언어와 프레임워크로 이전하는 것을 훨씬 쉽게 만든다고 주장합니다. 이는 이전에 수동으로 포팅하기 어려웠던 경우에 특히 유용합니다. 이러한 관점은 향후 소프트웨어 검증이 인간 코드 리뷰에서 벗어나 보다 견고한 회귀 테스트 스위트와 "evals" 쪽으로 이동할 것이라고 예측합니다.

법적 및 라이선스 고려사항

pgrust의 라이선스에 대한 논의가 진행 중입니다. 원본 PostgreSQL 프로젝트는 PostgreSQL 라이선스를 사용하지만, pgrust는 AGPL-3.0 라이선스로 배포됩니다. 이는 원본 소스 코드를 기반으로 한 재작성물이 원본 라이선스에 묶여야 하는지에 대한 질문을 제기합니다.

Sources