본문 바로가기
Web

[Web] Content Delivery Network(CDN)

by DuncanKim 2022. 7. 6.
728x90

[Web] Content Delivery Network(CDN)

 

 

1. CDN의 필요성 

 

CDN는 컨텐츠를 서버에서 사용자에게 전송하는 네트워크이다. CDN이 없이도 온라인 서비스들이 동작은 하지만, 서버도 결국 컴퓨터다. 

어떤 클라이언트가 사이트에 접속하면, 그 요청에 따라 서버는 컨텐츠를 찾아 보내주는 어떤 '일'을 해야한다. 그것의 트래픽이 엄청나게 증가한다면...? 서버의 용량 또는 성능이 좋지 않고서는 주저 앉고 말 것이다.

 

그렇다 컴퓨터도 컴퓨터다! 자기 자신의 능력만큼만 일할 수 밖에 없는 기계!

이것의 과부하를 줄여주기 위해서 CDN이 있는 것이다.

 

현재 사용자가 10명이어도, 잠재적 사용자는 이 순간에도 늘어나고 있다.

우리 나라에서 만들어진 서비스여도, 다른 곳에서 그 서비스를 원할 수도 있다.

2022/7/3 현재 인구 https://www.worldometers.info/kr/

약 79억명의 사람들, 그리고 200여 국가에서 동시에 사람들이 접속한다면....? 컴퓨터는 아마 스스로 삶을 마감하는 선택을 하지 않을까 싶다.

 

전세계에 연결되어 있는 인터넷 세상에서 어떤 웹 페이지를 방문하는데 가장 방해가 되는 요소는 다음 두 가지일 것이다.

1) 물리적 거리
: 서버가 한국에 있는데, 미국, 호주, 유럽 등등 전세계 각지에서 방문을 한다면 딜레이가 생길 수 밖에 없다. 

2) 거대한 트래픽(과부하)
: 많은 사람들이 일시에 사용하였을 때, 서버는 그 요청을 동시에 받아들이지 못할 수 있다.

1)의 경우는 사용자의 측면에서 불편한 점이라고 할 수 있고, 2)의 경우는 서버에서 생각해야 할 문제라고 할 수 있다.

 

'거대한 트래픽'CDN이 필요한 가장 큰 이유라고 할 수 있겠다.

 

 

2. CDN의 개념

서버를 여러 군데에 두어 사용자의 요청을 분산하여 처리하는 것.

 

CDN은 컨텐츠 전달이라는 용도에 특화되어 있다. 

 

CDN 업체는 전세계 곳곳에 서버를 두고 있다.

어떤 사이트를 운영하는 Z 회사가 CDN 업체에 서비스를 의뢰하였다고 치자.

미국에서 A라고 하는 사람이 그 사이트에 접속하려고 하면, 한국에 있는 Z 회사의 서버가 아니라, 미국 어딘가에 있는 그 업체의 CDN 서버로 요청을 보내게 된다. CDN 서버에는 그 사이트의 각종 이미지나 기타 정적 요소들이 상당수 저장, 캐싱이 되어 있다. 물리적 거리를 줄일 수 있고, 또한 서버도 분산시킬 수 있어서 안정적으로, 그리고 빠르게 서비스를 제공할 수 있게 되는 것이다.

 

한 마디로 '브로커'다 '뿌로커'!

 

 

3. 이 DNS는 이제 CDN의 것입니다.

(제 마음대로 팔 수 있는 겁니다.)

 

 

사람들은 도메인을 통해 서버에 접근하려고 한다. DNS를 통해서 그 도메인이 어떤 아이피를 가지고 있는지를 알아보고 한다는 것은 이전 포스팅을 통해 언급을 한 적이 있다.

2022.06.24 - [IT 지식/Web] - [Web] DNS가 뭘까? 도메인, A Record, CName

 

[Web] DNS가 뭘까? 도메인, A Record, CName

[Web] DNS가 뭘까? 도메인, A Record, CName (Domain Name System) www.naver.com naver.com이 도메인이다. www는 호스트네임이라고 한다. 호스트 네임은 mail, blog 등 다양하게 있을 수 있다. 도메인은 IP 주소..

masterpiece-programming.tistory.com

 

만약 CDN을 두어 그쪽으로 요청을 받는다고 하면, DNS에서 Z 사이트의 원본이 있는 서버가 아니라, CDN으로 연결을 시켜주도록 바꾸어주어야 한다. Z 사이트로 보낸 요청이 CDN으로 가는 것이다. 이것은 도메인을 구매한 cafe24, 가비아 등의 사이트에서 설정을 해줄 수 있다.

 

 

4. CDN이 제공하는 기능

 

1) 지역 서버와 클라이언트 연결, 유지 보수

 

본 서버 대신 요청을 받게 된 CDN은 세계 각지의 서버들(Edge) 중에 클라이언트에게 가장 빠르게 서비스를 제공할 수 있는 Edge를 선택해서 그 서버와 사용자를 주선해주게 된다. 꼭 물리적 거리가 가까운 것이 아니라도, 부하가 가장 적은 서버로 연결을 시켜준다던가 하는 것이다. 

 

