Backend 🖥️
MVC/MVT 패턴이란??
봄설날
2024. 8. 4. 18:11
공부를 하다보니 MVC/MVT 패턴이 계속 언급되었다. 기본적으로 이 두 패턴 디자인 패턴들 중 하나이고 서로 거의 유사하다. 이 둘에 대해 자세히 알아보자!!
우선 디자인 패턴을 잠깐 알고 넘어가자.
디자인 패턴이란 개발하는 중에 발생했던 문제점들을 정리해서 상황에 따라 간편하게 적용해서 쓸 수 있는 것을 정리하여 특정한 "규약"을 통해 쉽게 쓸 수 있는 형태로 만든 것을 말한다. 언어나 플랫폼에 종속되지 않으며, 객체지향 설계 원칙에 기반을 두고 있다.
#1 MVC 패턴
MVC 패턴은 애플리케이션을 모델(Model), 뷰(View), 컨트롤러(Controller) 세 가지 주요 컴포넌트로 나누어 구조화하는 방식이다. 위의 그림처럼 사용자가 view를 통해 controller를 조작하면 controller는 model을 통해서 데이터를 가져오고 그 정보를 바탕으로 시각적인 표현을 담당하는 View를 제어해서 사용자에게 전달하게 된다. MVC 패턴의 구조를 더 정확하게 표현하면 아래와 같다.
- MVC 패턴의 구성 요소
모델(Model)
모델은 애플리케이션의 데이터와 그 데이터를 처리하는 로직을 담당한다. 아주 쉽게 대충 이해해보자면 DB라고 생각하면 쉽다.
데이터베이스와 상호작용하고, 데이터를 가져오거나 저장하는 역할을 한다. 데이터의 상태를 정의하고, 상태가 변경되면 이를 뷰에 알리는 역할을 할 수도 있다. ex) 사용자 정보, 상품 목록, 주문 내역 등
뷰(View)
뷰는 사용자 인터페이스(UI)를 담당한다. 모델의 데이터를 기반으로 사용자에게 정보를 시각적으로 표현한다. 뷰는 모델로부터 데이터를 받아 이를 화면에 표시하며, 사용자의 입력을 받아 컨트롤러에 전달합니다. ex) 웹 페이지의 HTML, 모바일 앱의 UI 화면 등
컨트롤러(Controller)
컨트롤러는 사용자 입력을 처리하고, 그에 따라 모델과 뷰를 조작하는 역할을 한다. 사용자의 행동(클릭, 입력 등)을 감지하여 모델을 업데이트하거나, 뷰를 변경하도록 지시한다. 컨트롤러는 모델과 뷰를 연결하는 중간 관리자 역할을 하며, 비즈니스 로직을 처리한다. 쉽게 정리하면 대부분의 코드 로직을 컨트롤러에 작성하면 된다!! ex) 로그인 요청 처리, 데이터 업데이트, 페이지 전환 등
#2 그럼 MVT 패턴은?
MVT 패턴은 MVC 패턴에서 변형된 패턴으로 Django 웹 프레임워크에서 사용된다. (Model-View-Templated)
MVT 패턴은 MVC(Model-View-Controller) 패턴과 유사하지만, Django의 구현 방식에 따라 약간의 차이가 있다.
- MVC 패턴의 구성 요소
Model (모델)
모델은 애플리케이션의 데이터 구조를 정의하며, 데이터베이스와 상호작용하는 역할을 한다. Django의 모델은 데이터베이스 테이블에 매핑되며, 데이터의 필드와 행동을 정의한다. 모델은 데이터베이스의 데이터를 조회하고, 추가하고, 수정하고, 삭제하는 작업을 담당한다. MVC 패턴의 model과 같다고 보면 된다!
-
MVC 패턴에도 뷰가 있지만 MVT에서 의 View는 MVC 에서의 Controller와 같다.
뷰는 사용자의 요청을 처리하고, 필요한 데이터를 모델에서 가져와서 템플릿에 전달하는 역할을 한다. 뷰는 요청된 URL에 따라 적절한 처리를 하고, 그 결과를 사용자에게 반환한다. 따라서 Django를 이용한 개발을 할 경우 대부분의 코드는 views.py 앱 안에 적게 된다. -
Template (템플릿)
템플릿은 사용자에게 표시될 프런트엔드 부분을 정의한다. HTML과 Django 템플릿 언어를 사용하여 데이터를 시각적으로 표현한다. 백엔드 api개발의 경우 이곳에 swagger 코드들을 적어주면 된다!
#3 MVT와 MVC의 차이점
View
MVC: 컨트롤러는 모델과 뷰를 연결하며, 사용자 입력을 처리하고 모델을 업데이트하며, 뷰를 선택하여 데이터를 사용자에게 전달
MVT: Django에서의 뷰는 데이터와 템플릿을 연결하는 역할. Django에서는 프레임워크 자체가 컨트롤러 역할을 하여 URL 라우팅을 처리하고, 적절한 뷰를 호출한다. 따라서, Django의 "뷰"는 MVC의 "컨트롤러"와 유사한 역할을 수행합니다.
Template
MVC: 뷰는 데이터를 받아 사용자에게 표시할 방식을 정의
MVT: 템플릿은 데이터 표현의 역할을 담당하며, HTML과 동적 콘텐츠를 포함하는 파일이다. MVT에서는 템플릿이 MVC의 뷰에 해당하는 역할을 합니다.