기본적으로 Spring Boot는 classpath의 /static 또는 ServletContext의 root를 기준으로 아래의 경로에서 정적 컨텐츠를 제공한다.
기본적으로 Spring MVC의 ResourceHttpRequestHandler를 사용하는데 이를 커스터 마이징 하기 위해선 WebMvcConfigurer를 추가하고 addResourceHandlers 메서드를 재정의하여야 한다.
- /static
- /public
- /resources
- /META-INF/resources
기본적으로 리소스는 / **에 매핑되지만 spring.mvc.static-path-pattern 속성을 사용하여 조정할 수 있으며, spring.resources.static-locations 속성을 지정하여 정적 리소스의 default위치를 변경할 수도 있다.
- spring.mvc.static-path-pattern: 맵핑 설정 변경 가능
- spring.mvc.static-locations: 리소스 찾을 위치 변경 가능
예를 들어 모든 자원을 /resources/**로 재배치 하고 싶다면 아래의 설정을 추가하면 된다.
spring.mvc.static-path-pattern=/resources/**
정적 리소스를 추가 해보자.
간단한 string을 보여주는 hello.html 파일을 생성해 보도록 하겠다.
파일을 생성할 때 따로 설정을 커스터마이징 하지 않았다면 위의 경로중 한 곳에 생성해줘야 자동으로 리소스를 찾아준다. classpath 경로에 static 디렉토리를 생성하고 그 안에 html 파일을 추가해 주자.
<!--<hello.html>-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
Hello every !
</body>
</html>
자 그럼 이제 부트를 실행시키고 아래의 경로로 접속해 보자.
http://127.0.0.1:8080/hello.html
hello.html의 내용이 확인되면 정상적으로 동작하고 있는 것이다.
이번엔 ResourceHttpRequestHandler를 커스터마이징 해보자.
WebMvcConfigurer를 추가하고 addResourceHandlers 메서드를 재정의하여야 한다.
아래 소스는 @Configuration를 통해 설정 파일임을 선언하고,
WebMvcConfigurer 인터페이스의 addResourceHandlers()를 구현한다.
이때 스프링의 기본 resourceHandler는 유지 한 채로 새로운 resourceHandler를 추가하게 되는 것이다.
모바일로 접속했을 때의 상황을 가정해 "/m/~~~" 경로로 접근했을 때 특정 리소스를 응답하도록 해보자.
// <WebConfig.java>
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) { // 기본 resourceHandler 유지하면서 추가
registry.addResourceHandler("/m/**")
.addResourceLocations("classpath:/m/") // '/'으로 끝나도록
.setCachePeriod(20);
}
}
<!--<hello.html>-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
Hello every !<br>
----------- m -----------
</body>
</html>
아래의 경로로 접근하여 새로 추가한 hello.html의 내용을 응답하는지 확인해 보자.
http://127.0.0.1:8080/m/hello.html
참조
- git 링크
- Static Content
- 스프링 부트 개념과 활용, 인프런, 백기선
'Java & 스프링 > 스프링부트 톺아보기' 카테고리의 다른 글
[Spring Boot] 스프링부트의 웹 jar (0) | 2019.12.02 |
---|---|
[스프링 부트] war 파일과 외부 톰캣을 이용한 서버 배포 (0) | 2019.10.30 |
[스프링 부트] 스프링 MVC - 스프링 부트의 Message Converter (0) | 2019.10.23 |
[스프링 부트 ] Nginx 와 함께 배포 하기(2) (1) | 2019.10.15 |
[스프링 부트 ] Nginx 와 함께 배포 하기(1) (0) | 2019.10.13 |
댓글