---
description: 자신이 하려는 작업이 무엇인지 파악하면 MTV 중 어느 부분을 작업해야하는지 명확해진다.
---

# \[Django 4] MTV 패턴

장고는 MVC(Model-View-Controller)를 기반으로 한 프레임워크다. 하지만 장고에서는 같은 개념을 `MTV(Model - Template - View)`라고 부른다.

참고로 MVC패턴은 `데이터`(model), `사용자 인터페이스`(view), `데이터 처리 로직`(controller)**을 구분해 한 요소가 다른 요소들에게 영향을 주지 않도록 설계하는 방식**인데, 장고도 기본적으로 이 방식을 따르며 명칭이 조금 다를 뿐이다.

## 1. Model

모델은 데이터베이스에 저장되는 **데이터**를 의미한다. excel과 같은 표의 형태로 정리하여 데이터베이스에 넣는다고 생각하면 된다. 원래 DB를 다루기 위해서는 SQL이라는 언어를 알아야하지만, 장고는 이 SQL을 몰라도 DB 작업을 가능하게 해주는 ORM을 제공하기 때문에 공부할 내용이 훨씬 적다.

> ORM이란?
>
> **Object-Relational Mapping**의 약자로, SQL이라는 언어 대신 데이터베이스를 쉽게 연결해주는 방법.

## 2. Template

템플릿은 **사용자에게 보여지는 부분**이다. [이전 글](https://velog.io/@hidaehyunlee/Django%EB%A1%9C-Hello-World-%EC%9B%B9%EC%82%AC%EC%9D%B4%ED%8A%B8-%EB%A7%8C%EB%93%A4%EA%B8%B0)에서 'Hello World'를 작성했던 html파일이 이 템플릿을 담당한다. [장고 템플릿 시스템 문법](https://opentutorials.org/module/4034/24665)에 맞게 python문법을 활용하여 작성하면 되므로, **다른 작업들과 화면 디자인 작업을 분리**하여 확장성을 극대화 시킬 수 있다다. 즉, 보여지는 부분을 만드는 사람은 그 부분에만 집중하여 만들 수 있게 도와주는 역할을 한다.

## 3. View

뷰는 웹 요청을 받고, 전달받은 데이터들을 해당 어플리케이션의 로직으로 가공하여, 그 결과를 템플릿에 보내준다. 데이터를 가공하는 처리를 해야한다 싶으면 뷰에서 함수를 작성하면 된다.

## 4. URLconf (URL 설계)

URL은 **view와 template을 이어주는 역할**을 하고, 이 부분을 만들어 주는 작업을 URLconf라고 한다. 장고 1.x 버전에서는 이부분에서 정규표현식을 사용해 복잡했지만, 장고 2.x 버전은 `path()` 함수를 이용해 그 과정을 훨씬 매끄럽게 다듬어서 공부하기 더 쉬워졌다!

## 5. 정리

* 데이터저장 형태를 어떻게할지 설정하겠다. → `Model`
* 유저에게 보여지는 화면을 고치고 싶다. → `Template`
* 데이터를 처리해서 가공하고 싶다. → `View`
* 가공한 데이터를 유저가 보는 화면으로 넘겨주고 싶다. → URLconf

자신이 하려는 작업이 무엇인지 파악하면 어느 부분을 작업해야하는지 명확해진다. MTV 패턴을 사용한 작업의 장점이다.
