DevOps
TOAST CDN 소개(TOAST Service 들여다 보기)
2019년 8월 20일
원문에서 보기 ↗CDN (Content Delivery Network) 이란?
CDN (Content Delivery Network)은 콘텐츠(이미지, 텍스트, 미디어 파일 등)를 최적화된 경로를 통해 전송할 수 있도록 전 세계적으로 분산된 서버로 이루어진 플랫폼입니다.
CDN을 사용하지 않으면 오리진(origin) 서버라 불리는 콘텐츠 서버는 모든 엔드유저의 요청을 처리해야 합니다. 오리진 서버는 예측할 수 없는 엔드유저의 요청을 처리해야 하므로 많은 트래픽이 유입되면 부하를 일으킬 수 있어 장애가 발생할 확률을 높입니다. 또, 엔드유저와 오리진 서버 사이의 품질이 보장되지 않은 네트워크를 통해 콘텐츠가 전송되므로 응답 품질을 보장할 수 없습니다.
CDN은 엔드유저와 오리진 서버 사이의 중재자 역할을 합니다.
엔드 유저의 콘텐츠 요청은 지리적 위치, 네트워크 품질 등을 고려하여 가장 최적화된 CDN 엣지 서버로 요청이 전달됩니다. CDN 엣지 서버는 엔드 유저를 대신하여 오리진 서버로 콘텐츠를 요청하고 응답을 저장(캐싱) 한 후 엔드유저에게 전송합니다. 이후 엣지서버는 캐싱된 콘텐츠가 있는 경우, 오리진 서버를 통하지 않고 바로 엔드유저의 콘텐츠 요청에 응답할 수 있습니다.
이를 통해 엔드 유저는 가장 최적화된 경로의 엣지 서버로부터 바로 콘텐츠를 빠르게 전송받을 수 있습니다. 또, 오리진 서버를 운영하는 콘텐츠 제공 업체는 CDN엣지 서버를 통해 엔드유저 요청에 응답함으로써 트래픽 부하를 줄여 오리진 서버의 가용성을 높일 수 있습니다. 
- 엔드 유저(End-User) : 콘텐츠를 요청하는 브라우저, 단말기 등
- 엣지 서버(Edge server) : 여러 지역에 분산된 서버로 엔드 유저의 콘텐츠 요청을 전달받아 오리진 서버를 대신하여 응답해주는 서버
토스트 CDN 소개
토스트의 CDN을 이용하면 간단한 설정만으로 CDN 서비스를 사용할 수 있으며, CDN 서비스 관리를 위한 API를 제공합니다.
특징
- 콘솔/API를 통해 CDN 서비스 생성과 설정 변경을 손쉽게 할 수 있습니다.
- 콘솔/API를 통해 캐시 재배포(Purge)를 할 수 있습니다.
- 네트워크 전송량, HTTP Status 상태 코드 별 통계, 자주 요청된 상위 콘텐츠 등의 통계 데이터를 제공합니다.
CDN 서비스 생성
- 서비스 지역과 원본 서버(오리진 서버)를 입력하는 것만으로 CDN 서비스를 생성할 수 있습니다.

