디자인 패턴이란, 재사용 가능한 솔루션을 말한다.
MVC는 디자인 패턴 중에 하나로 Model-View-Controller의 약자이다. 애플리케이션을 세 가지 역할로 구분한 개발 방법론이다.
주로 GUI(Graphic User Interface) 기반의 애플리케이션 개발에 사용된 패턴이다. 사용자 인터페이스(UI)로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있다.
백엔드 기반의 웹 애플리케이션 개발의 기본 모델이 되었으며 최근 모바일 앱 및 프론트엔드 기반의 웹 애플리케이션 개발이 증가하면서 MVP(Model-View-Presenter), MVVM(Model-View-ViewModel)과 같은 패턴들도 사용되고 있다.
소프트웨어 내 데이터를 처리하는 영역을 말한다. 모델은 애플리케이션이 무엇을 할지 정의한다. 내부 비즈니스 로직을 처리하기 위한 역할을 한다. 모델은 뷰나 컨트롤러에 독립적인 구조이다. 모델은 다른 컴포넌트들에 대해 알지 못하기 때문이다. 자기 자신이 무엇을 수행하는지만 알고 있다.
모델은 데이터베이스와 연동하여 사용자가 입력한 데이터나 사용자에게 출력할 데이터를 다룬다. 데이터베이스와 연동하기 위한 DAO(Data Access Object) 클래스와 데이터 구조를 표현하는 DO(Data Object) 클래스로 구성된다.
사용자가 보는 화면에 무엇을 보여주기 위한 역할을 한다. 뷰 역시 다른 컴포넌트들에 대해 알지 못한다. 자기 자신이 무엇을 수행하는지만 알고 있다.
JSP가 뷰에 해당된다. EL, JSTL을 사용해 컨트롤러로부터 전달된 모델의 데이터의 출력과 HTML, CSS 등을 통해 화면에 보여지는 것들을 처리한다.
모델과 뷰의 상호 작용을 관리한다. 뷰와 모델 사이에 위치한다. 컨트롤러는 모델과 뷰에서 작동할 수 있다. 클라이언트의 요청을 받으면 해당 요청을 수행할 모델을 호출한다. 클라이언트가 보낸 데이터가 있다면 모델을 호출할 때 전달하기 쉽도록 가공한다.
컨트롤러는 다른 컴포넌트들에 대해 알고 있으며, 모델과 뷰가 무엇을 수행하는지 알고 있다.
모델과 뷰는 MVC 패턴과 동일하고, 컨트롤러 대신 프리젠터가 존재한다.
컨트롤러가 뷰를 구성하는 기능은 모두 뷰가 알아서 하도록 맡기고 프리젠터가 모델과 뷰 사이의 인터페이스(전달) 역할만 한다.
프리젠터와 뷰는 1:1 관계이다.
MVP 동작 순서
- 사용자의 입력(Action)들은 뷰를 통해 들어온다.
- 뷰는 데이터를 프리젠터에 요청한다.
- 프리젠터는 모델에 데이터를 요청한다.
- 모델은 프리젠터에서 요청받은 데이터를 응답한다.
- 프리젠터는 뷰에게 데이터를 응답한다.
- 뷰는 프리젠터가 응답한 데이터를 이용하여 화면을 나타낸다.
모델과 뷰는 MVC 패턴과 동일하고, 비즈니스 로직과 프레젠테이션 로직을 UI로부터 분리하는 게 목적이다. 비즈니스 로직과 프레젠테이션 로직을 UI로부터 분리하게 되면 테스트, 유지 보수, 재사용이 쉬워진다.
데이터 바인딩 기반으로 뷰와 뷰모델 사이의 의존성을 없앴다. 뷰 모델과 뷰는 1:n 관계를 이룬다.
MVVM 동작 순서
- 사용자의 입력(Action)들은 뷰를 통해 들어온다.
- 뷰에 입력(Action)이 들어오면 Command 패턴으로 뷰 모델에 Action을 전달한다.
- 뷰 모델은 모델에 데이터를 요청한다.
- 모델은 뷰 모델에게 요청받은 데이터를 응답한다.
- 뷰 모델은 응답 받은 데이터를 가공하여 저장한다.
- 뷰는 뷰 모델과 데이터 바인딩하여 화면을 나타낸다.
참고
https://tecoble.techcourse.co.kr/post/2021-04-26-mvc/
https://dinfree.com/lecture/backend/javaweb_3.1.html