참고 사이트
django test
@extend_schema
미준수 시 재작성 요청 )Base Branch 는 Develop으로 설정@extend_schema 데코레이터를 활용하여 해당 API 에 대한 develop 브랜치로부터 분기하여 Feature 브랜치를 생성한 후 다른 API에 대한 작업을 수행Trouble Shooting 문서 작성 습관화git config --local commit.template ./.github/commit_template.txt.env 추가하기├── .github/ # 깃허브 설정 파일 ( 커밋템플릿, 이슈템플릿, pr 템플릿, CI / CD 등 )
│ ├── COMMIT_TEMPLATE/ # 하위에 커밋 템플릿을 정의
│ ├── ISSUE_TEMPLATE/ # 하위에 이슈템플릿을 정의
│ └── workflows/ # 하위에 CI / CD 스크립트를 정의
│ ├── checks.yml/ # develop 또는 main 브랜치에 Push 또는 PR Merge 시 데이터 베이스 연결 확인, 코드 포매팅 체크, 테스트 통과 여부를 검사하는 스크립트
│ ├── dev_deploy.yml/ # develop 브랜치에 Push시 개발 서버에 배포 자동화를 구현한 스크립트
│ └── prod_deploy.yml/ # develop 브랜치에 Push시 개발 서버에 배포 자동화를 구현한 스크립트
├── config/
│ ├── __init__.py
│ ├── settings/
│ │ ├── base.py # 프로젝트 전역 공통 설정 파일
│ │ ├── dev.py # 개발 서버 프로젝트 전역 설정 파일
│ │ ├── local.py # 로컬 환경 프로젝트 전역 설정 파일
│ │ └── prod.py # 프로덕션 환경 프로젝트 전역 설정 파일
│ ├── asgi.py
│ ├── urls.py
│ └── wsgi.py
├── apps/ # 앱 디렉토리 (앱별로 디렉토리를 나눔)
│ ├── core/ # 공통 앱 (공통으로 사용되는 utils, base 모델, commands 정의)
│ │ ├── commands/ # 장고 커맨드 등록 폴더
│ │ ├── utils/ # 프로젝트 전역에서 공통으로 사용되는 유틸 함수를 정의하는 폴더
│ │ ├── tests/ # core 내에 정의된 util 메서드 혹은 클래스에 대한 테스트들을 구현하는 폴더
│ │ └── models.py # 모든 앱에서 공통으로 사용되는 base 모델 정의 (ex. TimeStampModel)
│ ├── app_name1/
│ │ ├── migrations/ # 마이그레이션 파일
│ │ ├── services/ # 앱에서 사용되는 서비스 로직을 구현하는 폴더 / 서비스 로직
│ │ ├── tests/ # 앱에서 사용되는 테스트들을 구현하는 폴더
│ │ ├── models/ # 앱에서 사용되는 모델들을 정의하는 폴더
│ │ ├── urls/ # 앱 전용 URL 라우팅을 정의하는 폴더
│ │ ├── serializers/ # 시리얼 라이저 모음 폴더
│ │ ├── views/ # CBV, FBV 를 구현하는 폴더 / HTTP 호출 관련
│ │ └── apps.py # 앱 설정
│ ├── app_name2/ # 다른 앱
│ │ ├── migrations/ # 마이그레이션 파일
│ │ ├── services/ # 앱에서 사용되는 서비스 로직을 구현하는 폴더 / 서비스 로직
│ │ ├── tests/ # 앱에서 사용되는 테스트들을 구현하는 폴더
│ │ ├── models/ # 앱에서 사용되는 모델들을 정의하는 폴더
│ │ ├── urls/ # 앱 전용 URL 라우팅을 정의하는 폴더
│ │ ├── serializers/ # 시리얼 라이저 모음 폴더
│ │ ├── views/ # CBV, FBV 를 구현하는 폴더
│ │ └── apps.py # 앱 설정
│ └── ...
├── envs/ # 환경변수 파일들
│ ├── .local.env # 로컬 환경에서 서버 구동 및 테스트 시 필요한 환경변수
│ ├── .dev.env # 개발 서버 환경에서 서버 구동 및 테스트 시 필요한 환경변수
│ └── .prod.env # 배포 환경에서 서버 구동 및 테스트 시 필요한 환경변수
├── resources/ # 초기 설정 파일 및 스크립트, nginx, docker, kubernetes 의 yaml 파일
│ ├── nginx/
│ │ ├── Dockerfile # nginx 이미지 빌드 도커 파일
│ │ └── nginx.local.conf # 로컬 환경에서 테스트 용 nginx 설정 파일
│ │ └── nginx.dev.conf # 개발 서버 환경에서 테스트 용 nginx 설정 파일
│ │ └── nginx.prod.conf # 프로덕션 서버 환경에서 테스트 용 nginx 설정 파일
│ └── scripts/ # 필요한 shell scripts를 모아두는 디렉터리 (test, formatter, create_dummy 등)
│ ├── code_formatting.sh # black, isort 코드 포매팅 실행 스크립트
│ └── test.sh # mypy 타입 검사 수행 및 전체 테스트코드 실행 시 사용되는 스크립트
├── manage.py # Django 실행 파일
├── poetry.lock # poetry 의존성 패키지 설치 정보
├── pyproject.toml # poetry 의존성 패키지 목록 및 설정
├── dockerfile # 도커 이미지 빌드 파일
├── docker-compose.local.yml # 로컬 환경 테스트 용 도커 컨테이너 정의 파일
└── README.md # 프로젝트 소개서
mypy는 정적 타입 검사기
Python 코드에서 타입 힌트를 이용해 오류를 사전에 잡는 도구
사용하는 이유
def add(x: int, y: int) -> int:
return x + y
add("1", "2") # mypy는 여기서 오류 발생 (str 대신 int가 필요)
import 정렬 도구
Python 코드에서 import 구문을 자동으로 정렬해주는 도구
사용하는 이유
- 1. 자동 정렬 전
import sys
import os
from django.conf import settings
import datetime
- 2. 자동 정렬 후
import datetime
import os
import sys
from django.conf import settings
자동 코드 포매터
Python 코드를 PEP8 스타일 가이드에 맞게 자동으로 정리해주는 도구
사용하는 이유
- 1. 정리 전
def hello(name): print("Hello, " + name)
- 2. 정리 후(black 적용)
def hello(name):
print("Hello, " + name)
프로젝트 루트디렉터리/resources/scripts 디렉터리에 위치한 code_formatting.sh 파일을 실행하여 코드 포맷을 일관되게 유지하고,