본문 바로가기
Django/Django REST framework

Django 코드 품질 향상시키기(with black, isort, flake8, pre-commit, makefile)

by hyun-am 2024. 4. 22.

Django pycharm black 세팅하기

0. black

Black은 Python 코드 포맷터로, 코드를 일관되고 깔끔하게 유지하는 데 사용됩니다. Black은 "The uncompromising code formatter"라는 슬로건을 가지고 있으며, 개발자가 스타일 가이드에 대해 신경 쓸 필요 없이 자동으로 코드를 깔끔하게 정리해 줍니다. Black은 PEP 8-Python의 공식 스타일 가이드를 기반으로 하되, 몇 가지 스타일 선택을 추가로 제공합니다.

Black의 주요 특징:

  • 결정적 포맷팅: 동일한 코드에 대해 항상 같은 결과를 제공합니다.
  • 코드의 가독성 증진: 긴 줄을 적절하게 분할하고, 여러 스타일 요소를 자동으로 조정하여 코드의 가독성을 향상시킵니다.
  • 손쉬운 통합: Git 훅, 편집기 통합 및 기타 개발 도구와 쉽게 통합하여 사용할 수 있습니다.

PEP8 공식 가이드 링크

링크 : https://peps.python.org/pep-0008/

 

PEP 8 – Style Guide for Python Code | peps.python.org

PEP 8 – Style Guide for Python Code Author: Guido van Rossum , Barry Warsaw , Alyssa Coghlan Status: Active Type: Process Created: 05-Jul-2001 Post-History: 05-Jul-2001, 01-Aug-2013 Table of Contents This document gives coding conventions for the Python

peps.python.org

PEP8

PEP 8은 Python Enhancement Proposal의 약자로, Python 코드를 어떻게 작성할지에 대한 스타일 가이드입니다. PEP 8은 Python 코드의 가독성을 높이고, Python 커뮤니티 내에서 일관된 코딩 스타일을 유지하도록 설계되었습니다.

PEP 8의 주요 규칙:

  • 들여쓰기: 공백 4칸을 사용하여 들여쓰기합니다.
  • 줄 길이: 한 줄은 최대 79자까지 사용합니다.
  • 공백 사용: 괄호, 중괄호, 대괄호 안에는 공백을 넣지 않습니다. 콤마, 콜론, 세미콜론 뒤에는 공백을 하나 넣되, 괄호 바로 앞에는 공백을 넣지 않습니다.
  • 주석: 주석은 항상 최신으로 유지하며, 코드와 같은 들여쓰기 수준으로 작성합니다.
  • 이름 규칙: 클래스 이름은 CapWords 방식으로, 함수와 변수 이름은 lowercase_with_underscores 방식으로 작성합니다.

1. black 설치하기

pip install black

2. Preference → tools → File Watcher → + 버튼 → Custom

  • 팁 : 맥에서 커맨드 + , 를 입력하면 settings 가 나오는데 여기서 file watcher를 찾아서도 세팅이 가능합니다.

 

  • 여기서 + 버튼을 누른 후 custom을 선택한 후 black을 추가하겠습니다.
    • 경로/.pyenv/versions/3.11.0/envs/[가상환경]/bin/black
    • 저는 pyenv + virtualenv를 사용해서 경로가 이렇게 되어있습니다.
  • 이제 Arguments, Output paths to refresh, working directory에 다음과 같이 입력 하겠습니다.
    • Arguments : $FilePath$
    • Output paths to refresh : $FilePath$
    • working directory : $ProjectFileDir$

 

 

 

  • 여기서 중요한게 꼭 Auto-save edited files to trigger the watcher를 해제해야합니다.

3. 자동 저장 없애고 수동 저장으로 바꾸기

Preference → Apperance & Behavior → System Setting에서 Auto save에 해당하는 두개를 체크 해제하겠습니다.

 

 

4. 저장 안 된 항목들 * 표시나오게 하기

  • Preference → Editor → General → Editor Tabs에 들어간 후 해당 사항 체크하겠습니다.

 

 

 

5. 마지막으로 save action 설정하기

Preference → Tools → Actions On Save에 들어간 후 File Watcher에 아까 만든 black로 설정하겠습니다.

 

 

설정 한 후 Save(cmd + s)를 누르면 black formatter가 잘 설정된 것을 확인할 수 있다.

