https://sundaland.tistory.com/364
[ ▶ Enable MVC Configuration ]
Spring MVC에서 @EnableWebMvc 애노테이션은 자바 기반 설정에서 MVC 구성을 활성화하기 위해 사용된다. 이를 통해 뷰 해석, 핸들러 매핑, 인자 해결자, 기타 웹 관련 설정을 수동으로 설정하지 않고도 기본적으로 제공되는 필수 구성을 활성화할 수 있다. 이 애노테이션은 Spring의 애노테이션 기반 접근 방식의 일부로, 웹 설정을 단순화하여 사전 정의된 MVC 설정을 활성화한다.
[ ▷ @EnableWebMvc에 대한 설명 ]
△ 기능
@EnableWebMvc가 적용되면 Spring MVC의 구성을 가져와서 웹 애플리케이션 개발에 필요한 기본 빈들을 등록한다.
- View resolvers (JSP를 위한 InternalResourceViewResolver)
- Message converters (JSON 또는 XML 변환)
- Exception handlers
- Interceptors
- Data binding 및 validation mechanisms 메커니즘
- Handler mappings (mapping URLs to controllers)
△ Default Configuratuion
실제로 @EnableWebMvc는 DelegatingWebMvcConfiguration 클래스를 등록하여 여러 기본 설정을 제공한다.
- RequestMappingHandlerMapping: 요청을 핸들러 메서드에 매핑.
- RequestMappingHandlerAdapter: 요청을 처리할 컨트롤러 메서드에 적응.
- HandlerExceptionResolver: 요청 처리 중 발생한 예외를 해결.
- DefaultViewResolver: 논리적 뷰 이름을 실제 뷰 템플릿으로 해석.
[ ▷ Java Configuration 예시 ]
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
// 필요한 경우 기본 설정을 재정의
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**")
.addResourceLocations("/public", "classpath:/static/");
}
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/views/", ".jsp");
}
// 인터셉터, 메시지 변환기 등 기타 설정을 사용자 정의 가능
}
- @EnableWebMvc 애노테이션은 Spring MVC를 활성화하고 기본 구성을 등록한다.
- WebMvcConfigurer 인터페이스를 구현하여 리소스 핸들러를 추가하거나 뷰 해석기를 설정하는 등 기본 설정을 사용자 정의할 수 있다.
[ ▷ Reactive 스택(Spring WebFlux)에서의 동등 기능 ]
Spring의 Reactive 스택(WebFlux)에서는 유사한 방식으로 웹 구성을 활성화할 수 있지만, 이는 비동기식, 논블로킹(non-blocking) 방식의 요청 처리를 위한 반응형 프로그래밍에 맞춰져 있다. Reactive 스택에서 @EnableWebMvc와 동등한 애노테이션은 @EnableWebFlux다.
@Configuration
@EnableWebFlux
public class WebFluxConfig implements WebFluxConfigurer {
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.freeMarker().prefix("/WEB-INF/views/").suffix(".ftl");
}
@Override
public void configureHttpMessageCodecs(ServerCodecConfigurer configurer) {
configurer.defaultCodecs().enableLoggingRequestDetails(true);
}
// WebFlux에 특화된 설정 추가 가능
}
[ ▷ Spring MVC와 Spring WebFlux의 주요 차이점 ]
- Programming Model: Spring MVC는 Blocking(요청 당 하나의 스레드) 모델을 사용하지만, WebFlux는 Non-Blocking, 이벤트 기반 모델을 사용하여 반응형 프로그래밍에 적합하다.
- Enable Annotation: Spring MVC에서는 @EnableWebMvc를 사용하고, WebFlux에서는 @EnableWebFlux를 사용하여 구성을 활성화한다.
- View Handling: Spring MVC는 전통적인 JSP와 같은 뷰 기술과 함께 사용할 수 있지만, Spring WebFlux는 일반적으로 논블로킹 렌더링을 위해 Thymeleaf, FreeMarker, Mustache와 같은 Reactive 뷰 템플릿을 사용한다.
전반적인 구조는 유사하지만, Reactive 스택은 더 적은 자원으로 높은 동시성을 처리할 수 있도록 설계되어, 높은 부하가 걸릴 때 확장성이 요구되는 애플리케이션에 적합하다.
'Web on Servlet Stack' 카테고리의 다른 글
Interceptors (0) | 2024.10.15 |
---|---|
MVC Config API (0) | 2024.10.15 |
Functional Endpoints [Serving Resources,Running a Server,Filtering Handler Functions] (0) | 2024.10.14 |
DispatcherServlet (0) | 2024.10.14 |
RounterFunction (0) | 2024.10.14 |