Lobsters

Announcing DuckDB 2.0.0 LTS “Cinnamon Teal”

DuckDB 2.0.0 LTS “Cinnamon Teal” 출시

DuckDB 2.0.0 LTS는 비동기 I/O, VARIANT, 트리거, 확장 가능한 SQL 파서와 에이전트 모드를 추가한 기능 중심 릴리스입니다. 지원 기간은 2027년 10월까지이며, 데이터베이스 파일의 하위 버전 호환성과 운영 전 테스트 등 마이그레이션 조건도 함께 안내합니다.

에디터 노트

이번 릴리스의 업그레이드 판단은 기능보다 파일 호환성에서 갈립니다. 2.0이 기존 파일은 읽지만 2.0에서 저장한 파일은 이전 버전에서 열리지 않으므로, 여러 버전의 프로세스가 같은 데이터를 다루는 배포에서는 테스트 순서가 중요합니다. 팀이 섀도 시스템 검증과 첫 패치 대기를 권한 이유도 이 제약에 직접 연결됩니다. 새 기능은 분석 데이터베이스를 원격 연결, 반정형 데이터 처리, 증분 집계로 확장합니다. 다만 트리거의 일부 조합과 확장 저장소 문법은 아직 제한 또는 변경 가능성이 있고, C API v2도 현장 피드백을 받는 단계입니다. 따라서 2.0은 LTS 지원 기간을 제공하면서도 구성 요소별 성숙도가 다른 릴리스로 읽는 편이 정확합니다. Lobsters 댓글은 제공되지 않아 별도의 사용자 검증이나 반론은 확인할 수 없습니다.

AI 요약

DuckDB 팀이 장기 지원 버전 2.0.0 “Cinnamon Teal”을 출시했습니다. 1.5 이후 약 2만 건의 커밋을 담은 기능 릴리스로, 2027년 10월까지 지원합니다. 기존 LTS인 1.4는 2026년 11월 17일까지 지원하며, 1.5의 지원 기간도 2027년 3월까지 연장했습니다.

원격 연결과 비동기 I/O

DuckDB는 기존의 인프로세스 데이터베이스 방식에 더해 Quack 프로토콜로 클라이언트-서버 연결을 지원합니다. 2.0에서는 프로토콜의 성능과 안정성을 개선하고, 원격 데이터베이스에 연결하고 세션을 전환하는 CONNECT 문을 추가했습니다. PostgreSQL과 MySQL 등 Quack 외 원격 데이터베이스에도 CONNECT를 사용할 수 있으며, 원격 푸시다운 최적화가 쿼리를 원격 서버에서 실행합니다. 기본 설정은 서버가 localhost에서만 수신하도록 합니다. 다른 머신의 연결을 받으려면 TLS 종료 리버스 프록시 뒤에 서버를 두도록 안내하며, allow_other_hostname 옵션으로 서버를 직접 외부에 노출하는 방식은 테스트용으로 한정합니다.

Parquet, CSV, DuckDB 자체 저장 형식의 읽기에는 비동기 I/O를 도입했습니다. 쿼리 처리와 별도로 I/O 요청을 백그라운드에서 보내고 여러 요청을 동시에 처리해 원격 스토리지 읽기의 병렬성을 높입니다. 발표 글은 특히 S3 같은 오브젝트 스토리지에서 쿼리 속도가 개선된다고 설명합니다.

VARIANT와 에이전트 모드

VARIANT는 행마다 구조가 다른 반정형 데이터를 저장하는 형식입니다. 2.0에서는 데이터의 공통 구조를 찾아 분리해 저장하는(shredding) 처리를 통합했습니다. 이를 통해 열 기반 실행과 압축을 지원하며, 저장소에서 직접 처리하거나 Parquet으로 읽고 쓸 수 있습니다. 관련 variant_* 함수도 제공합니다.

