DuckDB 개요 (Overview)
DuckDB 개요 (Overview)
DuckDB는 어떤 데이터베이스인가요?
DuckDB는 프로세스 내(in-process) 방식으로 동작하는 분석용 SQL 데이터베이스예요. 일반적인 데이터베이스가 별도 서버로 떠서 클라이언트와 네트워크로 통신하는 것과 달리, DuckDB는 여러분의 애플리케이션 안에 라이브러리처럼 내장되어요. 그래서 별도의 서버를 띄우거나 연결 설정을 할 필요 없이, 코드에서 바로 데이터베이스를 열고 사용할 수 있답니다.
덕분에 DuckDB는 "엑셀과 데이터베이스 사이" 같은 위치를 차지해요. 로컬에 있는 CSV나 Parquet 같은 파일을, 마치 관계형 데이터베이스처럼 SQL로 분석하고 싶을 때 아주 유용하죠.
핵심적인 특징들
1. 분석(OLAP)에 최적화된 칼럼 지향 저장
DuckDB는 행(row) 단위로 데이터를 저장하는 트랜잭션형 데이터베이스(OLTP)가 아니라, 칼럼(column) 단위로 저장하는 분석 지향(OLAP) 데이터베이스예요. 대량의 데이터를 집계하고 요약하는 분석 쿼리는 칼럼 지향 저장에서 훨씬 빠르게 동작하고, 벡터화된(vectorized) 실행 엔진이 한 번에 많은 데이터를 처리해서 엄청난 성능을 내줘요.
2. SQL 파서와 데이터 소스의 유연함
DuckDB는 표준 SQL을 지원하면서도, 데이터를 "먼저 불러온 뒤 분석" 할 필요 없이 파일을 직접 읽어서 SQL로 바로 분석할 수 있어요. 공식 문서에서 강조하는 주요 데이터 소스는 다음과 같아요.
- CSV 파일: 스키마를 자동 감지(auto detection)해서 읽어주고, 잘못된(faulty) 파일 처리 옵션도 지원해요.
- JSON 파일: JSON을 읽고, 쓰고, SQL과 상호 변환하는 다양한 함수를 제공해요.
- Parquet 파일: 분석에 최적화된 포맷으로, 메타데이터 조회와 암호화(encryption)도 지원해요.
- 여러 파일 처리: 여러 파일을 한 번에 다루고 스키마를 합치는 기능이 있고, Hive 파티셔닝과 분할 쓰기(partitioned writes)도 지원해요.
- INSERT / Appender: 대량의 행을 빠르게 넣을 수 있는 Appender API와 INSERT 문도 제공해요.
이런 유연함 덕분에 DuckDB는 "데이터 레이크하우스(lakehouse)를 질의하는 도구" 로도 자주 쓰여요. 로컬 파일 시스템 위에 있는 Parquet 데이터를 마치 하나의 데이터 웨어하우스처럼 SQL로 분석하는 거죠.
3. 풍부한 클라이언트 API
DuckDB는 다양한 언어와 환경을 공식 지원해요. 문서의 Client APIs 섹션에 정리된 것만 보더라도:
- C, C++
- CLI (명령줄 인터페이스)
- Go
- Java (JDBC)
- Node.js
- ODBC
- Python
- R
- Rust
- WebAssembly (Wasm) — 브라우저에서도 돌아요
- 그 외 Dart, Julia, PHP, Swift 같은 서드파티 클라이언트도 있어요
특히 Python 클라이언트는 데이터 엔지니어 사이에서 아주 널리 쓰여요. Pandas나 Arrow 데이터를 DuckDB로 불러와 SQL로 처리하는 식이죠.
4. 쉬운 설치와 확장성
공식 홈페이지에서 운영체제별 설치 파일을 내려받을 수 있고, 확장(extension) 시스템을 통해 추가 기능을 필요할 때 불러와 쓸 수 있어요. INSTALL / LOAD 문으로 확장을 설치하고 로드하는 구조예요.
언제, 왜 DuckDB를 쓸까요?
- 로컬 데이터 분석: 서버 구축 없이 파일을 SQL로 분석하고 싶을 때.
- 파이프라인 중간 처리: ETL 스크립트 안에서 중간 변환을 빠르고 간단하게 처리하고 싶을 때.
- 프로토타이핑: 분석 로직을 빠르게 검증하고 싶을 때.
반대로, 다수의 동시 사용자가 많은 쓰기 트랜잭션을 처리하는 OLTP 워크로드에는 적합하지 않아요. DuckDB는 한 번에 많은 데이터를 읽고 집계하는 분석 워크로드에 초점이 맞춰져 있거든요.
정리
정리하면 DuckDB는 **"설치도 서버도 필요 없이, 로컬 파일을 훌륭하게 SQL로 분석할 수 있게 해주는 칼럼 지향 분석 데이터베이스"**예요. CSV, JSON, Parquet 같은 파일을 바로 읽어서 고성능으로 집계하고, 여러 언어에서 손쉽게 쓸 수 있죠. 기술 위키에서 SQL, 데이터 소스, 클라이언트별 사용법을 하나씩 다룰 예정이니, 이 개요가 그 중심축이 됩니다.