Azure CDN 완전정복 2 - Purge

Azure CDN 완전정복 시리즈

  1. Azure CDN 완전정복 1 – 만들기
  2. Azure CDN 완전정복 2 – Purge
  3. Azure CDN 완전정복 3 - 모니터링
  4. Azure CDN 완전정복 4 - 기타설정

Purge를 그냥 번역하면 '삭제' 정도가 되겠지만 정확히는 CDN 캐시에 있는 컨텐츠를 삭제 또는 무효화 하는 것이기 때문에 '무효화'정도가 올바른 번역이라고 생각한다. 이 글에서는 Purge라는 영어 단어 그대로 사용한다.

캐시의 특징은 원본이 변경되면 자동으로 즉시 캐시도 변경되지 않는 다는 것이다. 그래서 원본 컨텐츠를 수정해서 업데이트를 해도 한 동안(캐시가 expired 되기 전까지)은 CDN 주소로 접속하면 업데이트 된 컨텐츠를 받을 수 없다. 따라서 원본의 업데이트를 즉시 반영시키려면 CDN 캐시를 무효화 시켜서 원본에서 다시 가져오도록 조치해야 한다. 이 과정을 Purge라고 한다.

여기서는 3가지 Purge 방법을 제시한다. 이중에서 두번째 방법인 Query string을 이용하는 방법이 쉽고 자주 쓰이는 방법이다.

1. Azure Portal을 이용한 Purge

Azure Portal에서 전체 CDN 캐시를 Purge 할 수도 있고 수동으로 지정된 컨텐츠를 Purge 할 수 있다. 자세한 내용은 "Azure CDN 끝점 제거" 문서를 참고 바란다. 이 방법은 Verizon CDN의 경우 2-3분, Akamai CDN의 경우 7분정도 소요된다.

어떤 경우에는 전체 CDN 캐시를 무효화 시킬 경우도 있다. 또는 CDN으로 서비스 되는 컨텐츠의 양이 적다면 전체 Purge가 크게 문제가 되지 않는다. 전체 Purge 하는 방법은 Azure Portal에 접속해서 CDN 프로파일을 연다. 그리고 아래 그림처럼 Purge(한글 번역은 "삭제")버튼을 누르면 된다.

CDN으로 서비스 되는 컨텐츠가 많고 CDN이 중요한 위치를 차지하고 있다면 전체 CDN 캐시를 Purge하는건 좋은 선택이 아니다. 서비스 전체가 영향을 받기 때문이다.

azure_portal_purge

2. Query String으로 Purge 하기

CDN 주소는 https://vmcdn.azureedge.net/mp3/abc.mp3 처럼 결국 HTTP URL이다. URL에는 Query String을 붙일 수 있다. https://vmcdn.azureedge.net/mp3/abc.mp3?v=123 처럼 의미 없는 ?v=123 을 붙이면 CDN이 두개의 URL을 전혀 다른 컨텐츠로 인식하도록 만들 수 있다.

즉, 컨텐츠가 업데이트가 될 때 클라이언트가 요청하는 주소에 Query String을 붙여주는 것이다. 만약 URL이 Database에 저장되어 있다면 업데이트된 컨텐츠의 URL을 같이 업데이트 시켜준다. URL이 HTML에 들어가 있다면 HTML에서 사용한 컨텐츠의 URL에 Query string을 붙여 변경하고 다시 배포를 하면된다.

이전버전의 캐시는 시간이 지나면 Expired 되어 자연스럽게 캐시에서 사라지고 CDN은 Query string이 있어도 원본컨텐츠는 같은 곳에서 다시 가져오므로 캐시도 업데이트가 되는 것이다. 컨텐츠를 새로 받아오는 것이므로 즉시 업데이트 된 컨텐츠로 반영된다.

이 방법을 사용 하려면 Azure Portal에서 CDN 끝점 설정으로 들어가 Cache 메뉴를 열고 "Query string caching behavior" 값을 "Cache every unique URL"로 설정해야 한다.

cache_config

3. Azure REST API 로 Purge

Azure는 REST API를 제공하여 Azure Portal에서 하는 작업을 모두 프로그래밍 방식으로 설정 및 제어 할 수 있다. Azure CDN의 Purge도 API를 이용하여 할 수 있다. Azure REST API 문서의 Purge 를 참고하여 프로그래밍을 통해 개별 컨텐츠를 Purge 할 수 있다. 그러려면 Azure REST API의 기본 사용법을 스터디 해야한다. 이 글에서는 API가 있다는 정도의 설명만 하고 마친다.