CDN이 뭔가요?

📜 라디오 대본

얄코: 조깅하면서 듣는 얄코 라디오. 얄코: 오늘의 주제는 CDN입니다. 얄코: 저는 얄팍한 개발자 얄코 미토: 미친토끼 미토에요. 미토: CDN이 Content Delivery Network잖아요. 얄코: 그렇죠. 미토: delivery가 배달인데 배달 미토: 뭐를 배달한다는거에요? 배민같은데서 쓰는건가? 얄코: 뭐 거기서도 쓰겠지만, 이 delivery는 얄코: 웹페이지나 이미지, 동영상 등의 컨텐츠를 얄코: 서버에서 사용자에게로 전송하는걸 말해요. 미토: 그런것들은 인터넷망을 통해가지고 미토: 서버랑 클라이언트들이랑 이미 연결이 돼 있는거 아녜요? 얄코: 네, CDN 없이도 온라인 서비스들이 동작은 하지만 얄코: 많은 서비스들이 CDN을 사용하는데는 이유가 있어요. 얄코: 서버란 것도 결국 컴퓨터라고 그랬죠 얄코: 누군가 얄코 사이트에 접속한다는 건 얄코: 얄코 사이트를 제공하는 서버 컴퓨터에 얄코: 방문자의 컴퓨터로부터 요청이 들어오고 얄코: 그 요청에 따라 서버가 컨텐츠를 보내주는거에요. 미토: 근데 그렇게 생각하니까 흠좀무네 흠좀무 미토: 얄코 사이트야 뭐 사람 별로 오지도 않으니까 그렇다쳐도 미토: 유튜브나 페북처럼 글로벌한 사이트는 서버 컴퓨터에 미토: 전세계에서다가 무지막지하게 요청들이 들어오는거아녜요 얄코: 바로 그 점이에요. 크게 두 문제로 나뉠 수 있는데 얄코: 먼저 물리적 거리가 있어요. 얄코: 서버가 한국에 있는 사이트에 한국 뿐 아니라 얄코: 미국, 호주, 유럽, 중국 등 전세계 각지에서 얄코: 사람들이 방문한다고 생각해보세요. 미토: 한국에서 접속하면야 빠르겠지만은 미토: 멀리서 접속하는 사람들은 그만큼 느리겠네요. 미토: 그래선가, 어떤 외국 듣보잡 사이트 들어가보면은 미토: 막 사진 뜨는것도 되게 느리고 막 답답하고 그러던데 얄코: 그렇죠. 그런 문제가 사용자 측면에서의 불편함이라면 얄코: 서버는 또 서버 입장에서의 문제가 있어요. 얄코: 말씀하셨듯이 여기저기서 들어오는 얄코: 수많은 요청들을 감당해야한다는거죠. 미토: 그니까요. 서버도 기계니까 과부하가 걸리면 뻗을거 아녜요 미토: 글로발한 사이트들은 그러면 막 슈퍼컴퓨터에다가 미토: 서비스들을 돌리고 있는거에요? 얄코: 기계 자체도 좋은 걸 쓰겠지만, 가장 좋은 방법은 얄코: 이런 요청들을 여러곳에다 분산시키는거겠죠. 얄코: 여기에 쓰이는 대표적인 기술이 바로 CDN이에요. 미토: 분산을 시키는거라고 하면은, 사용자의 요청을 처리하는 곳을 미토: 여기저기 여러군데를 둬가지고다가 나눠서 처리한다 그거네요? 미토: 그럼 서버를 유럽에도 하나 두고 미국에도 하나 두고 이런거에요? 미토: 내용을 죄 복사해다가지고다가? 얄코: 그런 방법도 있죠. 그런 건 미러 사이트라고 하는데요. 얄코: CDN은 그렇게 서버 전체 기능을 똑같이 따라하는게 아니라 얄코: 컨텐츠 전달이라는 용도에 특화된거라고 보시면 돼요. 얄코: 얄코 사이트가, 이번에는 한 CDN 업체의 서비스를 사용해요. 얄코: 이 CDN 업체는 전세계 곳곳에 서버를 두고 있어요. 얄코: 미국에 사는 존이라는 한 백수가 우연히 얄코 사이트에 접속해요. 얄코: 존의 컴퓨터는 이제 한국의 얄코 서버가 아니라 얄코: 북미에 있는, 그 업체의 CDN 서버로 요청을 보내게 되죠. 얄코: 이 CDN 서버에는 얄코 사이트의 각종 이미지나 얄코: 기타 정적 요소들이 상당수 저장, 캐싱이 돼있어요. 얄코: 이 캐싱의 개념은 '쿠키, 세션, 캐시가 뭔가요?' 영상에서 얄코: 좀 더 자세히 알아보실 수 있구요. 얄코: 여튼 이제 존은 대한민국의 서버까지 요청을 보내서 얄코: 거기서 또 태평양 너머로 이미지를 받아오는 게 아니라 얄코: 북미지역에 있는 이 CDN 서버와 소통하기 때문에 얄코: 보다 빠르게 얄코 사이트를 이용할 수 있죠. 미토: 손님들이 본사가 아니라 각지의 체인점으로 가는거네요. 미토: 얄코 사이트를 서비스하는 서버 입장에서도 보더라도 미토: 이제 방문객들을 하나하나 직접 대면을 하는거가 아니라 미토: 각 지역의 담당 CDN 서버, 체인점들이가 카바를 쳐주니까 미토: 서버 부담이 훨씬 덜하겠어요. 미토: 근데 궁금한게, 사람들이 어떤 사이트 주소를 치면은 미토: 그 사이트 주소가 어떤 서버 IP랑 매칭이 돼있는건지 미토: DNS란 데에서 뒤져보고 그 아이피로 찾아가는거잖아요? 얄코: 그렇죠. DNS, Domain Name System이란 곳에서 얄코: 마치 전화번호부처럼, 각 사이트의 웹사이트 주소랑 얄코: 해당 서버의 아이피 주소를 갖고 있어서 얄코: 사용자가 [yalco.kr](http://yalco.kr)을 입력해서 접속하면 얄코: 브라우저는 먼저 DNS에서 얄코사이트 서버의 아이피를 조회하고 얄코: 그리로 요청을 보내서 사이트에 접속하는거죠. 미토: 그러면은 이제 CDN을 둬서 그리로 요청을 받는다는거는 미토: DNS에서 yalco.kr을 이제부터 원본이 있는 서버가 아니라 미토: 이 CDN으로다가 연결을 시켜주도록 바꿔줘야되는거네요? 얄코: 그렇죠. 이제 전화번호부에 본사 전화번호 대신 얄코: 체인점들을 총괄하는 부서, CDN의 전화번호를 적는거에요. 얄코: yalco.kr로 보낸 요청이 이제 CDN으로 가는거죠. 얄코: 이건 도메인 구매한 사이트 등에서 설정해줘면 되는거구요. 얄코: 그렇게 대신 요청을 받은 CDN은 이제 세계 각지의 서버들 얄코: 이것들을 Edge라고 불러요. 이것들 중에 클라이언트에게 얄코: 가장 빠르게 서비스를 제공할 수 있는 엣지를 선택해서 얄코: 그 서버와 사용자를 주선해주게 돼요. 미토: 그러면은 젤루 가까운 엣지루다가 연결이 되겠네요. 얄코: 꼭 물리적 거리 뿐 아니라, 예를 들어 특정 지역에 너무- 얄코: 요청이 집중될 수도 있는거니까요. 얄코: 좋은 CDN 업체들은 각 엣지들이 잘 돌아가는지 꾸준히- 얄코: 헬스체크를 해서 상태 안 좋은 엣지를 걸러내기도 하구요 미토: 하여튼간에 그런 여러가지 것들을 다 감안해가지고다가 미토: 제일 빠릿하게 서비스해줄 수 있는애로 연결을 시키는거네요. 미토: 근데 그러면은 아까 사이트 리소스들이 이 엣지들에 미토: 캐시가 된다고 그랬잖아요 캐시 미토: 이것들이 그러면 언제 어떻게 오리지날 서버로부터 미토: 그 엣지들로 가서다가 캐싱이 되고 그러는거에요? 얄코: 이것도 설정하기에 따라 여러 방식이 사용돼요. 얄코: 일단 정적 캐싱이랑 동적 캐싱으로 나뉠 수 있는데- 얄코: 이거 정적 컨텐츠, 동적 컨텐츠랑은 다른거에요. 얄코: 정적 캐싱이란 건 캐싱할 것들을 미리 각 엣지에 보내는거에요. 얄코: 동적 캐싱은 이와 달리, 사용자가 요청을 보낼 때마다 얄코: 보낼 컨텐츠가 엣지에 있는지 먼저 확인한 다음에 얄코: 있으면, 이걸 cache hit이라고 해요. 바로 사용자에게 보내고 얄코: 없으면, 즉 cache miss일 때 그때 서버에 요청해서 받아오는거죠. 미토: 체인점들이 식재료를 미리 받아와가지고 있는게 정적 캐싱이고 미토: 주문 들어왔는데 냉장고에 없으면은 본사에 요청하는거가 미토: 동적 캐싱이란거네요. 미토: 가벼운 컨텐츠들이야 동적 캐싱 써도 큰 문제 없겠지만은 미토: 동영상이나 무거운 게임파일같은거는 정적으로다가 해놔야지 미토: 사용자가 이용할 때 엄청 느리고 그런게 없겠는데요? 얄코: 그렇죠. 필요나 용도, 비용에 따라 적합한 방식을 쓰면 돼요. 미토: 어떤 방식이든 이제 본사에 직접 손님들이 몰려오는게 아니라 미토: 이 체인점들에만 이따금씩 식재료들을 쏴주면 된다는거죠. 미토: 오케이. 그런데 아까 정적, 동적 컨텐츠도 얘기했었잖아요. 미토: HTML, CSS, 자바스크립트 파일이나 이미지처럼 미토: 그 내용이 고정된 것들이 정적 컨텐츠고 미토: 어떤 게시판의 최신글 불러오기 같은 API 요청처럼 미토: 그때그때 데이터베이스 등의 변수에 따라가지고- 미토: 내용이 변할 수 있는게 동적 컨텐츠인건데 미토: 이 CDN에는 이것들이 다 캐싱이 될 수 있는거에요? 미토: 생각하기에는 정적 것들은 쉬워도 동적인거는 좀 힘들지 싶은데. 미토: '현재 서울 날씨'같은 정보는 캐싱했다가 어제 걸 막 주고 그러면은 미토: 되게 좀 곤란한거잖아요. 얄코: 맞아요. 변하지 않을 내용이라 그냥 캐싱하면 되는 정적 컨텐츠와는 달리 얄코: API 요청의 결과 같은 동적 컨텐츠는 캐싱해두기 까다로운 대상이죠. 얄코: 그래서 기본적인 정적 컨텐츠만 캐싱하는 업체들도 있고- 얄코: (아까 말했듯이 정적 캐싱이랑은 달라요) 얄코: 대표적인 CDN업체인 Cloudflare나 Akamai, 얄코: AWS의 CloudFront, 또는 Azure의 CDN 서비스처럼 얄코: 여러 방법을 고안해서 동적 컨텐츠 전달속도를 높이는 곳들도 있어요. 얄코: 동적 컨텐츠를 바이트 단위로 분석해서, 딱 바뀐 부분만 얄코: 새로 받아오도록 해서 속도를 높이기도 하고 얄코: 서버에서 사용자까지 전달되는 경로를 최적화하기도 하고 얄코: 데이터를 압축하거나 handshake 등의 과정을 간소화하기도 하죠. 얄코: 그리고 동적 컨텐츠의 특성이나 필요에 따라서는 얄코: 지정된 시간에 한해서 캐싱되도록 할 수도 있어요. 얄코: 날씨 같은 경우 초 단위로 업데이트될 필요는 없잖아요. 얄코: 실제로는 어떤지 모르지만 얄코: 이런 건 예를 들어서 몇 초나 몇 분씩 캐싱되도록 하던가 해서 얄코: 사용자들에게 딱히 불편을 끼치지 않고서도 얄코: 실서버로의 접속량을 줄일 수 있겠죠. 미토: 몇 초라고 해도 사실 서비스에 따라서는 되게 큰 거잖아요 미토: 1초에 수십 수백건씩 같은 요청이 들어오는 서비스라면은 미토: 그 정도만 해도 본사 일이 확 주는거죠 얄코: 맞아요. 추가로, 이처럼 데이터가 캐시에 얼마나 남아있을지 얄코: 지정하는 값을 Time-To-Live, TTL이라고 해요. 얄코: 같은 사이트나 서비스에서도 컨텐츠의 종류마다 얄코: 각각 적합한 TTL을 지정할 수 있죠. 미토: 그런것들을 서비스 주인이 다양하게 선택하고 조절을 할 수 있게다가 미토: CDN 업체들이 콘솔화면같은것도 제공을 해 주고 그러겠네요? 얄코: 네. 좋은 서비스일수록 그런 것들도 편하고 디테일하게 잘 돼있어요. 얄코: 사이트의 내용이 전반적으로 바뀌어서 캐시를 싹 비우고 싶을 때 얄코: 체인점들한테 재고 싹 버리고 새로 받아가라 이런 명령도 내릴 수 있구요. 미토: 이 CDN을 쓰면 이 CDN 업체에 나가는 비용도 있겠지만은 미토: 본 서버를 돌리는 비용은 또 확 줄겠네요. 얄코: 맞아요. 그로써 아끼는 비용이 더 크기 때문에 CDN을 사용하죠. 얄코: 서버로 직접 요청들이 들어오지 않기 때문에 대역폭 크게 비용이 절감돼요. 미토: '대역폭' 이 단어 모르시는 분들 있을 거 같은데. 미토: 근데 저는 안 모르거든요. 미토: 내가 얘기해봐요? 네? 내가 설명해요? 얄코: 해주세요, 해주세요. 미토: 대역폭이라는거는요 주어진 시간 안에 데이터가 미토: 얼마나 많이 실려가지고 보내질 수 있는가에요 미토: 우리가 컴퓨터 네트워크에서 얼마나 뭐가 미토: 빠릿빠릿하게 보내질 수 있는가를 따져볼 때 미토: 전송속도랑 이 대역폭이 얼마나 되는지를 보는거거든요 미토: 도로가 있어요. 이 도로로다가 데이터가 수송이 되는데 미토: 전송속도는 이 도로의 제한 속도라고 보면 되구요 미토: 대역폭은 도로의 너비거든요. 몇 차선씩 있는가 미토: 도로가 넓어가지고 이 차선이 많이 있으면은 미토: 같은 속도에서도 더 많은 데이터가 실려갈 수 있는건거죠 얄코: 전송속도는 물리적 거리를 얼마나 빠르게 이동을 하는가 얄코: 대역폭은 동시에 얼마나 많은 데이터가 오고갈 수 있는가죠. 미토: 곱하기에요 곱하기 이 둘이 다 빠르면 되게 빠른거죠. 미토: 대역'폭'은 도로'폭'이다 하면 안 잊어먹어요 얄코: 사실 이것도 깊이 들어가면 이보다 더 복잡하지만 얄코: 일단 이정도로 이해하고 계셔도 문제는 없을거에요. 미토: 하여튼간에 CDN이 대역폭 비용을 줄여준다는 거는 미토: 본사로 손님들이 직접 찾아오는게 아니니까 미토: 오리지날 서버로 가는 길을 넓게 깔 필요가 없다 그런거죠? 얄코: 그렇죠. 그런 측면에서 서버 호스팅 비용이 절감돼요. 얄코: 이처럼 비용만 절감되는게 아니라, 가용성과 안정성도 향상되죠. 얄코: 본 서버가 받는 부담이 덜어지니까 얄코: 과부하로 인한 오류의 위험성도 확 줄어들고 얄코: 이 CDN 엣지들 중 하나에 이상이 생겨도 얄코: 신속히 다른 엣지로 연결되기 때문에 얄코: 보다 안정석인 서비스를 사용자들에게 제공할 수 있어요. 미토: 아까 그 엣지들을 헬스체크를 한다는게 그런거네요. 미토: 잘들 돌고 있는지 꾸준히 확인하고 관리를 해준다. 얄코: 맞아요. 마지막으로, CDN은 보안에 있어서도 도움이 돼요. 미토: 아니, CDN이가 보안이랑은 또 무슨 상관이 있어요? 얄코: 일단 가장 쉬운 예로 DDoS 공격이 있죠. 미토: 오 디도스 디도스 그거잖아요 그거 미토: 여러 컴퓨터들을 악성코드로 잔뜩 최면을 걸어가지고 미토: 지정한 시간이 되면 쇼타임! 하고 공격대상 사이트로다가 미토: 좀비떼들마냥 몰려가게 해서 서버 과부하로 뻗게 만드는거요 미토: CDN을 쓰면 여기저기 분산된 CDN들이 몸빵을 해주니까 미토: 디도스가 잘 먹히지를 않겠네요 얄코: 그렇죠. 이 DDoS 공격도 여러 유형들이 있어서 얄코: 표적이 되면 하나하나 방지하고 대응하기가 까다로워요. 얄코: 좋은 CDN 업체들은 웹사이트를 계속 유지하면서도 얄코: DDoS 공격들로부터 서버를 보호하기 위한 얄코: 다양한 방법들을 고안해서 제공을 해요. 얄코: 정상적인 요청과 공격 요청을 구분해 내고 얄코: 특정 시점의 요청 수를 제한하기도 하고 얄코: 집중된 요청들을 수많은 엣지들로 분산시키는 등 얄코: DDoS를 무력화시킬 방안들을 갖추고 있죠. 미토: CDN을 쓰는 서비스가 디도스 공격을 받으면 미토: 이 CDN이 앞에 서가지고 탱커를 맡아주는거 아녜요. 미토: 한두 번 당한거가 아니니까 아주 그냥 이골이 나 가지고 미토: 이런거에 대한 노하우도 많이 쌓여있겠네요. 미토: 얘네한테 걍 맡기는 게 낫지 그럼 얄코: 그렇죠. 그리고 이전에 'HTTPS가 뭔가요'영상에서 얘기했던 얄코: 컨텐츠의 암호화도 CDN을 통해 향상시킬 수 있어요. 얄코: 좋은 CDN업체들은 이 엣지들과 사용자간의 연결에 있어서 얄코: 최신의 검증된 인증 방식들을 사용하기 때문에 얄코: 내가 서버에서 구현한 인증서의 보안 등급이 낮더라도 얄코: 방문자들은 CDN에서 제공하는 보다 강력한 보안을 누리게 되죠. 얄코: 이처럼 보안도 CDN 업체를 선택할 때 중요한 고려 요소에요. 얄코: 이 CDN을 해킹해서 악성코드를 유포하는 등의 공격도 있기 때문에 얄코: 사용할 CDN 회사가 보안 측면에서 충분한 역량을 갖췄는지도 얄코: 꼼꼼히 따져볼 필요가 있어요. 미토: 내가 웹사이트를 만들었는데 그럼 여기다가 CDN을 달려고 그려면은 미토: 어떻게 하면 되는에요? 걍 검색해서 업체 찾아보면 되는건가? 얄코: 네, 세계적으로 널리 쓰이는 외국 업체도 있고 얄코: 한국 내에서 서비스하기에 더 특화된 국내 업체들도 있으니까 얄코: 오늘 이야기한 사항들을 고려해서, 내가 구축하고자 하는- 얄코: 서비스의 필요에 맞게 알아보고 선택하시면 되구요 얄코: AWS나 Azure같은걸 사용한다면 거기서 제공하는 CDN 서비스 얄코: AWS의 경우 CloudFront, 이런게 자사 서비스랑 연동이 편할거에요. 얄코: 오늘 이렇게 CDN을 주제로 이야기를 나눠봤습니다. 미토: 원래 이거랑 연계된 다른 주제들도 좀 할려고 그랬는데 미토: CDN 하나가지고도 할 얘기들이 해보니까 되게 많았네요. 얄코: 그러게요. 다음 영상에서 또다른 주제로 찾아뵙도록 할게요. 얄코: 이상 얄코와 미토였습니다. 즐코하세요!




관련 태그의 다른 영상들

CDN이 뭔가요?
CDN으로 웹 서비스를 빠르고 안전하게 제공할 수 있습니다.
# CDN
# 캐시
# TTL
# CloudFlare
# Akamai
# CloudFront
쿠키, 세션, 캐시가 뭔가요?
어렴풋이 알지만 어떻게 다른지 헛갈리는 세 용어. 확실하게 알아보자구요.
# 쿠키
# 세션
# 캐시
#
...
🌏 Why not change the world?