du.study기록공간

[Spring MVC] DispatcherServlet 기능 정리 본문

스프링

[Spring MVC] DispatcherServlet 기능 정리

du.study 2019. 10. 15. 01:29
728x90

공부한 내용을 꾸준히 블로그에 쓴다해놓고 어느순간 블로그와 멀어지는것을 느꼈다..

(기록을 안하면 까먹는것을.. 분발하자)

 

 

신입으로 입사하고 꾸준히 Spring을 메인 프레임워크로 사용해왔는데, 추가 요구사항에 대한 기능구현에만 바쁘고 사용하는 스프링의 원리조차 제대로 모르고 사용하는것을 느꼈다.... 그래서 이번엔 스프링 MVC의 기초가되는 DispatcherServlet부터 정리해보고자 한다.

 

당장 Spring MVC의 메인이 뭐냐라고 하면 말할 수 있는건 DispatcherServlet 이라고 말할 수 있을것 같다. 간단하게 설명하면 Front Controller 의 역할을 담당하는 서블릿이다.

( 모든 요청은 Front Controller를 먼저 거치게되며, 이곳에서 요청에 맞는 클레스를 찾고 메서드 호출을하고 리턴값에 대한 처리도 해주는 그런 마스터같은 역할)

 

 

가장 먼저 맨처음 요청이 들어올때 초기화되는 부분을 먼저 살펴보면 다음과 같은 리스트가 있다.

protected void initStrategies(ApplicationContext context) {
	initMultipartResolver(context);
	initLocaleResolver(context);
	initThemeResolver(context);
	initHandlerMappings(context);
	initHandlerAdapters(context);
	initHandlerExceptionResolvers(context);
	initRequestToViewNameTranslator(context);
	initViewResolvers(context);
	initFlashMapManager(context);
}

참 여러가지 기능이 있다.. 이번 글에는 간략하게 각각이 어떤 기능을 하는지만 정리하려고 한다.

 

한개씩 정리해보자면 

MultipartResolver

  • 파일 업로드 요청에 사용되는 Resolver이며 스프링 Default로는 null이다. (this.multipartResolver = null )        Spring Boot 에서는 Default값으로 한개를 지원해준다고 한다. 찾아보자) 

 

LocaleResolver

  • 웹 요청과 관련된 클라이언트 Locale 정보를 가져오는 interface. 별다른 설정 없을시, AcceptHeaderLocaleResolver(accept-language)를 가진다.

 

ThemeResolver

 

HandlerMapping

  • 각 요청에을 처리할 핸들러를 찾는 interface로 기본적으로 두 가지가 존재한다.
    1. RequestMappingHandlerMapping
    2. BeanNameUrlHandlerMapping

 

HandlerAdapter

  • HandlerMapping 이 찾은 핸들러를 호출하여 요청받은 일을 처리한다. 기본적으로
    1.
    RequestMappingHandlerAdapter
    2. HttpRequestHandlerAdapter
    3. SimpleServletHandlerAdapter
    이 존재한다.
    참고 사이트 : https://springsource.tistory.com/2

 

HandlerExceptionResolver

  • 요청 처리중 발생되는 에러에 대해서 처리하는 interface, 이 설정을 통해서 각각의 에러상황에 맞는 처리가 가능하다.

 

RequestToViewNameTranslator

  • 뷰 이름을 명시적으로 작성하지 않는경우, URL 을 기반으로 View를 찾아준다.

 

ViewResolver

  • 어떤 방식으로 뷰 페이지를 렌더링 할지 결정하는 인터페이스

 

FlashMapManager

  • 요청을 리다이렉트 할 때, 데이터를 담아서 같이 넘기고 넘긴후 삭제 할 필요가 있을때 쓰는 임시적인 데이터 저장 할 떄 사용

 

 

 

 

728x90
Comments