Base/용어 개념

CDN이란? (What is Content Delivery Network?)

koh1018 2023. 1. 25. 01:15
반응형

출처 : http://metacdn.sa.metacdn.com/img/home/without-cdn.png

 

 

CDN, CDN 자주 들어봤는데 간단하게만 이해하고 명확히 그 개념을 알지 못했다.

이번 포스팅을 통해 CDN에 대해 자세히 알아보도록 하겠다!

 

CDN (Content Delivery Network)

CDN은 Content Delivery Network의 준말로 직역하면 콘텐츠를 전달하는 네트워크라는 의미이다.

 

CDN은 웹페이지, 이미지, 동영상 등의 콘텐츠를 서버에서 사용자로 전달한다.

 

 

그런데, 그런 것들은 이미 인터넷망을 통해 이미 전달되고 있지 않은가?

그렇다면 CDN은 왜 필요한 것일까?

 

 

 


 

 

CDN은 왜 필요할까?

분명히 CDN 없이도 서비스들은 동작한다.

 

먼저 일반적인 클라이언트와 서버의 통신을 생각해보자.

 

출처 : https://darvishdarab.github.io/cs421_f20/assets/images/client-server-1-d85a93ea16590c10bed340dd78294d0d.png

누군가 어떠한 사이트에 접속한다는 건 해당 사이트를 제공하는 서버 컴퓨터에 방문자의 컴퓨터가 요청을 보내고, 그 요청에 따라 서버가 콘텐츠를 보내주는 과정을 의미한다.

 

사용자가 적은 사이트는 문제가 되지 않겠지만 유튜브와 같이 글로벌 서비스를 하는 사이트는 셀 수 없이 수많은 요청들이 들어올 것이다.

이 경우 두 가지 문제가 발생하게 된다.

 

1. 물리적 거리의 문제

: 한국에 서버가 있는 서비스를 세계 각지에서 방문한다고 하면 한국에서는 빠르겠지만 멀리서 접속하는 사람들은 느리다.

 

2. 많은 요청량 처리의 문제

: 서버가 수용할 수 있는 요청의 한계가 존재한다.

 

이런 문제를 해결하기 위해 더 좋은 하드웨어(슈퍼 컴퓨터..?)로 서버를 돌리는 방법도 있겠지만, 가장 좋은 방법은 요청을 분산시키는 것이다.

 

여기에 사용되는 대표적인 기술이 바로 CDN이다.

 

 

 

그렇다면 CDN은 서버를 물리적으로 분산시켜두는 기술인가?

서버를 분산시켜둔다는 것은 무엇일까?

가장 단순한 방식으로 같은 내용을 복사해 각 나라별 서버에 두는 방식을 생각할 수 있다.

이런 방식은 미러 사이트라고 한다.

하지만 CDN은 이와 조금 다른데, CDN은 조금 더 콘텐츠 전달이라는 용도에 특화되어 있는 것이다. (서버 전체 기능을 똑같이 따라하는 것 X)

 

예를 들어 전 세계 곳곳에 서버를 두고 있는 CDN 업체가 있다고 하자. A라는 사이트의 운영자가 해당 CDN 업체를 이용하면, 사이트 접속자는 A 사이트의 서버가 아닌 CDN 업체의 서버로 요청을 보내게 된다.

이 CDN 서버에는 A 사이트의 각종 이미지나 기타 정적 요소들을 상당 수 저장, 캐싱 해둘 수 있다.

 

이러한 방식을 통해 앞선 두 가지 문제를 해결할 수 있다.

 

 

출처 : https://mblogthumb-phinf.pstatic.net/MjAyMDA1MTlfMjMy/MDAxNTg5ODk1ODQxMzQ5.8qm8gJ-dDIfPfsimKhariRLCB5Dk4-168pOA5HfvvEAg.XSVVhsEbHSyph1u2W5bxesuEI4Dgtj6QWSCkzh6pp0kg.PNG.rorlauswnrdh/cdn1.png?type=w800

먼저, 미국에서 접속을 하더라도 태평양을 건너 대한민국의 서버까지 요청을 보내고 받는 것이 아니라 미국에 있는 CDN 서버와 요청을 보내고 받을 수 있기 때문에 물리적 거리의 문제를 해결할 수 있다.

이렇게 세계 각지에 존재하는 서버를 Edge라고 부르며 이 중 가장 클라이언트에게 가깝게 있는 Edge가 연결되게 된다.

 

다음으로, 요청량이 많아지는 경우 조금 멀더라도 요청량이 적어 빨리 처리할 수 있는 Edge에게 요청을 분산하여 많은 요청량 처리의 문제를 해결할 수 있다.

 

 

 

각각의 Edge는 오리지널 서버로부터 어떻게 캐싱을 할까?

앞서 CDN 서버 즉, 각각의 Edge들은 오리지널 서버의 리소스를 캐싱해둘 수 있다고 했다.

 

캐싱하는 방식에는 두 가지 방식이 있는데, 정적 캐싱과 동적 캐싱이다.

 

- 정적 캐싱

: 캐싱할 것들을 각 Edge에 미리 보내는 것

- 동적 캐싱

