[파이썬] Django의 모델-뷰-템플릿(MVT) 아키텍처

Django는 웹 개발을 위한 강력하고 유연한 프레임워크입니다. Django는 MVT (Model-View-Template) 아키텍처를 기반으로 한다는 점에서 독특합니다. 이 아키텍처는 애플리케이션의 구조와 로직을 분리하여 개발을 더 효율적이고 유지보수하기 쉽게 만들어줍니다.

모델 (Model)

Django의 모델은 데이터베이스의 테이블과 1:1 대응합니다. 모델은 데이터 저장 및 관리를 담당하며, 필드와 메소드를 포함합니다. 모델은 데이터베이스의 스키마를 정의하고 ORM(Object-Relational Mapping)을 통해 데이터베이스와 상호작용합니다.

아래는 Django에서 모델을 정의하는 예시입니다:

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)

위의 예시에서 Post 모델은 title, content, created_at 필드를 가지고 있습니다. models.Model 클래스를 상속받아 모델을 정의하고, 각 필드는 데이터베이스 테이블의 열을 나타냅니다. 필드 유형은 데이터 유형과 제약 조건을 정의하는데 사용됩니다.

뷰 (View)

Django의 뷰는 템플릿과 모델을 연결하는 중간 계층입니다. 뷰는 클라이언트 요청을 처리하고 모델의 데이터를 템플릿으로 전달하며 최종 응답을 반환합니다. 뷰는 함수 기반 뷰 또는 클래스 기반 뷰로 작성할 수 있습니다.

아래는 Django에서 함수 기반 뷰를 작성하는 예시입니다:

from django.shortcuts import render
from .models import Post

def post_detail(request, id):
    post = Post.objects.get(id=id)
    return render(request, 'post_detail.html', {'post': post})

위의 예시에서 post_detail 함수는 requestid 매개변수를 받습니다. Post 모델에서 해당 id를 가진 게시물을 조회하고, 템플릿으로 해당 게시물을 전달하여 렌더링합니다.

템플릿 (Template)

템플릿은 클라이언트에게 보여지는 사용자 인터페이스를 정의합니다. 템플릿은 HTML과 Django 템플릿 언어(Template Language)의 조합으로 작성되며, 동적으로 데이터를 표시하고 조작하는데 사용됩니다.

아래는 Django에서 템플릿을 작성하는 예시입니다:


<!-- post_detail.html -->
<h1>{{ post.title }}</h1>
<p>{{ post.content }}</p>
<p>Created at: {{ post.created_at }}</p>

위의 예시에서 템플릿은 post.title, post.content, post.created_at 등의 변수를 사용하여 게시물의 제목, 내용, 생성 시간을 표시합니다.

MVT 아키텍처의 작동 방식

Django의 MVT 아키텍처는 다음과 같이 작동합니다:

  1. 클라이언트가 웹 페이지에 접속하면, URLconf를 통해 해당 URL에 맞는 뷰와 연결됩니다.
  2. 뷰는 요청을 처리하고 필요한 모델 데이터를 조회합니다.
  3. 조회된 데이터는 템플릿으로 전달되어 동적으로 렌더링됩니다.
  4. 최종적으로 렌더링된 HTML이 클라이언트에 반환되어 웹 페이지가 표시됩니다.

MVT 아키텍처는 각 계층이 명확하게 분리되어 있어 개발과 유지보수를 용이하게 만들어줍니다. 데이터의 구조와 로직은 모델에, 요청 처리는 뷰에, 그리고 사용자 인터페이스는 템플릿에 담기므로 각각의 역할이 명확히 구분되어 있습니다.

Django의 MVT 아키텍처는 개발자에게 효율적이고 구조적인 웹 개발을 가능하게 해주므로, Django를 사용하여 프로젝트를 개발할 때 이 아키텍처를 잘 이해하고 활용하면 좋습니다.