
- 요청
- 클라이언트가 웹 애플리케이션에 요청(Request)을 보내고, 이 요청은 가장 먼저 DispatcherServlet에 도달합니다.
- 핸들러 조회
- DispatcherServlet은 HandlerMapping에게 요청을 처리할 Handler(=Controller)를 찾아달라고 요청합니다.
- 핸들러 실행
- DispatcherServlet은 HandlerMapping으로부터 받은 정보를 이용해 해당 Controller에게 요청 처리를 위임합니다.
- ModelAndView 반환
- Controller는 비즈니스 로직을 수행한 후, 결과 데이터(Model)와 뷰의 논리적 이름(View Name)을 담은 ModelAndView 객체를 DispatcherServlet에 반환합니다.
- 뷰 해석
- DispatcherServlet은 ModelAndView에서 뷰 이름을 추출하여 ViewResolver에게 전달하고, 해당하는 실제 View 객체를 찾아달라고 요청합니다.
- 뷰 렌더링
- DispatcherServlet은 ViewResolver로부터 받은 View 객체에게 모델 데이터를 전달하여 뷰를 렌더링하도록 요청합니다.
- 응답
- 렌더링된 View의 결과물이 DispatcherServlet을 통해 클라이언트에게 최종적으로 응답(Response)으로 전달됩니다.
DispatcherServlet
클라이언트의 모든 웹 요청(Request)을 가장 먼저 받아 중앙에서 처리 흐름을 제어하는 컴포넌트
>> DispatcherServlet
DispatcherServlet은 Spring MVC의 Front Controller 패턴을 구현한 핵심 컴포넌트, 모든 HTTP 요청이 가장 먼저 도달하는 진입점으로, 전체 요청 처리 흐름을 중앙집중식으로 제어한다.
- 주요 역할
- 모든 웹 요청을 최초로 받아들임
- 요청을 적절한 Handler(Controller)에게 위임
- 각 구성 요소들 간의 협력을 조정
- 최종 응답을 클라이언트에게 전달
HandlerMapping
들어온 요청 URL(@RequestMapping 정보 등)을 기반으로, 이 요청을 실제로 처리할 Controller를 찾아주는 역할을 담당
>> HandlerMapping
HandlerMapping은 들어온 요청 URL을 분석하여 해당 요청을 처리할 적절한 Handler(Controller)를 찾아주는 전략 인터페이스입니다.
- 동작 원리
@RequestMapping("/users")
public class UserController {
@GetMapping
public String getUserList() { ... }
}
1. /users 요청이 오면 HandlerMapping이 UserController.getUserList() 메서드를 찾아줌
2. @RequestMapping, @GetMapping 등의 어노테이션 정보를 기반으로 매핑 수행
ModelAndView
Controller가 비즈니스 로직을 수행한 후, 처리 결과 데이터(Model)와 화면을 그릴 뷰(View)의 논리적 이름을 함께 담아 반환하는 객체 >> ModelAndView
ModelAndView는 Controller가 비즈니스 로직 처리 후 반환하는 객체로, 데이터(Model)와 뷰 이름(View)을 함께 담고 있다.
ViewResolver
ViewResolver는 Controller가 반환한 논리적 뷰 이름을 실제 뷰 리소스로 변환한다.
View
ViewResolver에 의해 결정되고, 최종적으로 모델 데이터를 받아 사용자에게 보여줄 HTML 화면을 그리는(렌더링하는) 컴포넌트
>> View
View는 ViewResolver에 의해 결정된 실제 뷰 구현체로, Model 데이터를 받아 최종 HTML 응답을 생성하는 컴포넌트입니다.