티스토리 뷰
서버 개발을 하다보면 클라에게 제공한 api의 속도에 신경써야 된다.
속도를 줄이는 방법으로 db 최적화, 속도가 느린 로직 개선 등 여러 가지 시도를 하는데 그 중 하나의 방법으로 cdn이 있다.
cdn이란?
cdn이란 content delivery network(콘텐츠 전송 네트워크)로 사용자로부터 가까운 서버로 콘텐츠를 받아 콘텐츠를 받는데 걸리는 속도를 줄여주는 그런 네트워크를 의미한다.
예를 들어 미국에 있는 사용자가 한국에 있는 서버로부터 데이터를 받을 때 지리적으로 먼 거리로 인해 속도가 느려질 수밖에 없다. 이 때 속도를 줄일 수 있는 방법으로는 미국에 한국과 똑같은 서버를 구축해서 미국 사용자는 미국 서버로부터 데이터를 빠르게 받는 것이다.
하지만 실제로 이렇게 중복되는 서버들을 여러 개 구축할 경우 관리 면에서도 번거롭다. 이럴 때 사용하는게 cdn이다.
cdn 기본 동작 원리
origin 서버인 한국 서버가 있을 때 미국 사용자가 한국 서버로 요청을 보낸다.
그러면 미국 사용자와 가까운 cdn 엣지 서버(pop 서버라고도 한다.)가 미국 사용자가 요청한 건에 대해 콘텐츠를 갖고 있는지 판단하다. 이 때 해당 콘텐츠를 갖고 있지 않으면 cdn 엣지 서버는 origin 한국 서버로 요청을 해 데이터를 받아 캐싱하고 데이터를 미국 사용자에게 넘겨준다. 그 후에 또 미국 사용자가 요청을 해오면 가까운 cdn 엣지 서버는 해당 콘텐츠를 이미 캐싱하고 있으므로 캐싱하고 있는 데이터를 바로 미국 사용자에게 넘긴다.
따라서 처음에는 캐싱되어 있는 데이터가 없으므로 속도가 느릴 수 있으나 그 후에는 캐싱 되어 있는 데이터를 전달하면 되므로 속도가 빨라지게 된다.
글로벌 서비스를 하기 위해서는 필수로 생각해야하는 것이라고 봐도 좋을 것 같다.
cdn의 장점
그러면 cdn은 속도 개선의 장점만 있을까? 그렇지는 않다. cdn은 아래와 부가적인 장점들을 갖고 있다.
- 속도 개선
- 부하 분산: cdn 엣지 서버가 여러 군데 운영되고 캐싱을 하고 있으므로 origin 서버로만 트래픽이 몰리는 것을 방지할 수 있다.
- 보안 개선: 요즘 cdn들은 캐싱 기능 뿐만 아니라 DDos 방지를 위한 기능도 제공하고 있다. (예. cloudflare)
- 가용성 강화: cdn 엣지 서버들이 여러 군데 운용 되어 한 서버가 먹통이 되어도 다른 서버에서 콘텐츠를 받을 수 있다.
cdn 적용 방법
cdn은 여러 클라우드에서 제공하는 기능이어서 각각 사용방법은 다소 차이가 있지만 기본적인 사용 방법은 정해져 있다.
우선 cloudflare를 예시로 간단하게 방법을 정리했을 때 아래와 같다.
- cloudflare란?
- 클라우드플레어는 CDN 서비스와 분산 네임서버를 이용하여 사이트 성능과 속도, 보안을 향상시키는 서비스를 제공하는 기업이다. (위키 백과)
cloudflare에 웹 사이트에 접속해 cloudflare를 적용할 도메인을 입력해 website(cloudflare의 도메인 단위)를 하나 만든다.
서버 도메인을 cloudflare site로 만들면 해당 도메인에 대한 DNS 정보를 클라우드 플레어가 스캔한다.
그 후에 안내에 따라 해당 도메인을 관리하는 사이트로 가서 dns의 네임서버를 클라우드플레어에서 가이드하는 네임서버로 변경하면 cloudflare가 적용된다. (예. xxxx.test.com.cdn.cloudflare.net으로 dns 변경)
이렇게 하면 cdn이 적용된 것이다.
cdn 캐싱에 대한 것은 cloudflare cache에서 제어할 수 있다.
그곳에서 userAgent에 따라, path에 따라 캐싱을 어떻게 할 것인지 제어할 수 있다.
적용한 cdn은 nslookup으로 확인해볼 수 있다. nalookup을 때려보면 cloudflare cdn으로 설정이 정상적으로 된걸 알 수 있다.
(nslookup: 해당 도메인에 대한 ip등 정보를 얻을 수 있음)
다른 클라우드들도 위와 마찬가지로 DNS를 변경하는 것으로 cdn을 적용할 수 있다.
클라우드에서 제공하는 cdn 도메인을 생성하고 거기에 cdn을 적용할 서버의 주소를 cname에 넣는 식으로 적용할 수 있다.
참고로 cdn 주소 변경 같은건은 변경 후 바로 반영되는 것이 아니라 일정 시간이 걸리 수 있다.
(각 cdn 엣지 서버로 전파되는 시간 필요)
cdn 적용 시 속도
ping을 통해 cdn이 적용된 도메인과 적용되지 않은 origin 도메인을 찔렀을 때의 속도 차는 아래와 같다.
cdn이 적용 되지 않은 origin 도메인
cdn이 적용된 도메인
확실히 cdn이 적용된 도메인이 캐싱이 되어 있어 속도가 빠른 것을 알 수 있다.
한국에서 테스트해서 이정도 차이지 실제 세계 각지에서 테스트를 진행했을 때는 더 큰 속도 차가 나지 않을까 싶다.
대표적인 클라우드들에서 제공하는 cdn
- AWS Cloud Front: https://aws.amazon.com/ko/cloudfront/
- Cloudflare: https://www.cloudflare.com
- AliCloud DCDN: https://www.alibabacloud.com/ko/product/dcdn?_p_lc=1
- Microsoft Azure CDN: https://azure.microsoft.com/ko-kr/products/cdn
'Server' 카테고리의 다른 글
[ Nginx ] 특정 도메인 또는 IP에서의 요청에 대해서만 proxy 설정하기 (0) | 2021.07.15 |
---|
- Total
- Today
- Yesterday
- MAC
- Spring
- JPA
- 스프링부트
- 이클립스
- springboot
- ssh
- 메시지큐
- enum
- DB
- 공간데이터
- Intellij
- k8s
- annotation
- HttpClient
- 어노테이션
- 데이터베이스
- 자바
- DATABASE
- cache
- 캐시
- 캐싱
- mockito
- 역직렬화
- eclipse
- PostgreSQL
- Java
- rabbitmq
- postgres
- Caching
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |