스태틱 파일 버저닝
dev | 2021-01-30
스태틱 파일을 변경하고 배포를 하면 클라우드 플레어가 캐시를 하고 있어서 바로 적용이 안되고 수동으로 캐시 삭제를 해줘야 적용이 됐다. 자주 하는 일은 아니어서 손으로 해오다가 스태틱 파일 버저닝을 해보기로 했다. 파이선 환경이니 플라스크에서 사용할 수 있는 기능이 있는지 검색해 봤다. 플라스크 오토버저닝(Flask-Autoversion)이라는 패키지가 있는데 이 기능은 플라스크 템플릿에 적용하는 것이어서 다른 종류의 파일에 경로가 있으면 사용 할 수 없다.
검색하다 보니 스태틱 파일에 쿼리 스트링 붙이는 방식으로 버저닝 하지 말아야 한다는 글을 발견했는데 워드프레스 관련 글에 이런 주장이 많다. 반론하는 글도 쉽게 찾을 수 있었는데 과거에 구글에서 쿼리 스트링으로 버저닝을 하지 말라고 권고 했었는데 요즘에는 입장을 바꿨다고 한다. 쿼리스트링 관련 내용은 더이상 언급하지 않고 캐시 컨트롤이나 이태그(ETag) 헤더를 사용하는 방법을 권장한다고 한다. 그래서 말로만 들어왔던 이태그를 확인해 봤는데 헤더가 있기는 한데 실제로 배포시마다 업데이트를 하는 방법을 모르겠다. 엔진엑스도 기본 설정은 켜져 있다고 한다. 왜 안되는지 좀 더 살펴봐야 겠지만 귀찮으니 일단은 쿼리 스트링으로 해보기로 했다.
우선 배포시마다 변경되는 문자열로는 깃 커밋 해시값을 사용해보기로 했다. 아래의 명령어로 최근 커밋의 해시값을 확인 할 수 있다. --short
옵션을 사용하면 6자만 나오는데 6자만 사용해도 웬만한 경우 중복되지 않게 커밋을 골라낼 수 있다고 한다.
git rev-parse --short HEAD
이 문자열을 변경하고자 하는 곳에 붙여야 하는데 어떻게 할까 고민하다가 아름답지는 않지만 쉘에서 파일의 내용을 변경하는 방법으로 해보기로 했다. 검색해보니 처음보는 sed
라는 명령어로 할 수 있다고 한다.
sed -i -e "s/SEARCH/REPLACE/g" filename
배포하고 원격에 있는 파일을 바꿔주면 버저닝이 된다. 쉘 스크립트의 문자열 붙이는 방법은 아직도 적응이 안된다.
ssh SERVER_IP 'sed -i -e "s/SEARCH/'$(git rev-parse --short HEAD)'/g" /path/to/file/style.css'
이제 배포하고 클라우드 플레어 로그인 안해도 된다.
Comments