내 담당 시스템 서버는 국내에 구축되어있는데, 해외 사용자들한테서 항상 시스템이 느리다는 말을 많이 들었다. 그래서 고민했던게 CDN 이라고 들었다. 그땐 그냥 잠깐 설명듣고 음 그렇구나~ 했었는데 요즘에는 뭔가 회의도 하고 논의중인거 같아서 개념을 정리해본다.
CDN (Contents Delivery Network)
이름 그대로 컨텐츠와 관련이 있다.
지리적으로 거리가 떨어져있는 사용자에게 컨텐츠를 더 빠르게 전달해주기위해서 엣지서버에 캐시로 저장하고 제공하는 기술이다.
내가 간단히 이해한 구조로 그림을 그려봤다.
국내에 서버를 두고 있는 서비스를 예시로 들었을때, 국내 사용자가 컨텐츠를 다운 받기 위해 거쳐가야하는 경로보다, 해외 사용자가 더 복잡하고 여러 단계의 경로를 거쳐야한다.
따라서 해외 사용자는 컨텐츠를 다운 받을 때마다 국내에 구축되어있는 실 서버에 요청을 하고 다운 받으면 너무 오래 걸린다.
이건 내가 담당하는 시스템 기준으로 이해한거고, 단점들이 또 있다.
- 지리적 한계에 따른 지연 : 위에 설명한 내용
- 서버 부하 : 서비스가 큰 경우, 사용자들이 컨텐츠 요청하고 전달하는게 시스템에 부하가 될 수 있다. 특히 특정 시간에 사용자가 몰리는 서비스 같은 경우는 더 심하다.
- 중간 네트워크 장애시 서비스 불가: 실서버로 연결되는 중간 네트워크에 장애 발생시 서비스 불가하다.
이 문제를 해결하기 위한게 CDN 이다. 거점마다 edge 서버를 두고, 그 서버에 캐싱하여 지리적 한계를 극복하는 것.
edge 서버란?
네트워크 진입점을 의미하는 것으로 즉 서비스의 가장 바깥지점을 말한다. 사용자단에서 가장 가까이 있다. 요즘 그 유행하는 엣지 컴퓨팅 어쩌고도 이 엣지다…
관련해서 이 사이트 가 너무 잘되어있다.
CDN 을 위해서는 지리적 위치에 따라서 어떻게 가장 가까운 엣지 서버 찾을지에 대한 로직도 필요하고, 캐시 주기에 대한 고려도 필요하다.
이건 나중에 추가하겠다.
CDN 으로 되는 것과 안되는것
CDN은 정적인 데이터를 캐싱하여 사용하는 것이다. 즉 이미지나 css 파일, html 파일 등이다. jsp 같은 프로그래밍 코드 내에서 분기를 타거나 로직에 따라서 다른 결과값이 나와야하는 것은 캐싱할 수 없다.
즉, cdn 을 사용하기 위해선 web/was를 분리하듯이 프로덕트의 정적인 파트와 동적인 파트를 분리할 줄 알아야한다.
그럼 CDN 은 모든 프로덕트한테 베스트 일까???
물론 아니다. 간단하게 생각해보면 글로벌한 서비스를 하지 않는다면 굳이 돈도, 고려할 점도 많은 cdn을 사용할 필요가 없다. 또한 동적인 데이터가 많아서 캐싱이 크게 효과적이지 않다면 굳이 cdn을 할 필요가 있을까..?
일단 여기까지