spring boot 정적 자원 versioning 에 대한 오해

프로그래밍|2019. 10. 16. 15:13

스프링에서는 정적 자원 versioning을 지원해 준다.

예를 들어 /static/js/jquery.js 와 같은 URL이 아닌 다음과 같은 형태의 URL을 클라이언트로 내려준다.

/static/js/searchBox-d7087d0b4c6023cf277f778f4e0e16f2.js


이와 같이 파일명 중간에 해쉬값을 붙여주는 이유는 무엇일까?

다들 경험을 해봤을 것이다. js, css 파일을 수정하고 서버에 배포해도 특정 사용자에 대해서는 수정된 버전의 정적 파일이 적용되지 않아 웹 페이지가 정상 동작하지 않는다는 이슈들 말이다.

이러한 문제는 브라우저 캐쉬때문이다.

아마 /static/js/jquery.js?v=20191016 과 같이 뒤에 버전을 추가해서 이와 같은 문제점을 해소할지도 모른다.


하지만 버전을 바꾸는 작업은 귀찮고 버전을 바꿔주는 것을 까먹는 경우도 있다.

이러한 문제점을 스프링에서는 간단한 설정으로 해결해 준다.


아래는 spring boot 2.1 기준의 설정

1
2
3
4
5
6
7
8
spring:
  resources:
    static-locations: classpath:/static/
    chain:
      strategy:
        content:
          enabled: true
          paths: /**
cs


자 그럼 내가 어떤 것을 오해하고 있었는지에 대해서 작성한다.

나는 /static/js/searchBox-d7087d0b4c6023cf277f778f4e0e16f2.js 파일의 해쉬값이 서버가 재시작되면 항상 바뀌는 줄로만 알았다.

헌데 그게 아니였다.

서버를 재시작해도 동일한 해쉬값을 사용한다.


그럼 이게 언제 바뀌는지 알아봤더니 searchBox.js 파일을 수정하면 해쉬값이 바뀌는 것을 알 수 있었다.

실제 searchBox.js 파일을 수정하고 난 뒤에 클라이언트로 내려주는 URL을 확인해 보니 해쉬값이 바뀌었다.

어찌보면 당연한 결과이다. 수정하지도 않은 js 파일의 해쉬값을 바꿔서 사용자 브라우저에게 다시 다운로드 받게 할 필요는 없기 때문이다.


당연한 것인데...나는 그저 서버가 재시작되면 바뀌는 줄로만 알았다는...오해...ㅋㅋ

댓글()