Web on Servlet Stack

Enable MVC Configuration

GLaDiDos 2024. 10. 15. 11:06

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의 주요 차이점 ]

  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 스택은 더 적은 자원으로 높은 동시성을 처리할 수 있도록 설계되어, 높은 부하가 걸릴 때 확장성이 요구되는 애플리케이션에 적합하다.