안녕하세요. 성조입니다.
이 포스팅은 Django 기반의 프로젝트 구조를 설명하고 있습니다. 또한 장고 폴더 구조에 대해서 작성하고, 정리하는 포스팅입니다.
현업에서는 backend를 Django로 구성하면 frontend는 많은 프로젝트에서 React를 활용하기 때문에 더욱 다양한 프로젝트 구조가 있을 수 있습니다.
언제든지 피드백은 환영입니다.
1-1. 모든 앱이 하나의 프로젝트에 있는 기본적인 폴더 구조
project_name/
├── manage.py
└── project_name/
├── __init__.py
├── settings.py
├── urls.py
├── asgi.py
└── wsgi.py
├── app_name/
│ ├── templates/
│ │ ├── base.html
│ │ ├── home.html
│ │ └── ...
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── models.py
│ ├── tests.py
│ ├── views.py
│ └── migrations/
│ └── __init__.py
└── static/
├── css/
├── js/
├── images/
└── ...
- project_name/ 폴더: Django 프로젝트의 루트 폴더이다.
- manage.py: Django 관리 도구이다. 프로젝트를 관리하기 위한 다양한 명령어를 실행할 수 있다.
- project_name/ 폴더: Django 프로젝트를 구성하는 핵심 파일이 있는 폴더이다.
- __init__.py: Python 패키지로 인식하기 위한 파일이다.
- settings.py: Django 프로젝트의 설정 파일이다. 데이터베이스, 템플릿, 정적 파일 등의 설정을 담고 있다.
- urls.py: Django 프로젝트의 URL 패턴을 정의하는 파일이다.
- asgi.py: ASGI(Asynchronous Server Gateway Interface) 서버 진입점이다.
- wsgi.py: WSGI(Web Server Gateway Interface) 서버 진입점이다.
- app_name/ 폴더: Django 애플리케이션의 폴더이다.
- __init__.py: Python 패키지로 인식하기 위한 파일이다.
- admin.py: Django Admin 사이트에서 사용할 모델 등록 파일이다.
- apps.py: 앱 설정 파일이다. 앱에 대한 설정을 수정할 때 사용한다.
- models.py: 애플리케이션의 데이터 모델을 정의하는 파일이다.
- tests.py: 테스트 케이스를 작성하는 파일이다.
- views.py: 애플리케이션의 뷰를 정의하는 파일이다.
- migrations/ 폴더: 데이터베이스 스키마 변경 이력을 관리하는 폴더이다.
- templates 폴더 : html 들을 가지고 있는 폴더이다.
1-2. Django와 React를 하나의 프로젝트에서 운용하는 경우의 폴더 구조이다.
project_name/
├── manage.py
├── project_name/
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ ├── asgi.py
│ └── wsgi.py
└── app_name/
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── models.py
│ ├── tests.py
│ ├── views.py
│ └── migrations/
│ └── __init__.py
└── react_app/
├── public/
│ ├── index.html
│ ├── favicon.ico
│ └── ...
└── src/
├── App.js
├── index.js
├── index.css
└── ...
설정 간단 설명
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'react_app' / 'build'],
'APP_DIRS': True,
...
},
...
]
STATICFILES_DIRS = [
BASE_DIR / 'react_app' / 'build' / 'static',
]
DIRS 설정에서 React 디렉토리 내부의 build 디렉토리를 추가해서 Django API를 React 앱에서 호출해서 활용할 수 있도록 지정해 주면 Frontend - React / Backend - Django로 프로젝트를 운용할 수 있게 된다.
2-1. 여러 개의 앱 서비스에서 Django만 활용하는 경우.
project_name/
├── manage.py
└── project_name/
├── __init__.py
├── settings.py
├── urls.py
├── asgi.py
└── wsgi.py
├── apps/
│ ├── app_name1/
│ │ │ ├── templates/
│ │ │ ├── base.html
│ │ │ ├── home.html
│ │ │ └── ...
│ │ ├── __init__.py
│ │ ├── admin.py
│ │ ├── apps.py
│ │ ├── models.py
│ │ ├── tests.py
│ │ ├── views.py
│ │ └── migrations/
│ │ └── __init__.py
│ ├── app_name2/
│ │ │ ├── templates/
│ │ │ ├── base.html
│ │ │ ├── home.html
│ │ │ └── ...
│ │ ├── __init__.py
│ │ ├── admin.py
│ │ ├── apps.py
│ │ ├── models.py
│ │ ├── tests.py
│ │ ├── views.py
│ │ └── migrations/
│ │ └── __init__.py
│ └── ...
└── static/
├── css/
├── js/
├── images/
└── ...
상위에서 static 하나로 운용하고, 각각 앱 서비스에 맞는 html을 위치시켜서 표현하는 방법이다.
2-2. 여러 개의 앱 서비스에서 Django와 React를 활용하는 경우
project_name/
├── manage.py
└── project_name/
├── __init__.py
├── settings.py
├── urls.py
├── asgi.py
└── wsgi.py
├── apps/
│ ├── app_name1
│ │ ├── __init__.py
│ │ ├── admin.py
│ │ ├── apps.py
│ │ ├── models.py
│ │ ├── tests.py
│ │ ├── views.py
│ │ └── migrations/
│ │ └── __init__.py
│ ├── app_name2/
│ │ ├── __init__.py
│ │ ├── admin.py
│ │ ├── apps.py
│ │ ├── models.py
│ │ ├── tests.py
│ │ ├── views.py
│ │ └── migrations/
│ │ └── __init__.py
│ └── ...
├── static/
│ ├── css/
│ ├── js/
│ ├── images/
│ └── ...
├── react_project/
│ ├── node_modules/
│ ├── public/
│ ├── src/
│ ├── package.json
│ ├── package-lock.json
│ └── ...
└── ...
프론트에서도 필요한 static 파일들을 관리하고, 백엔드에서도 필요한 static을 각각 저장하는 구조이다.
일반적으로는 활용되지 않는다.
2-3. 여러 개의 앱 서비스에서 Django를 가져오는 경우.
project_name/
├── manage.py
└── project_name/
├── __init__.py
├── settings.py
├── urls.py
├── asgi.py
└── wsgi.py
└── apps/
├── app_name1/
│ ├── manage.py
│ └── app_name1/
│ │ │ ├── templates/
│ │ │ ├── base.html
│ │ │ ├── home.html
│ │ │ └── ...
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── models.py
│ ├── tests.py
│ ├── views.py
│ ├── migrations/
│ └── static/
│ ├── css/
│ ├── js/
│ ├── images/
│ └── ...
├── app_name2/
│ ├── manage.py
│ └── app_name2/
│ │ ├── templates/
│ │ ├── base.html
│ │ ├── home.html
│ │ └── ...
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── models.py
│ ├── tests.py
│ ├── views.py
│ ├── migrations/
│ └── static/
│ ├── css/
│ ├── js/
│ ├── images/
│ └── ...
└── ...
각각의 앱에 맞춰서 정적 파일들을 저장하는 구조이다.
2-4. 여러 개의 Django API와 React를 활용하는 경우
project_name/
├── manage.py
├── project_name/
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ ├── asgi.py
│ └── wsgi.py
├── apps/
│ ├── app_name1/
│ │ ├── manage.py
│ │ └── app_name1/
│ │ ├── __init__.py
│ │ ├── admin.py
│ │ ├── apps.py
│ │ ├── models.py
│ │ ├── tests.py
│ │ ├── views.py
│ │ ├── migrations/
│ │ └── static/
│ ├── app_name2/
│ │ ├── manage.py
│ │ └── app_name2/
│ │ ├── __init__.py
│ │ ├── admin.py
│ │ ├── apps.py
│ │ ├── models.py
│ │ ├── tests.py
│ │ ├── views.py
│ │ ├── migrations/
│ │ └── static/
│ └── ...
└── frontend/
├── public/
│ ├── index.html
│ ├── favicon.ico
│ └── ...
└── src/
├── index.js
├── App.js
├── components/
│ └── ...
└── ...
살짝은 이상적인 장고(Django) 프로젝트 구조라고 개인적으로는 생각한다.
React를 활용해서 다양한 Django API 앱을 운용하는 폴더 구조이다.
3-1. 다중의 Django 프로젝트인 경우
project_root/
├── project1/
│ ├── manage.py
│ ├── project1/
│ │ ├── __init__.py
│ │ ├── settings.py
│ │ ├── urls.py
│ │ ├── asgi.py
│ │ └── wsgi.py
│ └── app_name1/
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── models.py
│ ├── tests.py
│ ├── views.py
│ └── migrations/
│ └── __init__.py
└── project2/
├── manage.py
├── project2/
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ ├── asgi.py
│ └── wsgi.py
└── app_name2/
├── __init__.py
├── admin.py
├── apps.py
├── models.py
├── tests.py
├── views.py
└── migrations/
└── __init__.py
- project_root: 프로젝트 루트 디렉토리
- project1, project2: Django 프로젝트 디렉토리
- manage.py: Django 프로젝트를 관리하기 위한 스크립트 파일
- project1/project1: Django 프로젝트의 패키지 디렉토리
- project1/project1/settings.py: Django 프로젝트의 설정 파일
- project1/project1/urls.py: Django 프로젝트의 URL 설정 파일
- project1/project1/asgi.py: ASGI 프로토콜을 사용하는 서버를 위한 ASGI 파일
- project1/project1/wsgi.py: WSGI 프로토콜을 사용하는 서버를 위한 WSGI 파일
- project1/app_name1: Django 애플리케이션 디렉토리
- project1/app_name1/models.py: Django 애플리케이션의 데이터 모델을 정의하는 파일
- project1/app_name1/views.py: Django 애플리케이션의 뷰를 정의하는 파일
- project1/app_name1/urls.py: Django 애플리케이션의 URL을 정의하는 파일
- project1/app_name1/admin.py: Django 애플리케이션의 관리자 페이지를 위한 파일
- project1/app_name1/tests.py: Django 애플리케이션의 테스트를 정의하는 파일
- project1/app_name1/migrations: Django 애플리케이션의 데이터베이스 마이그레이션 파일이 저장되는 디렉토리
- project2: 다른 Django 프로젝트도 동일한 구조를 가짐
3-2. 다중의 Django 프로젝트와 React를 운용하는 경우
project_root/
├── project1/
│ ├── manage.py
│ ├── project1/
│ │ ├── __init__.py
│ │ ├── settings.py
│ │ ├── urls.py
│ │ ├── asgi.py
│ │ └── wsgi.py
│ └── app_name1/
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── models.py
│ ├── tests.py
│ ├── views.py
│ └── migrations/
│ └── __init__.py
├── project2/
│ ├── manage.py
│ ├── project2/
│ │ ├── __init__.py
│ │ ├── settings.py
│ │ ├── urls.py
│ │ ├── asgi.py
│ │ └── wsgi.py
│ └── app_name2/
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── models.py
│ ├── tests.py
│ ├── views.py
│ └── migrations/
│ └── __init__.py
└── react_project/
├── node_modules/
├── public/
│ ├── index.html
│ ├── favicon.ico
│ └── ...
├── src/
│ ├── App.js
│ ├── index.js
│ └── ...
├── package.json
├── package-lock.json
├── .gitignore
└── README.md
위 폴더에서 React를 추가해서 활용한 구조이며, react는 하나지만 Django로 구성된 프로젝트가 n개 이상이므로 여러 개의 프로젝트를 한번에 배포하거나 활용할 수 있다. 한번에 다양한 프로젝트를 컨트롤할 수 있으나, 너무 복잡해질 수 있다는 단점이 존재한다.
올바르지 못한 내용이나, 궁금한 내용이 있다면 언제든지 댓글로 지식을 얘기해 주시면 감사드리겠습니다.
더 좋은 포스팅 작성할 수 있도록 잘 하겠습니다.
다음 포스팅 때 뵙겠습니다.
'Python 🐍 > Django' 카테고리의 다른 글
[Django] 스태틱(static) 폴더로 css, js적용하기 (정적인 파일 관리하기) (0) | 2022.10.18 |
---|---|
[Django] 페이지 이동을 위한 URL 분리하기 (2) | 2022.10.07 |
[Django] 관리자 계정 생성하기(admin) (0) | 2022.10.06 |
[Django] 장고(Django) 홈 페이지 만들기(home view) (1) | 2022.10.05 |
[Django] 장고(Django) App 시작하기 (0) | 2022.10.03 |