DuckDB, HTTP 기반의 새로운 클라이언트-서버 프로토콜 'Quack' 공개!

by DD
3주 전
조회수 26

DuckDB, 기존의 인-프로세스(In-process) 아키텍처 한계를 극복하고자 HTTP 기반의 클라이언트-서버 프로토콜 Quack을 발표함

Quack은 다중 동시 쓰기(Concurrent Writers)를 지원하며, 대용량 데이터 전송 및 소규모 트랜잭션에 최적화됨

벤치마크 결과, Quack은 대용량 데이터 전송(Bulk Transfer)에서 PostgreSQL 및 Arrow Flight SQL보다 우수한 성능을 보임

DuckDB 팀은 Quack을 DuckLake에 통합하여 원격 DuckDB 서버를 카탈로그로 활용할 계획이며, v2.0 정식 출시를 준비 중임

Quack 프로토콜의 기술적 특징

Quack은 DuckDB 인스턴스 간 통신을 위해 설계된 HTTP 기반(HTTP-based) 프로토콜이다. 요청-응답(Request-Response) 패턴을 사용하며, 인증 및 권한 부여를 위한 토큰 기반의 보안 메커니즘을 제공한다. 특히, 단일 라운드 트립(Single Round Trip) 쿼리 실행을 지원하여 지연 시간에 민감한 환경에서 성능을 최적화했다. 또한, DuckDB의 내부 직렬화(Serialization) 방식을 활용하여 대용량 데이터 전송 속도를 향상시켰다.

성능 벤치마크 분석

DuckDB 팀은 Quack의 성능을 평가하기 위해 대용량 데이터 전송(Bulk Transfer)소규모 쓰기(Small Writes) 벤치마크를 수행했다. 벤치마크 결과에 따르면, Quack은 대용량 데이터 전송에서 PostgreSQL 및 Arrow Flight SQL보다 뛰어난 성능을 보였다. 특히, 6천만 행(76GB)의 데이터를 5초 이내에 전송하는 기록을 달성했다. 소규모 쓰기 테스트에서는 PostgreSQL에 근접하는 성능을 보였으며, 8개 병렬 스레드까지 PostgreSQL을 능가했다.

Quack의 아키텍처적 장점

Quack은 DuckDB의 인-프로세스(In-process) 아키텍처의 한계를 극복하고, 다중 프로세스 환경(Multi-process Environment)에서의 데이터 접근을 용이하게 한다. 이를 통해 여러 프로세스가 동시에 동일한 데이터베이스 파일을 수정할 수 있게 되어, 데이터 수집 및 분석 작업의 효율성을 높인다. 또한, Quack은 DuckDB의 확장성을 활용하여 사용자 정의 인증 및 권한 부여 기능을 제공하며, 향후 DuckLake와의 통합을 통해 원격 카탈로그 서버로의 활용 가능성을 열었다.

Arrow Flight SQL과의 비교

DuckDB 팀은 Quack 개발 과정에서 기존의 Arrow Flight SQL 프로토콜을 고려했으나, 자체적인 프로토콜을 선택했다. 그 이유는 DuckDB 내부 구조와 Arrow의 데이터 구조 간의 차이, 그리고 Arrow Flight SQL의 2번의 왕복(Two Round Trips) 쿼리 실행 방식이 소규모 업데이트에 적합하지 않다는 점 때문이다. Quack은 단일 라운드 트립 쿼리 실행을 지원하여 지연 시간을 줄이고, DuckDB의 혁신을 유지하기 위해 자체적인 직렬화 방식을 채택했다.

Quack: The DuckDB Client-Server Protocol