Spring MVC의 설정을 커스터마이즈 하기 위해 사용되는 인터페이스 이다. Spring MVC 는 Request와 Response를 처리하는 프레임워크 이다. 즉, 웹 요청이 왔을때, 그리고 응답할때 어떻게 할지 에 대한 세부 설정을 할 수 있는 인터페이스라고 보면 된다.
할 수 있는 설정을 목록화 하면 다음과 같다. 여기서는 이걸 모두 다루기 보다는 기억해 두었다가 필요할때 검색하여 반영하는것을 목적으로 한다.
메서드기능대표 예시
| addResourceHandlers | 정적 리소스 경로 매핑 | /uploads/** → file:/data/uploads/ |
| addCorsMappings | CORS 허용/제한 | 특정 도메인 허용 |
| addInterceptors | 요청 전후 인터셉터 등록 | 인증, 로깅 등 |
| addViewControllers | 단순 URL→View 매핑 | /login → login.html |
| addFormatters | 형식 변환기 추가 | 문자열→날짜 변환 |
| configureMessageConverters | JSON/XML 변환기 설정 | Jackson, Gson 등 |
| addArgumentResolvers | 컨트롤러 파라미터 커스터마이징 | @CurrentUser 등 |
| configureViewResolvers | 뷰 템플릿 설정 | JSP/Thymeleaf |
| configurePathMatch | URL 매칭 규칙 설정 | 슬래시 허용 |
| configureContentNegotiation | 응답 타입 결정 | JSON/XML 자동 선택 |
주요 기능 몇개를 살펴보면 다음과 같다.
- 정적리소스 매핑
- addResourceHandlers를 이용하여 백앤드 서버 로컬에 있는 특정 경로 파일들 (프론트엔드 페이지, 이미지 등) 을 url에 노출을 시킨다.
- 아래와 같이 설정할 경우, /uploads/** 의 요청을 실제 서버 로컬의 /home/ec2-user/uploads/ 폴더에서 찾는다는 의미이다. 이를 통해 클라이언트가 파일 업로드시, 해당 로컬 경로에 업로드 된다.
- 반대로, download 에 대한 설정을 추가하면, 로컬 경로에 있는 파일을 다운 받게 된다.
registry.addResourceHandler("/uploads/**")
.addResourceLocations("file:/home/ec2-user/uploads/");
- Cors 설정
- 프론트엔드 작업을 하다보면, Cors Header 문제를 겪는일이 꽤 있다. 해당 요청을 허용하거나 제한하기 위한 설정이다.
registry.addMapping("/api/**")
.allowedOrigins("https://example.com")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowCredentials(true);
- 인터셉터 등록
- https://dean83.tistory.com/332 여기에 정리한 내용이다.
- Controller 에 요청이 전달되기 전, 톰캣에 의해 인터셉터를 등록하여 클라이언트의 요청이 들어올때, 그리고 처리후 리턴할때를 감지 할 수 있다. 이를 통해 공통된 작업을 하거나 로깅을 하거나, 혹은 오류가 났을 경우 어떤 오류가 났는지를 감지 할 수 있다.
registry.addInterceptor(new LoginCheckInterceptor())
.addPathPatterns("/api/**")
.excludePathPatterns("/api/auth/**");
- 컨트롤러 없이 프론트엔드 코드 서빙 - 타임리프 사용시
- 요청이 들어왔을때, 컨트롤러를 통하지 않고 바로 서버내에 존재하는 프론트엔드 페이지를 리턴한다.
- 아래의 예는 /login 요청이 왔을때, login.html을 보여준다.
- 이 경우, login.html 은 기본적으로는, resources/templates 하단에 존재해야 한다. (타임리프 사용시)
- 설정으로 변경 가능하다.
registry.addViewController("/login").setViewName("login");
- 컨트롤러 없이 프론트엔드 코드 서빙 - 순수 springboot 일 시
- 이 때는, redirect를 이용하여 resources/static 하단에 있는 정적 파일을 리턴하거나, 다른 경로에 있는 정적파일을 리턴한다.
- redirect 는 클라이언트에서 해당 주소로 이동을 하게 되고, forward 를 이용하면, 주소 이동없이 내용만 전달해준다.
registry.addViewController("/").setViewName("redirect:/index.html");
- addViewContollers 의 경우, 1개의 정적 페이지만 연결하게 되므로, 컨트롤러 에서 직접 세부 매핑하는 방식도 있다.
- 이 경우, /app 뿐 아니라 하위 url 모두 가능하다.
- regex를 통해서 제외할 url 설정을 할 수 있다.
- 이 경우, /app 뿐 아니라 하위 url 모두 가능하다.
@Controller
public class AppController {
@RequestMapping(value = {"/app", "/app/**"})
public String forwardApp() {
return "forward:/app/index.html";
}
}'Backend > SpringBoot' 카테고리의 다른 글
| Spring batch + 스케줄링 (0) | 2025.11.27 |
|---|---|
| Spring Actuator 로 health체크 하기 (0) | 2025.11.10 |
| Admin 페이지 설정하기 (0) | 2025.11.05 |
| @Valid, @Validated (0) | 2025.11.03 |
| @JoinTable (0) | 2025.10.31 |