Spring MVC 구성요소

Spring Web MVC

백기선님의 강의인 Spring Web MVC 강의를 듣고 공부한 내용을 정리한 글

스프링 MVC 구성요소

스크린샷 2020-04-04 오전 12 07 10

MultipartResolver

파일 업로드 요청 처리에 필요한 인터페이스

바이너리 데이터를 잘라서 보내기 위해 MultipartResolver의 인터페이스 구현체에게 위임하여 처리한다.

HttpServletRequestMultipartHttpServletRequest로 변환해주어 요청이 담고 있는 File을 꺼낼 수 있는 API 제공

기본 DispatcherServlet에는 어떠한 설정도 없기 때문에 파일처리가 불가능하다.

단, 스프링부트에서는 기본적으로 MultipartResolver가 자동으로 설정되어있기 때문에 파일업로드가 가능하다.

LocaleResolver

지역 정보에 따라 적절한 언어 설정을 해주기 위해 사용자의 정보를 분석하는 기능을 담당한다.

사용자의 Http Request의 accep-header를 보고 사용자의 위치를 파악한다.

ThemeResolver

애플리케이션에 설정된 테마를 파악하고 변경할 수 있는 인터페이스

e.q. 버튼 누르면 화면 테마를 바꿔주는 기능을 본적 있다면 이해 가능, 다크모드 같은 것

HandlerMapping

요청이 들어왔을 때 요청을 처리할 핸들러를 찾아주는 인터페이스

가령 사용자가 /hello라는 엔드포인트로 요청을 보냈을 때 해당 요청을 처리할 수 있는 핸들러를 찾아야한다.

핸들러 매핑은 @GetMapping(“/hello”) 애노테이션이 부착된 메소드가 이 요청을 처리할 수 있는 메소드라는 정보를 가진 핸들러 객체를 리턴한다.

기본적으로 두개의 핸들러 매핑이 등록되어 있는데 하나는 앞서 본것과 같은 RequestMappingHandlerMapping과 빈 이름으로 판단하는 BeanNameUrlHandlerMapping이다.

BeanNameUrlHandlerMapping의 경우 클래스 이름 자체가 핸들러가 된다.

HandlerAdapter

HandlerMapping이 찾아낸 Handler를 처리하는 인터페이스.

스프링 MVC의 확장력의 핵심!

개발자가 원하는 핸들러를 만들어낼 수 있다.

메소드 형태의 핸들러를 처리할 수 있는 어댑터는 RequestMappingHandlerAdapter이다.

클래스 형태의 핸들러를 처리할 수 있는 어댑터는 SimpleControllerHandlerAdapter가 있다.

그리고 HttpRequestHandlerAdpater가 있기는 한데 서블릿하고 비슷하게 작동하고 사실상 거의 RequestMappingHandlerAdapter를 쓰는 경우가 많기 때문에 이정도만 알아도 충분하다.

HandlerExceptionResolver

@ExceptionHandler 애노테이션을 사용해서 예외를 처리할 때 처리를 담당하는 것이 HandlerExceptionResolver이다.

RequestToViewNameTranslator

View 이름을 생략하더라도 요청을 기반으로 뷰 이름을 판단하는 인터페이스이다.

핸들러에서 뷰 이름을 명시적으로 리턴하지 않은 경우라도 요청을 기반으로 뷰 이름을 판달할 수 있다.

ViewResolver

뷰 이름(string)에 해당하는 뷰를 찾아내는 인터페이스.

FlashMapManager

비교적 최근에 추가된 인터페이스 (스프링 3.1)

FlashMap 인스턴스를 가져오고 저장하는 인터페이스이다.

리다이렉트를 한 후 리프레쉬를 하더라도 폼 서브미션이 안되게 방지해주는 일종의 패턴을 FlashMap이라고 한다.

Reference

인프런 백기선님의 스프링 Web MVC



© 2022. by minkuk

Powered by minkuk