Browsing Tag

content delivery network

NCLOUD

[NCLOUD] Global Edge 서비스로 배우는 CDN(Content Delivery Network)

안녕하세요 MANVSCLOUD 김수현입니다.

디지털 시대에는 정보와 컨텐츠의 전송 속도가 사업의 성패를 좌우하는 중요한 요소 중 하나입니다. 이를 위해 CDN(Content Delivery Network) 서비스의 중요성이 점점 더 커지고 있습니다. NAVER Cloud는 이러한 요구에 부응하기 위해 기존 캐싱 목적만 가졌던 CDN+보다 뛰어난 성능과 기능으로 지난 해 11월 출시하게 되었습니다.

오늘 소개드릴 서비스는 바로 Global Edge인데요. CDN부터 Global Edge까지 긴 글이 될 것같습니다. 하지만 이 포스팅 하나로 Global Edge 서비스와 CDN에 대한 지식을 모두 얻어가시길 바랍니다.

Global Edge를 알아보기 전에 CDN이 무엇인지 먼저 알아보도록 하겠습니다.


What is CDN?

  • CDN(Content Delivery Network)이란?

CDN은 이미지 파일의 안정적인 전송이 목적이었습니다. 지역 간 거리로 인해 발생하는 전송 에러 및 데이터 손실을 해결하고자 탄생하게 됐는데요. 콘텐츠 전송 네트워크라는 이름 그대로 콘텐츠를 효율적으로 전송하기 위한 목적을 가졌습니다. 이미 다양한 서비스에서 CDN이 사용되고 있고 우리는 CDN의 이점을 경험하고 있습니다. 또한 CDN을 사용하면 콘텐츠를 전송하는 네트워크 속도뿐만 아니라 비용 절감 및 보안상의 이점도 가질 수 있습니다. 

그렇다면 콘텐츠를 어떻게 효율적으로 전송할 것인가? 
이 부분은 CDN의 원리와 Cache 그리고 PoP(Points of Presence) 에 대한 개념과 함께 간단하게 알아보겠습니다.

  • CDN의 원리

클라이언트가 웹 브라우저에 URL을 입력했을 때 (DNS 및 방화벽 과정은 생략하고) CDN이 어떤 동작 원리를 가졌는지 중점으로 간단히 알아봅시다.
먼저 컨텐츠(HTML, CSS, Javascript, 이미지 파일, 비디오, 앱 등)를 서버에 요청(HTTP Request)합니다. 여기서 CDN이 사용되고 있을 경우 요청한 클라이언트와 가장 가까운 위치에 있는 캐시 서버에 매핑되어 미리 캐싱되어 저장된 데이터를 응답(HTTP Response)하게 됩니다. 하지만 이건 캐싱된 파일이 있을 때의 이야기인데요.
만약 모든 CDN 서버에서 캐싱된 파일이 없거나 컨텐츠가 만료되었다면 어떻게 될까요?
CDN 서버는 Origin(원본) 서버에서 새로 컨텐츠를 가져와 저장하고 향후 요청에 대해 응답할 수 있도록 합니다. 그렇다면 CDN은 오직 캐싱이 목적일까? 그렇지 않습니다.
CDN은 캐싱을 하지만 그 목적은 단순히 캐싱만은 아닙니다. CDN의 가장 큰 목적은 컨텐츠를 효율적으로 전달하는 것인데 캐싱만으로는 부족합니다. 핵심은 지리적으로 분산된 프록시 서버 네트워크라는 점입니다.
또한 CDN은 Reverse Proxy로 동작하는 대표적인 캐시 서버인데 속도와 안정성을 갖추고 있다고 볼 수 있습니다. 뿐만 아니라 현재의 CDN 서비스들은 다양한 기능들이 추가되어 사용자들에게 제공되고 있습니다.

  • 그래서 PoP(Points of Presence)이 뭔데?

PoP은 사용자와의 통신할 수 있는 지리적으로 가장 가까운 곳에 위치한 데이터 센터입니다. ‘Points of Presence’ 말 그대로 접속 지점인 것인데 주요 기능은 컨텐츠를 웹 사이트 방문자에게 가까이 위치하게 하여 왕복 시간을 줄이는 역할로 PoP에는 일반적으로 수 많은 캐싱 서버가
존재합니다.  그리고 캐시 서버는 캐시된 파일의 저장 및 전달을 담당하게 되는거죠.

  • Cache? 캐시 충전해야 하나요?

