Django 아키텍처 이해하기: 초보자를 위한 친절한 가이드

발행: (2025년 12월 13일 오전 03:41 GMT+9)
6 min read
원문: Dev.to

Source: Dev.to

1. Django의 핵심 패턴: MVT != MVC

Laravel, Rails, 그리고 Flask 확장과 같은 대부분의 프레임워크는 고전적인 MVC(Model‑View‑Controller) 디자인 패턴을 따르지만, Django는 MVT(Model‑View‑Template)라는 밀접하게 연관된 접근 방식을 사용합니다.

  • Model – 데이터베이스 구조를 정의하고 데이터 상호작용을 처리합니다.
  • Template – 사용자가 보는 화면(UI 렌더링)을 담당합니다.
  • View – 로직을 처리하고, 요청을 받아 응답을 반환합니다.

Django가 동작하는 간단한 흐름:

User request → URL → View (logic) → Model (data) → Template (display UI) → Browser

이러한 분리는 개발자가 깔끔하고 확장 가능한 코드를 유지하도록 도와주며, 사용자 인터페이스와 관리자 관리 기능을 모두 갖춘 복잡한 애플리케이션에 적합합니다.


2. Django의 다중 폴더 시스템 이해

Django 프로젝트는 두 가지 주요 유형의 폴더로 구성되며, 각각 고유한 목적을 가집니다.

2.1 프로젝트 폴더 구조

다음 명령을 실행하면:

django-admin startproject myproject

Django는 외부 폴더(myproject/)를 프로젝트 루트 또는 작업 공간으로, 내부 폴더(myproject/)를 설정 파일을 담는 패키지로 생성합니다.

myproject/                 # 프로젝트 루트

├── myproject/             # 설정 패키지
│   ├── __init__.py
│   ├── settings.py        # DB, 앱, 미들웨어, 템플릿 등
│   ├── urls.py            # 프로젝트 수준 URL 라우팅
│   ├── wsgi.py / asgi.py  # 서버 게이트웨이 인터페이스

├── manage.py              # CLI 유틸리티 (마이그레이션, runserver 등)
└── db.sqlite3             # 예시 데이터베이스

내부 폴더의 핵심 파일

  • settings.py – 데이터베이스, 설치된 앱, 미들웨어, 정적 파일 등 설정을 한 곳에서 관리합니다.
  • urls.py – 프로젝트 수준 라우팅 테이블; 앱별 URL 패턴을 포함할 수 있습니다.
  • wsgi.py / asgi.py – 웹 서버에 프로젝트를 배포하기 위한 진입점입니다.
  • __init__.py – 폴더를 파이썬 패키지로 인식하게 하여 import를 가능하게 합니다.

외부 폴더는 프로젝트의 몸통(모든 것이 존재하는 곳)이고, 내부 폴더는 (설정)라고 생각하면 됩니다.

2.2 앱 폴더 구조

프로젝트를 만든 뒤, 기능별로 앱을 추가합니다:

python manage.py startapp myapp

Django는 다음과 같은 구조를 생성합니다:

myapp/
├── __init__.py       # 폴더를 파이썬 패키지로 표시
├── admin.py          # 모델을 admin 사이트에 등록
├── apps.py           # 앱 설정
├── models.py         # 이 앱의 데이터베이스 모델
├── views.py          # 이 앱의 로직 / 컨트롤러
├── urls.py           # 앱 전용 라우트(선택 사항)
├── migrations/       # 이 앱의 데이터베이스 마이그레이션
└── templates/        # 이 앱의 선택적 HTML 템플릿

이 구조가 의미하는 바

  • 모듈화 – 각 앱이 자체적으로 독립됩니다.
  • 재사용성 – 하나의 앱을 여러 프로젝트에 플러그인 형태로 삽입할 수 있습니다.
  • 조직화 – 각 앱이 자체 모델, 뷰, 템플릿을 갖습니다.

예를 들어 blog, shop, users와 같은 앱을 동일 프로젝트 안에 둘 수 있습니다.

2.3 프로젝트와 앱이 함께 작동하는 방식

프로젝트(myproject/)는 전역 설정과 라우팅을 담당하고, 각 앱은 자체 모델, 뷰, 템플릿, 로직을 포함합니다.

# myproject/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/', include('blog.urls')),  # 'blog' 앱의 라우트 포함
]

이러한 모듈식 설계는 특히 규모가 큰 프로젝트에서 코드를 깔끔하게 유지하고 확장성을 높여줍니다.

2.4 핵심 정리

  • 관심사의 분리: 프로젝트는 설정 및 전역 라우팅을 담당하고, 각 앱은 특정 기능 집합을 담당합니다.
  • Models는 데이터를 관리하고, views는 비즈니스 로직을, templates는 프레젠테이션을 담당합니다.
  • 프로젝트 + 앱 구조 덕분에 새로운 기능을 추가하려면 새 앱을 만들면 되며, 기존 코드를 건드리지 않아도 되어 유지보수와 확장성이 용이합니다.
Back to Blog

관련 글

더 보기 »

Django: 6.0의 새로운 기능

2025-12-03 !https://adamj.eu/tech/assets/2025-12-03-django-mosaic.webp Django 6.0이 오늘 출시되었습니다 https://www.djangoproject.com/weblog/2025/dec/03/django-60-r...