[CDN]: 사용자와 가까운 곳에서 제공하자

CDN 이란? (Contents Delivery Network)
-
지리적, 물리적으로 떨어져있는 사용자에게 컨텐츠 제공자의 컨텐츠를 더 빠르게 제공할 수 있는 기술
-
"세계에 널리 퍼진 중계서버들의 집합"
-
대용량 또는 사용자의 잦은 요청이 있는 컨텐츠들을 Cache 서버에 분산 배치하여 컨텐츠의 전송 중 발생하는 트래픽 집중 & 병목현상 및 데이터 손실을 해결하기 위해 등장한 컨텐츠 전송 기술
-
CDN은 서버와 사용자 사이의 물리적인 거리를 줄여 콘텐츠 로딩에 소요되는 시간을 최소화한다. CDN은 각 지역에 캐시 서버(PoP, Points of presence)를 분산 배치해, 근접한 사용자의 요청에 원본 서버가 아닌 캐시 서버가 콘텐츠를 전달한다.
CDN이 필요한 이유
S3 와 같은 "일반적인 정적 호스팅"을 통해 웹 컨텐츠를 이용자들에게 제공한다고 가정해보자. 예를 들어 한국에 해당 정적 서버를 호스팅하는 컴퓨터가 위치하고 있다고 가정하면 유럽과 같은 다른 먼 나라의 이용자들에게는 한국에 거주하는 이용자들에 비해 빠른 로딩 속도를 제공하기 어렵다. "물리적인 거리"가 증가함에 따라 컨텐츠를 로드하는데 걸리는 시간 또한 증가하기 때문이다.
이 비효율을 없애기 위해, 전세계에 뿌려져 있는 각종 중계서버들, 즉 CDN이 웹 자원을 대신 전달하는 역할을 해줄 수 있다. 정적 서버에 빌드된 번들 자바스크립트 파일과 각종 정적 파일을 업로드하여 배포를 마무리할 수 있겠지만, 그 외에도 서비스 품질을 향상 시킬 수 있는 인프라 작업들이 존재한다.
인터넷을 통해 비즈니스를 운영하거나 웹 사이트에서 그래픽 이미지, 동영상 파일 등의 콘텐츠를 제공한다면 CDN 서비스를 이용할 필요가 있습니다. CDN은 동영상 스트리밍이나 온라인 게임, 대용량 파일 전송, 그리고 해상도가 높아 용량이 큰 이미지를 다루는 쇼핑몰, 포털 사이트 등에서 안정적인 서비스 제공을 위해 활용되고 있습니다.
하지만 특정 국가나 지역만을 타깃으로 하는 웹 서비스를 운영한다면 CDN 서비스를 활용할 필요가 없습니다. 이 경우 CDN을 이용하면 오히려 불필요한 연결 지점이 늘어나 웹 사이트의 성능 저하를 불러올 수 있기 때문이다.
CDN의 이점
-
온라인 컨텐츠를 빠르게 전송할 수 있음
-
가용성, 시스템을 정상적으로 사용가능한 정도가 높아짐
-
외부 공격 방지
CDN의 원리
사용자와 가까운 곳에 위치한 Cache Server에 Content를 저장(캐싱)해두었다가 요청 시에 Cache Server가 응답을 주는 방식을 말한다. 이 방식을 사용하면 물리적인 거리의 제약없이 나와 가장 가까운 Cache Server에서 리소스를 받을 수 있기 때문에 빠른 리소스 다운로드가 가능하다.

-
(웹 브라우저가 실행되는 디바이스인 PC나 모바일 기기의) 사용자가 특정 주소에 접근하여 HTML, 이미지, CSS, JavaScript 파일 등 렌더링하는 데 필요한 콘텐츠를 서버로부터 요청
-
DNS는 콘텐츠에 대한 각 요청이 발생하면 End User와 가장 가까운 위치에 최적으로 배치된 CDN 서버에 End User를 매핑하고, 해당 서버는 요청된 파일의 캐싱된 버전으로 응답(전송).
-
서버가 파일을 찾는 데 실패하는 경우 CDN 플랫폼의 다른 서버에서 콘텐츠를 찾은 다음 End User에게 응답을 전송. 콘텐츠를 사용할 수 없거나 콘텐츠가 오래된 경우, CDN은 오리진 서버에 대한 요청 프록시로 작동하여 향후 요청에 대해 응답할 수 있도록 Patch된 새로운 콘텐츠를 저장
참고) 프론트엔드 라이브러리 CDN
프론트엔드 라이브러리를 사용할 때 CDN을 많이 사용하게 되는데, 아래링크에서 쉽게 CDN 링크를 찾을 수 있다.
Libraries - cdnjs - The #1 free and open source CDN built to make life easier for developers
아마존의 "클라우드 프론트"를 이용해 나만의 CDN을 구축할 수도 있다.
Reference
https://www.akamai.com/ko/our-thinking/cdn/what-is-a-cdn
https://library.gabia.com/contents/infrahosting/8985/
https://codingmoondoll.tistory.com/entry/Cloud-Front-%EB%9E%80