캐시는 쉽게 말하면 임시로 저장해두는 장소라고 말할 수 있는데요.
캐싱을 하고 있다는 것은 원본에 대해 외부 호출을 다시 필요로 하지 않도록 컨텐츠를 어딘가에 저장하여 빠르게 액세스할 수 있도록 해두었다는 것입니다. 캐시를 이용하면 다운로드 및 데이터 검색 속도 등 자원 효율성에 대한 이점을 얻을 수 있습니다.


Global Edge

오늘 포스팅의 주인공은 Global Edge입니다.

Global Edge는 전 세계 어디에서든 빠르고 안정적으로 컨텐츠를 전송하는 것을 목표로 하며 NAVER Cloud의 독자적인 기술을 기반으로 최상의 온라인 비디오 서비스 제공 및 스마트 캐시, 다운로드 가속화와 같은 다양한 기능을 사용자에게 제공합니다.

Global Edge를 사용하기 위해서는 프로필 생성과 Edge 생성이 먼저 필요합니다.
하나의 프로필 아래 여러개의 Edge를 생성하고 관리할 수 있는 형태입니다.

Global Edge의 장점 중 하나는 Quick Start와 Self intergration인데요.
CDN 설정 시 CDN 서비스에 대한 이해도가 낮아도 쉽게 사용할 수 있도록 Quick Start 옵션을 만들어 두어 기본적인 설정만으로 CDN 서비스를 사용할 수 있습니다.

만약 세부적인 설정까지 디테일하게 조정을 원하신다면 Self Intergration을 선택하여 다양한 캐시 및 관리 설정을 적용할 수 있습니다.

아래는 Self Intergration 옵션을 선택했을 때 나오는 설정 옵션들입니다.

서비스 프로토콜은 요즘 나와있는 CDN 서비스들과 동일하게 HTTP, HTTPS, HTTP and HTTPS 를 모두 선택할 수 있습니다.

Global Edge 서비스의 특별한 점은 서비스 지역 선택 부분인데요.
Global Edge는 특정 산업 형태에 따라 전략적으로 사용할 수 있도록 한국, 일본, 글로벌(성능 우선), 글로벌(가용성 우선) 중 하나를 선택하여 서비스 지역이 가능합니다.

서비스 지역 선택 후 서비스 도메인은 네이버 클라우드 플랫폼에서 제공하는 도메인을 사용할지 또는 보유하고 있는 개인 도메인을 사용할지 선택할 수 있는데 HTTPS 서비스를 사용하려면 해당 도메인에 대한 SSL 인증서 등록 과정이 필요합니다. 네이버 클라우드 플랫폼에는 무료 SSL 인증서를 제공하지 않는가? 아직 특정 해외 퍼블릭 클라우드를 제외하면 대부분의 퍼블릭 클라우드 플랫폼들이 해당 서비스를 제공하지 못하고 있습니다. 하지만 네이버 클라우드는 무료 SSL 인증서 부분에 대해 긍정적으로 기대해볼만합니다.

네이버 클라우드 역시 국내 최초로 최상위 인증기관 인증서인 루트 CA를 주요 OS와 브라우저에 탑재하였기때문에 따로 사용자가 매번 SSL 인증서를 구매하고 등록해야하는 번거로움을 해결할 수 있도록 서비스로 제공해줄 것이라 믿습니다.

Global Edge는 사용자가 기존에 사용하던 서버의 IP나 도메인을 Origin으로 설정하여 사용할 수도 있지만 네이버 클라우드의 Object Storage 서비스와도 연동하여 사용이 가능합니다.

Forward Host Header를 설정하는 부분도 있는데 Forward Host Header는 요청 시 Origin 서버로 요청을 전달할 때 사용할 Host 헤더 값을 말합니다. Incoming Host Header, Origin Hostname, Custom 중 선택이 가능합니다. Incoming Host Header는 요청 시 들어오는 요청의 Host 헤더 값을 사용할 때, Origin Hostname은 콘텐츠를 가져오기 위해 접근하는 원본 서버의 호스트 이름으로 특정 값만 수신하도록 오리진 서버를 설정해둔 경우 선택하게되며 Custom은 Host Header에 대해 사용자 지정을 하는 옵션입니다.

그 외에도 Origin Shield 기능 역시 클릭 한번으로 설정할 수 있도록 제공하고 있으며 Orgin Failover를 제공하기때문에 Origin 장애 시 상태 코드에따라 다른 Origin 서버에게 요청하여 응답받을 수 있도록 설정할 수 있습니다.

