WebMvcConfigurer
🧩 WebMvcConfigurer란
정의
WebMvcConfigurer는 Spring MVC의 기본 설정을 유지하면서 필요한 부분만 선택적으로 커스터마이징할 수 있게 해주는 인터페이스이다. 주로@EnableWebMvc와 함께 사용한다.
- 보일러플레이트 설정을 줄여준다.
- 인터셉터, 뷰 리졸버, 정적 리소스, CORS 등을 조정할 수 있다.
- Spring MVC의 세부 동작을 앱 요구사항에 맞게 바꿀 수 있다.
⚙️ Gradle 설정
dependencies {
implementation 'org.springframework:spring-webmvc:5.3.8'
}
🛠 주요 용도
인터셉터 등록
- 요청을 처리하기 전후에 공통 로직이 필요할 때 사용한다.
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "org.infinity.server.controller.api")
public class MvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyInterceptor());
}
}
뷰 리졸버
- 컨트롤러에서 반환된 뷰 이름을 실제 뷰 객체로 변환한다.
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
registry.viewResolver(resolver);
}
함께 알아둘 점
@EnableWebMvc가 있어야 Spring MVC 기본 설정이 활성화되고,WebMvcConfigurer로 그 설정을 확장할 수 있다.
리소스 핸들링
- JavaScript, CSS, 이미지 같은 정적 리소스를 제어한다.
- 요청 경로와 실제 리소스 위치를 매핑한다.
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/assets/**")
.addResourceLocations("classpath:/static/assets/");
registry.addResourceHandler("/static/**")
.addResourceLocations("classpath:/static/");
}
경로 구분
ResourceHandler는 요청 경로이고,ResourceLocation은 실제 리소스 위치다.
example
http://localhost:8080/assets/my.js요청이 들어오면classpath:/static/assets/경로에서 파일을 찾는다.
Exception 핸들링
- 컨트롤러 밖으로 던져진 예외를 처리하고 응답 방식을 조정한다.
@Override
public void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
resolvers.add(new MyHandlerExceptionResolver());
}
메세지 변환
- 메시지 컨버터를 추가해 JSON, XML 같은 형식의 데이터를 읽고 쓸 수 있게 한다.
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new MyCustomMessageConverter());
}
Path Matching
- URL 패턴 매칭 방식을 조정한다.
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
configurer.setUseTrailingSlashMatch(true);
}
Content Negotiation
- 클라이언트가 어떤 타입의 응답을 원하는지 협상하는 방식을 설정한다.
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer.favorPathExtension(false)
.favorParameter(true)
.parameterName("mediaType")
.ignoreAcceptHeader(true)
.useRegisteredExtensionsOnly(false)
.defaultContentType(MediaType.APPLICATION_JSON)
.mediaType("xml", MediaType.APPLICATION_XML);
}
CORS Configuration
- 다른 도메인에서 접근할 때 필요한 CORS 규칙을 정의한다.
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://allowed-origin.com")
.allowedMethods("GET", "POST")
.allowCredentials(true);
}
⚠️ 주의사항
WebMvcConfigurer는 필요한 설정만 덧붙이는 용도다.@EnableWebMvc없이 쓰면 기대한 설정이 반영되지 않을 수 있다.- 정적 리소스, CORS, 메시지 컨버터는 함께 영향받는 경우가 많다.
- 오래된
WebMvcConfigurerAdapter는 사용하지 않는 편이 좋다.
📌 정리
WebMvcConfigurer는 Spring MVC의 기본 동작을 유지하면서 일부를 커스터마이징하는 인터페이스다.- 인터셉터, 뷰 리졸버, 정적 리소스, 예외 처리, 메시지 변환, CORS 설정에 자주 쓴다.
@EnableWebMvc와 함께 이해하면 전체 구조가 보인다.
댓글남기기