DuckDB 2.0.0 LTS Cinnamon Teal 릴리스 노트

DuckDB 2.0.0 LTS 개요

DuckDB 2.0.0(코드명 “Cinnamon Teal”)은 프로젝트를 장기 지원(LTS) 단계로 전환하는 주요 기능 릴리스로, 최소 2027년 10월까지 지원이 보장됩니다. 버전 1.5 이후 약 20,000개의 커밋을 통해 구축된 이 릴리스는 인프로세스 엔진과 서버 측 분석 플랫폼으로서 데이터베이스의 기능을 확장하는 데 중점을 둡니다.

Quack을 통한 클라이언트-서버 아키텍처

DuckDB 2.0.0은 Quack 프로토콜을 공식화하여 네이티브 클라이언트-서버 아키텍처를 구현합니다. 이제 사용자는 CALL quack_serve()를 사용하여 DuckDB 서버를 실행하고 새로운 CONNECT 문을 사용하여 원격 클라이언트에서 연결할 수 있습니다. 이 기능은 분산 워크플로우를 단순화하며, 사용자가 PostgreSQL 및 MySQL을 포함한 원격 데이터베이스에 연결할 수 있게 합니다. 또한 원격 푸시다운 옵티마이저를 통해 데이터를 네트워크로 가져오는 대신 소스 서버에서 쿼리를 실행합니다.

성능 및 비동기 I/O

이제 Parquet 및 CSV 파일을 읽을 때 비동기 I/O가 기본값으로 설정되어 I/O 계층과 쿼리 처리가 분리됩니다. 이러한 개선을 통해 데이터베이스는 여러 읽기 요청을 동시에 처리할 수 있으며, S3와 같은 객체 스토리지에 대한 처리량이 크게 향상됩니다. 초기 사용자들은 이 변경 사항 덕분에 DuckDB가 고코어 클라우드 인스턴스에서 효과적으로 확장될 수 있다고 보고했으며, 일부 사용자는 이전 버전이 64개 vCPU에서 정체되었던 것과 달리 192개 vCPU를 탑재한 머신에서도 성능 향상을 경험했다고 언급했습니다.

SQL 기능 및 데이터 처리

트리거 및 구체화된 뷰(Materialized Views)

DuckDB 2.0은 CREATE TRIGGER 지원을 도입하여 FOR EACH ROW 및 FOR EACH STATEMENT 기능을 포함한 BEFORE 및 AFTER 이벤트를 지원합니다. 이 추가 기능을 통해 감사 로깅과 증분 방식으로 유지 관리되는 구체화된 뷰를 구현할 수 있게 되어, 복잡한 데이터 웨어하우징 작업에서 DuckDB의 활용도가 크게 향상되었습니다.

VARIANT 타입

VARIANT 타입은 이제 일급 시민(first-class citizen)으로, 컬럼형 실행 성능을 유지하면서 JSON과 같은 반정형 데이터를 저장하도록 설계되었습니다. 엔진은 VARIANT 데이터 내의 공통 구조를 자동으로 "분쇄(shred)"하여 원시 텍스트 기반 JSON에 비해 효율적인 압축과 고속 쿼리를 가능하게 합니다.

SQL 방언 개선 사항

  • 에이전트 모드: CLI는 이제 AI 코딩 어시스턴트에 의해 구동될 때 이를 감지하여 출력을 간결한 Markdown 테이블로 자동 포맷하고, 토큰 사용량을 줄이기 위해 쿼리 비용 추정치를 제공합니다.
  • 파서: 확장 가능한 PEG 기반의 새로운 파서가 기본값으로 설정되어, 이전 버전과의 호환성을 유지하면서 향후 구문 확장이 가능해졌습니다.
  • 새로운 구문: 데이터 수정 CTE, 벡터 유사도 검색을 위한 NEAREST 조인, 중첩 스키마(예: finance.reports)에 대한 지원이 추가되었습니다.

마이그레이션 및 내부 구조

2.0으로 업그레이드할 때는 스토리지 호환성에 주의해야 합니다. 이전 버전에서는 2.0.0에서 생성된 데이터베이스 파일을 읽을 수 없습니다. 주요 내부 변경 사항은 다음과 같습니다:

  • 컴파일러 요구 사항: 이제 C++17 컴파일러가 필요합니다.
  • ICU 제거: 시간대 및 정렬 지원을 위해 ICU 라이브러리가 네이티브 경량 구현으로 대체되었습니다.
  • 지원 중단: 기존의 단일 화살표 람다 구문과 amalgamation 빌드는 더 이상 사용되지 않으며, macOS x86_64에 대한 지원은 단계적으로 중단될 예정입니다.

커뮤니티 인사이트

사용자들은 프로덕션 환경에서 DuckDB 2.0의 다재다능함을 강조했습니다. 한 사용자는 이 엔진을 사용하여 7테라바이트의 로그를 2시간 이내에 Parquet 형식으로 압축하여 서명된 URL을 통해 액세스할 수 있는 "고정된(frozen)" 데이터 레이크를 생성했다고 언급했습니다. 또 다른 개발자는 새로운 클라이언트-서버 기능의 가치를 강조하며, 기존의 리소스를 많이 소비하는 데이터 스택에 대한 가벼운 대안을 제공한다고 제안했습니다. Quack 프로토콜이 네이티브 선택지이지만, 일부 커뮤니티 구성원들은 더 넓은 생태계 호환성을 위해 DuckDB를 Postgres 와이어 프로토콜이나 Arrow Flight와 연결하는 맞춤형 확장을 활용하고 있습니다.

Sources

관련