Prologue
- Spring Boot에서 정적 리소스를 다루는 방법에 대해 알아본다.
정적 리소스
기본값
-
특별한 설정이 없다면
Spring Boot는 기본적으로 설정된 위치에서 자동으로 파일을 찾는다.
-
여기서 기본값으로 설정된 위치는 총 4곳이다.
만약 4곳에 같은 리소스가 존재하면 뭐가 노출되지?
-
궁금증이 생겨서 테스트해본 결과
4곳의 같은 리소스가 존재하면 우선순위가 적용되는 것을 확인했다.
테스트 결과 우선순위는 다음과 같았다.
-
classpath:/META-INF/resources
-
classpath:/resources
-
classpath:/static
-
classpath:/public
Directory
요청 및 결과
- 1순위인 /META-INF/resources에 있는 about.html이 노출되었다.
about.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>About</title>
</head>
<body>
[META-INF] Hello I'm goodGid !
</body>
</html>
Custom
-
리소스 위치를 Custom하게 설정할 필요가 있다.
-
2가지 방법으로 설정을 해보자.
-
application.properties 값 정의
-
addResourceHandlers 재정의
application.properties
addResourceHandlers
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/goodgid/**")
.addResourceLocations("classpath:/goodgid/"); // [1]
}
}
- addResourceLocations에 명시한 Path에 새로운 File을 생성해준다.
-
[1] : 주의할점이 있다.
만약 끝에 “/”가 빠지면 해당 리소스를 찾지 못한다.
ex) .addResourceLocations(“classpath:/goodgid”);
반드시 끝에 “/”를 써줘야한다.
ex) .addResourceLocations(“classpath:/goodgid/”);
Summary
-
정적 리소스를 다루는 방법에 대해 알아봤다.
특별한 설정을 하지 않는다면 4곳에 리소스를 위치하면 되고
특별한 위치로 Custom을 하고 싶다면
2가지 방법이 있으나 추천하는 방법은 addResourceHandlers 메소드를 Override 하는 방법이다.