C.W.K.
Stream
Lesson 02 of 06 · published

Modern Python Data Stack (2026 4월 기준)

~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 은 multi-tool, polyglot, 그리고 in-memory 포맷 하나로 묶여 있어 — Apache Arrow. 등장 인물 외우는 게 어떤 도구 쓸지 결정의 절반이야.

도구버전 (2026.4)역할
Python3.13언어. Free-threaded build 는 실험 단계지만 들어오는 중.
NumPy2.4.4빠른 n차원 배열, Pandas/PyArrow/sklearn/PyTorch 의 수치 토대.
Pandas3.0.2Tabular 데이터: 청소, group, join, reshape. Copy-on-Write 기본, PyArrow-backed string 본격화.
Polars1.39.3Rust 기반 DataFrame. Eager + lazy API. Pandas 가 OOM 하는 데이터도 처리.
PyArrow23.0.1Python 의 Apache Arrow. Pandas / Polars / DuckDB / 스토리지를 copy 없이 잇는 columnar in-memory 포맷.
DuckDB1.5.2In-process SQL 엔진. Parquet/Arrow/CSV/Pandas/Polars 를 직접 query. "분석용 SQLite."
Parquetformat specColumnar binary 파일 포맷. 압축, 통계, column 단위 prune. 분석 at-rest 의 default.
Pandera0.24+Pandas 그리고 Polars 둘 다 통합되는 schema validation.
Great Expectations1.x더 무거운 expectation framework, 팀 간 data contract 에 좋음.
Apache Airflow2.10가장 많이 배포된 orchestrator. Operator DAG, scheduler, web UI.
Dagster1.10Asset-first orchestrator. 태스크가 아니라 데이터 asset 을 모델링.
Prefect3.xPythonic flows. 가벼움, Airflow 보다 인프라 부담 적음.
dbt1.9SQL transformation 을 version-controlled 코드로. 진짜 modeling 이 일어나는 곳.
JupyterLab4.5+탐색용 인터랙티브 notebook IDE. 배포 타겟 아님.

Arrow 가 본드

Apache Arrow 는 언어 독립적인 columnar 메모리 포맷이야. 실전에서 왜 중요하냐면 — PyArrow 로 Parquet 읽고, 결과 Arrow Table 을 Pandas 로 넘기고, DuckDB 로 query 하고, 결과를 Polars 로 보내도 — 어떤 단계도 데이터 복사 안 해. 다 같은 메모리 buffer 공유해. 이게 modern data 작업과 옛날 serialize-deserialize-everywhere 세상의 차이야.

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 로 query 했어. 그 감각 느껴봐.

Progress

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

댓글 0

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

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