클라이언트와 핸들러
- 클라이언트의 요청을 실제로 처리하는 것은 컨트롤러
- DispatcherServlet은 클라이언트의 요청을 전달받는 창구역할
- DispatcherServlet은 클라이언트의 요청을 처리할 컨트롤러를 찾기 위해 HandlerMapping을 사용
컨트롤러를 찾아주는 객체는 ControllerMapping 타입이어야 할 것 같은데 실제는 HandlerMapping
스프링 MVC는 웹 요청을 처리할 수 있는 범용 프레임워크
- @Controller 어노테이션을 붙인 클래스를 이용해서 클라이언트 요청을 처리할 수 있지만,
- 자신이 직접 만든 클래스를 이용해서 클라이언트의 요청을 처리할 수 있다.
DispatcherServlet 입장에서 클라이언트 요청을 처리하는 객체의 타입이 반드시 @Controller를 적용할 클래스일 필요는 없다
실제로 스프링이 클라이언트의 요청을 처리하기 위해 제공하는 타입 중에는 HttpRequestHandler도 존재
따라서, 스프링 MVC는 웹 요청을 실제로 처리하는 객체를 핸들러(Handler)라고 표현하고 있으며 @Controller 적용 객체나 Controller 인터페이스를 구현한 객체는 모두 스프링 MVC 입장에서는 핸들러가 된다.
특정 요청 경로를 처리해주는 핸들러를 찾아주는 객체를 HandlerMapping이라고 한다.
DispatcherServlet은 핸들러 객체의 실제 타입에 상관없이 실행 결과를 ModelAndView라는 타입으로만 받을 수 있으면 된다.
그런데 핸들러의 실제 구현 타입에 따라 ModelAndView를 리턴하는 객체(Controller 인터페이스를 구현한 클래스의 객체)도 있고, 그렇지 않은 객체도 있다. 따라서 핸들러의 처리 결과를 ModelAndView로 변환해 주는 객체가 필요하며 HandlerAdapter가 해당 변환을 처리해 준다.
핸들러 객체의 실제 타입마다 그에 알맞은 HandlerMapping과 HandlerAdapter가 존재하기 때문에 사용해야 할 핸들러의 종류에 따라 해당 HandlerMapping과 HandlerAdapter를 스프링 빈으로 등록해야 한다.
스프링이 제공하는 설정 기능을 사용하면 HandlerMapping과 HandlerAdapter 빈을 직접 등록하지 않아도 된다.
'Spring' 카테고리의 다른 글
[Spring] WebMvcConfigurer 인터페이스와 설정 (0) | 2024.04.03 |
---|---|
[Spring] DispatcherServlet과 스프링 컨테이너 (0) | 2024.04.03 |
[Spring] 스프링 MVC 핵심 구성 요소 (0) | 2024.04.01 |
[Spring] Spring MVC - 컨트롤러와 JSP (0) | 2024.03.26 |
[Spring] 스프링 MVC - 컨트롤러 구현 해보기 (0) | 2024.03.25 |