Spring MVC 는 Spring 에서 제공하는 웹 모듈로 Model, View, Controller 세 가지 구성 요소를 사용해 http request를 처리하고 단순한 텍스트 형식의 응답, REST 형식의 응답 등을 처리하며 View를 표시하는 HTML까지 리턴하는 응답을 할 수 있게 하는 프레임워크 DispatcherServlet : http request를 처리할 Handler(Controller)를 지정
Handler(Controller) : http request를 처리, Model을 생성/저장 후 View를 지정
ModelAndView : Handler(Controller) 에 의해 반환된 Model과 View가 묶은 객체
ViewResolver : ModelAndView를 처리하여 View를 그림
Client 측에서 http request 요청
DispatcherServlet에서 http request를 처리할 Handler(Controller) 조회
조회된 Handler(Controller)를 실행할 수 있는 HandlerAdpater 조회 후 실행
HandlerAdapter가 Handler를 직접 실행하며 Handler가 반환한 정보를 ModelAndView로 변환하여 DispatcherServlet 으로 반환
DispatcherServlet은 ViewResolver를 호출하여 ModelAndView를 전달
ViewResolver는 Model 에 저장된 데이터를 활용하여 View 객체를 생성, DispatcherServlet 으로 전달
DispatcherServlet 은 render(model)을 호출하여 View를 렌더링 한 후 최종적으로 Client에 전달
http request를 처리할 Handler(Controller)를 지정하는 Controller로 앞쪽에서 처리하는 컨트롤러라고 하여 Front Controller 라고도도 부름http request를 처리, Model을 생성하여 저장하고 View를 지정
DispatcherServlet에 의해 배정된 Handler(Controller)는 http request를 처리, 필요한 데이터를 뽑아 Model에 저장하고 http가 보여줄 View Name을 지정 (혹은 View를 직접 반환)
다만 이곳에서 View에 Model의 데이터를 세팅하지는 않음
Handler(Controller)에 의해 반환된 Model, View가 묶인 객체
Model은 Map<String, Value> 형태의 데이터, 즉 Map 자료 구조로 http request 속의 데이터를 parsing 해 Key-Value 쌍으로 만들어 저장
public ModelAndView(String viewName, @Nullable Map<String, V> model) {
this.view = viewName;
if(model != null) {
getModelMap().addAllAttributes(model);
}
}
View, View Name 은 ViewResolver 에서 그릴 View를 지정함
내부에 View 혹은 View Name이 있으나 View가 지정되더라도 데이터가 세탕된 View가 지정되지는 않음
ModelAndView 객체를 처리하여 View를 그림
Model에 저장된 데이터를 사용하여 View (사용자에게 보여줄 완성된 View)를 그리며 이는 그대로 유저에게 반환됨
https://catsbi.oopy.io/f52511f3-1455-4a01-b8b7-f10875895d5b
https://kotlinworld.com/326