Django의 MTV(Model-Template-View) 패턴 이해하기
1. MTV 패턴이란?
Django는 웹 애플리케이션을 개발할 때 MTV (Model-Template-View) 패턴을 사용합니다. 이는 전통적인 MVC (Model-View-Controller) 패턴과 유사하지만, Django만의 방식으로 구현된 아키텍처입니다.
MTV 패턴에서 각 요소의 역할은 다음과 같습니다:
- Model: 데이터베이스와 상호작용하는 역할을 합니다.
- Template: 사용자에게 보여줄 화면을 정의하는 역할을 합니다.
- View: 모델에서 데이터를 가져와 템플릿과 연결하는 역할을 합니다.
즉, Django의 MTV 패턴에서는 View가 컨트롤러 역할을 하며, 사용자 요청을 처리하고 데이터를 조작한 후 적절한 응답을 반환합니다.
2. MTV 패턴의 구성 요소
2.1 Model (모델)
Model은 데이터베이스의 구조를 정의하고 데이터를 저장 및 관리하는 역할을 합니다. Django에서는 ORM(Object-Relational Mapping)을 활용하여 Python 코드로 데이터베이스를 조작할 수 있습니다.
Model 예제
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
위 코드는 Post
라는 블로그 글 모델을 정의한 것입니다.
title
: 글 제목 (최대 200자)content
: 글 내용created_at
: 글이 생성된 시간 (자동 저장)
2.2 Template (템플릿)
Template은 HTML과 Django 템플릿 언어(DTL, Django Template Language)를 사용하여 데이터를 시각적으로 표시하는 역할을 합니다.
Template 예제 (templates/post_list.html
)
<!DOCTYPE html>
<html>
<head>
<title>블로그 글 목록</title>
</head>
<body>
<h1>블로그 글 목록</h1>
<ul>
{% for post in posts %}
<li>
<h2>{{ post.title }}</h2>
<p>{{ post.content }}</p>
<small>작성일: {{ post.created_at }}</small>
</li>
{% endfor %}
</ul>
</body>
</html>
위 코드는 posts
라는 변수를 받아 블로그 글 목록을 출력하는 템플릿입니다.
2.3 View (뷰)
View는 Model에서 데이터를 가져와 Template에 전달하는 역할을 합니다. Django의 View는 함수형 뷰와 클래스 기반 뷰로 나뉘지만, 여기서는 함수형 뷰를 예제로 설명하겠습니다.
View 예제 (views.py
)
from django.shortcuts import render
from .models import Post
def post_list(request):
posts = Post.objects.all()
return render(request, 'post_list.html', {'posts': posts})
위 post_list
뷰 함수는:
Post
모델에서 모든 블로그 글을 가져옵니다.post_list.html
템플릿을 렌더링하며posts
데이터를 전달합니다.
3. MTV 패턴의 동작 과정
MTV 패턴이 어떻게 동작하는지 정리해 보겠습니다.
- 사용자가 특정 URL(예:
/posts/
)에 접속합니다. - Django의 URL 라우터(
urls.py
)가 해당 URL을 적절한 View 함수와 연결합니다. - View에서 Model을 이용하여 데이터베이스에서 데이터를 가져옵니다.
- View가 데이터를 Template에 전달합니다.
- Template이 최종적으로 HTML을 생성하여 사용자의 브라우저에 응답합니다.
URL 설정 (urls.py
)
from django.urls import path
from .views import post_list
urlpatterns = [
path('posts/', post_list, name='post_list'),
]
위 코드는 posts/
URL 요청이 post_list
뷰 함수와 연결되도록 설정합니다.
4. MTV 패턴과 MVC 패턴의 차이
MTV 패턴은 기존의 MVC 패턴과 개념적으로 유사하지만, 용어에서 차이가 있습니다.
MVC 패턴 | MTV 패턴 (Django) | 역할 |
---|---|---|
Model | Model | 데이터베이스 관리 |
View | Template | 사용자 인터페이스 |
Controller | View | 요청을 처리하고 응답을 생성 |
즉, Django에서는 View가 Controller 역할을 수행한다고 볼 수 있습니다.
5. MTV 패턴의 장점
- 구조화된 아키텍처: Model, Template, View를 분리하여 유지보수가 용이합니다.
- 재사용 가능성: Model과 Template을 재사용하여 일관된 UI와 데이터를 유지할 수 있습니다.
- 보안 강화: Django의 ORM을 사용하면 SQL Injection과 같은 보안 문제를 예방할 수 있습니다.
6. 결론
Django의 MTV 패턴은 Model, Template, View를 분리하여 웹 애플리케이션을 효율적으로 개발할 수 있도록 도와줍니다. 이번 포스팅에서는 MTV 패턴의 개념과 함께 간단한 블로그 애플리케이션을 예제로 살펴보았습니다.
'Python Django' 카테고리의 다른 글
Django의 View와 HttpResponse 기본 사용법 (0) | 2025.02.25 |
---|---|
Django의 URL 라우팅 (urls.py 설정) (0) | 2025.02.24 |
Django 기본 폴더 구조 및 역할 (0) | 2025.02.22 |
Django 프로젝트와 앱 개념 이해 (0) | 2025.02.21 |
Django 설치 및 가상 환경 설정 (pip install django) (0) | 2025.02.20 |