Enable MVC Configuration

2024. 10. 14. 20:28Spring Framework/Web on Servlet Stack

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 Configuration:
    실제로 @EnableWebMvcDelegatingWebMvcConfiguration 클래스를 등록하여 여러 기본 설정을 제공합니다. 여기에는 다음과 같은 빈들이 포함됩니다:
    • 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의 주요 차이점:

  1. Programming Model : Spring MVC는 Blocking(요청 당 하나의 스레드) 모델을 사용하지만, WebFlux는 Non-Blocking, 이벤트 기반 모델을 사용하여 반응형 프로그래밍에 적합합니다.
  2. Enable Annotation : Spring MVC에서는 @EnableWebMvc를 사용하고, WebFlux에서는 @EnableWebFlux를 사용하여 구성을 활성화합니다.
  3. View Handling : Spring MVC는 전통적인 JSP와 같은 뷰 기술과 함께 사용할 수 있지만, Spring WebFlux는 일반적으로 논블로킹 렌더링을 위해 Thymeleaf, FreeMarker, Mustache와 같은 Reactive 뷰 템플릿을 사용합니다.

전반적인 구조는 유사하지만, Reactive 스택은 더 적은 자원으로 높은 동시성을 처리할 수 있도록 설계되어, 높은 부하가 걸릴 때 확장성이 요구되는 애플리케이션에 적합합니다.

 

'Spring Framework > Web on Servlet Stack' 카테고리의 다른 글

Type Conversion  (0) 2024.10.14
MVC Config API  (0) 2024.10.14
MVC Config  (0) 2024.10.14
Functional Endpoints  (0) 2024.10.13
Functional Endpoints[Serving Resources,Running a Server,Filtering Handler Functions]  (0) 2024.10.13