CDN이란?

CDN을 사용 해야 할까?
YAHOO DEVELOPER NETWORK 의 Best Practices for Speeding Up Your Web Site (https://developer.yahoo.com/performance/rules.html) 라는 글을 보면
웹사이트 속도 개선 방법의 한가지로 CDN을 사용하라고 이야기 한다.
사용자 응답시간의 80~90% 가 페이지의 구성 요소를 모두 다운 로딩 하는데 소요 되기 때문에 웹 개발자들은 페이지 로드 시간을 줄이기 위해 다양한 고민과 노력을 계속해 왔다.
CDN은 웹 어플리케이션 및 스트리밍 미디어를 비롯한 콘텐츠를 전송하도록 최적화 된 전세계적으로 촘촘히 분산된 서버로 이루어진 플랫폼이다.
CDN의 가장 대표적인 장점들은 아래와 같다.

  • 페이지 로드 시간 감소
브라우저가 한 개의 도메인에서 받을 수 있는 리소스의 개수는 제한적이다.(브라우저마다 다르지만 최대 6~8개) 단순하게 계산해서 받을 수 있는 개수를 6개라고 가정하고 120개의 리소스를 하나의 도메인에서 받아야 한다면 20번의 요청이 필요하다. 그러나 20개의 도메인에서 내려 받는다면 한번에 리소스를 받아 올 수 있을 것이다. (물론.. 20개까지 도메인이 늘어나면 역으로 시간이 오래 걸릴 수 있어 적절한 개수를 유지해야 한다.)
  • Origin서버 부하 감소 및 동시 사용자 증가
CDN을 이용하지 않으면 origin서버들은 모든 엔드 유저의 요청에 일일이 응답해야 하기 때문에 막대한 트래픽을 유발해서 트래픽이 과도하게 증가하거나 부하가 끊임없이 들어와서 장애가 발생할 수 있다. CDN을 이용하게 되면 트래픽이 분산 되기 때문에 부하가 감소하고 동시에 동시사용자수도 늘어날 수 있다.
  • 지리적 이점을 이용 콘텐츠의 빠른 전달
CDN은 수 많은 물리적인 위치와 네트워크 위치에 분산되어 있어서 엔드 유저의 요청 대한 응답을 처리하는 것에 일반 origin서버(실제 서비스를 제공하는 서버)에 비해 지리적인 이점(물리적으로 가까운 위치) 을 가지고 있다.
  • 이미 보유한 콘텐츠
웹 사이트에서 이용하고 있는 라이브러리 중 jquery, bootstrap 같은 유명 javascript 나 css의 경우 다른 웹 사이트에서도 이용하고 있을 확률이 높다. 이런 라이브러리들을 각각의 웹 사이트에서 제공한다면 같은 리소스를 사이트 마다 받아야 하겠지만 CDN을 이용할 경우 캐싱 되기 때문에 다시 받을 필요가 없다.


이거 말고도 뭐 좋은 점이야 많겠지만 그렇다면 왜 모두들 CDN을 사용하지 않는 걸까?
사실 나는 개발할 때 CDN을 이용해서 jquery나 기타 라이브러리를 링크 하는게 매우 꺼려졌었는데 주된 이유는 뭔가 사이트가 독립적으로 완전하게 돌아가지 못할 것 같다는 점이었다.
또 가용성이나 효율에 대해서도 의심을 가지고 있었다. (CDN서버가 작동이 중지 될 수 있지 않을까? CDN서버가 더 느리지 않을까? )
뭐 내가 있었던 상황에서는 고민할 가치가 없이 CDN을 사용 하는게 맞다.
조금 다른 상황에서(컨텐츠 제공자 입장에서) 이렇게 좋은 CDN 이라는 친구를 왜 이용하는게 고민이 되냐 하면 가장 주요한 문제는 돈이다. 대부분의 CDN은 리소스 요청 횟수에 따라 월별로 돈을 지급하게 되어있다.
CDN 이 여러가지 문제(국가, 스팸 … ) 로 인해 브라우저에서 차단 될 수 있다. 이럴 경우 완전 망가진 웹 사이트를 고객이 보게 된다. (아.. 이 상황 정말 싫다..)
지리적 위치가 오히려 더~ 오래 걸릴 수 있다. (큰 CDN업체를 이용하면 크게 문제가 없을 문제… )

결론: 세상 어딜 가든 돈이 제일 문제다.