Study / / 2023. 4. 24. 20:39

캐시 버스팅(Cache busting)이란?

캐시 버스팅이란 웹 개발에서 캐시(Cache)를 우회하여 새로운 콘텐츠를 불러오는 기술입니다.

그렇다면, 캐시 버스팅은 왜 사용하는걸까요?

  • 웹 페이지나 어플리케이션은 자주 업데이트 되지 않는 정적 파일(이미지, 스타일시트, 자바스크립트 등)을 캐시에 저장합니다.
  • 이를 이용해 사용자의 브라우저에서 캐시를 저장하여 더 빨리 로드되도록 합니다.
  • 하지만 새로운 버전의 파일이 업데이트 되는 경우에 그 파일을 가져와야 하는데 지난 버전의 파일이 캐시를 통해 가져옵니다.
  • 이런 경우에 브라우저에게 캐시된 파일이 최신 파일이 아니라는 것을 알리는 기술을 말합니다.

 

즉, 캐시된 파일을 우회하고 새로운 파일을 불러오기 위해 캐시 버스팅 기술을 사용합니다.

 

캐시 버스팅의 대표적인 방법은 3가지가 있습니다.

  1. 파일 경로를 통해 버전을 명시하는 방법("resource/v1/main.html")
  2. 파일 이름을 통해 버전을 명시하는 방법("resource/main_v1.0.html")
  3. 쿼리스트링을 통해 버전을 명시하는 방법("resource/main.html?v=0.1")

이렇게 하면 브라우저는 항상 새로운 URL을 로드하므로, 새로운 파일을 불러올 수 있습니다.

 

💡Spring boot 에서는 WebMvcConfigurer의 addResourceHandlers를 override하여 캐시에 대한 controll이 가능합니다. 하지만 위의 방법처럼 버전을 명시하려면 직접 파일명이나 경로 등을 설정하여 처리하는 방법을 통해야 한다고 합니다. 아래 방법은 단순히 cache의 maxAge를 60초로 제한합니다.
@Configuration
public class CacheWebConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(final ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/")
          .setCacheControl(CacheControl.maxAge(60, TimeUnit.SECONDS)
            .noTransform()
            .mustRevalidate());
    }
}

 

💡그렇다면 방대한 스프링이 제공하는 url을 통해 제어하는 방법은 없을까요?
물론, 있습니다. 아래 코드를 보면 콘텐츠 버전 전략을 사용해 각 파일들은 계산된 버전이 있는 URL이 더해져 제공됩니다. 이를 핑거프린팅 이라고 합니다.
URL foo.js 파일은 아래와 같이
URL /js/foo-46944c7e3a9bd20cc30fdc085cae46f2.js 와 같은 형태로 제공됩니다.

자세한 내용은 아래를 참고하세요.
https://www.baeldung.com/cachable-static-assets-with-spring-mvc
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유