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