다음은 캐시 설정을 할 수 있는 부분입니다.
위 페이지에서는 이제 디테일한 캐시 설정을 할 수 있는 부분인데요.

캐시 동작에 대해서 캐시 보관 기간을 설정하거나 Bypass를 할 수 있습니다. Bypass는 캐싱을 하지 않고 Origin에게 요청할 수 있도록 하는 옵션입니다. 해당 옵션 외에도 아래에 Bypass Query String을 설정하는 부분이 있어 특정 문자열이 포함된 경우에만 캐싱되지 않고 Bypass되도록 설정할 수도 있습니다. 마지막으로 ‘원본 Cache-Control 헤더 우선’ 옵션은 Origin에 Cache-Control 값이 설정되어있는 경우 이 값을 우선적으로 사용할 수 있도록하는 옵션입니다.

Serve Stale object 선택 시 Serve stale if unable to validate와 Always revalidate with origin 선택지가 나오는데요. 한글로 나와있지 않아 당황스러울 수도 있을 것같습니다. 해당 옵션은 캐시 수명이 끝났는데 Origin도 사용할 수 없는 경우 이후 동작을 어떻게 할 것인가에 대한 부분을 묻는 부분입니다. Serve stale if unable to validate의 경우 캐시 유효성을 재검증할 수 없을 때 만료된 개체를 계속 사용하겠다는 선택지고 Always revalidate with origin은 캐시 유효성을 재검증 후에 사용할 수 있도록 하는 옵션입니다.

네거티브 TTL(s) 옵션의 경우 끄고 킬 수 있도록 되어있습니다.
이 옵션을 On으로 설정한다면 Origin에서 오류 응답을 받았을 때 오류 응답에 대해서도 캐싱을 하여 Origin에 대한 부하를 줄일 수 있게 됩니다. 또한 Cache Key Hostname을 설정할 수 있기때문에 캐시 키에 서비스 도메인을 포함하거나 Origin의 호스트명을 포함하는 선택이 가능합니다.

너무 기능이 많다구요? 없는 것보다 좋습니다.
그럼 이어서 알아보죠. Cache Key Ignore Query String에서는 캐시 키에 쿼리 문자열을 전체 무시(제외)할지 아니면 모두 허용(포함)할지 특정 문자열만 허용할지 선택할 수도 있습니다.

Remove Vary Header라는 ON/OFF 옵션도 있는데요. Vary 헤더는 웹 서버 응답에서 사용되는 부분인데 해당 응답이 어떤 요청 헤더를 기반으로 캐시될 수 있는지 나타내는 헤더입니다. 간단하게 설명하면 “이 응답은 다음과 같은 요청 헤더에 따라 다를 수 있으니 캐시할 때 이 헤더의 값을 고려해라”라는 메시지를 전달하는 부분입니다.

Edge Auth는 콘텐츠의 무단 공유를 방지하기 위해 특정 토큰을 생성하여 인증된 사용자 세션을 검증하는 방식입니다. 이를 통해 인증된 요청에만 콘텐츠를 제공하게 되는데요.

Signed URL(인증 정보가 포함된 URL로 해당 URL로 접근하는 클라이언트에게만 콘텐츠 접근을 허용), JWT(인증 정보를 담은 JSON 토큰을 사용하여 클라이언트를 식별하고 인증), Media Vault(인증 정보가 포함된 URL 방식이나 특정 서비스 지역에서만 사용 가능) 중 하나를 선택하여 사용할 수 있습니다.

Global Edge는 캐시 상세 룰도 제공하고 있습니다.

