Loading...
Spring Framework Reference Documentation 7.0.2의 Static Resources의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
이 옵션은 Resource 기반 location들의 목록으로부터 정적 리소스를 제공하는 편리한 방법을 제공합니다.
다음 예제에서, /resources로 시작하는 요청이 주어지면, 상대 경로는 웹 애플리케이션 root 아래의 /public 또는 classpath 아래의 /static에 대해 정적 리소스를 찾고 제공하기 위해 사용됩니다. 리소스들은 브라우저 캐시의 최대 사용과 브라우저에 의해 이루어지는 HTTP 요청의 감소를 보장하기 위해 1년 후 만료로 제공됩니다.
Last-Modified 정보는 Resource#lastModified로부터 유추되므로 "Last-Modified" 헤더가 있는 HTTP 조건부 요청이 지원됩니다.
다음 listing은 이를 수행하는 방법을 보여줍니다:
1@Configuration 2public class WebConfiguration implements WebMvcConfigurer { 3 4 @Override 5 public void addResourceHandlers(ResourceHandlerRegistry registry) { 6 registry.addResourceHandler("/resources/**") 7 .addResourceLocations("/public", "classpath:/static/") 8 .setCacheControl(CacheControl.maxAge(Duration.ofDays(365))); 9 } 10}
1@Configuration 2class WebConfiguration : WebMvcConfigurer { 3 4 override fun addResourceHandlers(registry: ResourceHandlerRegistry) { 5 registry.addResourceHandler("/resources/**") 6 .addResourceLocations("/public", "classpath:/static/") 7 .setCacheControl(CacheControl.maxAge(Duration.ofDays(365))) 8 } 9}
1<mvc:resources mapping="/resources/**" location="/public, classpath:/static/" 2 cache-period="31556926" />
또한 정적 리소스를 위한 HTTP 캐싱 지원를 참고하십시오.
리소스 핸들러는 또한 ResourceResolver 구현들의 체인과 ResourceTransformer 구현들을 지원하며, 이를 사용하여 최적화된 리소스를 다루기 위한 툴체인을 만들 수 있습니다.
VersionResourceResolver를 사용하여 content로부터 계산된 MD5 hash, 고정된 애플리케이션 버전 또는 기타를 기반으로 하는 버전이 있는 리소스 URL을 사용할 수 있습니다. ContentVersionStrategy(MD5 hash)는 몇 가지 주목할 만한 예외(예: 모듈 로더와 함께 사용되는 JavaScript 리소스)를 제외하고는 좋은 선택입니다.
다음 예제는 VersionResourceResolver를 사용하는 방법을 보여줍니다:
1@Configuration 2public class VersionedConfiguration implements WebMvcConfigurer { 3 4 @Override 5 public void addResourceHandlers(ResourceHandlerRegistry registry) { 6 registry.addResourceHandler("/resources/**") 7 .addResourceLocations("/public/") 8 .resourceChain(true) 9 .addResolver(new VersionResourceResolver().addContentVersionStrategy("/**")); 10 } 11}
1@Configuration 2class VersionedConfiguration : WebMvcConfigurer { 3 4 override fun addResourceHandlers(registry: ResourceHandlerRegistry) { 5 registry.addResourceHandler("/resources/**") 6 .addResourceLocations("/public/") 7 .resourceChain(true) 8 .addResolver(VersionResourceResolver().addContentVersionStrategy("/**")) 9 } 10}
1<mvc:resources mapping="/resources/**" location="/public/"> 2 <mvc:resource-chain resource-cache="true"> 3 <mvc:resolvers> 4 <mvc:version-resolver> 5 <mvc:content-version-strategy patterns="/**"/> 6 </mvc:version-resolver> 7 </mvc:resolvers> 8 </mvc:resource-chain> 9</mvc:resources>
그런 다음 ResourceUrlProvider를 사용하여 URL을 재작성하고 resolver와 transformer의 전체 체인을 적용할 수 있습니다. 예를 들어, 버전을 삽입하기 위해 사용할 수 있습니다.
MVC 설정은 ResourceUrlProvider 빈을 제공하므로 다른 곳에 주입될 수 있습니다. 또한 ResourceUrlEncodingFilter를 사용하여 Thymeleaf, JSP, FreeMarker 및 HttpServletResponse#encodeURL에 의존하는 URL 태그를 사용하는 기타 환경에서 재작성을 투명하게 만들 수 있습니다.
EncodedResourceResolver(예: gzipped 또는 brotli-encoded 리소스를 제공하기 위한)와 VersionResourceResolver를 둘 다 사용할 때는 이 순서로 등록해야 합니다. 이는 content-based 버전이 항상 인코딩되지 않은 파일을 기반으로 안정적으로 계산되도록 보장합니다.
WebJars의 경우, /webjars/jquery/1.2.0/jquery.min.js와 같은 버전이 있는 URL이 이를 사용하는 데 권장되며 가장 효율적인 방법입니다. 관련 리소스 location은 Spring Boot에서 기본적으로(기본 설정으로) 설정되어 있으며(또는 ResourceHandlerRegistry를 통해 수동으로 설정할 수 있으며) org.webjars:webjars-locator-lite 의존성을 추가할 필요가 없습니다.
/webjars/jquery/jquery.min.js와 같은 버전이 없는 URL은 classpath에 org.webjars:webjars-locator-lite 라이브러리가 존재할 때 자동으로 등록되는 WebJarsResourceResolver를 통해 지원됩니다. resolver는 URL을 재작성하여 jar의 버전을 포함하도록 할 수 있으며, 또한 버전이 없는 들어오는 URL에 대해 매치할 수도 있습니다.
예를 들어, /webjars/jquery/jquery.min.js에서 /webjars/jquery/1.2.0/jquery.min.js로 매치할 수 있습니다.
ResourceHandlerRegistry기반 Java 설정은 예를 들어 last-modified 동작 및 최적화된 리소스 resolution과 같은 세밀한 제어를 위한 추가 옵션을 제공합니다.
View Resolvers
Default Servlet