Git

[Git] 파이썬 프로젝트에 대하여 pre-commit 적용 방법 예시

jimmy_AI 2025. 6. 14. 14:25
반응형

안녕하세요. 이번 시간에는 코드 커밋 이전에 자동으로 포맷팅, 린팅, 문법 검사 등을 수행하면서

일관된 코드 스타일을 유지하고, CI 파이프라인 전단계에서 실수를 잡아낼 수 있도록

pre-commit 프레임워크를 적용하는 방법을 예시를 통해서 간단하게 살펴보도록 하겠습니다.

 

해당 글에서는 파이썬 프로젝트 레포를 기준으로 설명을 진행하겠습니다.

 

 

1. 설정 파일 작성 예시

원하는 커밋 훅 종류를 골라 다음과 같이 레포 내 루트 디렉토리에 .pre-commit-config.yaml

이름의 파일로 작성해줍니다.

fail_fast: false

repos:
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v5.0.0
    hooks:
      - id: trailing-whitespace
      - id: end-of-file-fixer
      - id: check-yaml
      - id: check-added-large-files

  - repo: https://github.com/pycqa/isort
    rev: 5.12.0
    hooks:
      - id: isort
        name: isort (python)
        args:
          - --profile
          - black
          - --filter-files

  - repo: https://github.com/psf/black
    rev: 24.10.0
    hooks:
      - id: black
        args:
          - --line-length=88

  - repo: https://github.com/charliermarsh/ruff-pre-commit
    rev: v0.7.3
    hooks:
      - id: ruff
        args:
          - --fix

 

위의 예제에 다룬 설정의 예시에 대한 설명을 간단히 진행하면 다음과 같습니다.

 

1. fail_fast 옵션

  • false이면 앞의 훅이 실패해도 뒤의 훅을 진행, true이면 앞의 훅에서 실패하면 멈춤

 

2. pre-commit-hooks 내장훅 기능

  • trailing-whitespace: 줄 끝 불필요 공백 제거
  • end-of-file-fixer: 파일 끝에 한 줄 개행 추가
  • check-yaml: YAML 문법 오류 검사
  • check-added-large-files: 스테이지된 큰 파일(기본 500KB 이상) 차단

 

3. isort (import 정리)

  • --profile black: Black 스타일 가이드에 맞춰 import 정렬
  • --filter-files: Git에 스테이지된 파일만 처리

 

4. black (코드 포맷터)

  • 코드 스타일 통일, 위 예제에서는 라인당 88자 제한 예시

 

5. ruff (코드 린터)

  • 위 예제에서는 자동 수정하도록 --fix 옵션 지정

 

원하는 포맷터, 린터 종류들을 위 형식과 유사하게 자유롭게 지정해주시면 됩니다.

 

 

2. pre-commit 적용 방법

위의 예시처럼 yaml 파일 작성이 완료되었다면, 다음 스텝을 통해 세팅 및 적용을 진행하시면 됩니다.

 

1. pre-commit 설치

pip install pre-commit

 

2. git 훅 등록

pre-commit install

 

3. 위의 세팅 이후에는 커밋 전에 일괄 검사 진행

pre-commit run --all-files

 

물론, git commit 시 자동으로 설정했던 단계가 진행되니 참고해주시면 됩니다.

 

이 글이 pre-commit 세팅 과정에 도움이 되셨기를 기원합니다.

잘 봐주셔서 감사드립니다.