Tonic 's lesson learned


Cloudfront(클라우드프론트) 캐시 무효화 방법

cloudfront는 aws에서 제공하는 cdn 서비스입니다. 보통 s3에 정적 데이터를 넣어 두고 cloudfront에서 이 데이터를 가져다가 쓰는 방식으로 사용하고 이 때 s3가 오리진 서버가 됩니다.

우리가 개발한 서비스 사용자가 이렇게 전세계에 흩어져있는 aws cdn에서 정적 데이터를 제공 받으면 비용도 낮아지고 속도는 높아집니다. 부하 분산도 되니 여러모로 유용한 서비스가 cdn입니다.


문제

오리진 서버의 정적 데이터를 바로 가져오지 않고 캐시해두어 이런 이점이 있는데요. 이렇게 캐시로 서비스되는 것을 ‘히트되었다’고 말합니다. 이 히트율이 높을수록 cdn서버가 일을 잘하고 있다고 볼 수 있습니다. 반면 바로 바로 배포 서버의 데이터가 cdn에 반영되지 않아 변경한 이미지가 그대로 노출되거나 javascript가 갱신되지 않아 예전 스크립트로 동작하는 등의 문제가 생기가 됩니다.


해결방법

cloundfront는 보통 84,600초 그러니까 대략 24시간 내 캐시한 데이터는 새로 오리진 서버(여기서는 s3)에서 가져오지 않고 그대로 가지고 있는 데이터를 서비스합니다.

이렇게 가지고 있는 정적 데이터를 무효화하고 다시 가져오라고 cloudfront에게 시키면 됩니다. (버전관리를 통해 하는 방법도 있지만 여기서는 다루지 않습니다.)

  1. aws cloudfront 페이지에 들어간 다음 ‘Distributions(배포)’ 메뉴 클릭
  2. 내가 만든 cloudfront 항목 클릭
  3. 나타나는 탭 중에 ‘Invalidations(무효화)’ 클릭
  4. ‘Create Invalidation’ 클릭
  5. 갱신을 원하는 파일 또는 폴더, 확장자 등을 아래와 같이 지정
    이 값은 s3의 버킷을 누른 후 나오는 경로를 기준으로 써주면 됩니다.
images/image1.jpg  
/images/image1.jpg  
/images/*  
/images/image*  

이렇게 하고 Invalidate를 누르면 캐시 무효화 작업이 진행되고(보통 60~300초) 끝나고 좀 있어 보면 새로운 정적 데이터가 갱신된 것을 알 수 있습니다.