TITEDIOS 편한 코딩

[Django] 프로젝트 구조 - 장고 기본 요소들에 대한 이해 본문

Django

[Django] 프로젝트 구조 - 장고 기본 요소들에 대한 이해

TitediosKW 2024. 9. 13. 19:00
반응형

목차

  1. Django 프로젝트란?
  2. Django 프로젝트의 기본 구조
    2.1. 프로젝트 루트 디렉토리
    2.2. 앱(App) 디렉토리
  3. 프로젝트 구조 파일 설명
    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 등)
  4. 프로젝트와 앱의 관계
  5. 프로젝트 구조 커스터마이징
  6. 결론

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 프로젝트의 기본 구조와 각 파일의 역할을 파악하고, 더 나은 프로젝트를 설계할 수 있기를 바랍니다.

 

도움이 되셨다면 공감 부탁드리겠습니다. 여러분의 공감이 정말 큰 힘이 됩니다.


감사합니다!

반응형