Static Resources

Dev.Hammy·2024년 4월 8일
0

반응형 스택에서 이에 상응하는 내용 보기

이 옵션은 Resource 기반 위치 목록에서 정적 리소스를 제공하는 편리한 방법을 제공합니다.

다음 예에서는 /resources로 시작하는 요청이 있을 경우 상대 경로를 사용하여 웹 애플리케이션 루트 아래 또는 /static 아래의 classpath에서 /public을 기준으로 하는 정적 리소스를 찾고 제공합니다. 브라우저 캐시를 최대한 활용하고 브라우저의 HTTP 요청을 줄이기 위해 리소스는 1년의 향후 만료 기간으로 제공됩니다. Last-Modified 정보는 Resource#lastModified에서 추론되므로 HTTP 조건부 요청은 "Last-Modified" 헤더로 지원됩니다.

다음 목록은 Java 구성을 사용하여 이를 수행하는 방법을 보여줍니다.

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		registry.addResourceHandler("/resources/**")
				.addResourceLocations("/public", "classpath:/static/")
				.setCacheControl(CacheControl.maxAge(Duration.ofDays(365)));
	}
}

다음 예에서는 XML에서 동일한 구성을 달성하는 방법을 보여줍니다.

<mvc:resources mapping="/resources/**"
	location="/public, classpath:/static/"
	cache-period="31556926" />

정적 리소스에 대한 HTTP 캐싱 지원도 참조하세요.

리소스 핸들러는 또한 최적화된 리소스 작업을 위한 도구 체인을 생성하는 데 사용할 수 있는 ResourceResolver 구현 및 ResourceTransformer 구현 체인을 지원합니다.

콘텐츠, 고정된 애플리케이션 버전 등에서 계산된 MD5 해시를 기반으로 버전이 지정된 리소스 URL에 VersionResourceResolver를 사용할 수 있습니다. ContentVersionStrategy(MD5 해시)는 모듈 로더와 함께 사용되는 JavaScript 리소스와 같은 몇 가지 주목할만한 예외를 제외하고는 좋은 선택입니다.

다음 예에서는 Java 구성에서 VersionResourceResolver를 사용하는 방법을 보여줍니다.

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		registry.addResourceHandler("/resources/**")
				.addResourceLocations("/public/")
				.resourceChain(true)
				.addResolver(new VersionResourceResolver().addContentVersionStrategy("/**"));
	}
}

다음 예에서는 XML에서 동일한 구성을 달성하는 방법을 보여줍니다.

<mvc:resources mapping="/resources/**" location="/public/">
	<mvc:resource-chain resource-cache="true">
		<mvc:resolvers>
			<mvc:version-resolver>
				<mvc:content-version-strategy patterns="/**"/>
			</mvc:version-resolver>
		</mvc:resolvers>
	</mvc:resource-chain>
</mvc:resources>

그런 다음 ResourceUrlProvider를 사용하여 URL을 다시 작성하고 resolver 및 transformer의 전체 체인을 적용할 수 있습니다. 예를 들어 버전을 삽입할 수 있습니다. MVC 구성은 다른 항목에 주입될 수 있도록 ResourceUrlProvider Bean을 제공합니다. 또한 Thymeleaf, JSP, FreeMarker 및 HttpServletResponse#encodeURL에 의존하는 URL 태그가 있는 기타 항목에 대한 ResourceUrlEncodingFilter를 사용하여 재작성을 투명하게 만들 수 있습니다.

EncodedResourceResolver(예: gzipped 또는 brotli로 인코딩된 리소스 제공용)와 VersionResourceResolver를 모두 사용하는 경우 이 순서대로 등록해야 합니다. 이는 인코딩되지 않은 파일을 기반으로 콘텐츠 기반 버전이 항상 안정적으로 계산되도록 보장합니다.

WebJars의 경우 /webjars/jquery/1.2.0/jquery.min.js와 같은 버전이 있는 URL이 권장되며 이를 사용하는 가장 효율적인 방법입니다. 관련 리소스 위치는 Spring Boot를 사용하여 즉시 구성되며(또는 ResourceHandlerRegistry를 통해 수동으로 구성할 수 있음) org.webjars:webjars-locator-core 종속성을 추가할 필요가 없습니다.

/webjars/jquery/jquery.min.js와 같은 버전 없는 URL은 org.webjars:webjars-locator-core 라이브러리가 classpath에 있을 때 자동으로 등록되는 WebJarsResourceResolver를 통해 지원됩니다. 자동으로 등록 되는 대신 애플리케이션 시작 속도가 느려질 수 있습니다. resolver는 jar 버전을 포함하도록 URL을 다시 작성할 수 있으며 버전 없이 들어오는 URL과 일치시킬 수도 있습니다. 예를 들어 /webjars/jquery/jquery.min.js에서 /webjars/jquery/1.2.0/jquery.min.js.로.

[Tip]
ResourceHandlerRegistry를 기반으로 하는 Java 구성은 세밀한 제어를 위한 추가 옵션을 제공합니다. 예를 들어, 마지막으로 수정된(last-modified) 동작 및 최적화된 리소스 resolution.

0개의 댓글