Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

서론 및 동기: 파이썬 개발자가 Rust를 배우는 이유

학습 목표: 파이썬 개발자들이 왜 Rust에 열광하는지, 실제 성능 차이는 어느 정도인지(Dropbox, Discord, Pydantic 사례), 그리고 파이썬을 유지할 때와 Rust로 넘어갈 때의 명확한 기준을 배웁니다. 두 언어의 철학적 차이를 이해하고 Rust가 해결하는 파이썬의 고질적인 문제들을 파악합니다.


1. 성능: 분 단위에서 밀리초 단위로

파이썬은 CPU 집약적인 작업에서 느리기로 유명합니다. Rust는 C 수준의 성능을 제공하면서도 현대적인 언어의 편리함을 유지합니다.

# [Python] 1,000만 번 호출 시 약 2초 소요
def fibonacci(n):
    if n <= 1: return n
    a, b = 0, 1
    for _ in range(2, n + 1):
        a, b = b, a + b
    return b
#![allow(unused)]
fn main() {
// [Rust] 동일 작업 시 약 0.07초 소요 (30배 이상 빠름)
fn fibonacci(n: u64) -> u64 {
    if n <= 1 { return n; }
    let (mut a, mut b) = (0, 1);
    for _ in 2..=n {
        let temp = b;
        b = a + b;
        a = temp;
    }
    b
}
}

2. 가비지 컬렉터(GC) 없는 메모리 안전성

파이썬의 참조 횟수 계산(Reference Counting) 방식은 순환 참조나 예측 불가능한 __del__ 호출 타이밍 문제를 안고 있습니다. Rust는 소유권(Ownership) 시스템을 통해 컴파일 타임에 모든 메모리 해제 시점을 결정합니다.


3. 파이썬의 고질적 문제와 Rust의 해법

① 런타임 타입 에러

파이썬의 타입 힌트는 단순한 '권고'일 뿐입니다. Rust는 잘못된 타입이 전달되면 아예 빌드조차 되지 않습니다.

None: 10억 달러짜리 실수

파이썬에서는 어디서나 None이 튀어나와 AttributeError를 일으키곤 합니다. Rust는 Option<T>를 강제하여 값이 없는 경우를 반드시 처리하게 만듭니다.

③ GIL(Global Interpreter Lock)

파이썬의 스레드는 GIL 때문에 진정한 병렬 실행이 불가능합니다. Rust는 GIL이 없으며, 타입 시스템이 데이터 경합(Data Race)을 원천 차단하여 안전하고 빠른 병렬 처리를 보장합니다.

④ 배포의 지옥

venv, pip, 시스템 라이브러리 충돌 등 파이썬 배포는 늘 고통스럽습니다. Rust는 모든 의존성을 포함한 단일 바이너리를 생성하므로 복사만 하면 어디서든 실행됩니다.


4. 언제 Rust를 선택해야 할까?

  • Rust 선택: 압도적 성능이 필요할 때, 메모리 비용을 절감해야 할 때, 단일 바이너리 배포가 중요할 때, 고부하 동시성 처리가 필요할 때.
  • Python 유지: 빠른 프로토타이핑, 데이터 과학/AI 워크플로우(PyTorch, Pandas 등), 단순한 자동화 스크립트.
  • 하이브리드(PyO3): 성능이 중요한 핵심 로직은 Rust로 짜고, 비즈니스 로직과 오케스트레이션은 파이썬으로 구현.

💡 실무 팁: Pydantic V2의 기적

인기 라이브러리인 Pydantic은 핵심 엔진을 Rust(PyO3 활용)로 재작성했습니다. 결과적으로 파이썬 API는 그대로 유지하면서 데이터 검증 속도를 5배에서 50배까지 끌어올렸습니다. 이것이 파이썬 개발자가 Rust를 배워야 하는 가장 현실적인 이유입니다.