MVC 설정

September 11, 2021

@EnableWebMvc

@Configuration@EnableWebMvc를 붙여주면 XML 상에서 <mvc:annotaion-config/>를 구성한 것과 같은 기능을 제공한다.

이처럼 인프라 빈에 대한 추가 설정을 위해 스프링에서는 설정용 빈을 활용하는 방법을 제공하고 있으며 이를 Configurer라고 한다. 여기서 @EnableWebMvc Configurer가 구현할 인터페이스 WebMvcConfigurer이다.

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer{
	...
}

스프링부트에서의 설정

스프링부트는 Auto Configuration을 지원하며 이에 관한 설정도 존재한다. 아래와 같이 어노테이션이 지정되어 있는데 조건 중 WebConfigurationSupport가 빈으로 존재하지 않을 때만 설정을 구성한다고 명시되어 있다.

@EnableWebMvc를 지정해버리면 해당 타입의 빈이 등록되는데 이러면 자동 설정을 사용할 수 없게 된다. 스프링부트에 의한 자동 설정을 유지하면서 부가적인 설정을 하기 위해서는 WebMvcConfigurer를 구현한 빈에서 @EnableWebMvc 어노테이션을 제거하면 된다.

@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 {
	...
}

참고

  • 이일민, 토비의 스프링 3.1, 에이콘

songmk 🙁