안녕하세요. 이번 포스팅은 스프링부트에서 정적 리소스 처리를 위한 설정 방법을 알아보겠습니다.
스프링부트는 기본적으로 4가지 경로에 정적파일이 위치했을 때 정적 리소스를 자동으로 반환을 해주도록 설정이 되어 있습니다.
- classpath:/static
- classpath:/resources
- classpath:/public
- classpath:/META-INF/resources
아래 디렉터리 구조로 정적 리소스 반환이 되는지 테스트를 해보겠습니다.


hello1.html은 스프링부트에서 기본적으로 제공하는 경로가 아니라 정적 리소스 반환이 되질 않아 에러가 발생합니다.

hello2.html도 스프링부트에서 기본적으로 제공하는 경로가 아니라 정적 리소스 반환이 되질 않아 에러가 발생합니다.

hello3.html은 스프링부트에서 기본적으로 제공하는 경로인 /static에 해당하여 정적 리소스 반환이 됩니다.

hello5.html은 스프링부트에서 기본적으로 제공하는 경로인 /resources에 해당하여 정적 리소스 반환이 됩니다.

hello6.html은 스프링부트에서 기본적으로 제공하는 경로인 /public에 해당하여 정적 리소스 반환이 됩니다.
커스터마이징
정적 리소스 요청은 ResourceHttpReqeustHandler 클래스가 처리하고 있습니다.
스프링부트에서 제공하는 기본적인 정적 리소스 4가지 경로 외에 추가를 하고 싶다면 ResourceHandler를 추가를 통해 가능합니다.
ResourceHandler 추가는 WebMvcConfigurer 인터페이스의 addResourceHandler 메서드를 구현하면 됩니다.
Config 클래스를 생성하고 WebMvcConfigurer를 implements 해줍니다.
@Configuration
public class Config implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/m/**").addResourceLocations("classpath:/m/").setCachePeriod(0); // ok
}
}
addResourceHandler("/m/**") 옵션은 http://localhost:8080/m/hello.html 와 같은 url 경로라고 생각하시면 됩니다.
addResourceLocations("classpath:/m/") 옵션은 실제 파일이 위치하는 경로라고 생각하시면 됩니다.(resources/m/hello.html)
위 설정을 진행했으니 테스트를 해보겠습니다.


설정한 경로에 맞게 정상적으로 정적 리소스 파일이 반환되는 것을 확인할 수 있습니다.