일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 기초강의
- 웹개발
- 도커 컴포즈
- docker
- 장고 기초 강의
- ADP
- Python
- 개발자
- 파이썬
- airflow
- 프로그래밍
- 도커
- 파이썬 장고
- 장고 튜토리얼
- 예제프로젝트
- 인공지능
- 쇼핑몰예제
- 개발언어
- 개발자취업
- flask
- C언어
- mlops
- 에어플로우 기초강의
- c
- c++
- 파이썬강의
- cpp
- Django
- 장고
- 플라스크
- Today
- Total
TITEDIOS 편한 코딩
[Django] 프로젝트 구조 - 장고 기본 요소들에 대한 이해 본문
목차
- Django 프로젝트란?
- Django 프로젝트의 기본 구조
2.1. 프로젝트 루트 디렉토리
2.2. 앱(App) 디렉토리 - 프로젝트 구조 파일 설명
3.1. manage.py
3.2. settings.py
3.3 urls.py
3.4. wsgi.py와 asgi.py
3.5. __init__.py
3.6. 앱의 파일들 (models.py, views.py, admin.py 등) - 프로젝트와 앱의 관계
- 프로젝트 구조 커스터마이징
- 결론
1. Django 프로젝트란?
Django는 파이썬 기반의 웹 프레임워크로, 하나의 프로젝트 안에서 여러 개의 웹 애플리케이션을 관리할 수 있습니다. 각 애플리케이션은 독립적인 기능을 수행하며, 이 애플리케이션들을 관리하기 위해 프로젝트 구조가 매우 중요합니다. 이번 포스팅에서는 Django 프로젝트의 기본 디렉토리 구조와 파일들의 역할을 설명하겠습니다.
2. Django 프로젝트의 기본 구조
Django 프로젝트를 시작할 때 기본적으로 생성되는 디렉토리 구조는 다음과 같습니다. 예시로 myproject라는 프로젝트를 만들면 아래와 같은 구조가 생성됩니다.
2.1 프로젝트 루트 디렉토리
최상위 디렉토리는 Django 프로젝트의 루트로, manage.py 파일과 함께 프로젝트 폴더 및 앱 디렉토리를 포함합니다. 이 디렉토리에서 Django 명령어를 실행할 수 있습니다.
2.2 앱(App) 디렉토리
각각의 앱은 Django 프로젝트에서 별도의 기능을 담당하는 독립적인 모듈입니다. Django에서는 하나의 프로젝트 안에 여러 개의 앱을 생성할 수 있으며, 각 앱은 일반적으로 모델, 뷰, 템플릿 등을 포함하여 특정 기능을 제공합니다.
3. 프로젝트 구조 파일 설명
3.1 manage.py
manage.py는 Django 프로젝트의 관리를 돕는 스크립트입니다. 이 파일을 통해 서버 실행, 데이터베이스 마이그레이션, 앱 생성 등 다양한 명령을 실행할 수 있습니다.
예시 명령어:
python manage.py runserver # 개발 서버 실행
python manage.py migrate # 데이터베이스 마이그레이션
python manage.py startapp myapp # 새로운 앱 생성
3.2 settings.py
settings.py는 프로젝트의 모든 설정을 관리하는 파일입니다. 데이터베이스 설정, 타임존, 언어, 설치된 앱 목록 등 다양한 설정을 정의합니다.
주요 설정 항목:
- INSTALLED_APPS: 설치된 앱 리스트
- DATABASES: 데이터베이스 설정
- TEMPLATES: 템플릿 설정
- STATIC_URL, MEDIA_URL: 정적 파일 및 미디어 파일 설정
3.3 urls.py
urls.py는 URL 경로와 해당 뷰를 매핑하는 역할을 합니다. 사용자가 특정 URL로 접속했을 때 어떤 뷰가 호출될지 정의합니다. 일반적으로 프로젝트 전체의 urls.py는 각 앱의 urls.py 파일을 include() 함수를 통해 포함시킵니다.
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('myapp/', include('myapp.urls')),
]
3.4 wsgi.py와 asgi.py
- wsgi.py: Django 프로젝트가 WSGI(Web Server Gateway Interface) 서버와 연결될 때 사용됩니다. 이는 Django의 기본 배포 서버 인터페이스입니다.
- asgi.py: Django 3.0 이후부터 지원하는 ASGI(Asynchronous Server Gateway Interface) 설정 파일입니다. 비동기 처리를 지원하는 서버와 연결할 때 사용됩니다.
3.5 __init__.py
__init__.py 파일은 해당 디렉토리를 파이썬 패키지로 인식하게 만드는 역할을 합니다. 비어있는 파일이지만, Django가 프로젝트와 앱의 경로를 올바르게 인식하는 데 필요합니다.
3.6 앱의 파일들
각각의 앱 디렉토리 내에 생성되는 파일들은 앱의 주요 기능을 정의합니다.
models.py
데이터베이스 테이블을 정의하는 곳입니다. Django의 ORM(Object-Relational Mapping)을 통해 데이터베이스와 상호작용할 수 있습니다.
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=100)
price = models.DecimalField(max_digits=10, decimal_places=2)
views.py
클라이언트 요청에 대한 로직을 처리하는 곳입니다. 요청을 받아서 데이터베이스와 상호작용한 뒤, HTML 템플릿을 반환하거나 JSON 응답을 보냅니다.
from django.shortcuts import render
from .models import Product
def product_list(request):
products = Product.objects.all()
return render(request, 'product_list.html', {'products': products})
admin.py
Django의 관리자 페이지에 모델을 등록하는 파일입니다. 이를 통해 관리자 인터페이스에서 데이터를 관리할 수 있습니다.
from django.contrib import admin
from .models import Product
admin.site.register(Product)
migrations/ 디렉토리
데이터베이스의 스키마 변경 사항을 추적하는 파일이 저장되는 곳입니다.
4. 프로젝트와 앱의 관계
Django 프로젝트는 하나의 큰 컨테이너로, 여러 개의 앱을 포함할 수 있습니다. 각 앱은 독립적으로 동작하며, 서로 다른 기능을 담당하지만, 하나의 프로젝트 안에서 유기적으로 연결됩니다. 예를 들어, 블로그 프로젝트 안에는 blog, users, comments와 같은 여러 앱이 있을 수 있습니다. 각각의 앱은 독립적으로 개발될 수 있지만, 프로젝트 내에서 상호작용할 수 있습니다.
5. 프로젝트 구조 커스터마이징
기본적으로 Django는 권장되는 프로젝트 구조를 따르지만, 프로젝트 규모와 복잡도에 따라 구조를 확장하거나 수정할 수 있습니다. 예를 들어, 템플릿이나 정적 파일을 전역 디렉토리로 분리할 수도 있고, 여러 앱 간의 공통 로직을 위한 공유 모듈을 만들 수도 있습니다. 프로젝트 뼈대가 완성된 후에는 templates, static, logs 등 필요한 디렉토리를 추가하여 개발 및 운영의 편의성을 도모할 수 있습니다.
예시: 공통 모듈 디렉토리 추가
myproject/
common/
utils.py # 공통 유틸리티 함수
결론
Django 프로젝트의 구조는 개발의 효율성과 유지 보수성을 높이기 위해 체계적으로 구성되어 있습니다. 프로젝트의 디렉토리와 파일들이 어떤 역할을 하는지 이해하면 더 나은 설계와 개발이 가능해집니다. 이번 포스팅을 통해 Django 프로젝트의 기본 구조와 각 파일의 역할을 파악하고, 더 나은 프로젝트를 설계할 수 있기를 바랍니다.
도움이 되셨다면 공감 부탁드리겠습니다. 여러분의 공감이 정말 큰 힘이 됩니다.
감사합니다!
'Django' 카테고리의 다른 글
[Django] DB와 관리자 페이지 - 투표 앱 만들기(Django tutorial) (4) | 2024.10.29 |
---|---|
[Django] 시작하기 - 투표 앱 만들기(Django tutorial) (0) | 2024.10.25 |
[Django] MTV 패턴 - Django 아키텍처 및 구조 (1) | 2024.09.12 |
[Django] 웹 개발 첫걸음 - Django 설치하는 방법 (0) | 2024.09.11 |
[Django] 웹 프로그래밍에 대한 이해 - 웹의 동작 원리와 핵심 개념 (2) | 2024.09.10 |