[Django] pre-commit 사용법

2021-03-13 hit count image

Django 프로젝트에서 pre-commit을 사용하여 Git에 커밋을 할 때, flake8을 실행하도록 설정해 보자.

개요

이전 블로그 포스트에서 파이썬의 코드 정적 분석기인 flake8을 사용하여 코드 스타일을 통일하고, 잠재적인 버그를 줄이는 방법에 대해서 알아보았습니다.

이번 블로그 포스트에서는 pre-commit을 사용하여 소스코드를 Git에 커밋할 때, 설정한 flake8을 자동으로 실행하는 방법에 대해서 알아봅니다.

pre-commit 설치

pre-commit을 사용하여 flake8을 자동으로 실행하기 위해서는, pre-commit을 설치할 필요가 있습니다. 다음 명령어를 사용하여 pre-commit을 설치합니다.

pip install pre-commit

설치를 완료하였다면, 잊지말고 requirements.txt에 저장해 둡니다.

pip freeze > requirements.txt

이것으로 pre-commit을 설치하는 방법에 대해서 알아보았습니다.

pre-commit 설정

pre-commit을 사용하여 flake8을 자동으로 실행하기 위해서는, pre-commit의 설정 파일을 작성할 필요가 있습니다. 다음 명령어를 사용하여 pre-commit의 설정 파일을 생성합니다.

pre-commit sample-config > .pre-commit-config.yaml

생성된 .pre-commit-config.yaml 파일을 열어보면 다음과 같습니다.

# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
repos:
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v3.2.0
    hooks:
      - id: trailing-whitespace
      - id: end-of-file-fixer
      - id: check-yaml
      - id: check-added-large-files

pre-commit에서 제공하는 샘플 내용을 확인할 수 있습니다.

flake8 설정하기

이제 pre-commit의 설정 파일에 flake8을 설정하는 방법에 대해서 알아봅시다. pre-commit의 설정 파일인 .pre-commit-config.yaml은 기본적으로 다음과 같은 구조를 가지고 있습니다.

repos:
  - repo: repo-url
    rev: version
    hooks:
      - id: hook-id
  • repo: pre-commit이 제공하는 기능의 Repository URL
  • rev: 사용하려는 기능의 버전
  • id: pre-commit이 제공하는 기능

pre-commit은 기본적으로 제공하는 기능들이 있습니다. 다음 링크를 통해 어떤 기능들이 있는지 확인할 수 있습니다.

우리는 이중에서 flake8을 사용할 예정입니다. 그럼 .pre-commit-config.yaml 파일을 열고 다음과 같이 수정합니다.

repos:
  - repo: https://gitlab.com/pycqa/flake8
    rev: 3.8.4
    hooks:
      - id: flake8

pre-commit에서 제공하는 repo의 URL과 버전, flake8 hook을 설정하였습니다. 이 부분은 flake8 공식 문서에서도 확인할 수 있습니다.

이제 이렇게 설정한 파일을 실제 Git의 Commit hook에 등록하기 위해 다음 명령어를 실행합니다.

pre-commit install

이것으로 pre-commit을 사용하여 flake8을 사용할 준비가 되었습니다.

pre-commit 실행

그럼 우리가 설정한 pre-commit이 잘 동작하는지 확인해 봅시다. 다음 명령어를 실행하면 우리가 설정한 .pre-commit-config.yaml 파일을 기준으로 pre-commit을 실행할 수 있습니다.

pre-commit run --all-files

명령어를 실행하면 다음과 같은 결과를 확인할 수 있습니다.

flake8...................................................................Passed

이것으로 우리가 설정한 pre-commit이 잘 동작하는 것을 확인하였습니다. 이제 지금까지 설정한 내용을 Git에 커밋합니다.

git add .
git commit -m 'Add pre-commit for flake8'
git push origin main

완료

이것으로 pre-commit을 사용하여 Git에 커밋을 할 때마다, flake8을 실행하는 방법에 대해서 알아보았습니다. 주의해야할 점은, 새롭게 Repository를 Clone한 경우 잊지말고 pre-commit install을 실행하여 pre-commit의 설정 내용을 Git hooks에 등록해야 합니다.

git clone repository_url
# virtualenv venv
# source venv/bin/activate
pip install -r requirement.txt
pre-commit install

그럼 이제 자동화된 flake8으로 더욱 생산성 높은 개발을 해보시기 바랍니다.

제 블로그가 도움이 되셨나요? 하단의 댓글을 달아주시면 저에게 큰 힘이 됩니다!

책 홍보

저도 블로그를 시작한지 1년만에...책을 다 써봅니다...인생에서 이런 날도 오는군요...타국에서 책 출판도 할 수 있고, 참 좋은 세상입니다.

이번에 쓴 책은 스무디 한 잔 마시며 끝내는 React Native입니다. 다양한 예제를 통해 리액트 네이티브를 공부할 수 있도록 구성해 보았습니다. 또한 설치부터 배포까지 실전에서도 사용할 수 있는 내용들을 담고 있습니다.

아래 링크를 통해 제가 쓴 책을 구매하실 수 있습니다.
많은 분들에게 도움이 되면 좋겠네요.

스무디 한 잔 마시며 끝내는 React Native, 비제이퍼블릭
Posts