https://docs.spring.io/spring-framework/reference/web/webmvc/mvc-config.html
https://docs.spring.io/spring-framework/reference/web/webmvc/mvc-config/customize.html#page-title
1. WebMvcConfigurer란?
WebMvcConfigurer는 Spring MVC에서 제공하는 인터페이스로, Spring의 기본 설정을 커스터마이징하는 데 사용됩니다.
주로 URL 매핑, 뷰 리졸버, 리소스 처리, CORS 설정, 인터셉터 등록 등과 같은 MVC 설정을 사용자 정의할 수 있도록 지원합니다.
2. WebMvcConfigurer의 역할
- Spring Boot의 자동 설정을 유지하면서 필요한 부분만 변경:
- Spring Boot의 기본 설정을 덮어쓰지 않고, 커스터마이징이 필요한 부분만 설정 가능.
- 애플리케이션 전역 설정 적용:
- 공통적으로 적용할 규칙(예: 전역 URL 패턴, 리소스 핸들링, 포맷 설정 등)을 설정.
- Spring MVC 기능 확장:
- 인터셉터, 포맷터, 메시지 컨버터 등을 추가하여 애플리케이션의 요구 사항에 맞게 확장 가능.
3. WebMvcConfigurer의 주요 메서드
메서드 역할
addViewControllers(ViewControllerRegistry registry) | 특정 URL에 대해 컨트롤러 없이 바로 뷰를 연결. |
configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) | 기본 서블릿 처리 활성화. |
addResourceHandlers(ResourceHandlerRegistry registry) | 정적 리소스(js, css, 이미지 등) 경로 설정. |
addCorsMappings(CorsRegistry registry) | 전역 CORS(Cross-Origin Resource Sharing) 설정. |
addFormatters(FormatterRegistry registry) | 커스텀 포맷터나 변환기 등록. |
addInterceptors(InterceptorRegistry registry) | 요청 처리 전에 가로채는 인터셉터 등록. |
configureMessageConverters(List<HttpMessageConverter<?>> converters) | HTTP 메시지 변환기 설정 (예: JSON → 객체). |
configureContentNegotiation(ContentNegotiationConfigurer configurer) | 클라이언트 요청에 따라 반환할 데이터 타입 설정 (JSON, XML 등). |
configurePathMatch(PathMatchConfigurer configurer) | URL 경로 매핑 규칙 설정. |
4. WebMvcConfigurer를 구현하는 방법
WebMvcConfigurer는 인터페이스이므로 원하는 메서드만 오버라이드하여 사용할 수 있습니다.
주로 @Configuration 어노테이션과 함께 사용됩니다.
4.1 기본 구조
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
// 필요한 메서드 오버라이드
}
5. 주요 설정 예제
5.1 뷰 컨트롤러 추가
- 특정 URL을 처리하기 위해 별도의 컨트롤러 없이 뷰만 연결.
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/home").setViewName("home");
registry.addViewController("/login").setViewName("login");
}
사용 사례
- 로그인 페이지나 정적 페이지와 같이 간단한 URL 매핑이 필요한 경우.
5.2 정적 리소스 핸들링
- 정적 리소스(js, css, 이미지 등)의 경로를 설정.
코드 예제
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**")
.addResourceLocations("classpath:/static/");
}
사용 사례
- /static/ 경로로 접근하면 src/main/resources/static/에서 정적 리소스를 제공.
5.3 CORS 설정
- 특정 도메인에서 애플리케이션에 접근할 수 있도록 허용(CORS).
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**") // CORS 적용 경로
.allowedOrigins("<http://example.com>") // 허용 도메인
.allowedMethods("GET", "POST") // 허용 HTTP 메서드
.allowCredentials(true); // 쿠키 허용 여부
}
사용 사례
- 클라이언트와 서버가 다른 도메인에 있을 때 API 호출 허용.
5.4 인터셉터 추가
- 요청/응답 전에 특정 로직을 실행.
Spring Web MVC - HandlerInterceptor
인터셉터 구현:
import org.springframework.web.servlet.HandlerInterceptor;
public class CustomInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
System.out.println("Interceptor: Before request processing");
return true; // true일 경우 다음 단계로 진행
}
}
WebMvcConfigurer에 등록:
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new CustomInterceptor())
.addPathPatterns("/api/**") // 적용 경로
.excludePathPatterns("/api/login"); // 제외 경로
}
사용 사례
- 인증, 로깅, 사용자 권한 검사 등 요청 처리 전에 실행해야 하는 로직.
5.5 메시지 컨버터 추가
- 클라이언트 요청(JSON, XML 등)을 객체로 변환하거나, 객체를 응답으로 변환.
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new MappingJackson2HttpMessageConverter());
}
사용 사례
- JSON 요청/응답 변환을 커스터마이징.
5.6 포맷터 및 변환기 등록
- 데이터 포맷 변환(예: 날짜 형식 변경).
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addFormatter(new DateFormatter("yyyy-MM-dd"));
}
사용 사례
- 날짜 형식 변경(2024-01-01 → 01/01/2024).
5.7 PathMatch 설정
- URL 경로 매핑 규칙을 설정.
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
configurer.setUseTrailingSlashMatch(false); // 슬래시 구분 활성화
}
사용 사례
- /example/와 /example를 구분.
6. WebMvcConfigurer vs @EnableWebMvc
특징 | WebMvcConfigurer | @EnableWebMvc |
사용 목적 | Spring Boot 기본 설정을 유지하며 커스터마이징 가능 | Spring Boot의 기본 MVC 설정을 완전히 대체 |
설정 범위 | 필요한 메서드만 오버라이드하여 선택적으로 설정 가능 | 모든 MVC 설정을 수동으로 정의해야 함 |
적합한 환경 | 대부분의 Spring Boot 애플리케이션 | 기본 설정을 모두 커스터마이징해야 하는 고급 애플리케이션 |
'Spring' 카테고리의 다른 글
Spring Web MVC - 파일 업로드와 MultipartFile (0) | 2024.12.23 |
---|---|
HttpServletRequest 객체에서 Parameter와 Attribute의 차이 (0) | 2024.12.23 |
Spring Web MVC - HandlerInterceptor (0) | 2024.12.23 |
리다이렉트(Redirect)와 포워드(Forward) (0) | 2024.12.23 |
Spring Web MVC - 모델(Model) 폼 데이터 처리 (0) | 2024.12.20 |