[Django/Web] MVC 디자인 패턴, Django의 MTV 패턴

이수진·2022년 3월 13일
0

이번 세오스 백엔드 운영진을 맡게 되면서, 장고 스터디도 함께 진행하게 되었는데
스터디를 준비하면서 공부하면서 정리도 할 겸 벨로그에 기록하려고 합니다:)


1. MVC 디자인 패턴

Django는 MVC(Model View Controller)를 기반으로 한 MTV 패턴이 적용된 웹 프레임워크입니다.
이 MVC패턴에 대해서 알아보려고 합니다.

디자인 패턴에 대한 이해는 프로그램을 어떻게 짜야 되는가에 대한 방법론도 이 안에 있기 때문에 개발할 때에 큰 도움이 될 것 같습니다.

MVC패턴은 소프트웨어 개발의 디자인 패턴 중 하나로, Model, View, Controller의 약자로 애플리케이션을 세 가지 역할로 구분한 개발 방법론입니다.
애플리케이션에는 모델, 뷰, 컨트롤러 이 세 가지 주체로 구분을 해서 구현을 하면 훨씬 더 효율적으로 애플리케이션을 만들 수 있다는 발생에서 시작했습니다.
(-> 사용자가 보는 페이지, 데이터 처리 그리고 이 2가지를 중간에서 제어하는 컨트롤러 이 3가지로 구성되는 하나의 어플레케이션을 만들면 각각 맡은 바에만 집중할 수 있게 되어서 유지보수성, 확장성, 유연성 등이 증가하고 중복 코딩이라는 문제점 또한 사라집니다.)

아래의 그림처럼 사용자가 Controller를 조작하면 Controller는 Model을 통해서 데이터를 가져오고, 그 정보를 바탕으로 시각적인 표현을 담당하는 View를 제어해서 사용자에게 전달하게 됩니다.

자세히 살펴보면 다음과 같습니다.

사용자는 Controller를 이용해서 제어를 하게 되고,

  • Controller는 사용자의 명령을 파악해 해당 작업을 내부적으로 수행하게 됩니다.
    이 때에 Controller는 크게 Model과 View라고 하는 2개의 주체를 사용하는데,
  • Model은 데이터를 핸들링하는 역할을 하는 것이고,
  • View는 사용자에게 시각적으로 보여주는 것을 핸들링하는 역할을 합니다.
    -> 그래서 Controller는 필요에 따라서 사용자가 요구하는 것에 맞게 Model과 View를 적당하게 사용해서 최종적으로 이 시스템이 가지고 있는 데이터를 사용자에게 View를 통해서 보여주게 되는 역할을 합니다.

위의 개념을 웹에 적용하면 다음과 같습니다.

  1. 사용자가 웹사이트에 접속합니다. (Uses)
  2. Controller는 사용자가 요청한 웹사이트를 서비스 하기 위해서 모델을 호출합니다. (Manipulates)
  3. 모델은 데이터베이스나 파일과 같은 데이터 소스를 제어한 후에 그 결과를 리턴합니다.
  4. Controller는 Model이 리턴한 결과를 View에 반영합니다. (Updates)
  5. 데이터가 반영된 View는 사용자에게 보여집니다. (Sees)

2. Django의 MTV 패턴

Django는 MTV 패턴(Model Template View)이 적용된 웹 프레임워크입니다.
Django의 경우, MVC에서 얘기하는 Controller가 View에 해당하고 MVC의 View가 Template에 해당한다고 보면 됩니다.
(MTV 패턴은 명칭이 조금 다를 뿐이지 기본적인 골격은 MVC 패턴과 동일합니다.)

  • Model(모델)

MVC 패턴의 모델에 대응되며 DB에 저장되는 데이터를 의미합니다. 모델은 클래스로 정의되며 하나의 클래스가 하나의 DB Table입니다.
원래 DB를 조작하기 위해선 SQL을 다룰 줄 알아야 하지만 장고는 ORM(Object Relational Mapping)기능을 지원하기 때문에 파이썬 코드로 DB를 조작할 수 있습니다.

  • Template(템플릿)

MVC 패턴의 뷰에 대응되며 유저에게 보여지는 화면을 의미합니다. 장고는 뷰에서 로직을 처리한 후 html 파일을 context와 함께 렌더링하는데 이 때의 html 파일을 템플릿이라 칭합니다.
장고는 자체적인 Django Template 문법을 지원하며 이 문법 덕분에 html 파일 내에서 context로 받은 데이터를 활용할 수 있습니다.

  • View(뷰)

MVC 패턴의 컨트롤러에 대응되며 요청에 따라 적절한 로직을 수행하여 결과를 템플릿으로 렌더링하며 응답합니다. 다만 항상 템플릿을 렌더링 하는 것은 아니고 백엔드에서 데이터만 주고 받는 경우도 있습니다.


[Reference]

profile
꾸준히, 열심히, 그리고 잘하자

0개의 댓글