CDN으로 컨텐츠 번개배달


Content Delivery Network. CDN은 말 그대로 컨텐츠를 빠르게 전송하고 사용자가 볼 수 있도록 도와준다. 지리적으로 서버를 분산시켜서 말이다. 컨텐츠에 포함되는것들로는 HTML 페이지, Javascript 파일, StyleSheet, 이미지, 비디오 등 다양한 리소스들이 포함된다. 페이스북이나 넷플릭스 아마존 등 대부분의 기업들이 CDN을통해 웹 트래픽을 처리하고 있다. 이러한 CDN이 무엇인지, 어떻게 동작하는지, 어떠한 장점들이 있는지 살펴보도록 하자!

CDN이 뭐야?

앞서 말한것 처럼 CDN은 원본 서버 이외에도 지리적으로 서버를 분산 시켜 어떠한 사용자가 접속하면 그 사용자에게서 가장 가까운 서버가 필요한 리소스 및 데이터를 보여주게 된다. 이러한 과정은 콘텐츠 로딩에 소요되는 시간을 최소화 할 수 있다.

CDN 서비스 제공 업체들

CDN을 제공하는 다양한 업체들이 있다. 무료 플랜부터 시작할 수 있는 소규모 사업에 맞는 업체, 데이터 센터가 특정 국가에만 있는 업체, DDos 프로텍션은 제공되지 않는 업체 등.. 여러 사항들을 자신의 서비스에 맞추어보고 선택하면 될 것이다. 여기서는 대표적으로 소개되는 CDN 업체들인 Cloudflare, Google Cloud CDN, Amazon CloudFront에 대해서 간략히 소개해볼 예정이다.

  • CloudFlare
    • 무료 플랜을 제공하여 개인 또는 소규모 사업자에게 적합하다.
    • SSL 인증이 가능하다.
    • 180개가 넘는 데이터 센터가 세계적으로 분포되어 있다.
  • Google Cloud CDN
    • 구글 글로벌 네트워크가 사용하는 CDN 업체이다.
    • CloudFlare와 마찬가지로 SSL 인증이 가능하다.
    • 2021년 기준 90개의 데이터 센터가 있다.
  • Amazon CloudFront
    • AWS에서 만든 CDN 서비스이다.
    • 속도가 빠르고 개발자가 아닌 사람에게는 진입 장벽이 있다고 한다.

CDN은 어떻게 동작해?

전 세계 각지에 원본 서버 이외의 서버를 설치한다. 이러한 지점을 인터넷 교환 지점, IXPs(Internet Exchange Points) 라고 한다. 이를 통해 서로 다른 네트워크에서 발생하는 트래픽에 대한 접근을 제공할 수 있다.

아래 사진은 CloudFlare의 What is CDN?에서 가져온 CDN 동작에 관해 간략히 소개한 사진이다.

image

사진을 살펴보면 원본 서버는 미국에 위치하고 있고, 파란색의 CDN 서버가 전 세계 곳곳에 위치된 것을 볼 수 있다. (180개 이상의 데이터 센터가 있으니 아마 사진에 표시된 것 보다 훨씬 더 많을 것이다) 그리고 한국에 있는 사용자가 요청을 보낼 경우 원본 서버가 있는 미국에서 리소스를 보내는 것이 아닌 한국과 가장 가까운 CDN 서버에서 해당 리소스를 보내게 되는 것이다.

CDN 사용의 장점은 뭐야?

그렇다면 빠른 로딩 속도만으로 많은 글로벌 업체에서 CDN을 사용한다는 것인가? 하는 궁금증이 들 수 있다. 빠른 로딩 속도 이 외에도 CDN의 장점 몇 가지를 소개해볼까 한다.

빠른 로딩 속도

컨텐츠 로딩 시간이 길면 사용자들은 빠져나가기 마련이다. 하지만 CDN 서비스를 사용하게 되면 데이터 센터가 전 세계에 분산되어 있기 때문에 사용자와 웹 사이트 리소스 간의 물리적 거리가 줄어들고 지리적으로 더 가까운 데이터 센터에 연결 후 데이터를 전달 받을 수 있다.

안정성 및 이중화

악성 공격이나 트래픽 급증은 웹 서버를 다운시키고 사용자가 사이트 또는 서비스에 접근할 수 없게 만든다. 이런 경우 CDN에서는 다운 타임을 최소화 하는 기능을 제공한다. 바로 로드 밸런싱인데, 로드 밸런싱을 통해 네트워크 트래픽을 여러 서버에 고르게 분산하여 트래픽을 확장하고 무중단 서비스를 제공할 수 있다. 트래픽을 다른 운영 서버로 재배포 할 수 있기 때문이다. 또한, 전체 데이터 센터에 기술적 문제가 발생하는 경우에는 웹 사이트 자체에 접근하지 못하도록 막을 수도 있다.

데이터 보호

정보 보안에 관해 말할 차례이다. SSL 인증서를 제공하는 CDN 서비스를 사용할 경우 우리는 데이터를 보호받을 수 있다.

SSL 인증서는 웹 사이트를 HTTP에서 HTTPS로 이동할 수 있도록 한다. SSL 인증서는 SSL/TLS 암호화를 가능하게 하며, 인터넷 트래픽을 암호화하고 서버 ID를 확인할 수 있다.

그럼 CDN은 어떻게 사용할 수 있어?

사실 우리는 웹 개발을 하면서 이미 제공되어 있는 CDN을 사용하고 있었다. 예를 들면 구글 웹 폰트나 부트스트랩 CDN과 같은 것들이다. 이러한 리소스를 사용하기 위해서는 CDN주소로 import하여 불러오게 된다.

CDN은 최초 요청은 서버로부터 컨텐츠를 가져와 고객에게 전송하지만 첫번째 요청을 수행하면서 동시에 CDN 캐싱 장비에 리소스를 저장하게 된다. 한번 저장된 리소스는 두번째 요청부터 저장된 리소스를 보내게 된다. 해당 CDN 제공 업체에서 컨텐츠 만료 시점을 관리할 수 있다.

만약 이미지에서 파일을 불러왔다면 CDN 주소로 대체할 수 있을 것이다. 예를들면 아래처럼 말이다.

// as-is
<image src="/resource/image.png" alt="image-description" />

// to-be
<image src={CDN_IMAGE_URL} alt="image-description" />

또한 원하는 서비스를 CDN으로 제공하기 위해서는 네임서버 레코드를 CDN 서비스에서 제공하는 도메인 주소 또는 IP 주소로 연결해야 한다. DNS 상에서 CName을 각각의 도메인에 적용해 수정해야 하는데, 이 부분은 나도 아직 시도해보지 않아 추후에 시도해보게 된다면 글을 작성해보고 싶다.

마무리

CDN은 외부에서 제공하는 리소스를 사용하기 위해 많이 들어보았지만 어떻게 동작하는지, 왜 장점인지에 대해서 고민해보지는 않았던 것 같다. 하지만 오늘 글을 작성하면서 CDN이 어떤 것인지 또 이점이 무엇인지 깨달을 수 있었다. CDN에 관해 공부하면서 캐싱이나 SSL 인증서에 대해서 공부해보고 싶다는 생각을 했다. 다음에는 이에 대한 글을 작성해볼까 한다. 기대해주세요!