web/Spring

Spring, spring-boot의 mvc 다양한 설정 설명

반응형

Spring에서 사용하는 다양한 설정이 존재한다.


그 설정들에 대한 정리가 필요할 것같아서 한번 정리해 보았다.


※ 스프링 MVC 사용을위한 설정

- 기존에 스프링 MVC 설정을 위해서 xml 파일에 다음과 같이 설정하였다.

<mvc:annotation-driven/>


하지만 대부분의 설정이 xml에서 java로 변경하는 추세에서는 다음과 같이 설정한다.

1
2
3
4
5
@Configuration
@EnableWebMvc
public class WebConfig {
 
}
cs

여기서 추가적인 기본 설정들을 커서텀하고 싶을 경우 WebMvcConfigurerAdapter 추상클래스를 상속받아 재정의하여 사용했다.

1
2
3
4
5
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
 
}
cs


하지만 spring5에서는 WebMvcConfigurerAdapter를 사용하지 않는다. 

대신 WebMvcConfigurer 인터페이스를 사용한다.


그 이유는 WebMvcConfigurerAdaper에 경우 추상클래스였기에 필요치 않은 메서드도 구현을 해야했지만 java8에서는 디폴트 메서드가 생기면서 그럴필요가 없어졌기 때문이다.

Deprecated. 
as of 5.0 WebMvcConfigurer has default methods (made possible by a Java 8 baseline) and can be implemented directly without the need for this adapter


그렇기 때문에 몇가지 문법 사용에 변경되었는데 그중에 내가 사용하는 부분중에서는 intercepter설정과 MessageConverter설정이 변경되었다.

기존에는 다음과같이 사용했다.

1
2
3
4
5
6
7
8
9
10
11
12
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    converters.add(converter());
    super.configureMessageConverters(converters);
}
 
@Override
public void addInterceptors(InterceptorRegistry registry) {
    // Always Interceptor
    registry.addInterceptor(alwaysInterceptor()).addPathPatterns("/**").excludePathPatterns("/weather");
    super.addInterceptors(registry);
}
cs



하지만 webMvcConfigurer 인터페이스를 사용하면 다음과 같이 사용하면 된다.

1
2
3
4
5
6
7
8
9
10
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    converters.add(converter());
}
 
@Override
public void addInterceptors(InterceptorRegistry registry) {
    // Always Interceptor
    registry.addInterceptor(alwaysInterceptor()).addPathPatterns("/**").excludePathPatterns("/weather");
}
cs



그리고 설정에서 사용하는 @EnableMvc 과연 이놈은 무슨놈일까 궁금했다. 이놈은 Spring-Boot 에서는 굳이 사용할 필요가 없다고 하는데 왜일까?


@EnableMvc 애노테이션을 붙히게 되면 WebMvcConfigurationSupport 클래스가 자동으로 빈으로 등록이된다.

이 클래스는 Mvc Java Config 설정에서 설정을 제공하는 주요 클래스이다. 그렇기 때문에 기본적이 웹 설정을 제외한 handler 등등의 설정을 진행하기 위해서는 해당 설정이 필요하다.

spring-boot에서는 기본적으로 클래스패스에 웹관련 설정이 있을경우 WebMvcAutoConfiguration 클래스를 동작하여 기본적인 설정을 진행해준다.


하지만 커스텀을 진행하려고 한다면 무조건 @EnableWebMvc 애노테이션을 붙혀주거나 WebMvcConfigurationSupport를 상속받아야한다. 왜냐면 WebMvcConfigurationSupport클래스는 WebMvcAutoConfiguration 클래스가 동작하지 않을때만 동작하기 때문이다.


이렇게 spring mvc 설정에 관련된 클래스들에 대해 알아보았다.


평소에 정리가 되지않아 헷갈렸는데 정리가 되어서 기분이좋다.






반응형