파이썬 코드 검사 속도를 100배 이상 끌어올려 개발 흐름을 끊지 않게 하는 도구
Ruff는 파이썬 코드의 문법 오류와 스타일 문제를 찾아내고, 코드 형식까지 맞춰주는 도구입니다. 기존에 여러 개를 따로 설치하던 검사기와 포맷터를 하나로 합쳐, 더 빠르고 단순한 개발 환경을 만듭니다.
여러 도구를 하나로 합친 이유
파이썬 개발에서는 코드 품질을 위해 Flake8, Black, isort 등 여러 도구를 함께 쓰는 것이 일반적이었습니다. 하지만 도구마다 실행 시간이 쌓여 개발자가 코드를 수정할 때마다 기다리는 시간이 길어졌습니다. Ruff는 이 도구들이 하는 일을 하나의 프로그램으로 통합했습니다. Rust 언어로 작성되어 기존 도구보다 10~100배 빠르게 동작합니다. 덕분에 로컬 개발 환경에서 코드를 저장할 때마다 검사를 돌리거나, 커밋 전에 자동으로 실행하는 것도 부담이 없습니다.
900개 이상의 규칙과 자동 수정
Ruff는 900개 이상의 내장 규칙을 제공합니다.
- 통합 검사 Flake8, isort, Black, pydocstyle, pyupgrade, autoflake의 기능을 하나의 명령어로 처리합니다.
- 자동 수정 사용하지 않는 import 제거 등 특정 오류를 자동으로 수정해 줍니다.
- 설정 관리 pyproject.toml, ruff.toml, .ruff.toml 파일을 통해 설정을 관리하며, 모노레포 환경에서도 계층적 설정을 지원합니다.
설치와 실행 방법
Ruff는 PyPI에서 ruff 이름으로 배포되며, pip, pipx, uv 등 다양한 패키지 매니저로 설치할 수 있습니다. uvx ruff@0.17.4 check 명령으로 현재 디렉토리의 모든 파일을 검사하고, uvx ruff@0.17.4 format 명령으로 형식을 맞춰줍니다. VS Code 등 편집기 확장 프로그램으로도 사용할 수 있으며, GitHub Action을 통해 CI/CD 파이프라인에 쉽게 통합할 수 있습니다. pre-commit 훅으로도 설정하여 커밋 전에 자동으로 검사를 실행할 수 있습니다.
실제 프로젝트에서의 검증
Ruff는 Apache Airflow, FastAPI, Pandas, SciPy 등 주요 오픈소스 프로젝트에서 활발히 사용되고 있습니다. FastAPI의 크리에이터는 속도가 너무 빨라 코드가 실제로 검사되는지 확인하기 위해 의도적으로 버그를 넣기도 했다고 말합니다. Bokeh 공동 창시자는 Flake8보다 150~200배 빠르며, 전체 저장소 스캔에 0.2초가 걸린다고 전했습니다. 이러한 사례들은 Ruff가 대규모 프로젝트에서도 실용적인 속도를 제공함을 보여줍니다.
도입 전 확인 사항
Ruff는 MIT 라이선스로 배포되며, Python 3.15까지 호환됩니다. 기존에 사용하던 Flake8 플러그인이나 Black의 특정 설정이 Ruff의 기본 동작과 다를 수 있으므로, 프로젝트에 적용하기 전에 기존 설정과 Ruff의 기본 규칙을 비교해 보아야 합니다. 특히 스타일 관련 규칙은 포맷터와 중복되지 않도록 기본 설정에서 제외되어 있으므로, 원하는 스타일을 유지하려면 설정 파일을 직접 조정해야 할 수 있습니다. 활성 개발이 진행 중이므로, 최신 버전의 변경 사항을 주기적으로 확인하는 것이 좋습니다.