스프링 부트에서의 설정은 크게 웹과 관련된 설정과 웹과 무관한 설정 둘로 나누어서 관리하는 것을 권장한다.
편의상 앞으로 웹과 관련된 설정 파일은 MVCConfig라고 하자.
WebMvcConfigure
MVCConfig가 웹과 관련된 처리를 하기 위해서는 WebMvcConfigurer interface를 구현하는 것이 좋다.
package com.eshome.mvc.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MVCConfig implements WebMvcConfigurer {
}
WebMvcConfigurer에는Spring MVC에서 아주 유용하게 사용되는 기능들이 선언되어있어서 해당 기능을 사용하려면 관련 메서드를 제정의 하면 된다. 또한 WebMvcConfigurer의 모든 메서드가 default 메서드로 선언되어 있어서 반드시 재정의해야하는 메서드는 없다. 필요할 때만 하면 된다.
Handler Adapter에서 view 이름이 반환되면 resolver는 view 이름의 앞에 /WEB-INF/views/를 붙이고 뒤에 .jsp를 붙여서 실제 호출될 jsp의 위치를 완성한다. 즉 index라는 이름을 받으면 /WEB-INF/views/index.jsp를 찾게 하는 것이다.
또는 명시적으로 ViewResolver를 추가할 수도 있다.
@Configuration
public class MVCConfig implements WebMvcConfigurer {
@Bean
public ViewResolver internalResourceViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
...
}
실행하기
이제 모든 준비는 완료이다. 다시 애플리케이션을 동작시켜보거나 단위테스트를 실행해보았을 때 Thymeleaf를 사용했을 때와 동일하게 동작하는 것을 확인할 수 있을 것이다. 겨우 몇 개의 설정만으로 template 기술을 대체하는 것은 스프링 부트의 유연함, 확장성의 결과이다.