[Spring] Spring MVC의 요청 처리과정
구성 요소
- Dispatcher Servlet: 클라이언트의 요청을 전달받아 요청에 맞는 응답을 생성
- Handler Mapping: 클라이언트의 요청 URL을 어떤 컨트롤러가 처리할지 결정
- Handler Adapter: 위에서 결정한 Handler(Controller)를 호출
- Handler(Controller): 클라이언트의 요청을 처리한 뒤 결과를 Dispatcher Servlet에 반환
- ModelAndView : 컨트롤러가 처리한 결과 정보 및 뷰 선택에 필요한 정보를 담음
- ViewResolver : 컨트롤러의 처리 결과를 생성할 뷰를 결정
- View : 컨트롤러의 처리 결과 화면을 생성, (JSP, Thymeleaf 등 사용)
처리 순서
- 클라이언트가 서버에 요청을 보내면 Dispatcher Servlet이 요청을 가로챈다.
- 들어온 요청을 Handler Mapping에 위임하여 해당 요청을 처리할 Handler(Controller)를 탐색한다.
- 해당 핸들러를 실행할 수 있는 핸들러 어댑터를 핸들러 어댑터 목록에서 찾는다.
- HandlerAdapter는 요청에 매핑된 Hadler가 있다면 @RequestMapping을 통해 특정 메서드를 호출한다.
- Controller -> Service -> Repository -> DB -> Repository -> Service -> Controller 순으로 로직이 진행된다.
- 결과물을 받은 Controller는 필요에 따라 Model 객체에 결과물을 넣거나, View 정보를 담아 DispatcherServlet에게 보낸다.
- DispatcherServlet은 ViewResolver에게 받은 뷰에 대한 정보를 넘긴다.
- ViewResolver는 해당 View를 찾아 DispatcherServlet에게 알려준다.
- DispatcherServlet은 응답할 View에게 Render를 지시하고 View는 응답 로직을 처리한다.
- DispatcherServlet이 클라이언트에게 렌더링된 View를 응답한다.
Spring MVC 패턴의 장점
- Spring MVC 패턴 이전의 경우 URL마다 별도의 Servlet을 필요로 했다. 또한, 각 서블릿마다 공통 기능을 하는 코드들이 중복해서 발생하여 유지 보수 하기 어려웠다.