좋은 CDN 업체들은 에지들의 상태를 수시로 체크해서 과부하가 걸린다던지, 에러가 많이 나는 에지들을 자주 걸러내는 부지런한 일을 한다. 

 

 

2) 캐싱

 

사이트 리소스들이 CDN 서버에 캐시가 되는데, 정적 캐싱 방법이 있고, 동적 캐싱 방법이 있다.

(정적 컨텐츠, 동적 컨텐츠와 다른 개념이다. 유의!)

 

정적 캐싱

  • 캐싱할 것들을 미리 각 에지에 보내는 것이다. 
  • 동영상 등 용량이 큰 것을 제공할 때 사용을 하는 것이 용이하다.

 

동적 캐싱

  • 사용자가 요청을 보낼 때마다 보낼 컨텐츠가 엣지에 있는지 먼저 확인한 다음에, 있으면 바로 사용자에게 보내고(cache hit), 없으면, 그 때 서버에 요청해서 받아온다(cache miss).
  • 가벼운 프로그램을 제공할 때 사용을 하는 것이 용이하다.

 

정적 또는 동적 캐싱을 사용할 때는 용도와 비용 등을 고려하여 캐싱 방법을 선택하면 된다.

 

 

3) 동적 컨텐츠 캐싱

 

정적 컨텐츠는 변하지 않는 내용이기 때문에 그냥 캐싱만 하면 되는데, 동적 컨텐츠(DB, API 활용한 것)도 CDN에 캐싱이 될 수 있을까? 현재 서울 날씨와 같은 동적 컨텐츠를 어떻게 CDN은 처리할까? 

 

대표 CDN 업체로는 Cloudflare, Akamai, AWS의 Cloudfront, Azure의 CDN 서비스가 있다. 이 업체들은 동적 컨텐츠를 바이트 단위로 분석해서, 딱 바뀐 부분만 새로 받아오도록 해서 속도를 높이기도 하고, 서버에서 사용자까지 전달되는 경로를 최적화하기도 하고, 데이터를 압축하거나 handshake 등의 과정을 간소화하기도 한다. 동적 컨텐츠의 특성이나 필요에 따라서는 지정된 시간에 한해서 캐싱되도록 할 수도 있다(초 단위를 시간 단위 캐싱으로 바꾸어 제공).

 

 

cf. 정적 컨텐츠만 캐싱하는 업체도 있긴 하다.

 

 

4) 캐시에 대한 세밀한 컨트롤

 

같은 사이트나 서비스에서도 컨텐츠의 종류마다 각각 서비스 주인이 선택을 할 수 있다. 사이트의 내용이 전반적으로 바뀌어서 캐시를 전부 비우고 싶을 때, 전부 새로 받아가도록 할 수도 있다. 사이트에 부하를 많이 주더라도 새로운 정보를 실시간으로 새로받아가게 하고 싶을 때, 사이트의 주인이 TTL 값도 임의로 0으로 설정하거나 할 수 있다.

 

TTL(Time to Live) : 데이터(DNS쿼리에 대한 결과)가 캐시에 얼마 동안 남아있을 지 지정하는 시간. TTL 값이 적을 수록 캐시의 수명이 줄어 새로운 데이터를 서버에 요청을 하게되고, TTL 값이 클수록 서버에 요청을 하는 시간이 더 길어지게 된다. TTL 값이 크면 서버에 부하가 적게 가지만, 데이터가 갱신될 경우 확인하기가 어렵다. 반면, TTL 값이 작을수록 서버에 부하는 많이 가지만 사용자는 새로운 정보를 실시간으로 받아쓰게 된다. 이 경우 접속지연이 2~3초 정도 생길 수 있다.

 

 

5) 보안 측면에서의 혜택

 

CDN은 보안에 있어서도 도움이 된다. DDoS 공격의 경우, 분산된 CDN의 에지들이 트래픽을 분산시켜 공격이 잘 먹혀들게 되지 않는다. 컨텐츠의 암호화도 CDN 업체가 더 도움이 될 수 있다. 사용자와 에지의 연결에 있어서 CDN 업체들은 최신의 검증된 인증 방식들을 사용하기 때문에 내가 서버에서 구현한 인증서의 보안 등급이 낮아도 방문자들은 CDN에서 제공하는 강력한 보안을 누리게 될 수 있는 것이다. 

 

 

 

 

5. 마무리

 

 

이처럼 이러한 서비스들을 제공하기 때문에, 본 서버를 구동하는 것보다 비용을 더 줄일 수 있기도 하다. 서버로 직접 요청이 들어오지 않기 때문에 대역폭 비용이 크게 절감될 수 있다. 호스팅 비용이 절감되는 것이다. 또한 가용성과 안정성도 향상된다.

 

cf. 대역폭 : 네트워크 대역폭은 컴퓨터 네트워크나 인터넷 연결을 통해 한 지점에서 다른 지점으로 최대 데이터 양을 전송하는 유선 또는 

무선 네트워크 통신 링크의 용량이다. (전송속도가 제한 속도라면, 대역폭은 차선의 개수와 같다)

 

 

 

 

 

728x90

댓글