- 인쇄
- PDF
CDN+ 사용 가이드
- 인쇄
- PDF
Classic/VPC 환경에서 이용 가능합니다.
CDN+ 서비스 소개
네이버 클라우드 플랫폼 CDN+ 서비스의 개념과 기본 구조를 설명합니다.
네이버 클라우드 플랫폼 CDN+
CDN+ 플랫폼은 기존 국내 CDN 서비스에 보다 안정적으로 다양한 기능을 제공하도록 개선된 CDN 플랫폼입니다. CDN은 인터넷 사용자에게 다양한 콘텐츠를 빠르고 안전하게 전달하는 서비스입니다. 웹 기반의 콘솔로 쉽게 CDN 서비스를 신청하고, 구성된 CDN을 통해 대용량 트래픽을 지원할 수 있습니다. 다량의 이미지나 대용량 콘텐츠 다운로드가 필요한 서비스에 활용하며 사용량 급증 시에도 원활하게 콘텐츠를 전송합니다.
CDN+의 주요 기능 소개
대용량 콘텐츠 전송
이미지, 게임 설치 파일, 미디어 영상 등 다양한 대용량 콘텐츠에 대한 웹 캐싱, 다운로드 서비스를 제공합니다. 콘텐츠 사용량이 급증하더라도 안정적으로 콘텐츠를 전송하여 서비스 연속성을 유지할 수 있습니다.
다양한 원본 서버 지원
CDN+를 통해 콘텐츠를 전송하기 위해서는 원본 서버로 접근하여 콘텐츠를 캐시하고 전송해야 합니다.
CDN+는 HTTP/HTTPS 프로토콜을 통해 다양한 원본 서버와의 콘텐츠 연동을 지원합니다. 원본 서버로 고객이 보유 중인 다양한 웹 서버 및 네이버 클라우드 플랫폼의 Object Storage, Server를 설정할 수 있으며, 연결을 위한 포트를 자유롭게 지정할 수 있습니다.
강력한 콘텐츠 전송 보안
HTTPS로 웹 서비스를 제공하는 경우 콘텐츠가 HTTP로 호출되면 많은 웹 브라우저가 보안 경고 문구를 보여줍니다. CDN+에서는 HTTPS 프로토콜로 콘텐츠 전송이 가능합니다. HTTP도 사용 가능하며 2가지를 혼용하거나 HTTPS만 활용하기 위해 HTTP 제약도 가능합니다.
HTTPS 프로토콜을 선택할 경우 원본 서버와도 HTTPS로 통신하여 전체적인 콘텐츠 전송의 경로에서 보안이 강화됩니다.
레퍼러로 등록된 도메인 기준 접근 허용 기능을 제공하며 Secure-Token 기반의 보안 URL로 콘텐츠 접근을 제한할 수 있습니다.
네이버 클라우드 플랫폼의 다른 서비스와 연계 가능
네이버 클라우드 플랫폼의 다른 서비스와 편리한 연동 설정 기능을 제공합니다. 콘텐츠 원본으로 Object Storage, Server를 사용하여 손쉽게 연동할 수 있으며, Live Station을 사용하면 Live 콘텐츠 전송이 CDN과 자동으로 연동되어 생중계 서비스에 활용할 수 있습니다.
CDN+ 관련 용어 정리
용어 | 설명 |
---|---|
서비스 도메인 | 서비스에서 콘텐츠 전송 시 사용자에게 노출되는 도메인을 의미. CDN+ 구성 후 이 도메인을 서비스 내에 링크해야 CDN을 통해 콘텐츠를 캐싱하여 전송. |
캐싱(Caching) | 사용자 요청에 의해 요구되는 콘텐츠를 빠르게 제공하기 위해 캐시 서버에 저장. |
원본 서버 | 캐싱되는 콘텐츠를 가져오기 위한 원본 콘텐츠 저장 서버. |
Cache Expiry | CDN에서 캐싱된 콘텐츠가 원본 서버에서 변경되었는지 여부를 확인하는 주기. |
HIT | 접속자가 요청한 콘텐츠가 유효한 형태로 CDN 캐시 서버에 있어 접속자의 요청에 대해서 바로 응답할 때 'Cache Hit'이라고 함. |
MISS | 요청한 콘텐츠가 CDN 캐시 서버에 없어서 원본 서버로부터 콘텐츠를 전송받은 후 서버에 저장하는 경우를 'MISS'라고 함. 이전에 요청된 이력이 없거나 유효 시간이 만료된 경우, 요청되었지만 응답한 적이 없거나 캐시를 하지 않도록 설정했을 경우에만 발생. |
BYPASS | 원본 서버 응답 헤더에 Set-Cookie 헤더가 있거나, Cache-Control 헤더에 private, no-cache, max-age=0 등의 내용이 있는 경우 CDN 서버에서 캐싱하지 않고 접속자에게 전달하는 것을 의미. |
Ignore Query String | CDN 서비스가 원본 서버에 요청할 때 '?id=1234'와 같이 URL에 포함된 GET 파라미터를 제거한 후에 요청. |
Referrer Domain | 콘텐츠가 지정된 도메인에만 제공되게 하여 다른 사이트에서 참조되는 것을 방지. 도메인은 www.domain.com 또는 *.domain.com 형식을 지원하며, 숫자, 영문자, "*", "-", "."만 사용 가능. |
Secure Token | QueryString 기반의 Secure Token을 활용하여 허용된 접근에만 콘텐츠를 전달. |
CDN+ 신청하기
CDN+ 신청
콘솔에 접속하여 Services > Content Delivery > CDN+ 메뉴로 이동합니다.
[CDN 신청] 버튼을 클릭합니다.
서비스 설정
서비스 이름, 서비스 프로토콜, 서비스 도메인을 설정합니다.
설정하기 전에 각 항목의 [?] 버튼을 클릭하여 도움말을 참고하시기 바랍니다.
① 신청하고자 하는 CDN+ 서비스 이름을 입력합니다.
② 서비스 프로토콜을 선택합니다. ALL은 HTTP와 HTTPS 프로토콜을 지원합니다.
참고 HTTPS 혹은 HTTP/HTTPS 프로토콜 선택 시 안내 사항
③ 서비스 도메인을 선택합니다.
- CDN 도메인을 사용할 경우, 기본적으로 [랜덤ID].cdn.ntruss.com 형태로 자동 설정됩니다.
- 'CDN 도메인 > 직접입력'을 선택하면 [입력문자열].cdn.ntruss.com 형태의 도메인으로 설정됩니다.
- 고객 보유 도메인을 사용할 경우, 소유하고 있는 도메인을 직접 입력합니다.
- 고객 보유 도메인은 최대 10개까지 지원합니다.
④ 고객 보유 도메인을 사용하고 서비스 프로토콜로 HTTPS 혹은 HTTP/HTTPS를 선택하면, 인증서를 등록해야 합니다. 인증서는 기존의 등록된 인증서를 활용하거나 신규 인증서를 등록할 수 있습니다. 새로운 SSL 인증서 등록은 Certificate Manager로 기능이 이관되었습니다.
- Let's Encrypt로 발급한 인증서를 사용할 경우에는 Certificate Manager에서 Full Chain 경로를 입력하여 사용하시기 바랍니다.
⑤ Access Log 저장 여부를 선택합니다.
CDN+에 요청된 Log를 사용자의 Object Storage에 저장할 수 있습니다. Log를 저장하기 위해서는 각 스토리지별로 저장소를 생성해야 합니다. Object Storage에서 Bucket을 생성해야 합니다.
1시간 간격으로 요청된 Log 데이터를 압축 포맷(gz)으로 저장합니다. Log를 저장하면 매 시 50분 이후 이전 시각의 Log 확인 가능합니다. 사용량이 많은 CDN의 경우에는 로그 수집에 시간이 소요되어 2시간 이후에 로그가 전송될 수 있습니다.
저장되는 Log의 형태는 아래와 같으며, 각 항목은 공백으로 구분합니다. 데이터가 없는 경우에는 "-"으로 표시합니다.
예시) 2018-02-08 22:08:06 183.111.24.145 GET /cdn/test.png - 8080 - 218.55.184.71+183.111.24.145 Mozilla/5.0+(Macintosh;+Intel+Mac+OS+X+10_12_6)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/63.0.3239.132+Safari/537.36 200 57287 0 http://logformat.example.com/ - - TCP_HIT gzip+deflate 155999646 57018 0 c -
항목 | 설명 |
---|---|
date | 일자 |
time | 요청 완료 시간 |
server-ip | 접속한 서버 IP |
cs-method | Client가 요청한 http method |
cs-uri-stem | Client가 요청한 URI |
cs-uri-query | Client 요청시 query string |
server-port | 서버 접속 포트 |
cs-username | 미사용값 (-) |
c-ip | Client IP (Forward IP는 +로 구분) |
cs(User-Agent) | Client의 user-agent |
sc-status | 응답 코드 (2xx, 3xx, 4xx 등) |
sc-bytes | 서버에서 Client에 응답한 전체 용량(bytes) |
time-taken | 응답에 소요된 시간 |
cs-referer | 요청시 referer |
sc-resinfo | CDN 응답 관련 부가 정보(gzip, deflate, Bypass등의 정보, “+”문자로 구분 |
cs-range | range 요청의 경우 range byte 값 |
sc-cachehit | Cache Hit/Miss 정보 (TCP_HIT, TCP_MISS 등) |
cs-acceptencoding | 요청 시 accept-encoding 값 |
session-id | 서버 내 session id 값 |
sc-content-length | 응답 시 Content-Length 헤더의 값 |
time-response | First Byte 응답시간 |
x-transaction-status | 콘텐츠 용량의 전송 완료여부 (x - 콘텐츠 용량보다 전송 용량이 작은 경우, c - 콘텐츠 용량을 모두 전송 완료한 경우) |
x-vhostlink | 미사용값 (-) |
⑥ 설명을 입력합니다.
- CDN+ 관련 설명을 입력할 수 있습니다. 필수 값이 아니므로 입력하지 않아도 됩니다.
원본 설정
원본 위치, 원본에 전달하는 Host 헤더, cache key Hostname, Gzip 압축 지원 여부를 설정합니다.
① CDN+ 서비스를 이용할 원본의 위치를 지정합니다.
네이버 클라우드 플랫폼의 Object Storage를 이용할 경우 Bucket을 미리 생성해야만 이용할 수 있습니다. 원본으로 Object Stroage 활용 시 CDN+ <-> Object Storage간에 발생하는 네트워크 전송요금은 무과금 처리됩니다.
서비스 프로토콜에 관계 없이 원본 프로토콜을 입력할 수 있습니다. 서비스 프로토콜에 따라 기본 프로토콜이 선택되나 변경할 수 있습니다. 각 포트번호는 HTTP 80, HTTPS는 443이 기본 설정입니다.
주의 원본으로 “원본 경로(선택)” 옵션을 활용할 경우 서비스 경로가 다음과 같이 지정되니 참고하시기 바랍니다.
예시) 원본 경로(선택) 옵션을 활용할 경우: 원본 서버에 /example/ 경로를 vhost root 경로로 설정한 경우 * 원본 경로: http://origin.naver.com/example/logo.gif * CDN+ 서비스 경로: http://example.cdn.ntruss.com/logo.gif (입력한 원본 경로는 제외됩니다)
직접 입력할 경우, 원본 서버의 IP 주소 또는 도메인 이름을 입력하며 IP 주소보다는 도메인으로 설정하는 것을 권고합니다.
원본 서버가 HTTP 프로토콜의 Default Port(80) 외에 서비스할 경우에는 포트 번호를 지정합니다.
원본으로 입력이 불가능한 경우
사설 IP 주소 입력 불가: 127.0.0.1, 10.x.x.x, 172.1[6-9]|2[0-9]|3[0-1].x.x, 192.168.x.x 대역은 입력 불가
원본 도메인명의 A 레코드가 없는 경우: 도메인 질의하여 A레코드(IP 정보)가 없는 경우 입력 불가
예시) origin.example.com 도메인 질의하여 'NXDOMAIN' 응답할 경우 입력 불가
② 원본 위치에서 실제 서비스로 제공될 원본 파일이 위치한 디렉토리 위치를 추가로 지정합니다.
③ CDN+에서 원본 서버로 요청 시 전달되는 Host 헤더 정보를 선택합니다.
- 원본 서버에 Virtual Host 설정 시 Host 헤더 정보를 참고하여 응답 콘텐츠를 제어할 수 있습니다. Incoming Host Header는 사용자의 요청 시 전달되는 Host 정보를 원본 요청 시에도 사용합니다. 주로 웹 브라우저의 경우에는 서비스 도메인이 Host 헤더가 됩니다.(예시: ex.cdn.ntruss.com/img.jpg 요청 시 ex.cdn.ntruss.com이 Host 헤더)
- Origin Hostname으로 원본 서버에 Virtual Host 설정이 되어 이 도메인에 대해서만 허용할 경우 Origin Hostname 설정을 선택합니다.
- 기본 설정 값은 서비스 도메인의 ‘Incoming Host Header’ 값을 활용합니다.
④ CDN+의 콘텐츠를 Unique하게 식별할 Cache Key를 선택합니다.
- 'Cache Key > Incoming Host Header' 사용 권고 : 원본에서 Virtual Host에 따라 다른 콘텐츠를 응답하는 경우 활용
서비스 도메인에 따라 콘텐츠는 개별 Cache Key로 구별됩니다. 서비스 도메인에 따라 전송하는 콘텐츠가 다를 경우 Incoming Host Header 값을 선택합니다.
예시)
http://sample.cdn.ntruss.com/logo.gif의 cache key는 ‘sample.cdn.ntruss.com’,
http://example.cdn.ntruss.com/logo.gif의 cache key는 ‘example.cdn.ntruss.com’으로 logo.gif는 다른 콘텐츠로 캐싱
- 'Cache Key > Origin Hostname' 사용 권고 : 원본에서 Virtual Host 상관없이 URL에 동일한 파일 응답하는 경우 활용. Cache Hit율 향상될 수 있어 권고
서비스 도메인은 다르지만 하나의 원본 Cache Key로 됩니다. 서비스의 원본 서버와 전송하는 콘텐츠가 동일하다면 ‘Origin Hostname’으로 설정하는 것이 좋습니다.
예시)
http://sample.cdn.ntruss.com/logo.gif의 cache key는 ‘origin.cdn.ntruss.com’,
http://example.cdn.ntruss.com/logo.gif의 cache key는 ‘origin.cdn.ntruss.com’으로 logo.gif는 하나의 콘텐츠로 캐싱
- CDN+ 보유 도메인을 선택하거나 고객 도메인으로 단일 도메인을 사용하는 경우 Cache Key는 'Incoming Host Header'만 선택할 수 있습니다.
⑤ 원본의 압축 설정 여부를 선택합니다.
- 압축을 할 경우 원본 서버의 트래픽을 줄이고 응답 속도를 개선할 수 있습니다.
- CDN+에서 원본으로 “Accept-Encodgin: gzip” 요청하여 압축된 콘텐츠를 응답받을 수 있습니다. 원본에서 응답 시 Gzip 압축을 지원한다면 ''사용''을 선택합니다.
⑥ 원본 요청 시 Header를 추가/변경하거나 삭제하여 요청할 수 있습니다.
- Header의 이름으로 다음의 문자열들은 입력할 수 없습니다 : (){}[]<>@,;:"/?
- Header의 값으로 다음의 문자열들은 입력할 수 없습니다 : []\공백(space)
- Header 값으로 최대 입력할 수 있는 길이는 256byte입니다.
- 예시) Action: Add, Header Name : NCP-Custom-Header, Header Value : ncp => NCP-Custom-Header: ncp
캐싱 설정
CDN+의 캐싱 만료 시간과 Cache 관련 옵션을 설정합니다.
① CDN+의 기본 캐싱 정책을 선택합니다.
- 기본적으로 캐시 서버에 보관하는 기간은 원본 서버의 ‘Cache-Contorl: max-age=..’나 ‘Expires’ 헤더 값과 동일한 정책을 따르도록 합니다.
- 원본에서 Cache를 조정하는 헤더를 응답하지 않을 경우 캐시 서버에서 얼마나 보관할지는 ‘Cache Expiry’ 설정값이 적용됩니다.
- Cache 선택 시 캐시 서버에서는 ‘Cache Expiry’ 설정한 값이 최대 캐싱 기간으로 적용됩니다.
- No-store/Bypass Cache 설정들은 CDN+ 서버에서 캐싱을 하지 않는 옵션으로 모든 요청이 원본을 통해 서비스되어 권고하지 않습니다.
② CDN+에서 원본과 통신이 어려울 경우의 동작 방식을 선택합니다.
- 원본 서버와 통신이 되지 않았을 때 캐시 서버에 저장되어 있는 콘텐츠를 사용자에게 제공할 수 있습니다. 최신의 유효한 콘텐츠가 아닐수도 있지만 원본 서버의 장애 시에도 서비스가 가능합니다.
- 원본 서버 장애 시 유효하지 않은 콘텐츠가 전송되는 것이 서비스 영향이 있다면, 항상 원본 서버의 콘텐츠와 비교하여 최신의 유효한 콘텐츠를 제공하도록 선택합니다.
③ Cache expiry 설정을 합니다.
- CDN+ 캐시 서버에서 캐싱된 콘텐츠가 원본 서버에서 변경되었는지 여부를 확인하는 주기를 지정합니다. 단, 원본 서버의 응답 헤더에 Cache-Control: max-age가 존재하면 해당 설정이 우선됩니다. 콘텐츠를 자주 업데이트하는 경우에는 짧게 지정하여 설정합니다. 단, 짧게 지정하면 원본의 부하가 늘어나니 주의해서 사용합니다.
④ 서비스 요청 시 Query String을 사용할 경우에 대한 Cache 정책을 선택합니다.
- 원본 서버로 요청 시 사용자 요청의 Query String을 포함할 지 선택할 수 있습니다. 원본 서버에서 Query String에 따라 다른 콘텐츠를 응답할 경우 ‘사용 안함’으로 선택합니다.
- 원본 서버에서 Query String에 관계없이 동일한 콘텐츠를 응답할 경우 ‘사용’으로 선택하여 캐싱 효율을 높이고 원본 요청과 부하를 줄일 수 있습니다.
⑤ 원본에서의 Vary 헤더 응답에 대한 Cache 정책을 선택합니다.
- 만약 원본 서버에서 ‘Vary’ 헤더를 응답하지만 콘텐츠는 동일하다면 캐싱 효율을 위해 제거하는 것이 좋습니다. 원본에서 Vary 헤더를 응답하더라도 동일한 콘텐츠로 인식하기 위해 캐싱에서 제외할 수 있습니다.
- 콘텐츠가 다양한 버전으로 가지고 있으며 User-Agent, Referer, Cookie 등의 Vary 요청 헤더에 따라 응답 콘텐츠가 달라질 경우 ‘사용’을 선택합니다.
⑥ 대용량 파일을 서비스 할 경우 캐싱 효율을 위해 최적화 전송 옵션을 선택합니다.
- 대용량 파일을 전송할 경우 10MB의 청크로 캐싱하며, 사용자가 다운로드를 완료하지 않고 일정 용량 이상이 남아있다면 더 이상 원본으로 요청하지 않아 원본 부하를 감소합니다. 적용을 위해서는 원본에서 Range 응답 설정이 필요합니다. 옵션 활용 시 콘텐츠명을 변경하지 않고 업데이트할 경우 콘텐츠 정합성을 위해 반드시 Purge 수행이 필요합니다.
- 용량은 100MB~16GB 사이 콘텐츠에 대해 적용할 수 있습니다.
Viewer 전송 설정
CDN+에서 사용자에게 콘텐츠 전송 시의 제어 옵션을 설정합니다.
① CDN+에서 사용자에게 콘텐츠 전송 시 압축 설정 여부를 선택합니다.
사용자의 User-Agent(브라우저 혹은 Device)가 Gzip/Unzip을 지원할 경우 콘텐츠를 압축하여 사용자에게 전달합니다. 네트워크 품질이 낮은 사용자에게 압축 전송을 하면 응답 속도를 개선할 수 있습니다.
HTML, JavaScript, 혹은 Text 기반의 10KB 이상 콘텐츠에 적용하는 것이 효과적입니다.원본 서버에서 콘텐츠 확장자 혹은 요청 헤더에 따라 압축/미압축 응답을 유연하게 적용하기 위해서는 ‘원본의 압축 설정과 동일하게 적용’을 선택합니다.
이미지(jpg, png 등)나 동영상(mp4, flv 등), 혹은 이미 압축이 적용된 콘텐츠는 추가 압축을 적용하지 않는 것이 좋습니다. 이미 압축된 포맷의 콘텐츠만 서비스할 경우 사용 안함을 선택합니다.
압축 전송 사용 시, 대상 콘텐츠는 아래의 Mime Type에 적용됩니다.
Text/html*, text/css*, application/x-javascript*, application/javascript*
② 사용자 요청 시 레퍼러에 따라 접근 제어를 설정합니다.
- 지정한 도메인의 레퍼러가 포함되거나 레퍼러가 없는 요청에 대한 접근 제어를 설정할 수 있습니다. 도메인 기반의 설정이므로 특수문자는 “*”, “-“, “_”가 허용되며, 와일드카드(*) 사용 시 하위 도메인에 대해서도 포함하여 접근 제어 설정됩니다.
- 기본적으로 레퍼러가 없는 경우에 대해서도 콘텐츠를 허용합니다. 등록한 레퍼러에 대해서만 허용하려면 '허용 안함'을 선택하세요.
③ Secure Token을 활용하여 허용된 요청에만 콘텐츠를 응답할 경우 선택합니다.
- Secure Token은 일회성으로 Access Token을 생성하여 콘텐츠 요청 시 인증을 통과한 요청에만 콘텐츠를 응답합니다.
- Secure Token은 URL 내에 Query String과 Header의 Cookie 헤더로 지원합니다.
- "인증 예외 대상 확장자"에 설정한 확장자는 인증 token 없이 콘텐츠 호출/응답이 가능합니다.
- "원본에 Token 전달하는 확장자"에 설정한 확장자는 CDN 캐시 서버를 통해 원본서버 요청 시 token 값을 전달합니다. Live Station의 미디어 연관 서비스 활용시 사용합니다.
- Cookie 인증 사용시의 주의사항
- 웹의 CORS 정책에 따라 고객 보유 도메인은 활용할 수 없습니다. CDN에서 제공하는 도메인 *.cdn.ntruss.com 으로 사용해야 합니다.
- Token의 만료시간과 Cookie 자체의 만료시간을 일치시켜야 합니다.
Secure Token을 생성하는 SDK를 Programming 언어 별 제공합니다. 사용하는 프로그래밍 언어에 따라 선택하여 Secure Token을 생성할 수 있습니다.
- Python: https://github.com/akamai/EdgeAuth-Token-Python
- Java: https://github.com/akamai/EdgeAuth-Token-Java
- Ruby: https://github.com/akamai/EdgeAuth-Token-Ruby
- NodeJS: https://github.com/akamai/EdgeAuth-Token-Node
- Golang : https://github.com/mobilerider/EdgeAuth-Token-Golang
- C# : https://github.com/BookBeat/EdgeAuth-Token-CSharp
Token 유효시간의 시작시간(st), 만료시간(exp), ACL(URL 경로조건)을 활용하여 인증 token을 생성하며, 생성된 token을 Query String, Cookie 헤더로 전달하는 설정 예시입니다.
- Token명 : 'token' 값으로 생성이 필요합니다.
- Start(st)/End times(exp) : 인증 token이 유효한 시작/종료 시간입니다.
- Key : Security Token 설정 시 발급되는 key 값으로 생성이 필요합니다.
- ACL(Access Control List) : token으로 일회성 접근 허용 대상 URI 입니다. * 문자를 통해 특정 Path 단위로 설정이 가능합니다.
JAVA 언어를 사용한 인증 Token 생성방법
- Java SDK를 활용하여 token 생성하는 코드를 작성합니다. (Sample Code)
package com.akamai.edgeauth; public class ExampleEdgeAuth { public static void main(String[] args) { String hostname = "example.cdn.ntruss.com"; // 서비스 도메인명 String ET_ENCRYPTION_KEY = "b2b1"; // token을 생성하기 위한 key String tokenName = "token"; // token 명은 'token' 고정 long duration = 3600L; // 3600 seconds = 1 hour try { EdgeAuth ea = new EdgeAuthBuilder() .key(ET_ENCRYPTION_KEY) .startTime(EdgeAuth.NOW) .windowSeconds(duration) .tokenName(tokenName) .escapeEarly(false) .build(); String acl = "/sample.pdf*"; //*/ String file_url = "/sample.pdf"; String token = ea.generateACLToken(acl); String url = String.format("http://%s%s?%s=%s", hostname, file_url, tokenName, token); System.out.println(url); } catch (EdgeAuthException e) { e.printStackTrace(); } } }
- Java 수행하여 생성된 Request URL 생성 예제입니다.
http://example.cdn.ntruss.com/sample.pdf?token=st=1592202370~exp=1592205970~acl=/sample.pdf*~hmac=d422a548ae769bbaddc1d27f03fe6e096a4ba492928f3eb9c09824f93d78f507
- 생성한 Token을 Cookie 헤더에 포함한 요청 예제입니다.
- URL : http://example.cdn.ntruss.com/sample.pdf - 요청시 포함하는 Header 정보 Cookie: token=st=1628596072~exp=1628682472~acl=/sample.pdf*~hmac=8094467ff875e72e8fccc2e579a0cfd002f680cda7acd10b820c193f671952d8
Python 언어를 사용한 인증 Token 생성방법
- Git에서 제공한 파일로 Token을 생성합니다. (Sample Code)
$ python cms_edgeauth.py -k b2b1 -n token -s now -w 3600 -a /sample.pdf* 예시와 같이 입력어 입력 => 다음과 같은 결과가 출력 token=st=1592204787~exp=1592208387~acl=/sample.pdf*~hmac=79872098f16596c8c40ebab649ae2aac8cce3e3bece204b641c99b6cfac42779
- 생성한 Token을 포함한 최종 Request URL 생성 예제입니다.
http://example.cdn.ntruss.com/sample.pdf?token=st=1592204787~exp=1592208387~acl=/sample.pdf*~hmac=79872098f16596c8c40ebab649ae2aac8cce3e3bece204b641c99b6cfac42779
- 생성한 Token을 Cookie 헤더에 포함한 요청 예제입니다.
- URL : http://example.cdn.ntruss.com/sample.pdf - 요청시 포함하는 Header 정보 Cookie: token=st=1628596072~exp=1628682472~acl=/sample.pdf*~hmac=8094467ff875e72e8fccc2e579a0cfd002f680cda7acd10b820c193f671952d8
C# 언어를 사용한 인증 Token 생성방법
- Git에서 제공한 파일로 Token 생성하는 코드를 작성합니다. (Sample Code)
using BookBeat.Akamai.EdgeAuthToken; namespace MyNameSpace { public class MyTokenGenerator { public string GenerateMyToken(long window, string acl, string key) { var tokenConfig = new AkamaiTokenConfig { Window = window, // Time to live (in seconds) Acl = /sample.pdf*, // Access control list containing token permissions Key = b2b1, // Encryption key StartTime = DateTimeOffset.Now.ToUnixTimeSeconds() // Time to Start Timing(From Now) }; var tokenGenerator = new AkamaiTokenGenerator(); var token = tokenGenerator.GenerateToken(tokenConfig); return token; } } }
- 생성한 Token을 포함한 최종 Request URL 생성 예제입니다.
http://example.cdn.ntruss.com/sample.pdf? token=st=1628596072~exp=1628682472~acl=/sample.pdf*~hmac=8094467ff875e72e8fccc2e579a0cfd002f680cda7acd10b820c193f671952d8
- 생성한 Token을 Cookie 헤더에 포함한 요청 예제입니다.
- URL : http://example.cdn.ntruss.com/sample.pdf - 요청시 포함하는 Header 정보 Cookie: token=st=1628596072~exp=1628682472~acl=/sample.pdf*~hmac=8094467ff875e72e8fccc2e579a0cfd002f680cda7acd10b820c193f671952d8
st(startTime) 값에 관한 유의 사항: 고객의 Token 생성 서버의 시간이 CDN+ Edge 서버의 시간보다 2~4초 정도 빠를경우, Edge 서버에서 토큰의 시작 시간(st 값)이 “too early”로 인식되어 인증이 실패하는 경우가 발생할 수 있습니다. 이러한 경우를 방지하기 위하여, Token을 생성하는 메서드를 호출할 때 start_time 값을 현재 시간보다 10 초 빠르게 설정하고, end_time 값을 10초만큼 늘리는 것을 권장합니다. 무엇보다도 Token 생성을 하는 웹 서버의 시간을 NTP로 정확하게 동기화하는 것이 중요합니다.
④ 사용자 응답 시 Header를 추가/변경하거나 삭제하여 응답할 수 있습니다.
- Header의 이름으로 다음의 문자열들은 입력할 수 없습니다 : (){}[]<>@,;:"/?
- Header의 값으로 다음의 문자열들은 입력할 수 없습니다 : []\공백(space)
- Header 값으로 최대 입력할 수 있는 길이는 256byte입니다.
- 예시) Action: Add, Header Name : Access-Control-Allow-Origin, Header Value : => 'Access-Control-Allow-Origin: '의 CORS 헤더를 Edge에서 응답하도록 설정 가능합니다.
CDN+ 설정 사항 확인 및 신청
CDN+ 설정 사항 확인
입력했던 설정 항목들의 정보를 확인합니다. 확인 후 최종적으로 [CDN 신청] 버튼을 클릭합니다.
- 입력했던 설정 항목을 수정하고자 할 경우 [이전] 버튼을 클릭합니다.
- [CDN신청] 으로 CDN 설정이 시작되며 구성이 완료되면 ‘신청중’에서 ‘운영중’으로 상태가 변경됩니다.
CDN+ 사용을 위한 도메인 등록
- 네이버 클라우드 플랫폼에서 제공하는 도메인으로 사용할 경우에는 해당하지 않습니다.
- 고객 보유 도메인을 서비스 도메인으로 신청한 경우, CDN+를 신청하면 CDN+ 도메인 확인이 가능합니다.
- 반드시 운영하는 DNS 시스템 혹은 호스팅 업체에서 네이버 클라우드 플랫폼 도메인을 CNAME 설정해야 서비스에 사용할 수 있습니다.
예시)
고객 도메인: sample.example.com
네이버 클라우드 플랫폼 도메인: example.cdn.ntruss.com
sample.example.com 600 IN CNAME example.cdn.ntruss.com.
CDN+ 관리하기
설정 변경
CDN+ 신청 시 설정한 내용을 변경할 수 있습니다.
① 설정을 변경할 CDN+ 서비스를 선택합니다.
② [설정 변경] 버튼을 클릭합니다.
③ 서비스 이름, CDN 도메인을 제외한 나머지 항목의 설정 변경이 가능합니다. 변경 사항에 대한 입력/선택이 완료되면 [다음] 버튼을 클릭합니다.
- 서비스 도메인의 변경 불가에 따른 도메인 변경 방법
신규 CDN을 생성한 후 고객사 서비스 내 CDN 도메인을 신규 생성한 도메인으로 변경하시기 바랍니다.
기존 CDN의 전송량과 요청수의 사용량 통계를 확인하여 사용량이 없다면 서비스 도메인의 이전이 완료되었으므로 반납하시기 바랍니다.
④ 기존 설정에서 변경된 사항은 하이라이트로 표시가 되며 확인 후 [설정 변경] 버튼을 클릭하면 CDN 서비스 설정을 변경합니다. 설정 변경의 반영에는 수분이 소요되며 변경이 완료되면 '변경중'에서 '운영중'으로 상태가 변경됩니다.
Purge
Purge는 캐시 서버에 저장된 콘텐츠를 삭제하는 기능입니다.
① 전체파일: 도메인에 해당하는 전체 파일의 Purge를 수행합니다.
② 디렉토리: 도메인 내 특정 디렉토리 경로(하위 디렉토리 포함)에 해당하는 파일들의 Purge를 수행합니다.
③ 파일 직접 입력: 입력된 특정 콘텐츠들만 Purge를 수행합니다. 파일은 한번에 100개만 입력할 수 있습니다.
하나의 CDN+ 서비스에서 여러 개의 도메인을 운영하고 Cache Key가 Incoming Host Header의 경우 Purge를 적용할 도메인을 선택하여 진행합니다. 1개 혹은 여러 개 도메인의 멀티 셀렉트가 가능합니다.
'전체파일', '디렉토리' Purge 수행 시 캐싱이 삭제되어 원본으로 요청이 증가할 수 있으니 주의하여 사용하시기 바랍니다.
GUI 외 API 기반으로도 Purge 기능을 활용할 수 있습니다.
상세한 가이드는 CDN+ Purge API reference 참고 부탁드립니다.
Purge 로그
Purge를 수행한 이력을 확인할 수 있습니다.
① Purge 이력을 확인할 CDN+ 서비스를 선택합니다.
② [Purge 로그] 버튼을 클릭합니다.
③ 최근 5회 동안 적용된 내역을 확인할 수 있습니다. 그러나 파일명이 잘못 입력된 경우에도 Purge는 성공으로 표시됩니다.
CDN 일시 정지
일시적으로 CDN+ 콘텐츠 전송을 중지할 수 있습니다.
① 일시 정지할 CDN+ 서비스를 선택합니다.
② [일시 정지] 버튼을 클릭합니다.
CDN+ 서비스 도메인이 정지되므로 주의해서 사용합니다.
CDN 재시작/해지
일시적으로 콘텐츠 전송을 중지했던 CDN+ 서비스를 재시작하거나 해지할 수 있습니다.
상태가 정지 상태일 때만 수행 가능합니다.
① 정지 상태에서 재시작 또는 해지할 CDN+ 서비스를 선택합니다.
② [재시작] 또는 [CDN 해지] 버튼을 클릭합니다.
③ 재시작이 완료되면 리스트에서 상태가 정지에서 운영중으로 변경됩니다. 해지가 완료되면 리스트에서 사라집니다.
인증서 관리
CDN+에서 인증서 등록/관리하던 기능은 Certificate Manager로 기능이 이관되었습니다.
Certificate Manager를 사용하여 편리하게 인증서를 관리하실 수 있습니다.
모니터링
모니터링 선택
조회할 대상 서비스 이름과 기간을 선택하여 전송량, 요청수, Cache Hit율, 응답 코드의 통계 그래프를 확인할 수 있습니다.
CDN 캐시 서버로부터 데이터를 수집/가공의 통계 지연으로 약 20분의 데이터 지연이 있습니다.
모니터링 데이터 조회 기간 선택은 최소 2일부터 최대 3개월까지 가능하며 미래 일자는 선택할 수 없습니다.
조회 기간에 따른 데이터 분석 주기는 다음과 같습니다.
- 2일 이내: 5분
- 2일 초과~일주일 이내: 30분
- 일주일 초과~1개월 이내: 2시간
- 1개월 초과~3개월 이내: 6시간
모니터링 항목
① 트래픽(Mbps): CDN을 통해 전송된 데이터의 네트워크 대역폭
② 전송량(Bytes): CDN을 통해 전송된 데이터의 전송량(서비스 이용 요금 산정의 기준)
③ 요청수(건): CDN으로 인입된 서비스 요청 수(서비스 이용 요금 산정의 기준)
④ 요청수 대비 Cache Hit(%): CDN의 요청 수와 원본으로 인입된 요청수의 비율, Hit율이 높을 수록 캐시 서버 내 캐싱 콘텐츠 재사용이 높고 원본으로의 요청과 원본 부하가 감소됩니다.
⑤ 응답 코드(건): CDN에서 사용자에게 응답한 코드(2xx, 3xx, 4xx, 5xx)별 건수
⑥ 원본서버 트래픽(Mbps): CDN에서 측정된 원본 서버로부터 전송받은 데이터의 네트워크 대역폭
⑦ 원본 응답(건): CDN에서 측정된 원본 서버로부터 응답받은 코드(2xx, 3xx, 4xx, 5xx)별 건수
통계
통계 선택
조회할 대상 서비스 이름과 기간을 선택하여 전송량, 요청수 통계 그래프를 확인할 수 있습니다.
통계 데이터 조회 기간 선택은 최소 2일부터 최대 1년까지 가능하며, 통계는 1일 단위의 데이터로 확인할 수 있습니다.
데이터 조회 일자 선택 시 현재 기준으로 미래 일자는 선택할 수 없습니다.
비교 기간을 선택하여 확인할 수 있으며 조회 기간(2일, 일주일, 1개월 등)은 동일해야 합니다.
통계 항목
① 트래픽(bps): CDN을 통해 전송된 데이터의 네트워크 대역폭
② 전송량(Bytes): CDN을 통해 전송된 데이터의 전송량(서비스 이용 요금 산정의 기준)
③ 요청수(건): CDN으로 인입된 서비스 요청 수(서비스 이용 요금 산정의 기준)
연관 정보 바로가기
아래 가이드에서 연관 정보를 확인할 수 있습니다.