• CDN vs Cache 무엇이 효율적인가? :: 마이구미
    HTTP 2016. 12. 4. 22:29
    반응형

    이번 글의 주제는 'CDN Server' 에 대해서 다룰 것이다.

    제목은 'CDN vs Cache 무엇이 효율적인가?' 인 것을 볼 수 있지만, 일단 CDN에 대해 먼저 알아보자.

    CDN이라는 말은 한번쯤은 들어봤을거라 생각한다.

    위키의 정의를 일단 보자.

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

    효율적이다? 그러니까 많이 사용해서 한번쯤은 들어봤겠지?

    정의만으로는 사실상 이해하기 힘들다.

    아래 그림을 보자.


    without cdn vs with cdn


    위 그림을 보면 CDN 여부에 따른 차이를 보여주고 있다.

    왼쪽 그림을 보면 content가 다이렉트로 사용자들에게 향하고 있다.

    오른쪽 그림은 content가 cdn을 향하고 cdn이 사용자들을 향하고 있다.

    그림만 보면 cdn이 있고 없고 차이뿐이다. 이것이 무슨 의미일까?


    CDN은 사용자가 인터넷상에서 가장 가까운 곳의 서버로 컨텐츠를 전송받아 트래픽이 특정 서버에 집중되지 않고 각 서버로 분산되로록 하는 기술


    왼쪽 그림은 수많은 사용자가 웹 페이지에 접속했을 때 하나의 서버에 요청이 몰리게 된다.

    또한 서버의 위치와의 거리에 따라 네트워크 지연속도는 비례하게 된다.

    오른쪽 그림은 CDN을 통해 각 사용자들에게 있어 가장 가까운 서버를 통해 컨텐츠를 전송받을 수 있게 된다.

    아래의 그림은 전체적인 구조이다.


    CDN 구조



    쉽게 말하면 멀리 있는 Origin Server에 요청하지 않아도 되고, 가장 가까운 CDN Server에서 요청의 결과를 받으면 되는 것이다.

    전 세계를 기준으로 보면 이해가 될 것임으로 아래 그림을 보자.



    CDN 구조


    보이는 주황색 아이콘들이 CDN Node라고 불리는 캐시 서버이다.

    CDN Node는 컨텐츠들을 많은 위치에서 빠르게 전송할 수 있도록 분산되어 있다.


    이미지 서버 또한 많이 들어봤을 거라 생각한다.

    이러한 CDN을 활용해 이미지 서버를 많이 활용하고 있다.

    이미지 서버란 이미지만을 위한 서버를 구축하여 이미지를 가져오는 서버이다.

    (이미지는 웹 페이지 성능을 크게 좌우함으로 성능을 위해 많이 사용되는 방식이다.)


    이제 본격적으로 이 글의 주제를 다뤄보자.

    예를 들어보겠다.

    여러분은 아마 jquery를 사용할 때 아래와 같이 많이 이용한다.


    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>

    자신의 서버의 올리지 않고, 마치 절대경로와 같이 URL을 이용하여 jquery를 로드시켜 사용하는 방식이다.

    이것이 CDN 방식이라고 알면서 사용했거나 그렇게 이해하고 있을 것이다. (책에서 또한 그렇게 언급된다)

    그렇다. 맞는 말이다.

    그리고 아래와 같이 자신의 서버에 올려 사용하는 방식도 있다.


    <script src="js/vendor/jquery-1.8.2.min.js"><\/script>

    그렇다면 두 방식의 차이는 무엇일까? 어느 쪽이 더 효율적일까?

    위의 CDN에 대하여 설명한 것을 보면 무조건 CDN방식이 효율적이라고 생각할 수 있다.

    맞다. CDN 방식이 효율적이다.

    하지만 무조건 100% CDN 방식을 사용하라고 권할 수는 없다.

    CDN Server는 확실히 성능을 향상시킬 수 있지만 그건 CDN Server의 성능이 바춰줘야한다.

    성능도 떨어지고, 위의 그림에서 보다시피  CDN Node들이 많이 보유되지 않는다면 부정적인 결과를 초래할 수 있다.

    부정적인 결과로 최악의 경우는 SPOF(단일 장애점)이 초래될 수 있다.

    단일 장애점이란 한군데가 중단되면 전체 시스템이 중단되버리는 현상이다.

    그렇기에 신뢰성이 높아야하는 프로젝트라면 특히 신경써야하는 부분이다.


    믿을만한 업체에서 하면 상관없는 일이다.

    하지만 무료CDN 호스팅 및 저렴한 호스팅이 많기 때문에 드문 경우는 아니다.


    불안하다면 아래와 같은 방법이 있긴하다.


    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
    <script>window.jQuery || document.write('<script src="js/vendor/jquery-1.8.2.min.js"><\/script>')</script>
    

    어떤 방식이 맞기 때문에 이렇게 해라는 없다.

    하지만 CDN은 정말 장점이 많다.

    단점이라고 뽑으면 그건 공급업체다.

    신뢰성이 높은 공급업체라면 단점이 없지 않은가..? (개인적인 생각이다)

    캐싱 문제도 사실상 Amazon의 CDN 서비스 Cloud Front의 경우는 invalidation을 통해 처리하면 되고...

    그냥 본인의 생각이다.


    Is it better to use Cache or CDN?

    http://stackoverflow.com/questions/12916430/is-it-better-to-use-cache-or-cdn

    반응형

    댓글

Designed by Tistory.