[Spring Boot] 정적 리소스 변경/추가 방법 (css , js 경로 설정)

 
Spring Boot는 별다른 설정 없이도 root를 기준으로 아래의 경로에서 정적 콘텐츠를 제공한다.
 
classpath:/static
classpath:/public
classpath:/resources/
classpath:/META-INF/resources

resources 폴더를 살펴 보면 static과 templates 폴더로 나뉘어 있는 것을 알 수 있다.
이는 스프링 버전이 올라가면서 jsp 대신에 thymeleaf 쓰게됨으로 템플릿 파일들을 두는 곳이 생기게 되었다.
그러므로 css나  js파일들은 static 폴더에 넣고 템플릿파일들은 templates 폴더에 넣어서 사용하면 된다.
 
 

실제 경로를 호출해보면 /resources/ 또는 /resources/static/ 을 경로에 붙이지 않아도 리소스가 호출되는 것을 확인할 수 있다.

스프링 부트 정적 리소스 설정 변경

spring.mvc.static-path-pattern: 맵핑 설정 변경 가능
spring.mvc.static-locations: 리소스 찾을 위치 변경 가능

application.properties의 설정을 통해 기본으로 설정되어 있는 리소스 폴더를 변경할수도 있다.

 

예를 들어 모든 리소스를 /newsource/** 로 재배치하고 싶다면 spring.mvc.static-path-pattern: /newsource/** 를  application.properties에 추가하면 된다.
 
하지만 application.properites를 통해서 설정변경을 한다면 스프링 부트에 기본으로 등록되어 있는 정적리소스의 location들을 사용하지 못하게 된다.
그렇기에 우리는 기본 등록되어 있는 리소스는 유지한채 새롭게 리소스를 추가할 수 있는 방법을 이용해야 한다.
 

스프링 부트 정적 리소스 추가방법

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/mobile/**")
                .addResourceLocations("classpath:/mobile/")
                .setCachePeriod(100);
    }
}

WebConfig 설정파일을 하나 만들고 WebMvcConfigurer 인터페이스를 상속받아 addResourceHandlers()를 구현한다.
.addResourceHandler와. addResourceLocations를 이용해 경로설정을 추가해 준다.
 
이렇게 하면 기본 resourceHandler는 유지하면서 새로운 resourceHandler를 추가할 수 있다.