lighthouse.log

lighthouse.log

CDN 이란

2021-06-26

CDN에 대해 잘 정리된 영상이 있어 영상을 토대로 정리해봤습니다.

https://www.youtube.com/watch?v=_kcoeK0ITkQ

CDN이란

출처: 위키피디아

콘텐츠 전송 네트워크(Content delivery network 또는 content distribution network (CDN))는 콘텐츠를 효율적으로 전달하기 위해 여러 노드를 가진 네트워크에 데이터를 저장하여 제공하는 시스템을 말한다.

  • Content Delivery Network의 약자
  • 여기서 Delivery란 웹페이지나 컨텐츠등을 서버에서 사용자에게 전송하는 것을 말함

CDN을 사용하는 이유

CDN 없이도 온라인 서비스들이 동작하지만 많은 서비스들이 CDN을 사용하는 이유

  • 물리적 거리 관점에서 멀리서 접속하는 사람들은 통신 시간이 늘어남
  • 이런 요청들을 여러 곳에 분산시키는 것. 여기서 사용되는 대표적인 기술이 CDN
  • CDN을 통해 컨텐츠를 캐싱
  • 예를 들면

    • 본사로 손님들이 몰려오는 것이 아니라 각 체인점으로 손님들을 분산시키는 것
    • 체인점에서 고객 대응을 함으로써 본사의 부담을 줄일 수 있음
Client → DNS → CDN → 서버IP
  • 여기서 세계 각지의 서버들을 Edge라고 함

    • 클라언트에게 가장 빠르게 서비스를 제공할 수 있는 Edge를 선택하여 사용자와 그 서버를 주선해 주게 되는 것
    • 꼭 물리적인 거리뿐만 아니라 CDN 업체에서 상태가 좋지 않은 Edge를 걸러내서 주선시켜주기도 함 (Health Check)
    • 결론적으로 제일 빠르게 서비스를 제공해 줄 수 있는 Edge로 연결시켜주는 것

언제 origin 서버로부터 각각의 Edge에 캐싱 되는걸까

여기서 정적 캐싱과 동적 캐싱의 개념이 나옴

정적 캐싱

  • 캐싱 할 것들을 미리 각 Edge에게 보내는 방식
  • 체인점들이 미리 식재료를 받아오는 것이 정적 캐싱

동적 캐싱

  • 사용자가 요청을 보낼 때마다 보낼 컨텐츠가 Edge에 있는지 먼저 확인한 다음

    • 있으면(cache git) 바로 사용자에게 보내고
    • 없으면(cache miss) 그때 서버에 요청해서 받아오는 형식
  • 주문 들어왔는데 냉장고에 식재료가 없으면 본사에 요청하는 것이 동적 캐싱

Q. 동적 캐싱은 느리지 않을까?

가벼운 콘텐츠는 정적 캐싱으로 문제없지만, 무거운 영상 같은 콘텐츠들은 동적 캐싱이면 느리지 않을까?

  • 필요와 용도, 비용에 따라 적합한 방식을 쓸 필요가 있음

Q. 실시간으로 변하는 컨텐츠의 경우는?

