Spring MVC, WebMvcConfigurer

jkeum·2024년 5월 1일

Spring Boot

목록 보기
1/4

Spring MVC?

Spring MVC는 Java 기반의 웹 프레임워크로, 웹 애플리케이션을 위한 Model-View-Controller(MVC) 아키텍처를 구현한 모듈이다.
개발자가 유연하고, 테스트 가능하며, 잘 구조화된 웹 애플리케이션을 개발할 수 있도록 지원한다.

MVC 아키텍처

MVC 아키텍처는 애플리케이션을 세 가지 주요 구성 요소로 분리한다.

  1. Model: 데이터와 비즈니스 로직을 캡슐화한다. 애플리케이션의 데이터를 정의하고, 데이터를 처리하는 로직(비즈니스 로직)을 포함한다.
  2. View: 사용자 인터페이스(UI)를 담당한다. 주로 사용자에게 데이터를 보여주는 방식을 정의하고, 사용자의 입력을 받아 처리한다.
  3. Controller: 사용자의 입력을 처리하고 모델을 업데이트하며, 적절한 뷰를 선택하는 로직을 담당한다.

Spring MVC의 주요 특징

  1. DispatcherServlet: Spring MVC의 중심에는 DispatcherServlet이 있다. 이는 프론트 컨트롤러 패턴을 구현하며, 모든 웹 요청을 중앙에서 처리하여 적절한 핸들러에 요청을 전달한다.

  2. 컨트롤러: @Controller 또는 @RestController 어노테이션을 사용하여 선언되며, HTTP 요청을 처리하는 메소드(핸들러 메소드)를 포함한다. 이 메소드들은 @RequestMapping 어노테이션을 통해 특정 URL 경로와 HTTP 메소드에 매핑된다.

  3. 뷰 해석: Spring MVC는 다양한 뷰 기술을 지원한다. JSP, Thymeleaf, FreeMarker 등의 뷰 템플릿 엔진을 사용하여 동적인 웹 페이지를 생성할 수 있다.

  4. 데이터 바인딩: @ModelAttribute, @RequestParam, @PathVariable 등의 어노테이션을 통해 요청 파라미터를 자바 객체로 자동 변환하고 바인딩한다.

  5. 유효성 검증: Spring MVC는 @Valid 어노테이션과 Spring의 Validator 인터페이스를 사용하여 모델 데이터의 유효성을 검사할 수 있다.

  6. 예외 처리: @ExceptionHandler 어노테이션을 사용하여 컨트롤러 내에서 발생할 수 있는 예외를 처리한다. 또한, ControllerAdvice를 사용하여 애플리케이션 전반에 걸친 예외 처리 로직을 중앙에서 관리할 수 있다.

  7. RESTful 서비스: @RestController@RequestMapping을 조합하여 RESTful 웹 서비스를 쉽게 구축할 수 있다. JSON이나 XML 형태로 데이터를 클라이언트에 제공하거나 받을 수 있다.

결론

Spring MVC는 강력하고 유연한 웹 개발 프레임워크로, Java 개발자들에게 광범위하게 사용되고 있다. 스프링의 DI(Dependency Injection), AOP(Aspect-Oriented Programming) 같은 기능과 잘 통합되어, 강력하고 유지보수가 용이한 웹 애플리케이션을 만드는 데 도움을 준다.


WebMvcConfigurer

WebMvcConfigurer 인터페이스는 Spring MVC를 사용하는 Spring Boot 애플리케이션에서 웹 MVC 설정을 사용자 정의하기 위해 사용된다. 이 인터페이스를 구현함으로써, 개발자는 Spring의 기본 웹 MVC 구성을 확장하거나 수정할 수 있다.

WebMvcConfigurer의 주요 역할

  1. 인터셉터 추가: 요청을 처리하기 전후에 특정 로직을 실행할 인터셉터를 등록할 수 있다. 예를 들어, 요청의 실행 시간을 로깅하거나, 인증 처리 등의 사전 처리 작업을 할 수 있다.

  2. 리소스 핸들러 설정: 정적 리소스(이미지, 자바스크립트, CSS 파일 등)에 대한 경로를 설정하고 캐싱 정책을 적용할 수 있다.

  3. CORS (Cross-Origin Resource Sharing) 설정: 다른 도메인에서 현재 도메인으로의 API 요청을 허용하도록 설정할 수 있다. 이는 API를 외부 서비스에 제공할 때 필수적인 설정이다.

  4. 뷰 컨트롤러 등록: 특정 URL 요청에 대해 뷰 이름을 직접 매핑하며, 컨트롤러 로직 없이 뷰를 반환할 수 있도록 한다. 예를 들어, 홈페이지나 로그인 페이지 등을 간단히 설정할 때 유용하다.

  5. 메시지 컨버터 구성: HTTP 요청과 응답에서 사용되는 데이터 포맷을 변환하기 위한 메시지 컨버터를 추가하거나 제거할 수 있다. 예를 들어, JSON, XML 등 다양한 데이터 포맷을 처리할 수 있다.

  6. 패스 패턴 설정: URL 경로 패턴을 설정하여 요청을 처리한다.

예제: WebMvcConfigurer 구현

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("http://example.com")
                .allowedMethods("GET", "POST", "PUT", "DELETE")
                .allowedHeaders("Header1", "Header2", "Header3")
                .exposedHeaders("Header1", "Header2")
                .allowCredentials(false).maxAge(3600);
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyCustomInterceptor())
                .addPathPatterns("/api/**");
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**")
                .addResourceLocations("/public-resources/")
                .setCachePeriod(3600);
    }
}

위 설정에서는 CORS 정책을 설정하고, 인터셉터를 추가하며, 정적 리소스의 핸들러를 정의하고 있다.

결론

WebMvcConfigurer는 스프링 MVC의 세부적인 동작을 정밀하게 제어할 수 있게 해줌으로써, 복잡하고 다양한 웹 애플리케이션 요구사항에 맞춤화할 수 있는 강력한 도구이다.

profile
It's me, jkeum!

0개의 댓글