본문 바로가기
App Programming/Django

[Django] MVT 패턴

by goatlab 2023. 6. 20.
728x90
반응형
SMALL

MVC

 

MVC (Model-View-Controller)는 디자인 패턴 중의 하나로 프로젝트의 구성 요소를 Model (모델), View (뷰), Controller (컨트롤러) 역할로 구분한 개발 방법론이다.

 

MVT

 

 

Model-View-Template 패턴이라고 한다. 장고의 MVT 방식은 자바 웹 프로그래밍의 MVC 방식과 거의 동일한 개념으로 웹 프로그래밍 영역을 3가지 개념으로 나눠서 개발하는 방식이다. 테이블을 정의하는 모델 (Model), 어플리케이션의 제어 흐름 및 처리 로직을 정의하는 뷰 (View), 사용자가 보게 될 화면의 모습을 정의하는 템플릿 (Template)으로 구분해서 개발을 진행한다.

 

MVT 패턴의 처리 과정

 

  • 클라이언트로부터 요청을 받으면 URLconf를 이용하여 URL을 분석한다.
  • URL 분석 결과를 통해 해당 URL에 대한 처리를 담당할 뷰를 결정한다.
  • 뷰는 자신의 로직을 실행하면서 데이터베이스 처리가 필요하면 모델을 통해 처리하고 그 결과를 반환받는다.
  • 뷰는 자신의 로직 처리가 끝나면 템플릿을 사용하여 클라이언트에 전송할 HTML 파일을 생성한다.
  • 뷰는 최종 결과로 HTML 파일을 클라이언트에 보내 응답한다.

 

모델, 뷰, 템플릿 셋 중에서 무엇을 먼저 코딩해야 하는지에 대해 정해진 순서는 없다. MVT 방식에 따르면 화면 설계는 뷰와 템플릿 코딩으로 연결되고, 테이블 설계는 모델 코딩에 반영된다. UI 화면을 먼저 생각하고 로직을 풀어나가는 것이 쉽기 때문에 보통은 템플릿을 먼저 코딩한다. 다만, 클래스형 뷰처럼 뷰의 코딩이 매우 간단한 경우에는 뷰를 먼저 코딩하고 템플릿을 코딩한다. 

 

투표 어플리케이션 만들기

 

실습을 위해 가상 환경에 Django 패키지를 설치한다.

 

# 장고를 가상 환경에 설치
pip install Django

 

장고 설정

 

그 다음, 터미널에서 myproject 프로젝트를 만들고 polls 어플리케이션을 생성한다.

 

# myproject 프로젝트 딕셔너리 생성
$django-admin startproject myproject

# myproject 딕셔너리로 이동 
$cd myproject

# myproject 폴더에 polls 어플리케이션 딕셔너리 생성
$python manage.py startapp polls

 

…/myproject/settings.py에서 호스트 허용과 언어 설정이 가능하다.

 

ALLOWED_HOSTS = [
    'localhost', '127.0.0.1'
]

LANGUAGE_CODE = 'en-us' # "ko-kr"

 

그 다음으로, polls 어플리케이션을 적용하기 위해 다음과 같이 설정한다.

 

INSTALLED_APPS = [
    "polls.apps.PollsConfig",
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
]

 

polls 어플리케이션을 생성했으면 이를 반영하기 위해 migrate가 필요하다. 터미널을 manage.py가 위치한 곳으로 이동하여 다음을 실행한다.

 

python manage.py migrate
728x90
반응형
LIST

'App Programming > Django' 카테고리의 다른 글

[Django] URL  (0) 2023.06.20
[Django] 모델 (Model)  (0) 2023.06.20
[Django] 서버 배포  (0) 2023.04.10
[Django] Reverse for '' not found. '' is not a valid view function or pattern name.  (0) 2023.04.09
[Django] User Logout  (0) 2023.03.09