티스토리 뷰

Spring

Spring - MVC ResourceHandler

엔꾸꾸 2019. 7. 16. 23:34

Spring MVC - Resource Handler

  • ResourceHanlder 란 ?

    • Servlet Container 가 제공하는 DefaultServlet에 대한 이해가 필요하다.
    • Image, JS, CSS HTML 과 같은 정적 리소스를 처리하는 Handler 이다.
    • 모든 톰캣에는 이러한 정적 리소스를 처리할 수 있는 DefaultServlet이 등록 되어있다.
    • Directory Listing 용도로도 사용된다.
    • $CATALINA_BASE/conf/web.xml 에 전역적으로 등록되어있음.
    • Spring 은 DefaultServlet에 요청을 '위임' 해서 이러한 Resource 요청을 처리하는것이다.
    • ResourceHandler들은 우선순위가 가장 낮다.
    • Spring Boot 사용시 기본 설정에 의해 ResouceHandler 기능을 제공받는다.
  • classpath:resources/static/index.html 파일이 존재할때

  • /index.html 로 요청을 보내면 classpath:resources/static/index.html 파일을 응답으로 받을 수 있다.

 

  • index.html

index.html

 

  • http://localhost:8080/index.html 로 요청을 보내면 Hello Spring Boot! 응답이 오는것을 확인할 수 있다.

  • 그외 추가적으로 ResourceHandler가 필요하다면 직접 등록할 수 있다.

 

  • WebConfig.java

    • /spring/** 으로 시작하는 모든요청을 ResourceHandler가 처리하도록한다.
    • 해당 요청이 들어올때 제공할 Resource의 경로를 classpath:/spring/** 로 지정한다.
    • 즉 /spring/** 으로 시작하는 Resource요청은 classpath:/spring/** 폴더에 존재하는 Resource를 제공하게 된다.
    • 해당 리소스에 대한 cache설정도 가능하다.
    • CacheControl.maxAge(maxAge, TimeUnit);
      • 첫번째 인자로 maxAge를 받고, 두번째 인자로 TimeUnit, 시간의 단위를 받는다.
      • 아래의 설정에선 캐시설정을 10분으로 지정한것이다.
    • 해당 캐시 설정을 한다면, 기본적으로 캐시관련된 Header가 응답헤더에 추가가된다.
    • fileSystem 기준 경로로 설정도 가능하다.

WebConfig.java

 

classpath:spring/index.html

 

  • 다음 설정에 대한 테스트코드

TestCode

  • 테스트 결과

Result

  • Spring Boot가 기본으로 제공하는 ResouceHandler에 대한 캐시설정도 가능하다
  • application.properties 에서 제어가 가능하다.

application.properties

  • Spring 4.1 이상
    • ResourceChain: 캐시 사용 유무
    • Transformer와 Resolver를 추가할 수 있다.
    • ResourceResolver 요청에 해당하는 리소스를 찾는 전략
      • 캐싱, 인코딩 (gzip) WebJar ...
        • Spring Boot를 사용한다면 기본적으로 제공하기때문에 직접 설정할 일이 없음.
    • ResourceTransformer
      • 응답으로 보낼 리소르를 수정하는 전략
      • 캐싱, CSS 링크, HTML5 , Meta ...

정리

  • ServletApplication을 개발한다면 기본적으로 Tomcat에 DefaultServlet이 존재한다.
  • DefaultServlet은 HTML CSS JS 와 같은 정적 리소스요청에 대한 처리를 한다.
  • Spring 은 ResourceHandler를 사용하여 이 정적 리소스 요청을 DefaultServlet으로 위임하여 요청을 처리한다.
  • Spring Boot는 기본적인 ResourceHandler 가 등록되어있으며, 캐시설정은 application.properties를 통하여 제어가 가능하다.
  • 추가적인 ResourceHandler가 필요하다면 WebMvcConfigurer Interface의 메서드를 통해 등록이 가능하다.
댓글
댓글쓰기 폼
공지사항
Total
109,316
Today
5
Yesterday
232
링크
TAG
more
«   2022/06   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
글 보관함