Python Django

Django의 MTV(Model-Template-View) 패턴 이해하기

PyExplorer 2025. 2. 23. 15:26

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 뷰 함수는:

  1. Post 모델에서 모든 블로그 글을 가져옵니다.
  2. post_list.html 템플릿을 렌더링하며 posts 데이터를 전달합니다.

3. MTV 패턴의 동작 과정

MTV 패턴이 어떻게 동작하는지 정리해 보겠습니다.

  1. 사용자가 특정 URL(예: /posts/)에 접속합니다.
  2. Django의 URL 라우터(urls.py)가 해당 URL을 적절한 View 함수와 연결합니다.
  3. View에서 Model을 이용하여 데이터베이스에서 데이터를 가져옵니다.
  4. View가 데이터를 Template에 전달합니다.
  5. 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 패턴의 장점

  1. 구조화된 아키텍처: Model, Template, View를 분리하여 유지보수가 용이합니다.
  2. 재사용 가능성: Model과 Template을 재사용하여 일관된 UI와 데이터를 유지할 수 있습니다.
  3. 보안 강화: Django의 ORM을 사용하면 SQL Injection과 같은 보안 문제를 예방할 수 있습니다.

6. 결론

Django의 MTV 패턴은 Model, Template, View를 분리하여 웹 애플리케이션을 효율적으로 개발할 수 있도록 도와줍니다. 이번 포스팅에서는 MTV 패턴의 개념과 함께 간단한 블로그 애플리케이션을 예제로 살펴보았습니다.