일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 예제프로젝트
- Django
- 도커
- 인공지능
- airflow
- 파이썬
- 개발언어
- 프로그래밍
- flask
- 플라스크
- 기초강의
- 개발자취업
- 도커 컴포즈
- mlops
- ADP
- docker
- C언어
- cpp
- 장고 기초 강의
- Python
- 웹개발
- 파이썬강의
- 개발자
- c++
- c
- 장고 튜토리얼
- 에어플로우 기초강의
- 파이썬 장고
- 쇼핑몰예제
- 장고
- Today
- Total
TITEDIOS 편한 코딩
[Django] MTV 패턴 - Django 아키텍처 및 구조 본문
Django의 핵심 아키텍처는 MTV(Model-Template-View) 패턴으로 구성되어 있습니다. 이 포스팅에서는 Django의 MTV 모델이 무엇인지, 각 구성 요소가 어떻게 작동하는지에 대해 설명하겠습니다.
목차
- MTV 모델이란?
- Model (모델)
- Template (템플릿)
- View (뷰)
- MTV 패턴의 장점
- 결론
1. MTV 모델이란?
MTV(Model-Template-View) 모델은 Django에서 사용하는 디자인 패턴으로, 웹 애플리케이션의 세 가지 주요 구성 요소를 분리하여 개발합니다. 각 구성 요소는 특정한 역할을 담당하며, 이로 인해 코드의 유지보수성과 확장성이 크게 향상됩니다.
MTV 패턴은 전통적인 MVC(Model-View-Controller) 패턴과 유사하지만, Django의 철학에 맞게 약간의 차이가 있습니다.
- Model: 데이터와 데이터베이스 로직을 관리합니다.
- Template: 사용자에게 보여줄 UI를 정의합니다.
- View: 비즈니스 로직을 처리하고, 모델과 템플릿을 연결합니다.
위 그림은 사용자 요청에 반응하는 각 MTV 패턴의 요소가 어떻게 연결되는지 보여주고 있습니다. 웹 클라이언트의 요청을 받고, 장고에서 MTV 패턴에 따라 처리하는 과정을 요약하면 다음과 같습니다.
1) 클라이언트로부터 요청을 받으면 URLconf를 이용하여 URL을 분석합니다.
2) URL 분석 결과를 통해 해당 URL에 대한 처리를 담당할 뷰(View)를 결정합니다.
3) 뷰(view)는 자신의 로직을 실행하면서, 만일 데이터베이스 처리가 필요하면 모델(Model)을 통해 처리하고 그 결과를 반환받습니다.
4) 뷰(view)는 자신의 로직 처리가 끝나면 템플릿(Template)을 사용하여 클라이언트에 전송할 HTML 파일을 생성합니다.
5) 뷰(view)는 최종 결과로 HTML 파일을 클라이언트에게 보내 응답합니다.
2. Model (모델)
모델은 애플리케이션의 데이터 구조를 정의하며, 데이터베이스와의 상호작용을 관리합니다. Django에서 모델은 Python 클래스로 정의되며, 데이터베이스의 테이블에 해당합니다. 각 모델 클래스는 데이터베이스 테이블의 열에 해당하는 필드를 가지고 있습니다.
예를 들어, 블로그 애플리케이션에서 게시물을 나타내는 모델은 다음과 같이 정의될 수 있습니다:
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
- CharField는 문자열 필드를, TextField는 큰 텍스트 필드를 정의합니다.
- DateTimeField는 날짜와 시간을 저장하며, auto_now_add=True 옵션은 객체가 생성될 때 자동으로 현재 시간을 저장합니다.
- str 메서드는 이 객체를 출력할 때 표시할 문자열을 정의합니다.
모델을 정의한 후, makemigrations와 migrate명령어를 사용해 데이터베이스 테이블을 생성할 수 있습니다.
ORM 기법
장고는 ORM 기법을 사용해 데이터베이스를 관리합니다. ORM(Object-Relational Mapping)이란, 객체지향 프로그래밍 언어에서 사용하는 객체(클래스)를 관계형 데이터베이스의 테이블과 매핑해 주는 기술입니다. 쉽게 말해, ORM은 데이터베이스의 데이터를 SQL을 사용하지 않고 객체로 다룰 수 있도록 해주는 도구입니다.
ORM을 사용하면 SQL 쿼리를 직접 작성하지 않고도, 프로그래밍 언어에서 데이터베이스의 데이터를 조회, 삽입, 수정, 삭제할 수 있습니다. ORM은 데이터베이스 테이블을 클래스(class)로, 테이블의 행(row)을 객체(object)로, 열(column)을 객체의 속성(attribute)으로 변환하여 개발자가 더욱 직관적으로 데이터베이스와 상호작용할 수 있게 합니다.
이처럼 ORM을 사용하면 SQL 쿼리를 직접 작성하지 않고도 데이터베이스 작업을 쉽게 할 수 있어, 개발자가 더 높은 생산성과 유지보수성을 갖춘 코드를 작성할 수 있습니다.
3. Template (템플릿)
템플릿은 사용자에게 보이는 웹 페이지의 구조와 디자인을 정의합니다. Django 템플릿 시스템은 HTML을 기본으로 하며, 템플릿 언어를 사용해 동적인 콘텐츠를 삽입할 수 있습니다.
예를 들어, 블로그 게시물을 표시하는 템플릿은 다음과 같을 수 있습니다:
<!DOCTYPE html>
<html>
<head>
<title>{{ post.title }}</title>
</head>
<body>
<h1>{{ post.title }}</h1>
<p>{{ post.content }}</p>
<small>Published on: {{ post.created_at }}</small>
</body>
</html>
위 템플릿에서 {{ post.title }}와 같은 구문은 Django 템플릿 태그로, post 객체의 title 속성 값을 삽입합니다. 템플릿은 뷰에서 전달된 데이터를 사용해 동적으로 렌더링 됩니다. {{ post.title }}와 같은 구문을 템플릿 문법이라고 하며 추후에 다루도록 하겠습니다.
4. View (뷰)
뷰는 애플리케이션의 비즈니스 로직을 담당하며, 클라이언트의 요청을 처리하고 적절한 응답을 반환합니다. Django에서 뷰는 Python 함수나 클래스로 정의되며, HTTP 요청을 받아 모델에서 데이터를 가져와 템플릿에 전달하고, 템플릿을 렌더링 하여 HTML 응답을 반환합니다.
예를 들어, 특정 블로그 게시물을 보여주는 뷰는 다음과 같이 정의할 수 있습니다:
from django.shortcuts import render, get_object_or_404
from .models import Post
def post_detail(request, post_id):
post = get_object_or_404(Post, id=post_id)
return render(request, 'post_detail.html', {'post': post})
- get_object_or_404 함수는 주어진 조건에 맞는 객체를 데이터베이스에서 가져오며, 해당 객체가 없을 경우 404 오류를 반환합니다.
- render 함수는 템플릿을 렌더링 하고, 데이터를 템플릿에 전달한 후 HTTP 응답을 반환합니다.
이 뷰는 클라이언트의 요청을 받아, post_id에 해당하는 게시물을 데이터베이스에서 가져온 후, 이를 post_detail.html 템플릿에 전달하여 렌더링 합니다.
5. MTV 패턴의 장점
MTV 패턴은 Django의 1)구조를 체계적으로 유지하면서 2)코드의 재사용성과 3)유지보수성을 높입니다. 각 요소가 명확한 역할을 가지며, 서로 독립적으로 관리할 수 있기 때문에 복잡한 애플리케이션에서도 코드가 깔끔하게 유지됩니다. 또한, MVC 패턴과의 유사성 덕분에 다른 프레임워크를 사용하던 개발자들도 쉽게 적응할 수 있습니다.
결론
Django의 MTV(Model-Template-View) 모델은 웹 애플리케이션 개발을 효율적으로 관리하고, 코드의 가독성과 유지보수성을 높이는 데 큰 도움이 됩니다. 모델은 데이터와 데이터베이스를 관리하고, 템플릿은 사용자 인터페이스를 담당하며, 뷰는 비즈니스 로직을 처리합니다. 이 세 가지 요소가 결합하여 Django 애플리케이션이 강력하면서도 유연하게 동작할 수 있습니다.
이 포스팅을 통해 Django의 MTV 패턴에 대한 이해가 깊어지길 바랍니다. 실제로 프로젝트를 진행하면서 각 요소를 직접 다뤄보면, MTV 모델의 강력함을 더욱 체감할 수 있을 것입니다.
도움이 되셨다면 공감 부탁드리겠습니다. 여러분의 공감이 정말 큰 힘이 됩니다.
감사합니다!
'Django' 카테고리의 다른 글
[Django] DB와 관리자 페이지 - 투표 앱 만들기(Django tutorial) (4) | 2024.10.29 |
---|---|
[Django] 시작하기 - 투표 앱 만들기(Django tutorial) (0) | 2024.10.25 |
[Django] 프로젝트 구조 - 장고 기본 요소들에 대한 이해 (1) | 2024.09.13 |
[Django] 웹 개발 첫걸음 - Django 설치하는 방법 (0) | 2024.09.11 |
[Django] 웹 프로그래밍에 대한 이해 - 웹의 동작 원리와 핵심 개념 (2) | 2024.09.10 |