데이터 분석가 Damla's blog

파이썬에서 SQL쓰기 위한 DuckDB 뽀개기 본문

파이썬(Python)/Data Engineering

파이썬에서 SQL쓰기 위한 DuckDB 뽀개기

DA Damla 2025. 10. 28. 22:10

데이터 분석하다 보면 이런 고민을 자주 합니다👇

CSV/Pandas로 충분히 할 수 있을 것 같은데…
SQL이 더 편할 때가 많네?
서버형 DB(Postgre/MySQL)를 깔기엔 너무 무거운데…

이럴 때 DuckDB가 딱 들어맞습니다!
최근 데이터 분석가들 사이에서 빠르게 확산 중인 도구이고,
특히 리텐션 분석·세그먼트 분석·코호트 분석을 많이 할수록 진가를 체감하게 됩니다.

오늘은 분석 실무자가 바로 이해할 수 있는 방식으로
DuckDB를 처음부터 끝까지 정리해드릴게요 ✅


1. DuckDB가 무엇인가?

DuckDB는 인메모리 기반 OLAP(분석용) SQL 데이터베이스 엔진입니다.

쉽게 말하면,

SQLite는 서버 없이 트랜잭션(OLTP)에 강한 DB
DuckDB는 서버 없이 분석(OLAP)에 강한 DB

즉, 무거운 데이터웨어하우스 대신
노트북 환경에서 빠르게 SQL 기반 분석을 가능하게 하는 도구!

  • 설치 한 줄 → 바로 분석 가능
  • CSV, Parquet, Pandas를 SQL로 직접 조회
  • 별도 서버 설치 ❌

데이터 분석자에게 최적화된 DB입니다.


2. 왜? 언제 주로 사용되는 라이브러리인가?

파이썬에서 Pandas만으로도 분석이 가능합니다.

하지만 DuckDB를 사용하면 이런 장점이 있어요!

문제 상황 DuckDB의 장점
데이터가 크면 Pandas 느림 벡터화·쿼리 최적화로 훨씬 빠름
복잡한 집계·조인이 안 예쁨 SQL 한 문장으로 끝 👍
CSV/Parquet 여러 개 결합 귀찮음 파일 직접 SQL 조회
분석 로직을 표준화하고 싶음 SQL 기반 → 팀 공유 쉬움

⏱️ 특히 리텐션/세션/퍼널 분석처럼
날짜계산 + 그룹핑 + 조인이 많은 작업에 DuckDB는 최적입니다.


3. 어떤 작업까지 가능한가?

기능 설명
SQL 집계/조인 코호트·리텐션 한방에 처리
윈도우 함수 Rolling 리텐션 계산
파일 직접 쿼리 S3/로컬 CSV·Parquet 바로 쿼리
Pandas ↔ SQL 상호 연결 .register() & .df()
ETL/파이프라인 작업 중간 집계 테이블 저장
분석 결과 재활용 BI/백엔드 SQL로 확장

데이터 시각화나 모델링은 다시 Pandas로 받으면 되니까

SQL + Pandas 하이브리드가 최강 조합 


4. DuckDB SQL은 MySQL? PostgreSQL?

둘 다 아닙니다.
DuckDB는 ANSI SQL 표준 기반으로 만들어졌지만,
보다 PostgreSQL과 가깝습니다.

기능 PostgreSQL DuckDB
Window 함수
CTE(WITH)
FILTER 문법
MySQL 특정 문법

MySQL 경험자: 약간 낯설 수 있음
PostgreSQL 경험자: 거의 바로 사용 가능


5. connect()는 왜 필요한가? 등록한 데이터는 어디 저장됨?

con = duckdb.connect()

connect() 는 분석 세션을 여는 개념입니다.

그리고

con.register("raw", df)

이렇게 하면 Pandas DataFrame이
DuckDB 세션 안에서 임시 테이블처럼 사용됩니다.

➡ 노트북 종료하면 사라짐(임시 저장)
➡ 영구 저장하고 싶다면 DB 파일로 연결

con = duckdb.connect("mydb.duckdb")

즉,

메모리 기반 빠른 분석도 가능하고,
필요하면 파일 기반 DB로도 사용 가능 ✅


6. DuckDB 외 대안 라이브러리는?

도구 장점 단점
SQLite 서버 없어도 DB 구축 분석 기능은 약함
PostgreSQL 강력한 분석 기능 서버/설치 필요
BigQuery/Redshift 대규모 분석 비용 + 네트워크 필요
PandasSQL Pandas에서 SQL 흉내 동작/성능 한계

DuckDB는 가볍고 빠르고 SQL 강력 → 중간지대 포지션 차지 ✅


7. DuckDB는 파이썬에서 SQL만 쓰기 위한 도구인가?

절대 그렇지 않습니다.

✔ 파이썬 없이도 R·Node.js·CLI·C++에서 실행 가능
✔ ETL/데이터 레이크 연동 가능
✔ DB 파일 생성 가능
✔ Parquet 엔진처럼 동작 가능

DuckDB는 “파이썬용 SQL 라이브러리”가 아니라
분석에 특화된 로컬 SQL 엔진입니다.


8. (자세히 보기) Pandas도 있는데 왜 SQL을 굳이 써야할까?

좋은 질문입니다! 🔍

비교 Pandas DuckDB(SQL)
가독성 복잡 분석 구현이 어려움 의도 중심 → 코드 짧고 명확
성능 메모리 의존, 느릴 수 있음 파일 직접 쿼리+옵티마이저로 빠름
협업 코드 해석 난이도 ↑ SQL은 조직 공용 언어
확장성 서버 DB 적용 어려움 쉽게 확장(같은 SQL 재사용)

특히 리텐션/퍼널 분석은
개념을 설명하는 언어가 이미 SQL입니다.

예:

SELECT cohort_month, month_diff, COUNT(*)
FROM ...

➡ 몇 줄로 비즈니스 인사이트 직결 👍

데이터 분석 로직의 표준화 + 생산성 + 성능 = SQL
그리고 그걸 가장 쉽게 실행 = DuckDB


✅ 결론

DuckDB는 ‘로컬에서 날아다니는 분석 전용 DB’
Pandas와 함께 쓰면 가장 강력한 분석 환경 완성 ✅

  • SQL로 분석 로직을 명확하게 표현
  • 서버 없이 고성능 실행
  • 파일 기반 데이터도 바로 조회
  • 리텐션/코호트 분석에 특히 강함

데이터 분석가라면,
한 번 DuckDB로 리텐션 분석 해보세요.
생산성과 분석 품질 차이를 바로 느낄 수 있어요.