Java/Spring Boot
[Spring Boot] 정적 리소스 지원
hh_lin
2022. 4. 3. 12:18
1. 정적 리소스
- 동적으로 생성되지 않은 것
- 웹 브라우저나 클라이언트에서 요청이 들어왔을 때,
요청에 해당하는 리소스가 이미 만들어져 있고,
이미 만들어진 리소스를 그대로 보내면 되는 경우 - 서버에서 작업을 처리해서 요청이 들어왔을 때 뷰를 만드는 것이 아니라
이미 만들어져 있는 리소스가 있고, 그런 리소스를 제공하는 방법
2. 기본 리소스 위치
: 기본 리소스 위치에 있는 리소스들은 "/**" 요청에 매핑이 되어 제공됨
- classpath:/static
- classpath:/public
- classpath:/resources
- classpath:/META-INF/resources
ex) /hello.html 요청이 들어오면
/static/hello.html 파일이 있는 경우 요청한 쪽으로 이 파일을 보내줌
-> application 실행 및 localhost:8080/hello.html 호출 시 html 보여짐
3. ResourceHttpRequestHandler
- 리소스 요청 처리
- Last-Modified 헤더를 보고 304 응답을 보내기도 함
Request Headers에 If-Modified-Since 이후 변경이 있으면
Response Headers Last-Modifed 시간이 달라지고 Status Code = 200
(변경있으면 시간 안 달라지고, Status Code = 304) - html 파일 변경 시 Last-Modified Date가 변경됨
4. spring.mvc.static-path-pattern
- 기본적으로 리소스들은 루트부터 매핑이 되어있음
- 매핑을 변경하고 싶은 경우
- spring.mvc.static-path-pattern=/static/**
-> 요청을 localhost:8080/static/hello.html로 보내야 함
5. spring.mvc.static-locations
- 리소스 찾을 위치 변경 가능
- 기본 리소스 위치를 다 안 사용하게 되기 때문에 권장하지 않음
- WebMvcConfigurer의 addResponseHandlers로 커스터마이징할 수 있음
(리소스 핸들러를 추가하는 것이기 때문에
Spring Boot가 기존에 제공하는 리소스 핸들러는 그대로 유지하면서
원하는 리소스 핸들러를 추가할 수 있음) - 주의 : addResourceLocations() 에 classpath 지정 시 반드시 "/"으로 끝나야 함
아닌 경우 매핑이 제대로 되지 않음
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/m/**") // /m/** 요청이 오면
.addResourceLocations("classpath:/m/") // classpath 기준으로 m 디렉토리 밑에서 제공하겠다
.setCachePeriod(20); // 초단위
}
}
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard
스프링 부트 개념과 활용 - 인프런 | 강의
스프링 부트의 원리 및 여러 기능을 코딩을 통해 쉽게 이해하고 보다 적극적으로 사용할 수 있는 방법을 학습합니다., - 강의 소개 | 인프런...
www.inflearn.com