| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- 데이터 엔지니어
- 데이터직무
- 데이터분석기법
- 데이터리안
- 파이썬
- 파이썬기초
- CareerPivot
- 데이터분석
- 데이터 분석가
- kaggle 프로젝트
- Python
- 일하면서성장하고있습니다
- 데이터엔지니어링시작하기
- 데이터엔지니어
- 데이터리안월간웨비나
- 2026목표
- 데이터엔지니어링배우기
- 데이터리안웨비나
- Growth_Hacking
- 비전공자데이터분석가
- 직무전환
- 데이터사이언티스트
- 2026목표세우기
- ridge 회귀
- 판다스
- 서비스분석기법
- 데이터엔지니어링
- 데이터분석가
- ml 실전 프로젝트
- 파이썬오류
- Today
- Total
데이터 분석가 Damla's blog
파이썬에서 SQL쓰기 위한 DuckDB 뽀개기 본문
데이터 분석하다 보면 이런 고민을 자주 합니다👇
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로 리텐션 분석 해보세요.
생산성과 분석 품질 차이를 바로 느낄 수 있어요.
'파이썬(Python) > Data Engineering' 카테고리의 다른 글
| [Step 3] 스타 스키마로 Data Mart 설계하기 & BI툴 시각화 실습 (0) | 2025.05.07 |
|---|---|
| [Step 2] Data Warehouse 만들기 (0) | 2025.05.07 |
| [Step 1] AWS RDS 생성하고 연동하기 (feat. Python) (0) | 2025.05.04 |
| [Data Engineering]데이터 파이프라인 학습 방법 (0) | 2025.04.26 |