Cdn의 개념과 사용하는 이유
CDN은 Content Delivery Network의 약자입니다. 우선 CDN이 어떤 문제를 해결하기 위해서 나왔는지 알아보겠습니다.
필요성
브라우저로 웹사이트에 접속하는 것이나 앱에서 백엔드로 요청을 보내는 것 등은 전부 인터넷을 통해 데이터를 주고받아야 가능한 일입니다. 우선 클라이언트에서 서버로 요청 데이터를 보낸 뒤, 서버에서 다시 클라이언트로 응답 데이터를 보내줘야하죠. 서버가 데이터를 처리하는데에도 시간이 필요하지만, 실제 처리보다 데이터 전송이 더 오래 걸리는 경우가 많습니다. 다르게 말하면, 서버의 처리 속도를 아무리 올려도 총 시간을 줄이는데는 한계가 있다는 얘기입니다. 이러한 한계를 암달의 법칙이라고 부릅니다. 예를 들어, 요청 처리에 10ms가, 그리고 응답을 전송하는데 100ms가 걸리는 요청이 있을 때 사용자가 응답을 받는데는 110ms가 걸립니다. 혁신적인 알고리즘을 개발해서 처리 속도를 10배 올려서 1ms가 걸리게 되었다고 치겠습니다. 그러면 이제 101ms가 걸립니다. 처리속도가 10배가 올라갔지만 사용자 입장에선 별 차이가 없는 겁니다. 이런 경우, 네트워크 전송 시간을 최적화하는 게 맞습니다. 처음 상황에서 네트워크 전송 시간을 2배로 줄이면 사용자가 응답을 받을 때까지의 총 시간은 50ms + 10ms가 되어서 60ms로 크게 줄거든요.
그런데 네트워크 전송 시간을 줄이는 방법이 뭐가 있을까요? 가장 중요한 방법은 서버와 클라이언트 사이의 물리적 거리를 줄이는 것입니다. 왜냐하면 데이터를 어떤 지점에서 다른 지점까지 전송하는데 걸리는 시간은 물리적 거리의 영향을 매우 크게 받기 때문입니다.
물리적 거리를 줄이는 방법에는 뭐가 있을까요? CDN을 사용하는 게 그 방법입니다. CDN이 데이터 전송할 때 물리적 거리를 줄이기 위해 나왔다는 걸 알아봤으니, 이제 CDN이 어떻게 물리적 거리를 줄이는지 알아보겠습니다.
개념
CDN은 클라이언트와 가까운 지역들에 있는 서버들입니다. 들
에 강조 표시를 한 것은 그게 가장 중요한 특징이기 때문입니다. CDN은 일반적으로 매우 많은 서버로 구성되어 있습니다. 그게 이름이 Server가 아니고 Network 인 이유입니다.
아이디어 자체는 간단합니다. 모든 데이터를 멀리 있는 Origin 서버에 요청하면 느리니까, 가까이 있는 CDN에 요청한다는 개념입니다. 물론 특정 데이터가 Origin에만 있고 CDN에는 없는 경우도 있지만, 그런 경우 CDN 서버에서 Origin 서버에 대신 요청을 보냅니다. 그런 뒤 Origin 서버가 설정한 캐시 설정에 따라 Origin 서버의 응답 데이터를 저장해두고, 이후 클라이언트에서 요청이 왔을 때는 Origin 서버에 요청을 보내지 않고 저장해뒀던 응답을 클라이언트한테 보내주는 것이죠. 이를 CDN 서버에서 Origin 서버의 응답을 캐싱한다고 표현합니다. 그리고 이러한 방식은 전송해야하는 데이터가 사진, 비디오처럼 용량이 크거나, 앱의 JavaScript/CSS 파일 등, Origin 서버에서 다시 받아오지 않아도 되는 데이터일 때 진가를 발휘합니다. CDN의 개념에 대해 알아봤으니, 이번엔 장점에 대해 알아보겠습니다.
장점
직접 구축시 아주 많은 지역에 서버를 구성해야해서 시간도 많이 들고 비용도 꽤 든다는 단점이 있지만, 이 글을 읽으시는 분들이 CDN을 직접 구축하실 것 같지는 않으니 서비스형 CDN의 장점에 대해 설명하겠습니다.
성능
당연하지만 성능이 올라갑니다. 이 점은 위에서 열심히 설명했으니 넘어가겠습니다.
가용성
CDN이 왜 가용성에 영향을 미칠까요? 그 이유는 사용자가 접속하는 서버는 Origin 서버가 아니고 CDN에 속한 서버이기 떄문입니다. Origin 서버가 응답을 제대로 처리할 수 없는 상황일지라도, CDN 서버가 살아있으면 이미 캐시된 파일은 전송할 수 있기 떄문입니다.
또한 CDN을 사용하면 Origin 서버의 부담이 크게 줄어듭니다. CDN을 구성해놓으면 캐시 가능한 요청은 CDN이 처리하기 때문에 Origin 서버에 오는 요청의 수 자체가 적어집니다.
보안
이 역시 클라이언트가 Origin 서버 대신 CDN에 속한 서버에 접속하기 떄문에 생기는 장점입니다. 서비스형 CDN은 대부분 어느 정도의 보안 기능을 제공하는데요, CDN 서버에서 악의적인 요청을 걸러낸 뒤 악의적이지 않은 요청만 Origin 서버에 전송할 수 있습니다. 이러한 특징은 해커들이 신박한 공격 방법을 찾았을 때 도움이 많이 되는데요, 모든 서버를 각각 패치하는 데에는 시간이 꽤 걸리는데, Origin 서버의 앞단에 있는 CDN에서 어느 정도 막아줄 수 있는 것이죠.