CLI는 Claude Code, Codex, Cursor 같은 코딩 에이전트가 실행하는 상황을 감지해 에이전트 모드로 전환합니다. 이 모드에서는 표를 간결한 Markdown 형식으로 출력하고, 결과가 잘렸을 때 알리며, 지나치게 오래 실행되는 쿼리를 일찍 중단합니다. 오류는 JSON으로 보고하고, 장시간 쿼리는 실행 전에 예상 비용을 표시합니다. DuckDB 팀의 TPC-H 실험에서는 에이전트가 읽어야 하는 출력량이 59% 줄었습니다. 수동으로 시험할 때는 -agent 옵션을, 끌 때는 -no-agent 옵션을 사용합니다.

SQL 파서, 확장과 트리거

DuckDB 1.5에서 선택 기능으로 제공했던 PEG 기반 파서가 기본값이 됐습니다. 기존 YACC/Bison LALR(1) 파서는 문법을 추가할 때 기존 규칙과 충돌할 수 있었지만, PEG 파서는 문법 대안을 정해진 순서로 시도합니다. 확장은 SQL 문법 자체에 새 규칙을 추가할 수 있고, 구문 오류에는 정확한 소스 위치를 표시합니다. 이전 파서와 다른 점은 마이그레이션 안내에 정리했으며, 필요하면 legacy_parser 확장과 enable_legacy_parser 설정으로 되돌릴 수 있습니다.

새 C API v2는 파일 시스템과 테이블 함수 등 확장 개발에 필요한 구성 요소를 노출합니다. 안정 버전으로 확정하기 전 실제 사용 피드백을 받는 단계입니다. 조직은 자체 확장 저장소를 등록하고 RSA 공개 키로 확장 서명을 검증할 수 있습니다. 이 저장소 기능은 개발 중이라 문법이 이후 바뀔 수 있습니다.

CREATE TRIGGER로 BEFORE·AFTER 트리거를 만들고 행 단위 또는 문장 단위로 실행할 수 있습니다. OLD·NEW 전이 테이블을 참조하고, 여러 트리거를 같은 이벤트에 연결하는 기능도 제공합니다. 글은 트리거를 이용해 감사 테이블에 변경 사항을 기록하거나 삽입·삭제 때 집계 테이블을 갱신하는 예제를 보여줍니다. 일부 조합은 아직 지원하지 않으며, 제한 사항을 별도로 안내합니다.

기타 기능과 업그레이드 조건

SQL 기능에는 변수의 $x 표기, INSERT·UPDATE·DELETE·COPY를 단계로 쓰는 데이터 변경 CTE, 유사도 검색에 쓰는 NEAREST 조인, 중첩 스키마, JSON 변경 함수가 포함됩니다. DuckLake 1.1, Iceberg REST 카탈로그 옵션, Delta 테이블 생성과 시간 여행 기능도 함께 언급합니다.

DuckDB 2.0에서 만든 데이터베이스 파일은 2.0 이전 버전이 읽지 못합니다. 반대로 2.0은 기존 데이터베이스 파일을 읽고 쓸 수 있으며, 기존 파일은 이전 버전에서도 계속 읽을 수 있습니다. 여러 DuckDB 프로세스가 함께 도는 복잡한 배포 환경에는 주의가 필요하며, 팀은 운영 전 섀도 시스템에서 시험할 것을 권합니다. 업무 영향이 큰 환경에는 11월 예정인 첫 패치 릴리스까지 기다리는 방안도 제시합니다.

이 밖에 C++17 컴파일러가 필요하고, 릴리스 빌드 기본 컴파일러를 Clang으로 변경했습니다. ICU 라이브러리를 제거하고 시간대·달력·콜레이션 구현을 icu 확장으로 옮겼으며, 시간대 데이터는 약 45 kB로 압축해 포함합니다. 기존 단일 화살표 람다 문법은 기본 비활성화됐고 2.1에서 제거될 예정입니다. macOS x86_64 지원은 단계적으로 종료하며 2.1부터 지원하지 않습니다.

원문: DuckDB 블로그 / 번역·요약: Trawling