파이썬 코드 정리를 위해 isort 사용하기

0. isort

isort는 Python 코드에서 import 문을 자동으로 정렬하고 섹션화하여 코드의 가독성을 높이는 도구입니다. Python 커뮤니티에서 권장하는 스타일 가이드인 PEP8을 준수하여, import 문을 일정한 순서와 구조로 정리해줍니다. 이를 통해 코드의 일관성을 유지하고, 다른 개발자가 코드를 이해하고 관리하기 쉬워집니다.

sort는 기본적으로 import 문을 네 가지 카테고리로 구분합니다:

  1. 표준 라이브러리 (예: os, sys)
  2. 서드 파티 라이브러리 (예: numpy, django)
  3. 로컬/사용자 정의 모듈 (프로젝트 내의 모듈)
  4. 동일 디렉토리 내의 모듈 (현재 모듈과 같은 디렉토리의 모듈)

1. isort 설치하기

pip install isort

2. setup.cfg파일에 적용하기

setup.cfg파일에

  • setup.cfg는 프로젝트 최상단에 위치합니다.
[isort]
profile = black

이런식으로 설정하겠습니다. 이러면 black 포매터와 충돌하지 않도록 보장할 수 있습니다.

3. 사용법

만약 최상단 프로젝트 폴더에서 하위 폴더들 import를 정리하고 싶으면

isort . 

이렇게 넣어서 수정할 수 있습니다.

makefile을 통해 lint를 통해 자동 포맷하고 check를 통해 포맷 검사하기

1. makefile 생성하기

  • makefile은 프로젝트 최상단에 위치합니다.
lint:
	black .
	isort .
	flake8 .

check:
	black . --check
	isort . --check-only
	flake8 .

2. 필요한 라이브러리 설치하기

위에서 black, isort를 설치했지만 flake8은 설치를 안 해서 설치하겠습니다.

pip install flake8

3. lint, check 해보기

먼저 다음과 같은 명령어를 통해 lint를 수정하겠습니다.

make lint

그러면 잘못된 파일이 있으면 자동으로 수정되는 것을 확인할 수 있습니다.

그 후 코드가 잘 정리 되었는지 확인을 위해 check 명령어를 통해 check 하겠습니다.

make check 

만약 lint가 잘못 된 파일이 있을 경우 아래 사진과 같은 경고문을 확인할 수 있습니다.

 

pre-commit을 통해 커밋전에 한번 더 검사하기

1. pre-commit 설치하기

pip install pre-commit
pre-commit install

이런식으로 설치하겠습니다.

2. .pre-commit-config.yaml 설정 파일 생성

이전에 makefile을 통해 검사했던걸 pre-commit에도 비슷하게 설정하겠습니다.

파일은 프로젝트 최상단에 .pre-commit-config.yaml를 만들겠습니다.

repos:
-   repo: <https://github.com/psf/black>
    rev: 24.4.0
    hooks:
    -   id: black
-   repo: <https://github.com/pycqa/flake8>
    rev: 7.0.0
    hooks:
    -   id: flake8
-   repo: <https://github.com/pycqa/isort>
    rev: 5.13.2
    hooks:
    -   id: isort

3. 정상 동작하는지 확인하기

pre-commit run --all-files

를 통해 모든 파일에 대해서 수동으로 실행이 가능합니다.

명령어를 실행하면 다음과 같이 나오는데 그러면 설치가 잘 된것입니다.

 

 

 

이것을 통해 코드를 레포지토리에 커밋하기 전에 일관성 있고, 오류가 없는지 확인할 수 있으며, 코드 리뷰 과정에서 스타일 또는 품질 문제로 시간을 낭비하는 일을 줄일 수 있습니다.

4. 해당 .git 에 적용하기

pre-commit install

해당 명령어를 통해 pre-commit을 등록하겠습니다.

그러면 다음과 같이 완료된 메시지가 나옵니다

pre-commit installed at .git/hooks/pre-commit

'Django > Django REST framework' 카테고리의 다른 글

DRF throttling 사용기  (0) 2023.01.08
15. Throttling  (0) 2022.08.25
Sendbird를 이용한 DRF 채팅서버 구현  (0) 2022.06.24
Django FCM 개발(DRF)  (0) 2022.03.01
DRF 테스트코드 개발 도전기  (0) 2021.12.17

댓글