Python to AI

MVT(Model-View-Template) design pattern에 기반을 둔 Django의 architecture

최 수빈 2024. 11. 15. 19:04

 

MVT(Model-View-Template)

 

Django의 핵심 구조

Django에서 사용하는 아키텍처 패턴, 웹 애플리케이션의 기본 구조를 정의

 

 

*구성 요소

 

모델(Model)

데이터베이스 구조와 데이터 처리 로직을 정의

데이터베이스 테이블을 표현, 각 테이블의 컬럼은 모델의 필드를 나타냄

 

데이터를 저장, 조회, 수정, 삭제하는 작업 수행

 

Djangosms ORM(Object-Relational Mapping)을 제공, SQL을 직접 작성하지 않고도 Python코드로 데이터베이스 작업을 수행할 수 있게 함

 

뷰(View)

비즈니스 로직과 데이터 처리를 담당

사용자 요청에 따라 어떤 데이터를 보여줄지 결정

Django의 뷰는 URL과 연결되어 사용자의 요청을 처리, 필요한 데이터를 모델에서 가져와 템플릿에 전달

 

뷰는 사용자 요청에 대한 응답으로 HTML, JSON, XML등 다양한 형식의 데이터를 반환할 수 있음

 

템플릿(Template)

사용자에게 보여질 화면을 정의하는 부분, 주로 HTML파일로 구성됨

템플릿은 뷰에서 전달받은 데이터를 표시

템플릿 언어를 사용해 동적 콘텐츠를 렌더링할 수 있음

 

Django의 템플릿 언어를 사용하면 조건문, 반복문, 변수 출력 등을 통해 복잡한 HTML을 간단히 작성할 수 있다.

 

 

 

 

*MVT패턴의 동작 흐름

 

URL을 요청 -> 뷰(View) 연결 및 호출 -> 데이터 조회 및 처리 -> 템플릿 생성 -> HTML응답 반환

 

 

USER ↔  Django                  Model

                     ↕                 ↙↗           

    URL  ↔   View 

                                  ↖↘

                                                         Template

 

 

사용자가 URL을 요청 (예 :사용자가 웹 브라우저엣 /articles/ URL 요청)

URL이 Django의 URL 컨피그(URL conf)에 의해 처리(이 URL이 article_list 뷰와 연결되어 있으면, Django는 article_list뷰를 호출)

뷰(View)는 요청을 처리하고 필요한 데이터를 모델(Model)을 통해 가져옴(Article 모델에서 모든 기사 조회)

뷰(View)는 가져온 데이터를 템플릿(Template)에 전달

템플릿은 데이터를 사용해 HTML을 생성

생성된 HTML이 사용자에게 응답으로 반환됨

 

 

 

*Django에서 MVT패턴의 장점

 

 

명확한 역할 분담

모델, 뷰, 템플릿의 역할이 명확하게 분리되어 있어 코드의 유지보수, 확장이 용이

데이터베이스의 상호작용, 비즈니스 로직, 사용자 인터페이스가 각각 독립적으로 관리

 

재사용과 확장성

각 구성 요소를 독립적으로 재사용하고 확장할 수 있음

동일한 모델을 여러 뷰에서 사용할 수 있으며, 템플릿을 수정하지 않고도 데이터를 변경할 수 있음

 

테스트 용이성

각 구성 요소를 개별적으로 테스트할 수 있어 버그를 쉽게 찾아내고 수정할 수 있음

모델과 뷰는 독립적으로 테스트할 수 있으며, 템플릿도 다양한 데이터로 테스트할 수 있음

 

 

 

 

#모델 예시
from django.db import models

class Article(models.Model): #Article class : Django모델 - 데이터베이스의 articles 테이블 나타냄
    title = models.CharField(max_length=100) #제목 필드
    content = models.TextField() #내용 필드
    created_at = models.DateTimeField(auto_now_add=True) #작성 시간 필드
    
#title, content, created_at 필드는 각각 테이블의 컬럼에 해당
#뷰 예시
from django.shortcuts import render
from .models import Article

def article_list(request):
    articles = Article.objects.all() #모든 기사 조회
    return render(request, 'articles/article_list.html',{'articles':articles})
    
#article_list뷰는 모든 기사 조회, article_list.html템플릿에 전달
#render함수는 템플릿과 데이터를 결합, 최종 HTML응답 생성
<!--템플릿 예시-->
<!--article_list.html-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Article List</title>
</head>
<body>
    <h1>Articles</h1>
    <ul>
        {% for article in articles %}
            <li>{{ article.title }}-{{ article.created_at }}</li>
        {% endfor %}
    </ul>
</body>
</html>

<!--article_list뷰에서 전달된 articles 데이터를 사용해 각 기사의 제목과 작성 시간을 출력-->

 

 

 

MVC VS MVT

 

구성요소 MVC MVT 역할
Model Model Model 데이터베이스와 상호작용. 데이터 구조 정의
View View Template 사용자 인터페이스. 데이터를 시각적으로 표현
Controller Controller View 사용자 요청을 처리하고, 데이터를 가져와 템플릿에 전달

 

Django는 MVC를 변형된 형태인 MVT를 채택.

'Python to AI' 카테고리의 다른 글

Python - Pandas설치 및 Conda, Jupyter Notebook, 가상환경과 kernel  (1) 2024.11.26
Python - Pandas  (4) 2024.11.25
Django  (1) 2024.11.15
Decorator, Context Manager  (0) 2024.11.14
Iterator, Generator  (3) 2024.11.14