본문 바로가기
C.W.K.
Stream
Lesson 02 of 06 · published

Modern Python Data Stack (2026년 8월 기준)

~14 min · foundation, ecosystem, tools

Level 0구경꾼
0 XP0/47 lessons0/11 achievements
0/120 XP to next level120 XP to go0% complete

Apache Arrow 가 본드로 묶는 한 stack

2010년대 Python data stack 은 대부분 Pandas, 가끔 NumPy, 어쩌다 DB 였어. 그 세상은 갔어. Modern stack 은 여러 도구가 함께 뛰는 판이고, 그걸 in-memory 포맷 하나가 묶어 — Apache Arrow. 그래서 등장인물부터 알아 두는 게 도구 선택의 절반이야.

도구버전 (2026.8)역할
Python3.14언어. Free-threaded build 는 3.14 부터 정식 지원이야 (PEP 779). 이제 실험 단계 아냐.
NumPy2.5.1빠른 n차원 배열, Pandas/PyArrow/sklearn/PyTorch 의 수치 토대.
Pandas3.0.5Tabular 데이터: 청소, group, join, reshape. Copy-on-Write 기본, PyArrow-backed string 본격화.
Polars1.43.1Rust 기반 DataFrame. Eager + lazy API. Pandas 가 OOM 하는 데이터도 처리.
PyArrow25.0.0Python 의 Apache Arrow. Pandas / Polars / DuckDB / 스토리지를 copy 없이 잇는 columnar in-memory 포맷.
DuckDB1.5.5In-process SQL 엔진. Parquet/Arrow/CSV/Pandas/Polars 를 직접 query. "분석용 SQLite."
Parquetformat specColumnar binary 파일 포맷. 압축, 통계, column 단위 prune. 분석 at-rest 의 default.
Pandera0.32.1Pandas 그리고 Polars 둘 다 통합되는 schema validation.
Great Expectations1.19.1더 무거운 expectation framework, 팀 간 data contract 에 좋음.
Apache Airflow3.3.0가장 많이 배포된 orchestrator. DAG 안의 task, 그리고 scheduler, DAG processor, API server. Airflow 3 부터 스케줄링이 asset·event 를 안다.
Dagster1.13.16Asset-first orchestrator. 태스크가 아니라 데이터 asset 을 모델링.
Prefect3.8.1Pythonic flows. 가벼움, Airflow 보다 인프라 부담 적음.
dbt1.12.0SQL transformation 을 version-controlled 코드로. 진짜 modeling 이 일어나는 곳. 옆에 Fusion 엔진 위의 dbt v2 가 preview 로 같이 있어.
JupyterLab4.6.2탐색용 인터랙티브 notebook IDE. 배포 타겟 아님.

Arrow 가 본드

Apache Arrow 는 언어에 묶이지 않는 columnar 메모리 포맷이야. 실전에서 왜 중요하냐면 — PyArrow 로 Parquet 을 읽고, 그 Arrow Table 을 Pandas 에 넘기고, DuckDB 로 query 하고, 결과를 Polars 로 보내도 — 어느 단계도 데이터를 복사하지 않아. 전부 같은 메모리 buffer 를 공유해. 단계를 건널 때마다 serialize-deserialize 하던 옛 세상과 갈라지는 지점이 바로 여기야.

Arrow 를 별도 과목처럼 공부할 필요는 없어. 거기 있다는 것만 알면 돼. 그리고 Arrow-aware 라이브러리 (Pandas 3.0, Polars, DuckDB, PyArrow) 를 골라 쓰는 것만으로 stack 전체가 빨라진 것처럼 느껴져.

Code

한 snippet 으로 stack 전체 — Parquet → Arrow → DuckDB → Pandas, copy 없음·python
import pyarrow.parquet as pq
import duckdb

# Parquet 을 Arrow Table 로 — disk 에서 zero-copy
arrow_tbl = pq.read_table('orders.parquet')
print(f'Loaded {arrow_tbl.num_rows:,} rows, {arrow_tbl.num_columns} cols')

# 그 Arrow Table 을 DuckDB 로 SQL — 역시 zero-copy
result = duckdb.sql(
    '''
    SELECT date_trunc('month', order_date) AS month,
           SUM(amount_usd) AS revenue
    FROM arrow_tbl
    WHERE country = 'KR'
    GROUP BY 1
    ORDER BY 1
    '''
).to_df()                # 결과만 Pandas DataFrame 으로

print(result.head())

External links

Exercise

새 Python REPL 에서 pandas, pyarrow, duckdb 를 설치해. 작은 Pandas DataFrame 을 만들고 df.to_parquet('demo.parquet') 로 저장해. 그다음 duckdb.sql('SELECT * FROM "demo.parquet" LIMIT 5').to_df() 를 실행해 봐. 방금 DB 서버 하나 안 띄우고 파일에 SQL 을 날린 거야. 그 감각, 기억해 둬.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.