DuckDB v2.0 Cyanoptera 알파: 임베디드 분석 엔진이 클라이언트-서버 데이터베이스로 진화하는 방법
DuckDB가 서버가 되려는 이유
DuckDB는 지금까지 "SQLite처럼 작동하는 분석 엔진"으로 알려졌다. 프로세스 안에 내장되어 파일 하나(.duckdb)를 공유하지 않고 각자 읽는 구조다. 이 설계는 단일 작업자, 로컬 Parquet 분석, 노트북 환경에서 탁월했다.
그런데 데이터 팀이 DuckDB를 공유 분석 계층으로 쓰기 시작하면서 두 가지 문제가 반복됐다.
- 동시 쓰기 불가: 동일 파일에 여러 프로세스가 쓰려 하면 잠금 충돌이 일어난다.
- 원격 접속 없음: 노트북 A가 데이터를 만들어도 노트북 B는 직접 쿼리할 수 없고, 파일을 복사해야 한다.
2026년 9월 2일, DuckDB Labs는 v2.0 "Cyanoptera" 알파 브랜치를 메인에서 분리하고 기능 동결을 선언했다. 정식 릴리스는 2026년 10월 하반기로 예정되어 있다. 10,000개가 넘는 커밋 위에 올라온 이 버전은 임베디드 엔진의 경계를 넘어 클라이언트-서버 데이터베이스로서의 첫 번째 안정 단계를 정의한다.
코드명 "Cyanoptera"는 서부 아메리카에 서식하는 오리 계피청둥오리(Anas cyanoptera)에서 따왔다.
Quack 프로토콜: HTTP/2 위의 DuckDB 전용 RPC
v2.0의 핵심 기능은 Quack 프로토콜이다. Quack은 DuckDB 내부 벡터 블록을 직렬화하지 않고 그대로 전송하는 RPC 프로토콜로, HTTP/2 위에서 동작한다.
HTTP/2를 선택한 이유는 실용적이다. 방화벽, 로드밸런서, CDN 환경에서도 별도 포트 개방 없이 작동한다. gRPC와 유사하지만 프로토콜 버퍼 변환 없이 DuckDB 네이티브 벡터 포맷을 그대로 보낸다.
v1.x에서 Quack은 core_nightly에서만 사용 가능한 실험적 확장이었다. v2.0에서 quack 확장이 1.0으로 승격되며 다음이 달라진다.
- 쿼리 처리량 향상 (서버→클라이언트, 클라이언트→서버 양방향)
- 호환성 보증: v2.0 이후 와이어 프로토콜은 마이너 버전 간 안정성을 유지한다
- 멀티유저 동시 쓰기 가능: 서버가 하나의 DuckDB 인스턴스를 직렬화해 충돌을 방지한다
CONNECT SQL 문
DuckDB 인스턴스를 데몬으로 실행하면 다른 DuckDB 인스턴스에서 직접 연결할 수 있다.
-- 서버 측: DuckDB를 데몬으로 실행
INSTALL quack;
LOAD quack;
LISTEN ON '0.0.0.0:5433';
-- 클라이언트 측: 원격 서버에 연결
CONNECT TO 'duckdb://analyst:password@db-server:5433/analytics.duckdb';
-- 연결 후 일반 SQL 사용
SELECT count(*) FROM remote_table WHERE event_date = today();기존 DuckDB 코드에서 연결 문자열만 바꾸면 로컬 임베디드 모드와 원격 서버 모드 사이를 전환할 수 있다.
비동기 I/O: 원격 스토리지 쿼리가 20배 빨라진 이유
DuckDB v1.x에서 S3 등 원격 스토리지를 읽을 때 파일 청크 하나를 가져오는 동안 쿼리 엔진 전체가 기다렸다. 스레드 수를 늘려도 I/O 대기가 병목을 만들었다.
v2.0은 비동기 I/O(async I/O) 를 도입해 이 구조를 바꿨다. I/O 요청을 던진 스레드가 결과를 기다리는 동안 다른 청크의 처리나 다른 쿼리를 계속 진행할 수 있다.
공식 벤치마크에서 S3의 CSV 데이터셋 쿼리 기준으로:
| 버전 | 실행 시간 |
|---|---|
| DuckDB v1.x | 887초 |
| DuckDB v2.0 (async I/O) | 45초 |
| 개선 비율 | ~20배 |
이 수치는 네트워크 I/O가 집중되는 워크로드에서의 극단적인 예시지만, 클라우드 오브젝트 스토리지 기반 분석에서 비동기 I/O의 효과를 명확히 보여 준다.
Parquet과 CSV 두 포맷 모두 비동기 I/O 경로를 지원한다.
새 PEG SQL 파서
v2.0은 외부 의존성을 가진 파서를 DuckDB Labs가 자체 개발한 PEG(Parsing Expression Grammar) 파서로 교체했다.
기존 파서는 PostgreSQL 파서를 포크한 구현으로, PostgreSQL 방언에 묶인 제약이 있었다. 새 파서는 DuckDB의 확장 SQL 문법을 더 자유롭게 정의할 수 있게 한다.
실질적인 영향은 두 가지다.
- 파싱 오류 메시지 개선: 정확한 위치와 문맥을 표시한다.
- 하위 호환성 변화: 일부 엣지케이스 SQL 문이 다르게 파싱될 수 있다. v2.0 마이그레이션 체크리스트에서 파서 변경 항목을 반드시 확인해야 한다.
v2.0의 아키텍처 변화 요약
Python / Go / Java / R 등
SQL 파싱 → 쿼리 실행 → 결과 반환
.duckdb · Parquet · CSV
원격 접속 없음
S3 쿼리 블로킹
CONNECT SQL
CONNECT SQL
LISTEN ON 포트
멀티유저 직렬화 쓰기
.duckdb v2
Parquet · CSV 20× 빠름
새 기본 스토리지 포맷
C API 재설계
확장 이식성 개선
호환성 변화와 마이그레이션 체크리스트
v2.0은 "최소한의 호환성 단절"을 표방하지만, 네 곳에서 명시적인 변경이 있다.
1. 스토리지 포맷 변경
v2.0은 새 기본 스토리지 포맷을 사용한다. v1.x .duckdb 파일은 자동으로 마이그레이션되지 않는다.
조치: 기존 파일을 v2.0으로 열 때 EXPORT DATABASE/IMPORT DATABASE로 이전하거나, DuckDB가 제공하는 마이그레이션 도구를 사용한다.
2. C API 재설계
임베딩용 C API 서명 일부가 변경됐다. C 또는 C++ 바인딩을 직접 사용하는 애플리케이션은 헤더 파일 변경 사항을 확인해야 한다. Python/Go/Java 공식 클라이언트 라이브러리는 이 변경을 이미 반영한다.
3. PEG 파서 동작 변화
일부 비표준 SQL 문이 v1.x에서는 허용됐지만 v2.0 PEG 파서에서 오류가 날 수 있다. 특히 파서가 관대하게 처리하던 암묵적 타입 강제 변환 케이스를 점검한다.
4. Quack 확장 기본 포함
v2.0 설치에 Quack 확장이 포함되어 별도 INSTALL quack 없이 LOAD quack만으로 사용 가능하다.
운영 배포 패턴
DuckDB v2.0에서 가능해지는 새로운 배포 패턴과 그 적합한 사용 시나리오를 정리한다.
| 배포 패턴 | 사용 사례 | 주의사항 |
|---|---|---|
| 임베디드 (기존 방식) | 단일 프로세스 분석, 로컬 ETL | 변화 없음 |
| 서버 데몬 (신규) | 팀 공유 분석 DB, 공유 Parquet 계층 | 동시 쓰기 직렬화 |
| Spring Boot 임베디드 서버 | 백엔드 앱 내 분석 API | C API 변경 확인 |
| S3 기반 분산 읽기 | 클라우드 Parquet 분석 | async I/O 효과 최대화 |
DuckDB Labs는 GA 이전에 알파 바이너리와 나이틀리 패키지를 Python, Go, Java, R, Node.js 클라이언트용으로 제공한다. 프로덕션 배포는 GA 이후를 권장한다.
임베디드 OLAP에서 공유 분석 계층으로
DuckDB v2.0이 중요한 것은 단순히 기능이 추가됐기 때문이 아니다. 임베디드 도구가 걸어온 방향이 바뀌었다는 점이 핵심이다.
SQLite는 "서버 없는 데이터베이스"를 20년 전에 정의했다. 분석 영역에서 DuckDB가 같은 역할을 했다. 이제 DuckDB v2.0은 "서버 없는 분석 데이터베이스"와 "공유 분석 서버" 사이 경계를 흐린다.
비동기 I/O가 클라우드 오브젝트 스토리지를 실용적으로 만들고, Quack이 팀 간 공유를 가능하게 하면, DuckDB는 소규모 데이터 팀이 Redshift나 BigQuery 없이 공유 분석 계층을 구축할 수 있는 현실적인 선택지가 된다.
GA 전 알파 단계이므로 Quack 프로토콜에 추가 변경이 있을 수 있다. 프로덕션 전환 전 10월 GA 릴리스 노트를 확인하는 것이 안전하다.
References
- DuckDB v2.0 Preview 공식 블로그 (2026-08-17): https://duckdb.org/2026/08/17/duckdb-20-highlights
- DuckDB v2.0 Alpha 공개 안내 (2026-09-02): https://duckdb.org/2026/09/02/try-duckdb-20-alpha
- Quack 프로토콜 공식 문서: https://duckdb.org/quack/
- Quack FAQ: https://duckdb.org/quack/faq
- InfoQ — Beyond Embedded: How DuckDB v2.0 Shifts Architecture toward Distributed Network Capabilities (2026-08): https://www.infoq.com/news/2026/08/duckdb-v2-distributed/
- InfoQ — DuckDB Quack: Client/Server Protocol over HTTP for Multi-User Analytics (2026-05): https://www.infoq.com/news/2026/05/duckdb-quack-protocol/
- DuckDB 1.5 Variegata 릴리스 노트 (VARIANT·DuckLake·Quack 초기 포함): https://duckdb.org/2026/03/09/announcing-duckdb-150