2 minute read

Python 코드 품질 관리: Lint와 Formatter 도구 완벽 가이드

Python 개발에서 코드 품질과 일관된 스타일은 프로젝트 성공의 중요한 요소입니다. 이를 위해 LintFormatter 도구가 필수입니다. 이 글에서는 대표적인 Lint와 Formatter 도구를 소개하고, 프로젝트 규모와 목적에 맞는 추천 조합을 제안합니다.


Lint와 Formatter란?

  • Lint 도구: 코드에서 스타일 위반, 잠재적 버그, 불필요한 코드 등을 감지해 품질을 개선.
  • Formatter 도구: 코드 스타일을 자동으로 정리해 일관성을 보장.

Python Lint 도구

도구 설명 설치 명령
Pylint 가장 유명한 Linter 중 하나로, PEP 8 스타일 가이드와 다양한 규칙을 엄격히 적용. pip install pylint
Flake8 간단하고 빠르며 플러그인을 통해 확장 가능. pip install flake8
Pyright Microsoft에서 개발한 정적 타입 검사 도구로, MyPy보다 빠르고 VSCode와 연계성이 좋음. npm install -g pyright
MyPy Python 타입 힌트를 검사하여 정적 타입 분석을 수행. pip install mypy
Bandit 보안 취약점과 관련된 코드를 분석. pip install bandit
Prospector 여러 Linter(Pylint, Flake8 등)를 통합하여 실행. pip install prospector
Pyflakes 불필요한 코드와 잠재적인 문제를 감지하는 경량 도구. pip install pyflakes
Ruff 빠른 속도를 자랑하는 새로운 Linter로, Flake8 및 기타 Linter의 기능을 통합. pip install ruff

Python Formatter 도구

도구 설명 설치 명령
Black “The uncompromising code formatter”라는 슬로건처럼 PEP 8 스타일을 강제. pip install black
YAPF Google이 만든 Formatter로, 스타일을 설정 파일로 커스터마이징 가능. pip install yapf
Autopep8 PEP 8 스타일을 따르도록 코드 자동 수정. pip install autopep8
Isort import 문을 정렬하고 그룹화. pip install isort
Prettier (Python Plugin) JavaScript로 유명한 Prettier의 Python용 플러그인. npm install -g prettier

Lint와 Formatter 통합 도구

도구 설명 설치 명령
Ruff Linter와 Formatter를 통합하여 빠른 분석과 스타일링 지원. pip install ruff
PyCharm Code Inspections JetBrains IDE에 내장된 Lint 및 Formatter 기능. PyCharm 내장 도구 사용.

프로젝트 상황별 추천 조합

1. 개인 프로젝트

  • Lint: Flake8
  • Formatter: Black

추천 이유

  • 설치와 설정이 간단하며 코드 품질을 빠르게 개선할 수 있습니다.

명령어

pip install flake8 black
flake8 .  # 스타일 및 오류 체크
black .   # 코드 자동 정리

2. 팀 프로젝트

  • Lint: Pylint + MyPy
  • Formatter: Black + Isort

추가 설정: Pre-commit Hook

팀원 간 스타일 통일과 품질 유지를 위해 Pre-commit을 설정하세요.

.pre-commit-config.yaml 예제

repos:
  - repo: https://github.com/pre-commit/mirrors-black
    rev: 23.3.0
    hooks:
      - id: black
  - repo: https://github.com/pre-commit/mirrors-isort
    rev: v5.12.0
    hooks:
      - id: isort
  - repo: https://github.com/pre-commit/mirrors-flake8
    rev: v6.0.0
    hooks:
      - id: flake8
  - repo: https://github.com/pre-commit/mirrors-mypy
    rev: v1.4.0
    hooks:
      - id: mypy

3. 대규모 프로젝트

  • Lint: Prospector + Bandit
  • Formatter: Black + Isort

추가 도구: CI/CD 통합

GitHub Actions를 사용해 Lint와 Formatter를 자동화하세요.

GitHub Actions 예제

name: Lint & Format
on: [push, pull_request]
jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Install dependencies
        run: pip install black flake8 mypy isort bandit
      - name: Run linters
        run: flake8 .
      - name: Run type checks
        run: mypy .
      - name: Format code
        run: black . && isort .

4. 초보자/학습용 프로젝트

  • Lint & Formatter: Ruff

추천 이유

  • 설정이 간단하며 초보자에게 적합합니다.

명령어

pip install ruff
ruff check .  # 스타일 검사
ruff fix .    # 코드 자동 정리

5. 머신러닝/데이터 과학 프로젝트

  • Lint: Flake8 + MyPy
  • Formatter: Black + Isort

추가 도구: nbQA

Jupyter Notebook에서도 Lint와 Formatter를 실행하세요.

pip install nbqa
nbqa black notebook.ipynb
nbqa flake8 notebook.ipynb

6. 최신 도구를 적용하고 싶은 경우

  • Lint & Formatter: Ruff
  • 보안 검사: Bandit

최종 추천

목적 도구 조합
간단하고 효율적으로 Flake8 + Black
강력한 품질 관리 Pylint + Black + MyPy
빠르고 현대적인 도구 Ruff
보안 포함 Bandit + Black

Lint와 Formatter 도구는 프로젝트를 더 깔끔하고 안정적으로 만들어줍니다. 프로젝트의 성격에 맞는 도구를 선택해 효율적인 개발 환경을 구축하세요! 필요하다면 설치/설정에 대해 더 상세히 안내드릴 수 있습니다.ㅎㅎ

Updated: