안녕하세요
이번 시간에는 Django MTV(Model-View-Controller) 디자인 패턴에 대해 알아보겠습니다.
1. Django MTV(Model-View-Controller) 디자인 패턴이란?
Django는 MVC (Model-View-Controller) 아키텍처 패턴을 따르는 프레임워크이지만, Django에서는 이를 MTV (Model-Template-View) 아키텍처 패턴으로 변형하여 사용합니다.
MTV 패턴은 Django에서 유연하고 효율적인 웹 애플리케이션 개발을 가능하게 합니다. Model, View, Template의 분리된 구조는 유지보수와 확장성 측면에서 이점이 있습니다. 또한, 각각의 역할에 맞는 구성 요소들은 독립적으로 테스트 가능하므로 코드 품질 향상에도 도움이 됩니다.
그 중 View는 클라이언트로부터 요청을 받아서 응답을 반환하는 로직을 담당합니다. 이 과정에서 View는 Model에서 데이터를 가져오고, Template에서 이를 보여주는 역할을 합니다.
MTV 패턴은 다음과 같은 역할을 합니다.
1. Model
데이터의 저장, 조회 및 수정을 담당합니다. DB와 상호작용합니다.
2. Template
데이터를 표현하는 데 사용됩니다. 즉, HTML, CSS, JavaScript 등을 통해 데이터를 보여줍니다.
3. View
사용자의 요청을 처리하고 데이터를 Model로부터 가져와 Template에 전달합니다. 즉, Model과 Template을 연결하는 역할을 합니다.
2. Django에서 MTV(Model-View-Controller) 패턴 구현하기
(1) 사용자가 웹 브라우저에서 요청(Request)을 보냅니다.
(2) 요청은 URLconf를 통해 View에 전달됩니다.
(3) View는 Model에서 데이터를 가져와 이를 Template에 전달합니다.
(4) Template은 전달받은 데이터를 사용하여 사용자에게 보여줍니다.
(5) Template은 사용자의 요청을 다시 View에 전달합니다.
(6) View는 Template으로부터 전달받은 데이터를 Model에 저장하고, 응답(Response)을 반환합니다.
(7) 응답은 웹 브라우저로 전송되어 사용자에게 보여집니다.
3. Django에서 View를 만들기
# views.py
from django.shortcuts import render
def index(request):
return render(request, 'index.html', {})
위 코드는 django.shortcuts 패키지에서 제공하는 render() 함수를 사용하여, index.html 템플릿 파일을 렌더링하고 이를 HttpResponse 객체로 반환하는 post() 함수를 정의합니다.
1. render() 함수
render() 함수는 Django에서 제공하는 기본 템플릿 엔진을 사용하여, HTML 템플릿을 렌더링합니다. render() 함수의 첫 번째 인자는 request 객체를 받습니다. 이 객체는 클라이언트가 요청한 정보를 포함하고 있습니다. 두 번째 인자는 템플릿 파일의 경로입니다. 세 번째 인자는 템플릿 파일에 전달할 데이터입니다. 이 데이터는 딕셔너리 형태로 전달됩니다.
위 코드에서는 index.html 템플릿 파일을 렌더링하고, 빈 딕셔너리 {}를 전달했습니다. 따라서, index.html 파일에서는 전달받은 데이터를 사용할 수 없습니다. index.html 파일은 현재 서버에 저장된 정적 파일(static files)과 함께 클라이언트에게 반환됩니다.
2. views.py 파일 URLconf 매핑
이 함수가 작동하려면, post() 함수가 포함된 views.py 파일이 해당 Django 프로젝트의 URLconf 파일(urls.py)에서 매핑되어야 합니다. 즉, urls.py에서 post() 함수를 참조하는 URL 패턴이 정의되어야 합니다.
4. Django에서 Urls 만들기
# urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
위 코드는 Django 프로젝트의 URLconf 파일(urls.py)에서, 루트 경로에 대한 URL 패턴을 정의하고, 이를 views.py 파일에서 정의한 index() 함수와 연결합니다.
1. path() 함수
path() 함수는 URL 패턴을 정의하는 함수입니다. 첫 번째 인자는 패턴 문자열이며, 이 예시에서는 루트 경로 '/'을 의미합니다. 두 번째 인자는 루트 경로에 대한 요청이 들어왔을 때 실행될 함수이며, 이 예시에서는 views.py 파일에서 정의한 index() 함수입니다. 세 번째 인자는 URL 패턴에 대한 이름을 지정하는데, 이는 reverse() 함수 등에서 URL 패턴을 찾을 때 사용됩니다.
즉, 위 코드는 루트 경로('/')에 대한 요청이 들어오면 views.py 파일의 index() 함수를 실행하고, 이를 'index'라는 이름으로 URL 패턴에 등록한다는 의미입니다. 따라서, 클라이언트가 루트 경로('/')에 접속하면 index() 함수에서 정의한 뷰(View)를 보여주게 됩니다.
5. Django에서 템플릿 만들기
1. 템플릿 확장하기
[Django] Django에서 템플릿 확장의 개념과 템플릿 확장 적용하는 방법 실습하기 (tistory.com)
<!-- index.html -->
{% extends 'base.html' %}
{% block content %}
<h2>Django MTV 실습하기</h2>
{% endblock %}
index.html를 만드는데 다음과 같이 템플릿 확장의 개념이 들어간 모습입니다.
6. 서버 실행하기
python manage.py runserver
이렇게 Django에서 서버를 실행시켜 동작시킬 수 있습니다.
서버를 실행시키면 MTV 패턴에 따라 index.html이 사용자에게 반환되는 모습을 확인할 수 있습니다.
이번 시간에는 Django에서 MTV 디자인 패턴에 대해서 알아보고 간단한 실습을 진행했습니다.
감사합니다.
'Framework > Django' 카테고리의 다른 글
[Django] Django에서 GET, POST 방식에 대해 알아보고 간단한 실습하기 (0) | 2021.01.30 |
---|---|
[Django] Bootstrap4에 대해 알아보고 Django에 Bootstrap4 부트스트랩 적용하기 (0) | 2021.01.30 |
[Django] 웹 프레임워크 Django의 동작원리와 라우팅에 대해 알아보기 (0) | 2021.01.30 |
[Django] Django 관리자 기능에 대해 알아보고 관리자 페이지 실습하기 (0) | 2021.01.30 |
[Django] Django에서 Model에 대해 알아보고 Model 생성 실습하기 (0) | 2021.01.30 |
클라우드, 개발, 자격증, 취업 정보 등 IT 정보 공간
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!