ABOUT ME

-

오늘
-
어제
-
-
  • SpringBoot - MVC Static Resource(정적 리소스)
    Back-end/Spring 2020. 6. 27. 23:42

    Static Resource(정적 리소스)

    클라이언트가 요청하면 기존에 만들어져있는걸 그냥 응답(보내)주면 되는 경우에 사용합니다.
    기본적인 Mapping(매핑) 경로는 /** 입니다.

    기본 리소스 위치

    • classpath:/static
    • classpath:/public
    • classpath:/resources/
    • classpath:/META-INF/resources
    StaticResource

    위치에 html 파일을 생성하게 되면 자동으로 Root(기본) 경로로 매핑됩니다.

    정적 리소스의 원리

    정적 리소스가 어떻게 구동되는지 원리를 알아봅시다.

    StaticResource

    최초 클라이언트에서 요청을 보냈을 때 304가 출력됩니다.

    StaticResource

    이러한 요청에 대해서 응답을 보내면 200이 출력됩니다.

    이런 status는 어떻게 나온걸까요?
    이를 알기위해선 If-Modyfied-Since, Last-Modified의 관계를 알아야합니다.

    status가 304일 때

    StaticResource

    304는 클라이언트의 요청이 들어오고 그 요청이 가장 최신이라면 나타나는 상태입니다.
    If-Modyfied-SinceLast-Modified가 같을 때를 의미하게 됩니다.

    If-Modyfied-Since == Last-Modified

    status가 200일 때

    StaticResource

    200은 클라이언트의 요청이 들어온 후 응답을 주게 되면 나타나는 상태입니다.
    즉, If-Modyfied-Since가 Last-Modified보다 빠른 시간이라는 것입니다.

    If-Modyfied-Since < Last-Modified

    만약 여기서 응답을 준 후 페이지를 Reload하게 되면 다시 304 상태로 돌아가게 됩니다.

    리소스 위치 변경하기

    기본 리소스 위치에서 추가로 등록하는 방법이 있습니다.

    spring.mvc.static-path-pattern

    기존에 Root로 매핑이 되어있다면 해당 Key를 이용하여 Root를 변경할 수 있습니다.

    StaticResource

    properties에 spring.mvc.static-path-pattern을 추가하여 내가 매핑하고 싶은 위치를 선언합니다.

    StaticResource

    서버재시작 후 해당 경로로 가면 동일한 HTML이 출력됩니다.

    spring.mvc.static-locations

    위 Key도 마찬가지로 Root를 바꾸는 것이지만 기존 경로를 전부 제외하고 새롭게 만드는 것이기 떄문에 권장하진 않습니다.

    ResourceHttpRequestHandler를 활용한 커스텀

    스프링 부트에서 MVC를 커스텀 할 수 있는 WebMvcConfigureraddRersourceHandlers을 활용하여 커스텀이 가능합니다.

    • 기존의 Resource Handler는 건드리지 않고 추가하는 개념입니다.
    • 기존의 Resource Handler는 다르게 캐싱전략이 다르므로 따로 캐싱처리를 해주어야 합니다.

    @Configuration
    public class WebConfig implements WebMvcConfigurer {
    
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/m/**") // /m 으로 시작하는 요청이 오면
                    .addResourceLocations("classpath:/m/") // classpath 기준으로 m 디렉토리 밑에서 제공
                    .setCachePeriod(20); // 20초
        }
    }
    StaticResource

    WebConfig 클래스를 생성하고 WebMvcConfigurer를 구현합니다.
    그리고 addRersourceHandlers를 오버라이딩 하여 경로를 선언하고 캐싱을 처리합니다.

    StaticResource

    위에서 경로를 선언한 대로 동일 경로에 HTML을 생성합니다.

    StaticResource

    서버 Restart 후 경로를 입력하면 커스텀한 경로에 있는 HTML이 출력됩니다.
    물론 기존에 있는 HTML도 출력됩니다.

    'Back-end > Spring' 카테고리의 다른 글

    SpringBoot - MVC Index, Favicon(인덱스, 파비콘)  (0) 2020.06.27
    SpringBoot - MVC WebJar(웹Jar)  (0) 2020.06.27
    SpringBoot - MVC ViewResolver  (0) 2020.06.27
    SpringBoot - MVC HttpMessageConverters  (0) 2020.06.27
    SpringBoot - MVC Setting  (0) 2020.06.27

    댓글