빵집이 하나뿐인데 전 세계에서 주문이 들어온다고 상상해 보세요.
도쿄의 누군가가 식빵을 주문해요. 빵을 구워 포장해 단 하나뿐인 가게에서 배송합니다. 사흘이 지나 도착한 빵은 이미 딱딱하죠. 게다가 만 개의 주문이 동시에 몰리면 오븐 하나는 버텨내지 못해요. CDN 없는 웹사이트가 딱 이 모습이에요. 서버 하나가 지구 반대편 방문자에게까지 모든 것을 직접 배송하는 거예요.
CDN은 이 두 문제를 동시에 해결해요. 약어를 풀어 보면 각 단어가 하는 일이 드러납니다.
- Content(콘텐츠)는 사이트에서 자주 바뀌지 않는 무거운 요소예요. 이미지, 영상, 페이지의 모양을 잡아 주는 스크립트와 스타일 파일이 여기에 해당해요.
- Delivery Network(전송 네트워크)는 전 세계 도시 곳곳에 배치된 서버 집합이에요.
빵집 하나 대신, 이제 도쿄 창고에도, 런던에도, 상파울루에도 빵이 미리 채워진 냉동 창고가 생겨요. 도쿄 고객은 동네 창고에서 바로 가져갑니다. 빵은 빠르고 신선하게 도착하고, 원래 오븐은 거의 알아채지도 못해요.
서버를 직접 다루지 않아도 이 내용이 중요한 이유:
속도. 거리는 곧 시간이에요. 대양을 넘어 왕복하는 요청은 도심을 가로지르는 요청보다 언제나 느립니다. 파일을 사용자 가까이로 당기면 페이지가 즉각 뜨고요. 사람들은 이름을 몰라도 이 차이를 몸으로 느껴요. 느린 사이트는 고장난 것처럼 느껴지고, 사용자는 떠납니다.
생존. 이 점이 실제로 결정적이에요. 평소에는 잠잠하다가 갑자기 트래픽이 폭발하는 순간이 있어요. 글이 바이럴을 타거나, 이메일 뉴스레터가 나가거나, 무언가 공유되는 때요. CDN 없이는 방문자 전부가 작은 오븐 하나를 동시에 두드리고, 드디어 관객이 생긴 그 순간 서버가 다운됩니다. CDN이 있으면 인파가 수백 개의 창고로 분산되어 각자의 동네를 담당해요. 기뻐해야 할 바로 그 순간, 사이트가 살아남아요.
솔직한 주의사항 두 가지:
- CDN이 보관하는 것은 사본이에요. 사이트에서 무언가를 바꾸면, 창고에 있는 사본은 갱신되기 전까지 잠시 구버전으로 남아 있어요. 이미지를 수정했는데 새로고침을 눌러도 예전 이미지가 보이는 이유가 여기에 있답니다. 고장이 아니에요. 창고가 아직 채워지지 않은 거예요. ("캐시 지우기"는 창고에 묵은 빵을 버리고 새 것을 가져오라는 신호예요.)
- CDN은 모든 사람에게 동일하게 보이는 것들에 탁월해요. 로고, 상품 사진, 영상이 그렇습니다. 로그인한 사용자의 개인 계정 페이지를 서빙하는 건 CDN의 역할이 아니에요. 그건 다른 일이에요.
비개발자들이 놀라는 부분이 있어요. 이미 CDN을 쓰고 있을 가능성이 높아요. 사이트가 Shopify 위에 있거나, Cloudflare 뒤에 있거나, 요즘 보편적인 플랫폼에 호스팅되어 있다면 CDN은 선택도 하지 않았는데 조용히 작동 중입니다. 우리가 당연하게 여기는 빠르고 안정적인 인터넷은 대부분 이 하나의 방식이 하루에 수십억 번 반복된 결과예요.
빵집 하나로 전 세계에 배달하느냐, 동네마다 창고를 두느냐. 빵은 같지만 경험은 완전히 달라요.