1.MVC Config :: Spring Framework
2. MVC Config API :: Spring Framework
더보기
@Configuration VS @Component
@Component는 개발자가 직접 작성한 클래스를 bean으로 등록하고자할 때 사용한다.
@Configuration은 @Component를 포함하는데, 외부 라이브러리 또는 내장 클래스를 bean으로 등록하고자할 때, 1개이상의 @Bean을 제공하는 클래스에 붙여 사용한다.
WebMvcConfigurer란?
WebMvcConfigurer는 Spring MVC에서 제공하는 인터페이스로, Spring의 기본 설정을 커스터마이징하는 데 사용됩니다.
주로 URL 매핑, 뷰 리졸버, 리소스 처리, CORS 설정, 인터셉터 등록 등과 같은 MVC 설정을 사용자 정의할 수 있도록 지원합니다.
WebMvcConfigurer의 주요 역할
- Spring Boot의 자동 설정을 유지하면서 필요한 부분만 변경:
- Spring Boot의 기본 설정을 덮어쓰지 않고, 커스터마이징이 필요한 부분만 설정 가능.
- 애플리케이션 전역 설정 적용:
- 공통적으로 적용할 규칙(예: 전역 URL 패턴, 리소스 핸들링, 포맷 설정 등)을 설정.
- Spring MVC 기능 확장:
- 인터셉터, 포맷터, 메시지 컨버터 등을 추가하여 애플리케이션의 요구 사항에 맞게 확장 가능.
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 경로 매핑 규칙 설정. |
기본 구조
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
//WebMvcConfigurer는 인터페이스이므로 원하는 메서드만 오버라이드하여 사용할 수 있습니다.
// 필요한 메서드 오버라이드
}
주요 설정 예제
1 뷰 컨트롤러 추가
- 특정 URL을 처리하기 위해 별도의 컨트롤러 없이 뷰만 연결.
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/home").setViewName("home");
registry.addViewController("/login").setViewName("login");
}
사용 사례
- 로그인 페이지나 정적 페이지와 같이 간단한 URL 매핑이 필요한 경우.
2 정적 리소스 핸들링
- 정적 리소스(js, css, 이미지 등)의 경로를 설정.
코드 예제
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**")
.addResourceLocations("classpath:/static/");
}
사용 사례
- /static/ 경로로 접근하면 src/main/resources/static/에서 정적 리소스를 제공.
3 CORS 설정
- 특정 도메인에서 애플리케이션에 접근할 수 있도록 허용(CORS).
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**") // CORS 적용 경로
.allowedOrigins("<http://example.com>") // 허용 도메인
.allowedMethods("GET", "POST") // 허용 HTTP 메서드
.allowCredentials(true); // 쿠키 허용 여부
}
사용 사례
- 클라이언트와 서버가 다른 도메인에 있을 때 API 호출 허용.
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 메시지 컨버터 추가
- 클라이언트 요청(JSON, XML 등)을 객체로 변환하거나, 객체를 응답으로 변환.
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new MappingJackson2HttpMessageConverter());
}
사용 사례
- JSON 요청/응답 변환을 커스터마이징.
6 포맷터 및 변환기 등록
- 데이터 포맷 변환(예: 날짜 형식 변경).
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addFormatter(new DateFormatter("yyyy-MM-dd"));
}
사용 사례
- 날짜 형식 변경(2024-01-01 → 01/01/2024).
7 PathMatch 설정
- URL 경로 매핑 규칙을 설정.
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
configurer.setUseTrailingSlashMatch(false); // 슬래시 구분 활성화
}
사용 사례
- /example/와 /example를 구분.
WebMvcConfigurer vs @EnableWebMvc
| 특정 | WebMvcConfigurer | @EnableWebMvc |
| 사용 목적 | Spring Boot 기본 설정을 유지하며 커스터마이징 가능 | Spring Boot의 기본 MVC 설정을 완전히 대체 |
| 설정 범위 | 필요한 메서드만 오버라이드하여 선택적으로 설정 가능 | 모든 MVC 설정을 수동으로 정의해야 함 |
| 적합한 환경 | 대부분의 Spring Boot 애플리케이션 | 기본 설정을 모두 커스터마이징해야 하는 고급 애플리케이션 |
'Backend > Spring' 카테고리의 다른 글
| [Spring Web MVC] HandlerInterceptor (0) | 2024.11.26 |
|---|---|
| Rdeirect VS Forward (0) | 2024.11.26 |
| [Spring Web MVC] Session (0) | 2024.11.25 |
| [Spring Web MVC] 🍪Cookie (0) | 2024.11.25 |
| [Spring Web MVC] HTTP 요청 RequestMapping (0) | 2024.11.25 |