리소스 핸들러(Resource Handler)
Resource Handler
이미지, 자바스크립트, CSS, HTML 같은 정적인 리소스를 처리하는 핸들러
Default Servlet
- 서블릿 컨테이너(Tomcat.. etc)가 기본 제공
- 정적 리소스를 처리시 사용
-
디렉토리 목록을 보여줄 수 있다.(directory listing이 활성화 되어있을 때)
- 스프링은 이 서블릿에 정적 리소스에 대한 요청을 위임해 정적인 리소스를 처리한다.
스프링 MVC 리소스 핸들러 매핑
- 정적 리소스 핸들러가 요청을 먼저 다 가로채면 만든 핸들러보다 정적 리소스가 먼져 찾아진다.(비효율적) 따라서 정적 리소스 핸들러는 가장 낮은 우선순위를 갖는다.
- 다른 핸들러 매핑이 “/” 이하의 요청을 처리한다면
- 최종적으로 리소스 핸들러가 처리하도록 한다.
DefaultServletHandlerConfigurer
- 정적리소스를 제공하기 위한 요청 핸들러를 구성한다.
- 서블릿 컨테이너의 ‘Default Servlet’에 요청을 전달한다.
리소스 핸들러 설정
- 어떤 요청 패턴을 지원할 것인가
- 어떤 리소스를 찾을 것인가
- 캐싱
- ResourceResolver : 요청에 해당하는 리소스를 찾는 전략1
- 캐싱, 인코딩(gzip, bortli), WebJar, …
- ResourceTransformer: 응답으로 보낼 리소스를 수정하는 전략1
- 캐싱, CSS 링크, HTML5 AppCache, …
- 스프링 부트가 기본 제공하는 정적 리소스 핸들러를 임의로 추가할 수 있다.
/mobile/**
에 해당하는 URL 경로 패턴과resources/mobile
이라는ㅌ 파일 위치의 정적리소스를 제공하는 스프링 부트 설정 예제, 스프링 부트 강좌를 참고
@Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/mobile/**") .addResourceLocations("classpath:/mobile/", "file:/Users/User/files") .setCacheControl(CacheControl.maxAge(10, TimeUnit.MINUTES)) .resourceChain(false); // 개발시 false, 운영시 true } }
스프링 부트
- 기본으로 정적 리소스 핸들러와 캐싱 제공
resources/static
,resource/public
을 기본 정적 리소스 디렉토리로 지정해준다.
댓글남기기