Python/Django
[Django] pep 8 코드 스타일
K.Seungmin
2024. 12. 23. 18:26
공식 문서를 공부하는 중 Django에서 사용하는 pep 8 코드 스타일에 대해 알아보게 되었습니다.
1. 기본 코드 레이아웃(들여쓰기, 줄 길이 등)
- 들여쓰기
- 공백(스페이스) 4칸을 권장합니다.
- 탭(\t)은 사용하지 않고, 공백을 사용합니다.
- 줄 길이
- 한 줄은 최대 79자를 권장합니다.
- Docstring이나 주석은 최대 72자를 권장합니다.
- 빈 줄
- 함수와 클래스 사이에는 빈 줄을 두어 구분을 명확히 합니다.
- 함수 내부 로직을 의미 단위로 구분할 때도 빈 줄을 적절히 활용합니다.
2. 임포트(Import) 스타일
PEP 8에서는 다음과 같은 임포트 순서를 권장합니다:
- 표준 라이브러리 모듈
- 서드파티(Third-party) 모듈
- Django 자체 모듈
- 현재 프로젝트(어플리케이션) 모듈
Django에서는 크게 다음과 같은 포인트들을 권장합니다:
- 절대 임포트와 상대 임포트를 적절히 사용합니다.
- Django 코드를 작성할 때는 일반적으로 모듈 임포트 시 절대 경로를 사용하는 것을 권장하지만, 어플리케이션 내부 패키지에서 모듈을 가져올 때에는 간단명료한 상대 경로(from . import models)를 쓰기도 합니다.
- 임포트 순서를 정렬(예: isort)해서 가독성을 높입니다.
3. 문자열 사용
PEP 8에서는 문자열 사용 시 큰따옴표(")나 작은따옴표(')를 선택적으로 사용해도 되지만, Django 컨벤션상 아래와 같은 가이드가 있습니다
일반 문자열: 작은따옴표(')를 기본적으로 사용하는 것을 권장합니다
Docstring(문서 문자열): PEP 257을 따르며, 일반적으로 큰따옴표(""")로 감싸는 트리플 쿼트를 사용합니다.
문자열 연결: 한 줄이 너무 길 때, + 대신 괄호 안에서 여러 줄에 걸쳐 문자열을 분리하는 것을 선호합니다.
4. 함수와 클래스 정의
- 함수명, 메서드명
- 소문자와 밑줄(_)을 사용한 스네이크 케이스(snake_case)를 사용합니다
- 클래스명
- 파스칼 케이스(PascalCase)를 사용합니다
- 변수명
- 일반적으로 소문자와 밑줄(_)을 사용하는 스네이크 케이스(snake_case)를 사용합니다.
- 상수(Constant)는 모두 대문자와 밑줄(_)을 사용합니다.
5. Django 코드에서 자주 언급되는 추가 권장 사항
- Model, View, Template 코딩 분리
- Django는 MTV(Model-Template-View) 패턴을 따르므로, PEP 8 스타일을 지키면서도 역할 분리를 명확하게 유지하는 것이 중요합니다.
- 신규 기능 / 변경 사항 테스트
- Django 코어 코드에 기여하는 경우, 새로운 기능 추가나 버그 수정 시에는 반드시 테스트 코드도 함께 작성합니다.
- 일관된 import 순서
- 보통 isort 등을 사용해 자동 정렬을 권장하고, 다음과 같은 블록 순서로 그룹화합니다:
- 표준 라이브러리
- 서드파티 라이브러리
- Django 내부 라이브러리(django.contrib, django.urls 등)
- 프로젝트/앱 내부 라이브러리
- 보통 isort 등을 사용해 자동 정렬을 권장하고, 다음과 같은 블록 순서로 그룹화합니다:
- 장황한 한 줄 import 지양
- 너무 많은 모듈을 한 줄에서 임포트하는 대신, 여러 줄에 걸쳐 나누어 임포트하는 것을 선호합니다.
등등 여러가지 사항들을 공식문서를 참고하여 작성하면 좋을 것같습니다. 세부 사항들이 더 많은데 flake8이나 isort를 사용해서 스타일 검사 도구를 활용할 수 있습니다.