Backend/SpringBoot

각종 설정 오버라이드 (WebMvcConfigurer)

Dean83 2025. 11. 7. 09:56

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 설정을 할 수 있다.
@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