-
Spring MVC에서 DispatcherServlet이 관리하는 Resolver의 종류와 실행 방식spring 2025. 2. 20. 21:10
DispatcherServlet의 전체 실행 흐름
- 클라이언트 요청
- HandlerMapping 실행 → 컨트롤러 찾기
- HandlerAdapter 실행 → 컨트롤러 실행 방식 결정
- HandlerMethodArgumentResolver 실행 → 메서드 인자 바인딩
- 컨트롤러 메서드 실행
- 예외 발생 시 HandlerExceptionResolver 실행
- ViewResolver 실행 → View 렌더링
- FlashMapManager 실행 → 리다이렉트 시 데이터 유지
- 클라이언트에게 응답 반환
DispatcherServlet이 관리하는 Resolver의 종류
Spring MVC에서 DispatcherServlet이 관리하는 주요 Resolver들은 다음과 같습니다.
Resolver 종류 역할 실행 시점 HandlerMapping 요청 URL에 따라 적절한 컨트롤러(Handler)를 찾음 요청을 받을 때 HandlerAdapter 컨트롤러 실행 방식을 결정 컨트롤러 실행 직전 HandlerMethodArgumentResolver 컨트롤러 메서드의 인자를 바인딩 컨트롤러 메서드 실행 직전 HandlerExceptionResolver 컨트롤러에서 발생한 예외를 처리 예외 발생 시 ViewResolver 컨트롤러가 반환한 View 이름을 실제 View 객체로 변환 컨트롤러 실행 후 LocaleResolver 사용자의 지역(locale) 정보를 결정 요청을 받을 때 ThemeResolver 애플리케이션의 테마(theme) 정보를 결정 요청을 받을 때 FlashMapManager Flash 속성을 관리하여 리다이렉트 시 데이터 전달 응답을 보낼 때
2. 각 Resolver가 어떻게 실행되는지 (해결 과정)
(1) 요청을 받으면 HandlerMapping 실행
HandlerMapping은 요청 URL과 매칭되는 컨트롤러를 찾습니다.
실행 과정
- 클라이언트가 /hello 요청을 보냄
- DispatcherServlet이 HandlerMapping 목록을 확인하여 적절한 컨트롤러를 찾음
(2)HandlerAdapter 실행
HandlerAdapter는 컨트롤러의 실행 방법을 결정합니다.
실행 과정
- HandlerMapping이 컨트롤러를 찾음
- HandlerAdapter가 컨트롤러를 실행하는 방법을 결정
- 예: @RequestMapping을 사용하는 컨트롤러는 RequestMappingHandlerAdapter가 실행
(3) 컨트롤러 메서드 실행 전에 HandlerMethodArgumentResolver 실행
컨트롤러 메서드의 인자를 자동으로 변환하여 주입합니다.
실행 과정
- RequestMappingHandlerAdapter가 컨트롤러 메서드를 실행하기 전에 HandlerMethodArgumentResolver를 실행
- 요청 파라미터, @RequestBody, @PathVariable 등의 데이터를 변환하여 메서드 인자로 전달
(4) 컨트롤러 실행 중 예외 발생 시 HandlerExceptionResolver 실행
컨트롤러에서 예외가 발생하면 HandlerExceptionResolver가 이를 처리합니다.
실행 과정
- 컨트롤러에서 예외 발생
- DispatcherServlet이 등록된 HandlerExceptionResolver를 실행
- 적절한 예외 처리 후 사용자에게 응답 반환
컨트롤러에서 IllegalArgumentException이 발생하면 ExceptionHandlerExceptionResolver가 실행되어 적절한 응답을 반환합니다.
'spring' 카테고리의 다른 글
스프링 Gradle 동작원리 (1) 2025.02.21 ApplicationContext의 EventListener 동작 원리 & ApplicationEventPublisher (0) 2025.02.18 ApplicationContext vs BeanFactory (0) 2025.02.18 Spring Boot 애플리케이션이 초기화되는 과정 (0) 2025.02.17