MVC 패턴 파헤치기
MVC 패턴이란?
- 애플리케이션을 개발할 때 사용하는 디자인 패턴이다.
- 애플리케이션의 개발 영역을 MVC (Model, View, Controller)로 구분하여 각 역할에 맞게 코드를 작성하는 개발 방식이다.
- UI 영역과 비즈니스 로직 영역으로 구분되어 서로에게 영향을 주지 않는다.
- Model은 애플리케이션의 데이터,
View는 UI 요소를 나타내고,
Controller는 데이터와 비즈니스 로직 사이의 상호동작을 관리한다.
왜 써야할까?
- 각 컴포넌트가 서로 분리되어 각자의 역할에 집중할 수 있기 때문에 시스템 결합도를 낮출 수 있다.
- 유지보수 용이, 중복코드 제거
Model, View, Controller

Model
모델은 Spring MVC 기반 웹 애플리케이션이 클라이언트의 요청을 전달 받으면 요청 사항을 처리하기 위한 작업을 한다.
처리한 작업의 결과 데이터를 클라이언트에게 응답으로 돌려주어야 하는데, 이 때 클라이언트에게 응답으로 돌려주는 작업의 처리 결과 데이터를 모델이라고 한다.
View
뷰는 모델을 이용하여 웹 브라우저와 같은 애플리케이션의 화면에 보이는 리소스를 제공하는 역할을 한다.
Controller
컨트롤러는 클라이언트 측의 요청을 직접적으로 전달받는 엔드포인트로써 모델과 뷰 중간에서 상호작용을 한다.
클라이언트 측의 요청을 받아 비즈니스 로직을 수행한 후, 모델 데이터가 만들어지면 이 모델을 뷰로 전달한다.
Spring MVC 파헤치기
Spring MVC는 MVC2 모델을 좀 더 발전시켜 만들어진 웹 모듈이다.
프론트 컨트롤러(Front Controller)가 우선적으로 클라이언트로부터 모든 요청을 받게 되며,
실제 요청의 처리는 개별 컨트롤러 클래스로 위임한다.
개별 컨트롤러 클래스는 핸들러(Handler)라고도 하며, DI를 통해 생성해둔 Bean을 통해 비즈니스 로직 처리 결과를 Model에 담아 다시 프론트 컨트롤러로 보낸다.
프론트 컨트롤러는 받은 Model을 알맞은 View 템플릿으로 전달하여 반영시키고, 최종적으로 클라이언트로 보낼 화면을 응답 결과로 전송한다.

DispatcherServlet
- 앞서 설명한 Front Controller가 Spring MVC에서의 Dispatcher Servlet이다.
- 모든 클라이언트의 요청을 전달받는다.
- Controller에게 클라이언트 요청을 전달하고, Controller가 리턴할 결과값을 View에 전달하여 알맞은 응답을 생성한다.
HandlerMapping
- 클라이언트의 요청 URL을 어떤 Controller가 처리할지를 결정한다. 즉. 요청을 직접 처리할 컨트롤러를 탐색한다.
- URL과 요청 정보를 기준으로 어떤 핸들러 객체를 사용할지 결정하는 객체이며,
DispatcherServlet은 하나 이상의 핸들러 매핑을 가질 수 있다. - 구체적인 Mapping은 java config 관련 어노테이션 등을 통해 처리한다.
HandlerAdapter
- 매핑된 컨트롤러의 실행을 요청한다.
Controller(Handler)
- DispatcherServlet이 전달해준 HTTP 요청을 처리하고 결과를 Model에 저장한다.
- 직접 요청을 처리하며, 처리 결과를 반환한다.
- 결과가 반환되면 Handler Adapter가 ModelAndView 객체로 변환해서 반환하며, 여기에는 View Name과 같이 응답을 통해 보여줄 View에 대한 정보와 관련된 데이터가 포함되어 있다.
ModelAndView
- Controller에 의해 반환된 Model과 View가 Wrapping된 객체이다.
ViewResolver
- View Name을 확인한 후, 실제 컨트롤러로부터 받은 로직 처리 결과를 반영할 View 파일을 탐색한다.
View
- 로직 처리 결과를 반영한 최종 화면을 생성한다.
참고
'Spring & Spring Boot' 카테고리의 다른 글
| [Spring] JSP vs Thymeleaf (0) | 2024.11.11 |
|---|---|
| [Spring] DTO와 Entity의 분리. 왜? 어떻게? (2) | 2024.11.07 |
| [Spring] DTO vs Entity vs VO (1) | 2024.11.07 |
| [Spring] Spring 3계층 구조, 3-tier-Architecture (1) | 2024.11.06 |
| [Spring] 관심사의 분리란? (1) | 2024.11.05 |