본문으로 건너뛰기
Advertisement

Django 구조 — MTV 패턴

Django는 "배터리 포함(batteries included)" 철학의 풀스택 웹 프레임워크입니다. 관리자 패널, ORM, 인증, 폼 처리가 기본 내장되어 있습니다.


Django vs FastAPI

항목DjangoFastAPI
철학풀스택, 배터리 포함마이크로, 모듈식
ORM내장 Django ORM선택 (SQLAlchemy 등)
관리자내장 Admin없음
비동기부분 지원 (Django 4.1+)네이티브 async
자동 문서없음 (drf-spectacular)OpenAPI 자동 생성
학습 곡선가파름완만함
적합한 용도CMS, 어드민, 대형 서비스API 서버, 마이크로서비스

설치 및 프로젝트 생성

pip install django djangorestframework

# 프로젝트 생성
django-admin startproject myproject .

# 앱 생성
python manage.py startapp users
python manage.py startapp products

# 개발 서버
python manage.py runserver

# DB 마이그레이션
python manage.py makemigrations
python manage.py migrate

# 슈퍼유저 생성
python manage.py createsuperuser

MTV 패턴

요청 (Request)


urls.py ← URL 라우팅


View ← 비즈니스 로직 처리

├── Model ← 데이터베이스 접근 (ORM)


Template ← HTML 렌더링 (또는 JSON 직렬화)


응답 (Response)
MVC (일반)     Django MTV
Controller → View
Model → Model
View → Template

프로젝트 구조

myproject/                      ← 루트 디렉토리
├── manage.py
├── myproject/ ← 프로젝트 패키지
│ ├── settings/ ← 설정 분리
│ │ ├── base.py # 공통 설정
│ │ ├── development.py # 개발 환경
│ │ └── production.py # 프로덕션 환경
│ ├── urls.py ← 루트 URL 설정
│ ├── asgi.py
│ └── wsgi.py
├── users/ ← 사용자 앱
│ ├── models.py
│ ├── views.py
│ ├── urls.py
│ ├── serializers.py
│ ├── admin.py
│ └── tests.py
└── products/ ← 상품 앱
├── models.py
├── views.py
└── ...

설정 분리 전략

# myproject/settings/base.py
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent.parent

SECRET_KEY = "change-me-in-production"

INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
# Third-party
"rest_framework",
"corsheaders",
# Local apps
"users",
"products",
]

MIDDLEWARE = [
"corsheaders.middleware.CorsMiddleware",
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
]

ROOT_URLCONF = "myproject.urls"

# 데이터베이스
DATABASES = {
"default": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": BASE_DIR / "db.sqlite3",
}
}

AUTH_USER_MODEL = "users.User" # 커스텀 User 모델

DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
# myproject/settings/development.py
from .base import *

DEBUG = True
ALLOWED_HOSTS = ["localhost", "127.0.0.1"]
CORS_ALLOW_ALL_ORIGINS = True

# 개발용 이메일 (콘솔 출력)
EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
# myproject/settings/production.py
from .base import *
import os

DEBUG = False
SECRET_KEY = os.environ["DJANGO_SECRET_KEY"]
ALLOWED_HOSTS = os.environ["ALLOWED_HOSTS"].split(",")

DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
"NAME": os.environ["DB_NAME"],
"USER": os.environ["DB_USER"],
"PASSWORD": os.environ["DB_PASSWORD"],
"HOST": os.environ["DB_HOST"],
"PORT": "5432",
}
}

# 보안 설정
SECURE_HSTS_SECONDS = 31536000
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
# 환경 선택
export DJANGO_SETTINGS_MODULE=myproject.settings.development
python manage.py runserver

URL 설정

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

urlpatterns = [
path("admin/", admin.site.urls),
path("api/v1/users/", include("users.urls")),
path("api/v1/products/", include("products.urls")),
path("api/v1/auth/", include("users.auth_urls")),
]
# users/urls.py
from django.urls import path
from . import views

urlpatterns = [
path("", views.UserListView.as_view(), name="user-list"),
path("<int:pk>/", views.UserDetailView.as_view(), name="user-detail"),
]

정리

개념설명
MTVModel-Template-View 패턴
startproject프로젝트 뼈대 생성
startapp기능별 앱 생성
settings/ 분리base / development / production
INSTALLED_APPS앱 등록
AUTH_USER_MODEL커스텀 User 모델 지정

Django는 규약(Convention)을 따르면 빠르게 구축할 수 있는 프레임워크입니다.

Advertisement