Django 프로젝트 작업 디렉토리 구조 최적의 관행
Django 프로젝트 작업 디렉토리 구조 최적의 관행
프로젝트 루트 디렉토리
프로젝트 루트 디렉토리는 프로젝트의 모든 주요 구성 요소를 포함하는 중앙 디렉토리입니다. 프로젝트 루트 디렉토리에는 다음과 같은 파일과 디렉토리가 포함되어야 합니다.
manage.py
: Django 관리 스크립트README.md
: 프로젝트에 대한 문서LICENSE
: 프로젝트 라이센스requirements.txt
: 프로젝트에 필요한 Python 패키지 목록venv
또는.venv
: 가상 환경 디렉토리 (선택 사항)
앱 디렉토리
앱 디렉토리는 프로젝트의 기능을 구성하는 별도의 모듈을 포함합니다. 각 앱 디렉토리에는 다음과 같은 파일과 디렉토리가 포함되어야 합니다.
__init__.py
: 앱을 Python 패키지로 등록하는 파일models.py
: 앱의 데이터 모델을 정의하는 파일views.py
: 앱의 뷰 함수를 정의하는 파일urls.py
: 앱의 URL 패턴을 정의하는 파일migrations
디렉토리: 앱의 데이터 마이그레이션을 저장하는 디렉토리tests
디렉토리: 앱의 테스트를 저장하는 디렉토리 (선택 사항)
정적 파일 디렉토리
정적 파일 디렉토리는 CSS, JavaScript 및 이미지와 같은 정적 파일을 포함합니다. 정적 파일 디렉토리는 다음과 같은 서브 디렉토리로 구성될 수 있습니다.
css
: CSS 파일js
: JavaScript 파일images
: 이미지 파일
미디어 파일 디렉토리는 사용자 업로드 파일과 같은 미디어 파일을 포함합니다.
다음과 같은 기타 디렉토리를 프로젝트에 추가할 수 있습니다.
docs
: 문서 및 자습서scripts
: 프로젝트를 자동화하는 데 사용되는 스크립트logs
: 프로젝트 로그
최적의 관행
- 프로젝트 루트 디렉토리를 간결하게 유지하고 불필요한 파일이나 디렉토리를 추가하지 마십시오.
- 각 앱에 대한 별도의 디렉토리를 사용하십시오.
- 정적 파일과 미디어 파일을 위한 별도의 디렉토리를 사용하십시오.
- 의미 있는 이름으로 디렉토리와 파일을 명명하십시오.
- 버전 관리 시스템(예: Git)을 사용하여 코드를 추적하십시오.
추가 참조
한국어 자료
참고:
- 이 문서는 Django 프로젝트 작업 디렉토리 구조에 대한 일반적인 권장 사항을 제공합니다. 프로젝트의 특정 요구 사항에 따라 이러한 권장 사항을 조정해야 할 수도 있습니다.
- 이 문서는 2024년 6월 24일 기준으로 작성되었습니다.
Django 프로젝트 디렉토리 구조 예제
project_root
├── LICENSE
├── README.md
├── manage.py
├── requirements.txt
├── venv
├── myproject
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── apps
│ ├── blog
│ │ ├── __init__.py
│ │ ├── admin.py
│ │ ├── apps.py
│ │ ├── migrations
│ │ │ ├── 0001_initial.py
│ │ │ └── __init__.py
│ │ ├── models.py
│ │ ├── tests.py
│ │ └── views.py
│ └── polls
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── static
│ ├── css
│ │ └── style.css
│ └── js
│ └── script.js
├── media
│ └── images
│ └── logo.png
└── docs
└── tutorial.md
이것은 간단한 예일 뿐이며, 실제 프로젝트는 더 많은 디렉토리와 파일을 포함할 수 있습니다.
설명:
project_root
: 프로젝트의 루트 디렉토리입니다.LICENSE
: 프로젝트 라이센스를 포함하는 파일입니다.README.md
: 프로젝트에 대한 문서를 포함하는 파일입니다.manage.py
: Django 관리 스크립트를 포함하는 파일입니다.myproject
: 프로젝트의 설정 및 주요 코드를 포함하는 디렉토리입니다.settings.py
: 프로젝트의 설정을 정의하는 파일입니다.wsgi.py
: WSGI 호환 웹 서버를 위한 엔트리 포인트를 제공하는 파일입니다.
apps
: 프로젝트의 앱을 포함하는 디렉토리입니다.polls
: 설문 조사 앱을 포함하는 디렉토리입니다. (위의blog
앱과 동일한 구조)
static
: CSS, JavaScript 및 이미지와 같은 정적 파일을 포함하는 디렉토리입니다.css
: CSS 파일을 포함하는 디렉토리입니다.style.css
: 프로젝트의 기본 CSS 파일입니다.
js
: JavaScript 파일을 포함하는 디렉토리입니다.script.js
: 프로젝트의 기본 JavaScript 파일입니다.
media
: 사용자 업로드 파일과 같은 미디어 파일을 포함하는 디렉토리입니다.images
: 이미지 파일을 포함하는 디렉토리입니다.logo.png
: 프로젝트 로고 이미지입니다.
docs
: 문서 및 자습서를 포함하는 디렉토리입니다.tutorial.md
: 프로젝트 사용 방법에 대한 자습서입니다.
Django 프로젝트 디렉토리 구조의 대체 방법
평평한 구조
평평한 구조에서는 모든 앱을 프로젝트 루트 디렉토리에 직접 배치합니다. 이 구조는 다음과 같은 경우 유용할 수 있습니다.
- 작고 단순한 프로젝트를 작업하는 경우
- 앱 간의 긴밀한 결합이 필요한 경우
project_root
├── LICENSE
├── README.md
├── manage.py
├── requirements.txt
├── venv
├── __init__.py
├── settings.py
├── urls.py
├── wsgi.py
├── apps
│ ├── blog
│ │ ├── __init__.py
│ │ ├── admin.py
│ │ ├── apps.py
│ │ ├── migrations
│ │ │ ├── 0001_initial.py
│ │ │ └── __init__.py
│ │ ├── models.py
│ │ ├── tests.py
│ │ └── views.py
│ └── polls
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── static
│ ├── css
│ │ └── style.css
│ └── js
│ └── script.js
├── media
│ └── images
│ └── logo.png
└── docs
└── tutorial.md
기능별 구조
project_root
├── LICENSE
├── README.md
├── manage.py
├── requirements.txt
├── venv
├── features
│ ├── accounts
│ │ ├── __init__.py
│ │ ├── admin.py
│ │ ├── apps.py
│ │ ├── migrations
│ │ │ ├── 0001_initial.py
│ │ │ └── __init__.py
│ │ ├── models.py
│ │ ├── tests.py
│ │ └── views.py
│ └── products
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── static
│ ├── css
│ │ └── style.css
│ └── js
│ └── script.js
├── media
│ └── images
│ └── logo.png
└── docs
└── tutorial.md
Onion 구조
Onion 구조에서는 핵심 기능을 프로젝트 루트 디렉토리에 배치하고, 외부 기능은 별도의 레이어로 배치합니다. 이 구조는 다음과 같은 경우 유용할 수 있습니다.
- 핵심 기능과 외부 기능을 명확하게 구분해야 하는 경우
project_root
├── LICENSE
├── README.md
├── manage.py
├── requirements.txt
├── venv
├── core
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── apps
│ ├── accounts
│ │ ├── __init__.py
│ │ ├── admin.py
│ │ ├── apps.py
│ │ ├── migrations
│ │ │ ├── 0001_initial.py
│ │ │ └── __init__.py
│
django directory-structure organization