본문으로 바로가기
리옵트 핸드북
리옵트 핸드북
DuckDB 고급 활용

시작과 기준선

포지셔닝과 적합한 워크로드버전·설치·런타임 기준연결·스토리지 모델실행 가능한 예제 번들

파일·레이크 분석

CSV·JSON 수집Parquet 레이크 모델링다중 파일·스키마 진화파티션 쓰기와 오브젝트 스토리지Lakehouse 포맷

분석 SQL·연동

Friendly SQL과 매크로시계열·분석 SQL중첩·반정형 데이터Python·Arrow·Polars·BIdbt·MotherDuck·Ibis 생태계Materialization·Index·통계

성능·운영

성능 프로파일링벤치마크·프로파일링 실습메모리·spill·실패 모드동시성·보안·운영보안 Hardening 체크리스트

부록

템플릿참고 자료검증 리포트업데이트 내역
핸드북›DuckDB 고급 활용›동시성·보안·운영

동시성·보안·운영

DuckDB의 단일 프로세스 write 모델, read-only 공유, extension 보안, untrusted SQL 방어 기준을 정리합니다.

핵심 요약

  • DuckDB는 in-process 분석 엔진이라 한 프로세스 안 multi-thread write는 되지만 여러 프로세스 동시 write는 단일 writer로 직렬화하고 공유는 read-only로 제한합니다.
  • DuckDB SQL은 파일·네트워크·extension에 접근하므로 untrusted SQL은 Bash/Python 코드처럼 보고 VM 격리, egress 제한, timeout, memory_limit로 방어합니다.
  • extension은 parent process와 같은 권한으로 실행되므로 core-only 환경은 allow_community_extensions=false로 낮추고, 이 보안 설정은 세션 안에서 다시 느슨하게 되돌릴 수 없게 lock됩니다.
  • CREATE SECRET의 SCOPE를 좁혀 환경별 prefix가 한 세션에 섞이지 않게 하고 persistent secret의 로컬 디스크 보관 위험을 문서화합니다.

DuckDB 운영에서 가장 큰 오해는 "파일 DB니까 여러 앱이 동시에 쓰면 되겠지"입니다. DuckDB는 in-process 분석 엔진이라 동시성 모델도 이 전제 위에서 설계됐습니다. 보안도 DB 서버 권한 모델이 아니라 실행 프로세스 권한과 extension 권한으로 따져야 합니다.

동시성 모델

상황가능 여부기준
한 프로세스 안 여러 thread read/write가능thread-local cursor 사용
여러 프로세스 read-only가능access_mode = 'READ_ONLY'
여러 프로세스 동시 write피함단일 writer process로 직렬화
append 중심 thread write가능conflict와 transaction boundary 확인
같은 row update/delete 충돌실패 가능optimistic concurrency conflict 처리

Python multi-thread에서는 원 connection에서 thread별 .cursor()를 만들어 사용합니다.

Untrusted SQL

DuckDB 공식 문서는 DuckDB SQL을 Bash나 Python 코드처럼 취급하라고 경고합니다. SQL은 파일을 읽고 쓰고 네트워크에 접근하며, extension을 로드하고 시스템 리소스를 소모합니다.

위협방어
파일 유출container/VM 격리, OS 권한 최소화
네트워크 유출egress 제한, extension 제한
CPU/메모리 DoStimeout, threads, memory_limit
디스크 고갈temp directory quota
extension 공급망core/community/unsigned policy

Extension 보안

DuckDB extension은 DuckDB parent process와 같은 권한으로 실행됩니다. 기본값은 core/community signed extension을 허용하고, core-only 환경이라면 allow_community_extensions = false로 낮춥니다. 보안 설정은 process 안에서 다시 느슨하게 되돌릴 수 없도록 lock됩니다.

SET allow_community_extensions = false;

SELECT name, value
FROM duckdb_settings()
WHERE name LIKE 'allow_%extensions%';

unsigned extension은 개발·격리 환경이 아니면 허용하지 않습니다.

Secrets 운영

CREATE SECRET lake_s3 (
  TYPE s3,
  PROVIDER credential_chain,
  SCOPE 's3://company-lake/curated/'
);

secret scope를 좁혀 서로 다른 조직·환경 prefix가 같은 세션에서 섞이지 않게 합니다. persistent secret은 로컬 디스크 보관 위험을 문서화합니다.

운영 runbook

이벤트조치
extension updatestaging job에서 재현성 테스트 후 pin 반영
DuckDB minor upgradestorage format, extension, client package release note 확인
shared mart publishstaging prefix 검증 후 pointer 전환
crashWAL replay 확인, internal error면 process 재시작
권한 사고OS/cloud credential 회수, persistent secret 삭제

참고 자료

  • Concurrency
  • Multiple Python Threads
  • Securing DuckDB
  • Securing Extensions
  • Secrets Manager

관련 문서

보안 Hardening 체크리스트

로컬 노트북, CI 배치, 내부 분석 서비스별 DuckDB 보안·리소스·확장 정책을 표준화합니다.

참고 자료

DuckDB 고급 활용 핸드북의 공식 문서·릴리스 근거 모음

메모리·spill·실패 모드

larger-than-memory, temp directory, OOM, blocking operator, thread 제한을 운영 runbook으로 정리합니다.

보안 Hardening 체크리스트

로컬 노트북, CI 배치, 내부 분석 서비스별 DuckDB 보안·리소스·확장 정책을 표준화합니다.

On this page

동시성 모델Untrusted SQLExtension 보안Secrets 운영운영 runbook참고 자료