Thymeleaf Resource Versioning src link attribute with CustomDialect

Circlee7
3 min readOct 29, 2018

Thymeleaf 의 커스텀 Dialect를 작성하여 Versioning 파라미터를 추가하자.

Html 페이지 내에 지정된 리소스 , js 파일 이라든지 css파일들은 브라우저에 한번 로딩된 이후에는 동일한 리소스 요청에 대해서 서버로 조건부 Get 요청을 하게 되고
modified date 또는 ETAG 값을 참조하여, 서버로부터 변경여부를 알수 있다.

하지만 어플리케이션의 설정이라든지, 브라우저의 리소스 케시정책에 의해서 갱신되어야할 리소스가 갱신되지 않는경우도 발생한다.

이러한 부분을 해결하기 위해 서버에서 동적으로 리소스 path를 만들어내거나
리소스의 md5 해시값을 포함한 리소스명을 서버에서 동적으로 만들어냄으로써 해결하기도한다.

test.js 라는 리소스가 스프링 정적리소스로 서비스 된다면.
test.js의 md5 해시값을 생성하여 리소스 핸들러를 지원하는 템플릿 엔진을 거치면 test-xxxxxxxxxxxxxxx.js 처럼 리소스파일이 렌더링 되고 .
서버에서 이러한 요청의 md5 해시를 구분하여 리소스 버전관리를 할 수있다.
.. 고 한다.

써놓긴 했지만 이러한 기능을 제대로 이해하고 있지는 않다.

때문에 급한마음으로 옜날방식의 리소스 버전 컨트롤을 하려한다.

src="/test.js?v=123456789" <- 처럼 말이다.

Thymeleaf 쪽을 찾아봐도 잘 나오지 않아서 .
Thymeleaf 커스텀 Dialect 를 작성하여 해결해보았다.

th:vsrc=”/test.js” 를 작성하면 아래와 같이 랜더링된다.
src="/test.js?v=[ Bean initial time milllis ]"

서버 기동시마다 Bean 초기화 시간은 바뀌기 때문에 브라우저의 리소스 케시를 방지할수 있겠다.

.. -_- 다음엔 제대로된 스프링 리소스 버전 컨트롤을 정리하자..

--

--