MVC 패턴은 애플리케이션 개발 시 사용하는 디자인 패턴으로, 애플리케이션을 MVC(Model, View, Controller)로 구분하여 각 역할에 맞게 코드를 작성하는 개발 방식이다

Model
애플리케이션의 데이터이며, 정보들의 가공을 책임지는 컴포넌트이다.
Spring MVC 기반의 웹 애플리케이션이 클라이언트의 요청을 전달받으면 요청 사항을 처리하기 위한 작업을 한다. 이후 클라이언트에게 응답으로 돌려주는 작업의 처리 결과 데이터를 Model이라 한다.
View
시각적인 UI 요소를 나타낸다. 즉 Model을 이용하여 웹 브라우저와 같은 애플리케이션의 화면에 보이는 리소스를 제공하는 역할을 한다.
Controller
Model과 View의 중간에서 상호작용을 해주는 역할을 한다.
클라이언트 측의 요청을 전달받아 비즈니스 로직을 거친 후, Model 데이터가 만들어지면, 이 Model 데이터를 View로 전달하는 역할을 한다.
MVC 패턴에는 Model1과 Model2가 있다.
Model1 : JSP에서 출력과 로직을 모두 처리(View, Controller)

Model2 : JSP에서 출력만 처리(View)

💡여기서 Model2 구조는 MVC(Model-View-Controller) Pattern을 웹 개발에 도입한 구조이다.
Spring Framework에서 MVC 모델을 조금 더 발전시켜 Spring MVC가 나왔다. 정확히는 MVC2 모델이 기반인 웹 모듈이다.

DispatcherServlet
HandlerMapping
Controller
ViewResolver

클라이언트가 url을 요청하면, 웹 브라우저에서 스프링으로 request가 보내진다.
DispatcherServlet이 request를 받으면, HandlerMapping을 통해 해당 url을 담당하는 Controller(=Handler)를 찾아 반환한다.
DispatcherServlet은 반환된 Controller를 실행할 수 있는 적절한 HandlerAdapter에게 전달합니다.
HandlerAdapter는 DispatcherServlet의 요청과 더불어 Controller 정보를 가지고 해당 Controller의 Handler 메소드를 호출한다.
Controller의 Handler 메소드는 비즈니스 로직을 처리한 후 결과를 Model에 저장하고 HandlerAdapter에게 반환한다.
HandlerAdapter는 반환받은 Model 데이터와 View 이름을 다시 DispatcherServlet에게 반환한다.
DispatcherServlet은 View 이름을 가지고 ViewResolver에게 해당 View를 달라고 요청한다.
ViewResolver는 논리적인 View를 물리적인 View로 변환한 뒤, 변환된 View를 DispatcherServlet에게 반환한다.
DispatcherServlet은 ViewResolver에게 받은 View 객체에게 Model 데이터를 넘겨주면서 클라이언트에게 전달할 응답 데이터 생성을 요청한다.
View는 응답 데이터를 생성해서 다시 DispatcherServlet에게 반환한다.
DitpatcherServlet은 View로부터 받은 응답데이터를 마지막으로 클라이언트에게 응답하여 화면에 출력한다.