Ruff와 uv로 Python 프로젝트 빌드 시간 90% 단축하기: Rust 기반 툴체인 완전 정복

들어가며

Python 개발자라면 누구나 느린 패키지 설치와 린팅 시간에 불만을 가져본 적이 있을 것입니다. pip install을 실행하고 커피를 마시러 가거나, flake8black이 대규모 코드베이스를 검사하는 동안 멍하니 기다린 경험이 있으신가요?

Rust로 작성된 차세대 Python 도구인 Ruff와 uv가 이런 문제를 근본적으로 해결합니다. 실제로 많은 프로젝트에서 90% 이상의 속도 개선을 경험하고 있으며, 대형 오픈소스 프로젝트들도 빠르게 전환하고 있습니다.

Ruff란? 초고속 Python 린터 & 포매터

핵심 특징

Ruff는 Rust로 작성된 극도로 빠른 Python 린터이자 코드 포매터입니다. Flake8, Black, isort, pyupgrade 등 여러 도구를 하나로 통합하면서도 10~100배 빠른 성능을 자랑합니다.

기존 도구 조합 Ruff 속도 비교
Flake8 + Black + isort Ruff (단일 도구) 10~100배 빠름
수십 초 ~ 수분 1초 이내 평균 95% 시간 단축
여러 설정 파일 필요 pyproject.toml 하나 설정 관리 간소화

실무 활용 예시

1. 설치 및 기본 사용

# Ruff 설치
pip install ruff

# 코드 린팅 (검사)
ruff check .

# 자동 수정 가능한 문제 해결
ruff check --fix .

# 코드 포매팅
ruff format .

2. pyproject.toml 설정

[tool.ruff]
line-length = 88
target-version = "py311"

[tool.ruff.lint]
select = [
    "E",  # pycodestyle errors
    "W",  # pycodestyle warnings
    "F",  # pyflakes
    "I",  # isort
    "B",  # flake8-bugbear
    "C4", # flake8-comprehensions
]
ignore = ["E501"]  # 라인 길이 무시

[tool.ruff.format]
quote-style = "double"
indent-style = "space"

핵심 포인트: Ruff는 700개 이상의 린팅 규칙을 지원하며, 기존 도구들을 완전히 대체할 수 있습니다. CI/CD 파이프라인에서 특히 빛을 발합니다.

uv란? 차세대 Python 패키지 관리자

혁신적인 성능

uv는 Rust로 작성된 극도로 빠른 Python 패키지 설치 도구입니다. pip, pip-tools, poetry를 대체할 수 있으며, 10~100배 빠른 속도를 제공합니다.

작업 pip uv 성능 차이
Django 설치 8.2초 0.3초 27배
requirements.txt 해석 45초 0.8초 56배
가상환경 생성 3초 0.1초 30배

실무 활용 예시

1. 기본 사용법

# uv 설치 (macOS/Linux)
curl -LsSf https://astral.sh/uv/install.sh | sh

# Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

# 패키지 설치 (pip 대체)
uv pip install django fastapi

# requirements.txt 설치
uv pip install -r requirements.txt

# 가상환경 생성 및 활성화
uv venv
source .venv/bin/activate  # Linux/Mac

2. 프로젝트 의존성 관리

# 의존성 잠금 파일 생성 (pip-compile 대체)
uv pip compile pyproject.toml -o requirements.txt

# 개발 의존성 포함
uv pip compile pyproject.toml --extra dev -o requirements-dev.txt

# 동기화 (정확히 명시된 버전만 설치)
uv pip sync requirements.txt

핵심 포인트: uv는 병렬 다운로드, 캐시 최적화, 더 똑똑한 의존성 해석을 통해 압도적인 성능을 달성합니다.

실전 프로젝트 적용 가이드

CI/CD 파이프라인 최적화

GitHub Actions 예시

name: CI

on: [push, pull_request]

jobs:
  lint-and-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install uv
        run: curl -LsSf https://astral.sh/uv/install.sh | sh

      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.11'

      - name: Install dependencies
        run: |
          uv venv
          uv pip install -r requirements.txt

      - name: Lint with Ruff
        run: |
          uv pip install ruff
          ruff check .
          ruff format --check .

      - name: Run tests
        run: pytest

마이그레이션 체크리스트

기존 프로젝트를 Ruff + uv로 전환하기

  1. Ruff 도입
    pip install ruff
    – 기존 린터/포매터 설정을 pyproject.toml로 통합
    ruff check .로 기존 코드 검사
    --fix 옵션으로 자동 수정

  2. uv 도입
    – uv 설치 후 uv pip install 명령어로 전환
    – CI/CD 스크립트 업데이트
    – Docker 이미지에 uv 추가

  3. 성과 측정
    – CI/CD 실행 시간 비교
    – 로컬 개발 생산성 향상 체감

실제 성능 비교

작업 기존 (Black+Flake8+pip) Ruff+uv 개선율
1000개 파일 린팅 45초 2초 95.6%
requirements.txt 설치 120초 8초 93.3%
CI 전체 실행 8분 1분 87.5%

실무 팁: 대규모 모노레포나 마이크로서비스 환경에서 Ruff + uv 조합은 개발자 경험을 혁신적으로 개선합니다. 특히 pre-commit hook으로 Ruff를 사용하면 거의 지연 없이 코드 품질을 유지할 수 있습니다.

마무리

Ruff와 uv는 Python 개발 워크플로우를 근본적으로 개선하는 게임 체인저입니다. 핵심 요약:

  • Ruff: 여러 린팅/포매팅 도구를 하나로 통합, 10~100배 빠른 성능
  • uv: pip보다 10~100배 빠른 패키지 설치, 의존성 관리 개선
  • 실무 효과: CI/CD 시간 90% 단축, 개발 생산성 대폭 향상
  • 적용 난이도: 낮음 – 기존 도구와 거의 동일한 인터페이스

이미 FastAPI, Pydantic, Pandas 등 주요 오픈소스 프로젝트들이 Ruff로 전환했으며, uv도 빠르게 채택되고 있습니다. 지금 바로 도입하여 팀의 개발 속도를 한 단계 끌어올려보세요!

이 글이 도움이 되셨나요? ☕

Buy me a coffee

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다