-
서비스 지역
- KOREA : 한국 지역에 위치한 엣지 서버를 이용하여 서비스합니다. GLOBAL 서비스 지역보다 이용 요금이 저렴합니다.
- GLOBAL: 전 세계 지역에 위치한 엣지 서버를 이용하여 서비스합니다.
-
원본 서버
- 콘텐츠, 스토리지 서버의 도메인 주소 또는 IP를 입력합니다.
- 원본 서버는 엣지 서버가 콘텐츠를 다운로드할 수 있도록 접근이 허용되어야 합니다. 접근이 제한된 경우 엣지 서버가 오리진 서버의 콘텐츠를 가져올 수 없기 때문에 정상적으로 서비스를 할 수 없습니다.
- [확인] 버튼을 클릭하여 CDN 서비스를 생성합니다.
- 약 10분 후 서비스 상태가 녹색(서비스 중)이 되면 CDN 서비스가 정상적으로 생성된 상태입니다. 서비스 생성 후 제공된
{random-service-name}.cdn.toastcloud.com서비스 도메인은 엔드 포인트 도메인 주소로 사용됩니다.
CDN 추가 설정
캐시 설정
캐시 설정을 통해 엣지 서버가 오리진 서버의 콘텐츠를 얼마나 오래 캐시 할 것인지 TTL(초 단위) 설정을 할 수 있습니다. 기본적으로 엣지 서버는 오리진 서버의 캐시 설정을 이용합니다. 그러므로 토스트 클라우드 CDN을 통해 캐시 설정을 하고자 하는 경우, 오리진 서버의 캐시 설정은 제거해야 합니다.
리퍼러(referer) 헤더 접근 제어
리퍼러 헤더 접근 제어 설정을 통해 허용된 웹 페이지에서만 CDN 콘텐츠를 요청할 수 있도록 접근 제어를 할 수 있습니다. HTTP의 referer 요청 헤더는 현재 요청된 페이지의 이전 링크의 웹페이지 주소를 포함합니다. referer 헤더를 참조하여 접근을 허용 여부를 설정할 수 있습니다. 접근 정책은 화이트 리스트 방식과 블랙리스트 방식을 제공합니다.
-
예시: 리퍼러 헤더가 http://www.toast.com 로 시작하는 경우에만 접근 허용
- 접근 정책: WHITELIST
- ^http://www.toast.com.\*
-
참고
- 요청 헤더에 리퍼러 헤더가 없는 경우에는 헤더 접근 제어가 동작하지 않습니다.
- 접근이 거부된 경우 콘텐츠 요청에 403 Forbidden HTTP Status를 응답합니다.
캐시 재배포(Purge)
오리진 서버의 콘텐츠가 업데이트되어도 엣지 서버의 캐시된 콘텐츠는 설정된 TTL 시간 동안은 업데이트되지 않습니다. 그러므로 오리진 서버의 최신 콘텐츠를 엔드 유저에게 제공하고자 하는 경우 캐시 재배포(Purge) 기능을 통해 엣지 서버의 캐시를 무효화 해야 합니다. 캐시 재배포(Purge) 작업은 수 분 정도 시간이 소요됩니다.
캐시 재배포(Purge)는 총 3가지 타입이 제공됩니다.
- 특정 파일 타입(ITEM) : 특정 경로의 단일 파일에 대해 엣지 서버의 캐시를 무효화 합니다.
- 예시: /images/toast_logo.png
- 와일드카드 타입(WILDCARD): 와일드카드 문자를 이용하여 매칭된 파일의 캐시를 무효화 합니다.
- 예시: /images/*/toast?.png
- 전체 파일 타입(ALL): 엣지 서버의 모든 캐시 데이터를 무효화 합니다.
[주의] 캐시 재배포(Purge)가 완료된 후에는 엣지 서버에 캐시된 콘텐츠가 없기 때문에 오리진 서버로 트래픽이 유입될 수 있습니다. [주의] 캐시 재배포(Purge)는 요청 타입에 따라 사용량 제한이 있습니다.
- 특정 파일 타입: 시간당 60회 제한, 한 번에 요청할 수 있는 최대 Path 수: 1000개 제한
- 와일드카드 타입: 시간당 60회 제한, 한 번에 요청할 수 있는 최대 Path 수: 10개 제한
- 전체 파일 타입: 시간당 5회 제한
FAQ
- 캐시가 정상적으로 동작하고 있는지 확인하고 싶습니다.
-
Response header를 참고하면 어떤 엣지 서버를 통해 캐시가 되었는지 확인할 수 있습니다.
-
Cache Miss 의 경우

X-Px헤더를 통해 어떤 엣지 서버를 통해 콘텐츠를 가져왔는지 확인할 수 있습니다.- ms h0-s1708.p59-icn (h0-s1707.p59-icn), ms h0-s1707.p59-icn (origin) 는 다음과 같이 해석됩니다.
ms는 cache miss를 의미하고,ht는 cache hit을 의미 합니다.- ms h0-s1708.p59-icn (h0-s1707.p59-icn)
- h0-s1708.p59-icn 에는 cache miss가 발생하여 h0-s1707.p59-icn 엣지 서버에 콘텐츠가 있는지 요청합니다.
- ms h0-s1707.p59-icn (origin)
- h0-s1707.p59-icn 에서도 cache miss가 발생하여 origin 으로 부터 콘텐츠를 가져옵니다.
- Cache-Control의 max-age 헤더를 보면 캐시 TTL(604800, 단위:초) 을 확인 할 수 있습니다.
- Age를 보면 캐시된 TTL 시간을 볼 수 있습니다. cache miss였기 때문에 Age가 0 입니다.
-
Cache hit의 경우

- ht h0-s1708.p59-icn.cdngp.net
- 위의 cache miss 예제를 보면 이미 오리진으로 부터 콘텐츠를 캐시 하였기 때문에 이후 요청 부터는 cache hit 이 된 것을 확인 할 수 있습니다.
- Age 헤더를 통해 캐시 된 지 31초가 지난 것인지 알 수 있습니다.
- ht h0-s1708.p59-icn.cdngp.net
{random-service-name}.cdn.toastcloud.com도메인이 아닌 제가 소유한 도메인을 통해 서비스 하고 싶습니다.
- 콘솔에서 CDN 기본 설정의 도메인 별칭(domain alias)에 소유한 도메인을 설정합니다.
- 도메인 제공 업체에서 제공하는 콘솔을 통해
{random-service-name}.cdn.toastcloud.com도메인을 CNAME 레코드로 추가해주세요.
- 캐시 재배포(Purge) 진행률이 100%가 안 됩니다. 정상적으로 작업이 된 것인가요?
- 엣지 서버의 상태에 따라 일부 엣지 서버는 서비스에서 제외되는 경우가 있습니다. 서비스에서 제외된 엣지 서버가 있는 경우 진행률이 100%가 안 될 수 있습니다.