DuckDB 2.0 — 이제 서버로도 띄우고, S3 읽기는 최대 19배 빨라졌다
DuckDB 2.0.0 LTS가 나왔다. Quack 프로토콜로 서버·클라이언트 구성을 정식 지원하고, 비동기 I/O와 VARIANT 타입, 트리거, PEG 파서, 에이전트 모드가 추가됐다. 2.0이 만든 DB 파일은 이전 버전에서 못 읽는다.
DuckDB 2.0.0 LTS 발표 글을 읽었다. 1.0이 안정성에 집중했다면 2.0은 기능을 크게 늘린 버전이라고 해서, v1과 비교하면 무엇이 좋아졌는지 물어봤다.
v1 과 비교했을때 어떤게 향상되었나?
DuckDB 2.0.0 LTS "Cinnamon Teal"이 10월 21일에 나왔어요. 1.0이 안정성과 하위 호환성에 집중한 버전이었다면, 2.0은 기능을 크게 늘린 버전이에요. 1.5 이후 커밋만 2만 개 가까이 들어갔어요.
- 서버로도 쓸 수 있어요: DuckDB는 원래 앱 안에 붙여 쓰는 임베디드 DB예요. 2.0에서는 Quack 프로토콜과
CONNECT문으로 다른 프로세스에 있는 DuckDB에 붙어서 쓸 수 있어요. - 원격 파일 읽기가 빨라졌어요: 비동기 I/O로 S3 같은 오브젝트 스토리지에서 읽는 속도가 크게 올라갔어요.
- SQL 기능이 늘었어요: 트리거, 새 PEG 파서, 일급 VARIANT 타입이 들어왔어요. 2.0이 LTS 버전이라 최소 2027년 10월까지 지원돼요.
v1 대비 주요 향상점은 이래요.
| 영역 | 1.x | 2.0 |
|---|---|---|
| 실행 형태 | 앱에 내장(Quack은 1.5.3 미리보기) | 서버·클라이언트 정식 지원, duckdb -serve·-connect |
| 원격 읽기 | 동기 I/O, 요청을 하나씩 처리 | 비동기 I/O, 여러 요청을 동시에 처리 |
| 반정형 데이터 | VARIANT 도입(1.5) | 공통 구조를 컬럼으로 분해해 저장·실행, Parquet 읽기·쓰기까지 |
| 파서 | PostgreSQL 파서에서 파생 | 자체 PEG 파서가 기본, 확장이 문법 자체를 추가할 수 있음 |
| SQL | — | 트리거, NEAREST 조인, 중첩 스키마, $x 변수 |
속도: DuckDB 팀이 직접 잰 수치예요(64코어 EC2, 25Gbit/s 망). S3에 있는 Parquet로 TPC-H Q6를 돌리면 1.5.5의 8.2초가 2.8초로 줄어 약 2.9배 빨라졌어요. 80GB CSV는 약 19배 빨라졌어요. 다만 로컬 SSD에서 콜드 캐시로 읽을 때는 약 1.5배에 그치고, 캐시가 데워진 상태에서는 차이가 거의 없어요.
에이전트 모드: Claude Code 같은 코딩 에이전트가 CLI를 실행하면 DuckDB가 이를 알아채요. 그러면 결과를 간결한 마크다운 표로 보여 주고 오류는 JSON으로 알려요. TPC-H 실험에서 모델이 읽어야 할 출력이 59% 줄었다고 해요.
업그레이드할 때 주의할 점
- 2.0이 만든 DB 파일은 2.0 이전 버전에서 못 읽어요. 반대로 기존 1.x 파일은 2.0에서 그대로 읽고 쓸 수 있어요.
- 화살표 람다 문법(
x -> x + 1)은 기본으로 꺼졌어요. - 빌드하려면 C++17 컴파일러가 필요해요.
- 중요한 운영 환경이라면 11월 첫 패치 릴리스까지 기다리라고 DuckDB 팀이 권했어요.
출처: DuckDB 2.0.0 발표 · 비동기 I/O 상세 · 릴리스 노트
정리
- 앱에 내장해 쓰던 DuckDB를 Quack 프로토콜과
CONNECT로 서버·클라이언트 구성으로도 쓸 수 있다. - 비동기 I/O로 S3에 있는 Parquet는 약 2.9배, 80GB CSV는 약 19배 빨라졌다(DuckDB 팀 측정). 로컬 SSD에서는 효과가 작다.
- VARIANT 일급 지원, 트리거, 자체 PEG 파서, 코딩 에이전트용 CLI 에이전트 모드가 추가됐다.
- 2.0이 만든 DB 파일은 이전 버전에서 못 읽고, 화살표 람다 문법은 기본으로 꺼졌다. 중요한 운영 환경은 11월 첫 패치 릴리스까지 기다리라고 DuckDB 팀이 권한다.
이 대화, 이어서 해 보기
글 주소와 함께 질문이 채워진 채로 열립니다.