Python/Django

[Django] pep 8 코드 스타일

K.Seungmin 2024. 12. 23. 18:26

공식 문서를 공부하는 중 Django에서 사용하는 pep 8 코드 스타일에 대해 알아보게 되었습니다.

 

1. 기본 코드 레이아웃(들여쓰기, 줄 길이 등)

  1. 들여쓰기
    • 공백(스페이스) 4칸을 권장합니다.
    • 탭(\t)은 사용하지 않고, 공백을 사용합니다.
  2. 줄 길이
    • 한 줄은 최대 79자를 권장합니다.
    • Docstring이나 주석은 최대 72자를 권장합니다.
  3. 빈 줄
    • 함수와 클래스 사이에는 빈 줄을 두어 구분을 명확히 합니다.
    • 함수 내부 로직을 의미 단위로 구분할 때도 빈 줄을 적절히 활용합니다.

 

2. 임포트(Import) 스타일

PEP 8에서는 다음과 같은 임포트 순서를 권장합니다:

  1. 표준 라이브러리 모듈
  2. 서드파티(Third-party) 모듈
  3. Django 자체 모듈
  4. 현재 프로젝트(어플리케이션) 모듈

Django에서는 크게 다음과 같은 포인트들을 권장합니다:

  • 절대 임포트상대 임포트를 적절히 사용합니다.
    • Django 코드를 작성할 때는 일반적으로 모듈 임포트 시 절대 경로를 사용하는 것을 권장하지만, 어플리케이션 내부 패키지에서 모듈을 가져올 때에는 간단명료한 상대 경로(from . import models)를 쓰기도 합니다.
  • 임포트 순서를 정렬(예: isort)해서 가독성을 높입니다.

 

3. 문자열 사용

PEP 8에서는 문자열 사용 시 큰따옴표(")나 작은따옴표(')를 선택적으로 사용해도 되지만, Django 컨벤션상 아래와 같은 가이드가 있습니다

일반 문자열: 작은따옴표(')를 기본적으로 사용하는 것을 권장합니다

Docstring(문서 문자열): PEP 257을 따르며, 일반적으로 큰따옴표(""")로 감싸는 트리플 쿼트를 사용합니다.

문자열 연결: 한 줄이 너무 길 때, + 대신 괄호 안에서 여러 줄에 걸쳐 문자열을 분리하는 것을 선호합니다.

 

4. 함수와 클래스 정의

  1. 함수명, 메서드명
    • 소문자와 밑줄(_)을 사용한 스네이크 케이스(snake_case)를 사용합니다
  2. 클래스명
    • 파스칼 케이스(PascalCase)를 사용합니다
  3. 변수명
    • 일반적으로 소문자와 밑줄(_)을 사용하는 스네이크 케이스(snake_case)를 사용합니다.
    • 상수(Constant)는 모두 대문자와 밑줄(_)을 사용합니다.

 

5. Django 코드에서 자주 언급되는 추가 권장 사항

  1. Model, View, Template 코딩 분리
    • Django는 MTV(Model-Template-View) 패턴을 따르므로, PEP 8 스타일을 지키면서도 역할 분리를 명확하게 유지하는 것이 중요합니다.
  2. 신규 기능 / 변경 사항 테스트
    • Django 코어 코드에 기여하는 경우, 새로운 기능 추가나 버그 수정 시에는 반드시 테스트 코드도 함께 작성합니다.
  3. 일관된 import 순서
    • 보통 isort 등을 사용해 자동 정렬을 권장하고, 다음과 같은 블록 순서로 그룹화합니다:
      1. 표준 라이브러리
      2. 서드파티 라이브러리
      3. Django 내부 라이브러리(django.contrib, django.urls 등)
      4. 프로젝트/앱 내부 라이브러리
  4. 장황한 한 줄 import 지양
    • 너무 많은 모듈을 한 줄에서 임포트하는 대신, 여러 줄에 걸쳐 나누어 임포트하는 것을 선호합니다.

 

등등 여러가지 사항들을 공식문서를 참고하여 작성하면 좋을 것같습니다. 세부 사항들이 더 많은데 flake8이나 isort를 사용해서 스타일 검사 도구를 활용할 수 있습니다.