CDN의 필요성
웹이든 앱이든 서버로부터 데이터 요청을 보내야 원하는 데이터를 받을 수 있다. 인터넷을 통해 데이터를 주고받는 환경에서 서버의 처리 속도를 아무리 높이더라도 네트워크 속도가 느리다면 사용자는 느린 서비스를 이용하는 경험을 할 것이다.
사용자에게 특정 데이터를 전달하기 위해 10ms 만큼 걸리는 요청이 있다고 하자. 기나긴 시간 끝에 엄청난 알고리즘이 등장해 1ms가 소요되도록 최적화시켰다. 여기서 네트워크로 전송하는데 100ms가 걸린다 한다면 110ms에서 101ms의 변화는 사용자 입장에서 드라마틱하게 느낄 수 없다.
물론 서비 비용 절감효과는 있지만 정작 중요한 부분을 놓친 격이다. 요지는 네트워크 전송 시간을 줄이는 방법이 최선책이다.
네트워크 전송 시간을 줄이는 방법은 결국 서버와 클라이언트 사이의 물리적 거리를 줄이는 방법이다. 결국 데이터는 렌선과 여러 네트워크 장비들을 거쳐 데이터가 도달하므로 그 거리를 줄이는 방법이다.
CDN의 개념
서버와 클라이언트 사이의 물리적 거리를 줄이는 방법으로 CDN을 사용하는 것이다. 어떻게 물리적으로 거리를 줄이는지 알아보자.
클라이언트에서 모든 데이터를 멀리있는 Origin 서버에 요청하게 되면 데이터를 받는 속도가 오래걸리기 때문에 물리적으로 근접한 CDN에 요청한다는 개념이다.
특정 데이터가 Origin 서버에만 있고 CDN에 없는 경우도 있다. 이 경우 CDN 서버는 Origin 서버에 데이터 요청을 보내고 Origin 서버가 설정한 캐시 설정에 따라 Origin 서버의 응답 데이터를 저장해둔다. 이후 클라이언트에서 요청이 오면 Origin 서버에 요청을 보내지 않고 캐싱해뒀던 데이터를 전달해주는 방식이다.
짧게 말해 Origin 서버의 응답 데이터를 CDN 서버에 캐싱 해두고 사용하는 것이다.
CDN의 필요성에서 말했던 내용 중, 네트워크를 통해 데이터를 받기까지 100ms 걸리는 요청이 CDN을 사용하면서 물리적 거리가 50% 가까워져 100ms에서 50ms로 줄어들었다고 가정해 보자.
엄청난 알고리즘보다 CDN을 적용했다면 110ms에서 60ms라는 드라마틱한 효과를 볼 수 있다. 물론 둘 다 적용하면 좋겠지만 말이다. 여기서 배울 점은 내가 하고있는 일이 배보다 배꼽이 커질 수 있으니 최소한의 작업으로 최대의 효과를 얻을 수 있는 방법을 찾는 것이 가장 베스트라는 것이다.
📌 CDN의 장단점
가용성 증가
사용자는 실제 Origin 서버에 접속하는 것이 아닌 CDN 서버에 접속하는 것이다. Origin 서버가 응답할 수 없는 상황이라도 CDN 서버가 살아있고 데이터가 캐싱되어 있다면 사용자는 정상적으로 데이터를 받아 볼 수 있는 것이다.
성능 향상 및 서버 부담 감소
CDN을 구성해 놓으면 캐싱이 가능한 데이터 요청은 CDN에서 처리하므로 Origin 서버의 데이터 요청 수는 감소한다.
보안
Origin 서버 대신 CDN 서버에서 클라이언트 요청을 처리하므로 악의적인 요청을 어느정도 필터링할 수 있다. DDOS(Distribute Denial of Service) 공격에도 CDN은 매우 큰 도움이 되는데, 트래픽 자체를 지리적으로 분산화 처리하므로 도움이 된다.
구축 비용 증가
보통 직접 CDN을 구축하는 경우는 드물겠지만 많은 지역에 서버를 구성해야 하므로 비용과 시간이 들어간다는 것이 큰 단점 중 하나이다.