Python Data Stack 2.0: Pandas와 Pip의 종말? (가이드 2025-2026)

발행: (2026년 2월 17일 오후 10:20 GMT+9)
7 분 소요
원문: Dev.to

Source: Dev.to

Rust(uv, Polars)와 BigQuery 혁명이 데이터 엔지니어링을 어떻게 바꾸었는가.
2025년에 데이터를 다루고 있다면, 기존 도구들이 최신 하드웨어를 따라가지 못한다는 느낌을 받을 것이다. 지난 10년간 사실상의 표준이었던 — Pip으로 설치한 Jupyter Notebook의 Pandas — 은 이제 지속 가능하지 않다. 우리는 로컬 Spark 시대에서 네이티브 성능(Rust) 및 클라우드 서버리스 시대로 전환하고 있다.

이 가이드는 (특히 macOS/Apple Silicon 사용자) 엔지니어와 데이터 과학자를 위한 기술 선언문으로, 메모리와 성능 병목 현상에서 벗어나고자 하는 이들을 위한 것이다.

레거시 스택에서 모던 스택으로 마이그레이션

카테고리구버전 표준 (2020)새 스택 (2025/26)실제 이득
패키지 관리자pip / virtualenv / condauv (Astral) – 설치 속도가 10‑100배 빠르고, 전역 캐시 및 결정론적 충돌 해결
로컬 처리pandas (single‑threaded)polars (Rust‑based) – 지연 실행, 네이티브 멀티스레딩 (M3/M4 모든 코어 사용) 및 효율적인 메모리
로컬 SQL 엔진sqlite / csvduckdb – Parquet/Iceberg 파일에서 벡터화 성능을 갖는 로컬 OLAP
빅데이터 / 클라우드pyspark ou SQL stringsbigframes (BigQuery) – Pandas 구문을 사용해 페타바이트 규모를 처리, 데이터를 로컬로 다운로드하지 않음
노트북Jupyter clássicomarimo – 반응형 노트북, 깨끗한 .py 파일로 저장 (Git‑friendly), 숨겨진 상태 없음
하드웨어Intel x86Apple Silicon (ARM64) – 통합 메모리 (CPU+GPU) 접근 가능, 데이터 복사 없이

uv를 사용한 의존성 관리

Python 의존성 관리는 언제나 악몽(“dependency hell”)이었습니다. Rust로 작성된 uv는 pip, pip‑tools, pipx, poetry, virtualenv를 한 번에 대체합니다.

기존 워크플로우

python -m venv venv
source venv/bin/activate
pip install pandas numpy   # 기다림이 끝이 없어요...
pip freeze > requirements.txt

최신 워크플로우 (uv)

# venv를 생성하고 밀리초 단위로 설치
uv venv
uv add polars duckdb

# 수동으로 활성화할 필요 없이 격리된 스크립트를 실행
uv run analise.py

프로 팁

uv를 사용하면 헤더에 자체 의존성을 선언하는 독립 실행형 스크립트를 만들 수 있습니다. uv는 모든 것을 임시 환경에 다운로드하고 실행한 뒤 정리합니다.

Pandas vs. Polars

Pandas와 Polars의 차이는 아키텍처에 있습니다. Pandas는 NumPy 위에 구축되었으며 (문자열이나 null을 잘 처리하지 못함) 모든 작업을 즉시 실행(eager)하여 RAM에 거대한 복사본을 만들게 됩니다.

Pandas – RAM 무거움 (전형적인 예시)

import pandas as pd

# Lê 10 GB para a RAM (perigo de OOM!)
df = pd.read_csv("vendas_large.csv")

# Cria cópias intermediárias na memória
df_filtrado = df[df['regiao'] == 'Sudeste']
resultado = df_filtrado.groupby('categoria')['total'].sum()

Polars – Lazy & Streaming

import polars as pl

# scan_csv não carrega nada ainda (lazy)
query = (
    pl.scan_csv("vendas_large.csv")
    .filter(pl.col("regiao") == "Sudeste")          # predicate pushdown: filtra no disco
    .group_by("categoria")
    .agg(pl.col("total").sum())
)

# Executa usando streaming (processa datasets maiores que a RAM)
resultado = query.collect(streaming=True)

Polars의 주요 장점

  • Lazy Execution – 필요한 열/행만 읽습니다.
  • Multithreading – 칩의 모든 코어를 사용합니다 (M3/M4/M5).
  • Zero‑Copy – Apache Arrow와 완벽하게 통합됩니다.

빅 데이터 / 클라우드와 bigframes (BigQuery)

데이터가 Mac에서 처리하기에 너무 클 때는 이전에 Spark를 사용하려면 Java/Scala를 배우거나 거대한 SQL 문자열을 작성해야 했습니다. 오늘날 BigQuery DataFrames는 Google의 서버리스 클러스터에서 처리되는 동안 Pandas 문법을 사용할 수 있게 해줍니다.

import bigframes.pandas as bpd

# Conecta a uma tabela de 10 TB (só baixa metadados)
df = bpd.read_gbq("meu-projeto.logs.acessos_2025")

# Parece Pandas, mas roda na nuvem do Google
df_erro = df[df['status_code'] >= 500]   # predicate pushdown automático

# Agregação remota
contagem = df_erro.groupby('hora')['id'].count()

# O resultado só é baixado aqui (e é minúsculo)
print(contagem)

Marimo vs. Jupyter

Jupyter에는 치명적인 문제가 있습니다: 숨겨진 상태. 셀을 순서대로 실행하지 않으면 결과가 달라질 수 있고, .ipynb (JSON) 파일은 버전 관리가 어렵습니다.

왜 Marimo를 선택해야 할까요?

  • 반응형 – 변수를 바꾸면 의존하는 모든 셀이 자동으로 업데이트됩니다 (Excel처럼).
  • 순수 Python – 노트북이 .py 파일로 저장됩니다.
  • Git‑친화적 – 깔끔하고 읽기 쉬운 diff를 제공합니다.

결론

“Modern Data Stack”이 2026년 macOS에서 의미하는 것은 유행을 따르는 것이 아니라 자원 효율성입니다:

  • 컴퓨팅 – Rust로 Apple Silicon을 100 % 활용합니다.
  • 메모리 – Arrow와 Polars를 이용한 제로‑카피.
  • 시간 – uv로 즉시 설치합니다.

Pandas와 Pip를 포기하는 것이 처음엔 두려울 수 있지만, 로컬 노트북에서 수십억 행을 처리할 때 얻는 생산성 향상은 비교할 수 없습니다.

다음 행동: 오늘 uv를 설치하고 다시는 뒤돌아보지 마세요.

curl -LsSf https://astral.sh/uv/install.sh | sh
0 조회
Back to Blog

관련 글

더 보기 »

채용 중인 기업 — 2026년 2월

Dev‑First 기업의 오픈 포지션: Product engineers, Developer advocates, 혹은 Community builders? 새해를 맞아 dev tools 분야에서 새로운 기회를 시작하세요.