DispatcherServlet
🎯 DispatcherServlet
정의
DispatcherServlet은 Spring MVC에서 들어오는 HTTP 요청을 가장 먼저 받아 적절한 컨트롤러에 위임하는 Front Controller이다. 요청 처리의 시작점이자 Spring MVC의 핵심 진입점이다.
🧩 역할
- HTTP 요청을 먼저 받는다
- 적절한 컨트롤러를 찾아 위임한다
- 응답 생성 흐름을 관리한다
- 예외 처리와 뷰 해석을 조율한다
🛠 처리 흐름
- 요청을 받는다.
HandlerMapping으로 처리할 핸들러를 찾는다.HandlerAdapter가 해당 핸들러를 실행한다.HandlerExceptionResolver가 예외를 처리한다.ViewResolver가 화면 이름을 실제 뷰로 변환한다.- 응답을 클라이언트에 돌려준다.
🧩 주요 구성 요소
private List<HandlerMapping> handlerMappings;
private List<HandlerAdapter> handlerAdapters;
private List<ViewResolver> viewResolvers;
private List<HandlerExceptionResolver> handlerExceptionResolvers;
private MultipartResolver multipartResolver;
private LocaleResolver localeResolver;
private ThemeResolver themeResolver;
HandlerMapping
- 어떤 컨트롤러가 요청을 처리할지 찾는다
HandlerAdapter
- 컨트롤러 호출 방식을 맞춰서 실제 실행을 돕는다
- 컨트롤러 구현 방식이 달라도 DispatcherServlet이 직접 몰라도 되게 해준다
ViewResolver
- 뷰 이름을 실제 View 객체로 변환한다
- 화면 응답이 필요한 경우 사용된다
HandlerExceptionResolver
- 컨트롤러 밖으로 던져진 예외를 처리한다
- 예외 상황에 맞는 응답이나 ModelAndView를 설정한다
MultipartResolver
- 파일 업로드 같은 multipart 요청을 처리한다
- 요청 본문에서 multipart 데이터를 읽고 해석한다
사용 예시
@Bean
public MultipartResolver multipartResolver(
@Value("#{Properties['common.file.maxUploadSizePerFile']}") Long maxUploadSizePerFile) {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
multipartResolver.setMaxUploadSize(-1); // no limit
multipartResolver.setMaxUploadSizePerFile(maxUploadSizePerFile);
return multipartResolver;
}
LocaleResolver
- 국제화에서 사용할 언어 정보를 결정한다
사용 예시
@Bean
public LocaleResolver localeResolver() {
return new AcceptHeaderLocaleResolver();
}
ThemeResolver
- 페이지 테마를 결정한다
🧩 특징
- 모든 요청의 진입점이다
- 핵심 처리를 여러 전략 객체에 위임한다
- Spring MVC의 중심 구조를 이룬다
- 요청, 예외, 뷰, 언어, 파일 업로드를 조율한다
⚠️ 주의사항
- DispatcherServlet이 모든 것을 직접 처리하는 것은 아니다.
- 실제 처리 로직은
HandlerMapping,HandlerAdapter등이 나눠 맡는다. - 뷰 응답이 필요한 경우에만
ViewResolver가 의미가 있다. - multipart나 국제화 같은 기능은 별도 설정이 필요할 수 있다.
📌 정리
DispatcherServlet은 Spring MVC의 Front Controller다.- 요청을 받아 적절한 처리자에게 위임하고 응답 흐름을 조율한다.
- Spring MVC 구조를 이해할 때 가장 먼저 봐야 하는 핵심 컴포넌트다.
댓글남기기