Spring MVC는 Java 기반의 웹 프레임워크로, 웹 애플리케이션을 위한 Model-View-Controller(MVC) 아키텍처를 구현한 모듈이다.
개발자가 유연하고, 테스트 가능하며, 잘 구조화된 웹 애플리케이션을 개발할 수 있도록 지원한다.
MVC 아키텍처는 애플리케이션을 세 가지 주요 구성 요소로 분리한다.
DispatcherServlet: Spring MVC의 중심에는 DispatcherServlet이 있다. 이는 프론트 컨트롤러 패턴을 구현하며, 모든 웹 요청을 중앙에서 처리하여 적절한 핸들러에 요청을 전달한다.
컨트롤러: @Controller 또는 @RestController 어노테이션을 사용하여 선언되며, HTTP 요청을 처리하는 메소드(핸들러 메소드)를 포함한다. 이 메소드들은 @RequestMapping 어노테이션을 통해 특정 URL 경로와 HTTP 메소드에 매핑된다.
뷰 해석: Spring MVC는 다양한 뷰 기술을 지원한다. JSP, Thymeleaf, FreeMarker 등의 뷰 템플릿 엔진을 사용하여 동적인 웹 페이지를 생성할 수 있다.
데이터 바인딩: @ModelAttribute, @RequestParam, @PathVariable 등의 어노테이션을 통해 요청 파라미터를 자바 객체로 자동 변환하고 바인딩한다.
유효성 검증: Spring MVC는 @Valid 어노테이션과 Spring의 Validator 인터페이스를 사용하여 모델 데이터의 유효성을 검사할 수 있다.
예외 처리: @ExceptionHandler 어노테이션을 사용하여 컨트롤러 내에서 발생할 수 있는 예외를 처리한다. 또한, ControllerAdvice를 사용하여 애플리케이션 전반에 걸친 예외 처리 로직을 중앙에서 관리할 수 있다.
RESTful 서비스: @RestController와 @RequestMapping을 조합하여 RESTful 웹 서비스를 쉽게 구축할 수 있다. JSON이나 XML 형태로 데이터를 클라이언트에 제공하거나 받을 수 있다.
Spring MVC는 강력하고 유연한 웹 개발 프레임워크로, Java 개발자들에게 광범위하게 사용되고 있다. 스프링의 DI(Dependency Injection), AOP(Aspect-Oriented Programming) 같은 기능과 잘 통합되어, 강력하고 유지보수가 용이한 웹 애플리케이션을 만드는 데 도움을 준다.
WebMvcConfigurer 인터페이스는 Spring MVC를 사용하는 Spring Boot 애플리케이션에서 웹 MVC 설정을 사용자 정의하기 위해 사용된다. 이 인터페이스를 구현함으로써, 개발자는 Spring의 기본 웹 MVC 구성을 확장하거나 수정할 수 있다.
인터셉터 추가: 요청을 처리하기 전후에 특정 로직을 실행할 인터셉터를 등록할 수 있다. 예를 들어, 요청의 실행 시간을 로깅하거나, 인증 처리 등의 사전 처리 작업을 할 수 있다.
리소스 핸들러 설정: 정적 리소스(이미지, 자바스크립트, CSS 파일 등)에 대한 경로를 설정하고 캐싱 정책을 적용할 수 있다.
CORS (Cross-Origin Resource Sharing) 설정: 다른 도메인에서 현재 도메인으로의 API 요청을 허용하도록 설정할 수 있다. 이는 API를 외부 서비스에 제공할 때 필수적인 설정이다.
뷰 컨트롤러 등록: 특정 URL 요청에 대해 뷰 이름을 직접 매핑하며, 컨트롤러 로직 없이 뷰를 반환할 수 있도록 한다. 예를 들어, 홈페이지나 로그인 페이지 등을 간단히 설정할 때 유용하다.
메시지 컨버터 구성: HTTP 요청과 응답에서 사용되는 데이터 포맷을 변환하기 위한 메시지 컨버터를 추가하거나 제거할 수 있다. 예를 들어, JSON, XML 등 다양한 데이터 포맷을 처리할 수 있다.
패스 패턴 설정: URL 경로 패턴을 설정하여 요청을 처리한다.
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의 세부적인 동작을 정밀하게 제어할 수 있게 해줌으로써, 복잡하고 다양한 웹 애플리케이션 요구사항에 맞춤화할 수 있는 강력한 도구이다.