
MVC 패턴은 애플리케이션을 다른 역할을 수행하는 3개의 계층(Model, View, Controller)으로 분리하여 관리하는 디자인 패턴입니다.
MVC 패턴을 이해하기 위해서는 이를 구성하는 계층인 Model, View, Controller에 대한 역할을 이해하는 것이 필요합니다. 이해를 돕기 위해 요리를 만드는 요리사라 생각하고 각 계층을 이에 비유하여 설명하도록 하겠습니다.
Model은 DB나 서비스 계층과 연결되어 데이터를 가공하거나 관리하는 역할을 수행하는 계층입니다. 즉, 재료들을 냉장고(DB)에서 가져와 손질(관리)이나 조리(가공)를 수행하는 과정이라고 할 수 있습니다.
View는 Model 계층을 거친 결과물을 사용자에게 보여주기 위해 데이터 시각화를 수행하는 계층입니다. 즉, 요리(Model 계층을 거친 결과물)를 접시에 담고 이를 플레이팅하는 과정이라고 할 수 있습니다.
Controller는 사용자의 요청을 받아 Model과 View를 연결하는 역할을 수행하는 계층입니다. 즉, 손님들에게 받은 요청(주문, 특이사항 등등)을 요리사에게 전달하며 이에 대한 결과물을 다시 손님에게 전달하는 과정이라고 할 수 있습니다.
MVC패턴을 구성하는 3개의 계층의 역할을 그림으로 정리하면 다음과 같습니다.

Spring MVC는 Spring 프레임워크에서 제공하는 웹 애플리케이션 개발을 위한 모듈을 말하며 다음과 같은 특징을 가지고 있습니다.
@GetMapping 등의 어노테이션을 사용해 간편하게 컨트롤러와 요청을 매핑할 수 있음Spring MVC는 다음과 같은 구성 요소를 통해 MVC 패턴을 구현하고 있습니다.
DispatcerServlet은 중앙에서 모든 HTTP 요청을 중앙에서 관리하는 Front Controller 역할을 수행합니다. 요청을 받아 적절한 Controller로 전달하고 결과를 클라이언트에게 반환합니다.
HandlerMapping은 클라이언트가 요청한 URL 기반으로 어떤 Controller가 요청을 처리할지 결정하는 역할을 수행합니다.
HadlerAdapter는 Controller를 실행하고 결과를 DispatcherServlet에 반환하는 역할을 수행합니다.
ModelAndView는 Controller가 반환하는 데이터(Model)와 View 정보(View)를 담기위해 사용하는 객체입니다.
ViewResolver는 View 이름을 기반으로 실제 View를 결정하는 역할을 수행합니다.
Controller는 비즈니스 로직을 처리하며 Model 데이터를 생성하는 역할을 수행합니다.
View는 최종적으로 사용자에게 보여질 화면을 렌더링하는 역할을 수행합니다.
Spring MVC를 구성하는 요소들의 동작 흐름은 다음과 같습니다.
클라이언트가 전송한 HTTP 요청은 서블릿 컨테이너를 통해 HttpServletRequest, HttpServletResponse 객체로 변환되어DispatcherServlet으로 전달됩니다.

DispatcherServlet은 HttpServletRequest에서 URL 정보를 찾아 HadlerMapping에 전달합니다. 이를 통해, 처리할 Controller에 대한 정보를 담고 있는 HandlerExecutionChain를 반환합니다.

DispatcherServlet은 HadlerAdapter로 HttpServletResponse, HttpServletRequest와 HandlerExecutionChain에서 Handler를 찾아 전달하여 Controller 실행을 위임합니다.

HadnlerAdapter는 Controller로 HttpServletResponse, HttpServletRequest를 전달합니다. 이후, Controller는 이를 통해 필요한 데이터만 가져와 요청에 대한 비즈니스 로직을 수행한 후 처리 결과를 반환합니다.

HandlerAdapter는 Controller에서 실행한 결과를 다시 DispatcherServlet로 반환합니다.

DispatcherServlet은 처리 결과에서 View 이름을 ViewResolver 전달하고, ViewResolver는 이를 기반으로 생성한 View를 반환합니다.

DispathcerServlet은 View로 HttpServletResponse, HttpServletRequest, Model을 전달합니다. View는 전달받은 정보를 반영하여 렌더링한 결과를 반환합니다.

이후, 렌더링 결과를 HttpServletRequest에 반영하여 클라이언트로 전달합니다.

아래는 위 개념을 공부하면서 추가 학습이 필요할 것 같은 내용들입니다. 이 내용들은 차차 정리하여 링크를 달도록 하겠습니다.
Spring MVC는 웹 애플리케이션 개발에 MVC 디자인 패턴을 적용하기 위해 제공하는 모듈입니다.
DispatcherServlet, HadnlerAdapter, HadlerMapping, View, ModelAndView, ViewResolver, Controller 등 7개의 핵심 구성 요소로 이루어져 있습니다.
첫 번째, DispatcherServlet은 요청을 처리하기 위한 Controller 정보를 HadlerMapping으로 부터 받습니다.
두 번째, DispatcherServlet은 HandlerAdapter를 호출하여 요청을 처리하기 위해 Controller 실행을 위임한 후 이에 대한 처리 결과를 받습니다.
세 번째, DispatcherServlet은 ViewResolver로 부터 View 객체를 반환받은 후 결과를 반영하여 렌더링을 수행합니다.
마지막으로, 렌더링 수행 결과를 클라이언트에게 전달합니다.