: 사용자가 요청을 보낼 때마다 보낼 콘텐츠가 Edge에 있는지 확인한 후 있으면 사용자에게 바로 보내고(cache hit) 없으면 오리지널 서버에 요청해 받아오는 것(cache miss)

 

 

가벼운 콘텐츠들은 동적 캐싱해도 문제가 없겠지만 동영상과 같이 무거운 파일은 정적으로 캐싱해둬야 느리지 않다.

이처럼 필요나 용도 혹은 비용에 따라 적합한 방식을 선택하여 사용할 수 있다.

 

 

더 나아가 캐싱하는 대상인 콘텐츠에 대해 얘기해보겠다.

정적 캐싱, 동적 캐싱과 이름이 비슷해 조금 헷갈릴 수도 있는데, 콘텐츠는 정적 콘텐츠와 동적 콘텐츠로 나뉜다.

 

- 정적 콘텐츠

: 내용이 고정된 콘텐츠들 (ex. HTML, CSS, JS파일, 이미지)

- 동적 콘텐츠

: 데이터베이스 등의 변수에 따라 내용이 변할 수 있는 콘텐츠들 (ex. 게시판의 최신글 불러오기 API)

 

 

CDN은 위 두 종류의 콘텐츠를 모두 캐싱할 수 있다.

다만, 미리 짐작할 수 있듯 동적 콘텐츠는 정적 콘텐츠에 비해 내용이 변할 수 있어 캐싱해두기 까다로운 면이 있다.

 

이러한 이유로 기본적인 정적 콘텐츠만 캐싱하는 CDN 업체들도 있으며, 여러 방법을 고안해 동적 콘텐츠 전달속도를 높힌 CDN 업체들도 있다.

 

 

CDN 업체에는 대표적으로 CloudFlare가 있으며, 이 외에도 Akamai, AWS의 CloudFront, Azure의 CDN등과 같은 것들이 있다.

 

위 업체들은 어떤 방식으로 동적 콘텐츠의 전달 속도를 높힌 걸까?

여러 방법이 있는데 그 중 몇 가지를 살펴보겠다.

 

  • 동적 콘텐츠를 바이트 단위로 분석해 바뀐 부분만 새로 받기
  • 서버에서 사용자까지 전달되는 경로를 최적화
  • 데이터 압축
  • handshake 등의 과정을 간소화

 

이 밖에도 동적 콘텐츠의 특성에 따라 지정된 시간에 한해서 캐싱하는 방법으로 속도를 높힐 수도 있다. 예를 들어 날씨 같은 경우 초 단위로 업데이트 될 필요는 없으니 이를 분 단위로 업데이트하면 서버 요청량이 줄어들 것이다.

 

이처럼 데이터가 캐시에 얼마나 남아있을지 지정하는 값을 Time-To-Live, TTL이라고 한다.

같은 사이트나 서비스에서도 콘텐츠의 종류마다 적합한 TTL을 지정할 수 있다.

 

앞서 말한 대부분의 CDN 업체들은 위와 같은 설정들을 다양하게 선택하고 조절할 수 있도록 콘솔을 제공한다.

 

이렇게 캐싱등을 통해 본 서버를 돌리는 비용을 줄일 수 있기에 많은 글로벌 기업들은 CDN을 사용한다. (CDN 사용료와 절감되는 비용을 비교하면 비용 절감 효과가 더 크다.)

CDN을 사용하면 오리지널 서버로 가는 길을 넓게 깔 필요가 없기에 대역폭 비용을 줄여줄 수 있다.

또한 오리지널 서버가 받는 부담이 적어지고 여러 Edge들로 오류가 발생해도 대처가 가능하기에 가용성과 안정성도 향상된다.

 

 

 

출처 : https://www.bizety.com/wp-content/uploads/2014/08/PANvsCDN.png

추가로, CDN은 보안에도 도움이 된다.

한 예로, 디도스(DDoS) 공격은 여러 좀비 컴퓨터로 지정 시간에 대상 사이트의 트래픽을 올려 서버를 과부화 시키는 공격을 말하는데 CDN을 사용하면 분산된 CDN들이 많은 요청을 분산시켜 받기 때문에 디도스에 당할 위험성이 낮아진다.

 

또한 콘텐츠의 암호화도 CDN을 통해 향상시킬 수 있는데, 좋은 CDN 업체들은 Edge들과 사용자간의 연결에 있어 최신의 검증된 인증 방식을 사용하기 때문에 오리지널 서버에서 구현한 인증서의 보안 등급이 낮더라도 방문자들은 CDN에서 제공하는 보다 강력한 보안을 누릴 수 있다.

실제로 AWS의 로드밸런서를 사용한 방식외에도 AWS의 CloudFront, CloudFlare 등의 CDN을 통해 https 를 설정할 수 있는데 이는 이후 포스팅에서 다루도록 하겠다.

 

이렇게 좋은 CDN이지만 CDN을 해킹해 악성코드를 유포하는 등의 공격도 있기에 CDN을 사용하기 전에 사용할 CDN 업체가 보안 측면에서 충분한 역량을 갖췄는지 꼭 따져봐야한다.

 

 

반응형