스프링 MVC 설정(4) : 스프링 부트의 스프링 MVC 설정

de_sj_awa·2021년 6월 27일
0

지금까지는 스프링 부트없이 스프링이 제공해주는 스프링 MVC(DispatcherServlet)를 설정하는 방법에 대해 알아봤다. 지금부터는 스프링 부트가 제공해주는 스프링 MVC를 설정하는 방법에 대해 알아보자.

4. 스프링 부트의 스프링 MVC 설정

스프링 부트는 스프링이 제공하는 기본 전략 객체(빈) 말고도 추가적으로 기본 전략 객체를 등록해준다.

HandlerMapping

  • RequestMappingHandlerMapping
  • BeanNameUrlHandlerMapping
  • SimpleUrlHandlerMapping
  • WelcomePageHandlerMapping

HandlerAdapter

  • RequestMappingHandlerAdater
  • HttpRequestHandlerAdapter
  • SimpleControllerHandlerAdatper

ViewResolver

  • ContentNegotiatingViewResolver
  • BeanNameViewResolver
  • ThymeleafViewResolver (타임리프 의존성을 추가해서 등록됨)
  • InternalResourceViewResolver

External Libraries -> maven : org.springframework.boot:spring-boot-autoconfigure:2.5.1 -> spring-boot-autoconfigure-2.5.1.jar -> META-INF -> spring.factories

DispatcherServletAutoConfiguration.class
WebMvcAutoConfiguration.class

스프링 부트를 사용하는 스프링 MVC

자바 애플리케이션에 내장 톰캣을 만들고 그 안에 DispatcherServlet을 등록한다.

  • 스프링 부트 자동 설정이 자동으로 해줌.
  • 스프링 부트의 주관에 따라 여러 인터페이스 구현체를 빈으로 등록한다.

스프링 부트의 “주관”이 적용된 자동 설정이 동작한다.

  • JSP 보다 Thymeleaf 선호
  • JSON 지원
  • 정적 리소스 지원 (+ 웰컴 페이지, 파비콘 등 지원)

스프링 MVC 커스터마이징

  • application.properties
  • @Configuration + Implements WebMvcConfigurer: 스프링 부트의 스프링 MVC 자동설정 + 추가 설정
  • @Configuration + @EnableWebMvc + Imlements WebMvcConfigurer: 스프링 부트의 스프링 MVC 자동설정 사용하지 않음. (@EnableWebMvc만 사용해도 스프링부트의 스프링 MVC 자동설정 사용하지 않음)
@Configuration(proxyBeanMethods = false)
@ConditionalOnWebApplication(type = Type.SERVLET)
@ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class })
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)
@AutoConfigureAfter({ DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class,
		ValidationAutoConfiguration.class })
public class WebMvcAutoConfiguration {

@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
조건에 의해 @EnableWebMvc가 있으면 스프링부트의 스프링 MVC를 자동설정 하지 않는다.

참고

  • 인프런 : 스프링 웹 MVC(백기선)
profile
이것저것 관심많은 개발자.

0개의 댓글