특정 디렉토리(/directory/*)에 대해 파일 확장자(.png)에 대해 그리고 디렉토리와 파일 확장자를 함께 사용할 수도 있습니다. 이 기능을 이용하여 특정 파일이나 디렉토리에 대해 캐싱 기간이나 Bypass, 브라우저 캐시 허용/불가, 접근 제어, Redirect/Rewrite 등을 디테일하게 설정할 수 있게됩니다.

또한 제가 Global Edge 서비스 중 가장 마음에 드는 부분 중 하나인데요.
네이버 클라우드의 Global Edge 서비스는 CORS, HTTP/2, True-Client-IP Header, HSTS 설정을 클릭 한 번으로 해결할 수 있습니다.

그리고 Origin 요청 및 사용자 응답 시 전송되는 HTTP Header를 재정의할 수 있는 HTTP Header Modification 설정 부분이 있습니다.

Global Edge는 압축 및 대용량 파일 전송도 클릭 한 번으로 간단하게 설정할 수 있지만 무엇보다 Global Edge 서비스 내에서 화이트리스트 및 블랙리스트 관리가 가능하다는 점이 큰 강점입니다. API를 이용하여 공격성 Client IP를 탐지하여 CDN 서비스 부분에서 IP/CIDR 블랙 리스트 추가를 할 수도 있고 Geolocation을 제공하기 때문에 지역별 서비스 제공 및 특정 국가 차단이 가능합니다. CDN+에서 제공하던 Referer Header 기능은 당연히 Global Edge에서도 제공하고 있구요.

그 외 Logging 기능도 당연히 제공하고 프로필, Edge별로 기간별 지표 리포트이 가능하며 다운로드 및 스케줄레포트를 설정하여 특정 담당자에게 리포트 전달을 할 수도 있습니다.

Why we need to use ‘Global Edge’

  • CDN+ to Global Edge Migration

Global Edge 가이드에는 기존 CDN+ 서비스를 Global Edge로 마이그레이션 할 수 있도록 상세한 가이드를 제공하고 있습니다. 원래 이 부분에 대해 마이그레이션 포스팅을 작성하려고 했었는데 가이드에서 너무 상세하게 잘 작성이 되어있어서 URL 하나면 충분했습니다.

https://guide.ncloud-docs.com/docs/globaledge-migration

위 가이드를 참고하여 하나씩 따라 설정만해도 간단하게 마이그레이션이 가능했습니다.

  • Performance

다음은 성능적인 부분입니다. Global Edge는 꽤 좋은 성능을 가지고 있는데요.

Global Edge의 성능을 확인하기 위해 타 퍼블릭 클라우드 A사의 CDN 서비스와 비교하여 캐싱된 상태에서 어느 정도의 속도가 나오는지 확인해봤습니다.

Origin 서버에 Apache를 설치하고 .html, .css, .png, .jpg 등 정적 파일로 이루어진 웹 페이지를 구성하여 테스트를 진행했습니다.

먼저 위 결과는 네이버 클라우드의 Global Edge를 사용했을 때 결과입니다.

두번째 사진은 A사의 CDN 서비스를 사용했을 때 결과입니다.

브라우저 캐시는 제거한 상태의 결과를 기준으로 하였으며 기본 캐싱 정책과 간단하게 설정할 수 있는 압축 기능 등을 전부 사용하였으며 A사의 경우 HTTP/3 옵션도 제공하고 있었기에 이 또한 실행하였습니다.

최종 Load 속도로 비교했으며 여러번 진행하여 테스트를 진행했는데요.
결과를 보고 Global Edge 성능이 좋다고 판단할 수 있었습니다.

위 사진으로 볼 경우 Global Edge의 Load 속도가 조금 더 빠르게 나왔는데요.
네이버 클라우드의 Global Edge 걱정하지 않고 사용해도 좋을 것같습니다.

다만 Global Edge의 경우 A사보다 Request/Response 시 Waiting for server response 수치가 꽤 높게 나와 이 부분이 줄여질 수 있다면 훨씬 더 빨라질 수 있을 것이라 생각되었습니다.

  • Compatibility

Global Edge 서비스는 네이버 클라우드의 서비스입니다.
즉, 네이버 클라우드의 다른 서비스들과 연동하여 사용할 수 있다는 장점이 있습니다.
Object Storage, Live Station, VOD Station, Media Connect Center, GAMEPOT, API Gateway 등 네이버 클라우드를 이미 사용하고 있다면 CDN 서비스는 Global Edge를 사용하여 이런 이점을 얻을 수 있겠네요.


Personal Comments

네이버 클라우드의 서비스는 항상 진화하고 있습니다.

그 말은 곧 Global Edge 서비스 역시 지속해서 업데이트되고 더 좋은 기능 출시를 기대할 수 있습니다. CDN 서비스는 콘텐츠 전송 품질도 중요하지만 보안 역시 중요합니다.

앞으로 Global Edge에 보안 서비스가 더해지거나 연동이 가능해진다면 더욱 뛰어난 서비스가 될 수 있으리라 생각됩니다. 만약 이미 보안 서비스가 적용되어 있다면 가이드나 서비스 소개에 어떤 보안 서비스가 적용되어 있는지 포함되어있으면 더욱 많은 사용자가 관심을 가질 것으로 생각됩니다.

긴 글 읽어주셔서 감사합니다.