실시간으로 변하는 콘텐츠의 경우 동적 캐싱이 힘들지 않을까?

  • API 요청의 결과 같은 동적 콘텐츠들은 캐싱 해두기 까다로운 대상
  • 그렇기 때문에 정적 캐싱만 하는 업체들도 있고
  • 여러 방법을 고안해서 동적 콘텐츠 전달속도를 높이는 곳들도 있음

    • Cloudflare, Akamai, AWS CloudFront, Azure CND 등
    • 동적 컨텐츠들을 바이트 단위로 분석해서 바뀐 부분만 새로 받아오도록 해서 속도를 높이기도 하고
    • 서버에서 사용자까지 전달되는 경로를 최적화시키기도 하고
    • 데이터를 압축하거나 handshake 등의 과정을 간소화 하기도함
  • 동적 컨텐츠의 특성에 따라서는 지정된 시간에 한해서 캐싱 되도록 할 수도 있음

    • 날씨 데이터와 같은 경우 초 단위로 업데이트될 필요는 없으므로 ~분 단위로 캐싱 되도록 하는 등 사용자에게는 영향을 끼치지 않으면서도 실제 서버로의 접속량은 줄일 수 있음
  • 같은 사이트나 서비스에서도 컨텐츠의 종류마다 TTL을 다르게 지정 가능

    • 데이터가 캐시에 얼마나 남아있을지 지정하는 값을 TTL (Time To Live)라고 함
  • 좋은 CDN 업체일수록 디테일한 기능들을 제공

    • 사이트의 내용이 전반적으로 바뀌어서 캐시를 싹 비우고 싶을 때 체인점들에게 재고 싹 바리고 새로 받아 가라고 명령을 내릴 수도 있고
    • CDN을 사용하면 CDN 업체에 나가는 비용도 있지만 본 서버의 운용(접속량이 줄기 때문에 대역폭 비용 크게 절감) 도 확 줄일 수 있음
대역폭
- 주어진 시간 안에 데이터가 얼마나 많이 실려서 보낼 수 있는가
- 컴퓨터에서 네트워크를 통해 데이터를 전송할 때 전송속도와 대역폭이 얼마나 되는지를 봄
  - 고속도로에 비유하자면
    - 전송속도 : 도로의 제한 속도
    - 대역폭: 차선이 몇 개가 있는 도로인지 (대역폭이 넓으면 같은 속도에서도 더 많은 데이터가 실려갈 수 있음)

CDN 을 사용하는 장점

  • 본 서버가 받는 부담이 덜어지므로

    • 비용 절감
    • 가용성, 안정성 향상
    • 과부하로 인한 오류의 위험성 줄일 수 있음
    • Edge 중 하나가 문제가 생겨도 신속히 다른 Edge로 연결되기 때문에 보다 안정적으로 서비스를 제공 가능 (Health Check)
  • 보안에 있어서도 도움이 됨

    • 가장 쉬운 예로 DDos 공격(방대한 양의 트래픽을 유발하여 서버를 과부하)
    • CDN을 사용하면 여러 Edge 들이 요청이 받으므로 트래픽도 분산됨
    • 좋은 CDN 서비스들은 웹 사이트들을 계속 유지하면서도 DDos 공격들로부터 서버를 보호하기 위한 다양한 방법들을 고안해서 제공하기도 함
    • 정상적인 요청과 공격 요청을 구분해내고 특정 시점의 요청 수를 제한하기도 하며
    • 집중된 요청들을 수많은 Edge로 분산시키는 등 DDos를 무력화시킬 방안들을 갖추고 있음
    • 컨텐츠 암호화도 CDN을 통해 향상 가능
    • 좋은 CDN 업체들은 이 Edg 들과 사용자 간의 연결에 있어서 최신의 검증된 인증 방식을 사용하기 때문에 내가 서버에서 구현한 인증서의 보안 등급이 낮더라도 방문자들은 CDN에서 제공하는 보다 강력한 보안을 누리게 되는 것
    • 이처럼 보안적인 부분도 CDN 업체를 선택할 때 중요한 고려 요소임

웹사이트에 CDN을 설정하려고 하면 어떻게 해야하나

  • 필요에 맞게 CDN 서비스를 선택
  • AWS, Azure 같은 클라우드 서비스를 사용할 경우 해당 클라우드 서비스에서 제공하는 CDN 서비스를 사용하면 좋다

정리

  • 사용자 입장에서는 물리적으로 가까운 거리의 Edge에서 캐싱 된 콘텐츠를 받을 수 있기 때문에 보다 빠르게 웹페이지에 접속이 가능
  • 또한 여러 Edge 들이 요청이 받으므로 트래픽도 분산되므로 서비스의 비용 절감, 가용성/안정성 향상, 보안적인 부분에서도 여러 장점이 있다