Apache Tomcat / / 2024. 10. 15. 10:40

Enable MVC Configuration

Enable MVC Configuration은 Spring Framework에서 Spring MVC 설정을 활성화하는 중요한 개념이야. 이를 구현하는 데 주로 사용하는 것이 바로 @EnableWebMvc 애노테이션인데, 이 애노테이션은 스프링 애플리케이션에서 MVC 관련 기본 설정을 가져오고, 필요한 기능을 활성화시켜줘.

 

1. @EnableWebMvc의 역할

 

@EnableWebMvc는 스프링 애플리케이션에서 Spring MVC를 구성하는 역할을 해. 이 애노테이션을 붙이면, **DelegatingWebMvcConfiguration**이라는 클래스를 통해 여러 MVC 관련 기능들이 활성화돼. 이 클래스는 스프링에서 기본적인 MVC 설정을 관리하는 클래스야.

 

@EnableWebMvc를 사용하지 않으면 스프링 부트는 기본적으로 간편한 설정을 제공하지만, @EnableWebMvc를 추가하면 기존 설정을 무시하고 개발자가 원하는 대로 직접 커스터마이징할 수 있어.

 

2. 기본 MVC 설정 (Default MVC Configuration)

 

@EnableWebMvc를 사용하면 아래와 같은 기본 설정이 자동으로 활성화돼:

 

RequestMappingHandlerMapping: 클라이언트 요청을 적절한 컨트롤러 메서드로 매핑해주는 설정이야. @RequestMapping, @GetMapping 등의 애노테이션을 통해 URL과 컨트롤러 메서드를 연결하지.

RequestMappingHandlerAdapter: 매핑된 요청을 실제로 처리하는 설정이야. 컨트롤러 메서드를 호출하고, 요청 데이터를 메서드의 파라미터로 변환해주는 역할을 해.

ExceptionHandlerExceptionResolver: 컨트롤러에서 발생한 예외를 처리하는 설정이야. @ExceptionHandler 애노테이션을 통해 발생한 예외에 맞는 메서드를 실행해.

ViewResolver: 컨트롤러에서 리턴한 뷰 이름을 실제 파일 경로로 변환해주는 설정이야. 예를 들어, return "home"이라고 하면, 설정에 따라 WEB-INF/views/home.jsp로 변환될 수 있어.

MessageConverters: 요청과 응답의 바디를 JSON, XML 등으로 변환해주는 설정이야. 클라이언트에서 JSON을 보내면 이를 객체로 변환해주거나, 객체를 JSON으로 응답할 때 사용돼.

Static Resource Handling: CSS, JS, 이미지 같은 정적 리소스를 /resources/, /static/ 경로에서 제공할 수 있도록 설정하는 기능이 있어.

 

3. WebMvcConfigurer를 통한 커스터마이징

 

@EnableWebMvc를 사용하면 Spring MVC의 기본 설정을 가져오지만, 이를 커스터마이징하고 싶을 때는 WebMvcConfigurer 인터페이스를 구현할 수 있어. WebMvcConfigurer는 Spring MVC의 동작 방식을 세밀하게 조정할 수 있도록 여러 메서드를 제공해.

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        // 뷰 리졸버 설정
        registry.jsp("/WEB-INF/views/", ".jsp");
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 정적 리소스 핸들러 설정
        registry.addResourceHandler("/static/**").addResourceLocations("/public/");
    }

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        // 메시지 컨버터 커스터마이징
        converters.add(new MappingJackson2HttpMessageConverter());
    }
}

 

위 코드에서는 WebMvcConfigurer를 통해 뷰 리졸버, 정적 리소스 핸들러, 메시지 컨버터를 커스터마이징하고 있어.

 

4. 스프링 부트와의 차이점

 

스프링 부트를 사용할 때는 보통 @EnableWebMvc를 따로 사용하지 않고도 Spring MVC의 기본 설정을 활용할 수 있어. 스프링 부트는 기본적으로 자동 설정 기능이 활성화돼 있기 때문에, 대부분의 Spring MVC 관련 설정이 자동으로 적용되지.

 

하지만 **@EnableWebMvc**를 사용하게 되면 자동 설정이 비활성화되고, 개발자가 수동으로 Spring MVC를 설정해야 해. 따라서 직접 커스터마이징을 하고 싶은 경우에 @EnableWebMvc와 함께 WebMvcConfigurer를 구현해 필요한 기능을 설정할 수 있어.

 

5. 대표적인 사용 사례

 

REST API 구현 시: @EnableWebMvc를 사용해서 MessageConverters를 추가로 설정하거나, JSON, XML 등 다양한 형식으로 응답을 줄 때 유용해.

정적 리소스 관리: 웹 애플리케이션에서 JS, CSS 같은 정적 파일을 처리하는 경로를 커스터마이징할 때 사용할 수 있어.

커스텀 예외 처리: 전역적인 예외 처리나 특정 예외에 대한 뷰를 설정하고 싶을 때 사용해.

 

요약:

 

@EnableWebMvc는 Spring MVC를 활성화하는 애노테이션으로, 기본적인 요청-응답 처리, 뷰 리졸버, 정적 리소스 처리 등을 자동으로 설정해줘. 필요할 경우 WebMvcConfigurer를 통해 세부 설정을 커스터마이징할 수 있으며, 스프링 부트에서는 기본적으로 이 설정이 자동 적용되므로 사용하지 않아도 되지만, 세밀한 제어가 필요할 때 @EnableWebMvc를 사용할 수 있어.

'Apache Tomcat' 카테고리의 다른 글

SLF4J  (0) 2024.10.15
MVC Config API  (0) 2024.10.15
@RequestMapping handler method  (0) 2024.10.11
@GetMapping, @PostMapping  (0) 2024.10.08
@RestController, View Resolver, RESTful API  (0) 2024.10.08
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유