일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- package management
- 자바스크립트
- Property Attribute
- 블로그 서비스 최적화
- 커리어
- 전역변수의문제점
- 딥다이브
- 인터넷 장비
- 이벤트
- 빌트인 객체
- DOM
- 올림픽 통계 서비스 최적화
- ES6함수 추가기능
- Babel과 Webpack
- var 사용금지
- 디스트럭처링
- const
- 자바스크립트 딥다이브
- 제너레이터와 async/await
- 이미지 갤러리 최적화
- 프로퍼티 어트리뷰트
- 프론트엔드 성능 최적화 가이드
- peerdependencies
- 프로그래머스
- 스코프
- 자바스크립트 패턴
- 비전공이지만 개발자로 먹고삽니다
- Set과 Map
- 브라우저의 렌더링 과정
- 모던 자바스크립트 Deep Dive
- Today
- Total
Dev Blog
CDN 본문
CDN
Content Delivery Network
웹페이지, 이미지, 동영상 과 같은 컨텐츠를 서버에서 사용자에게 전송하는 것
기존 단 하나의 서버의 문제점
- 클라이언트가 겪는 불편함: 전 세계에서 서버에 요청을 보내는 경우, 각 나라와의 서버의 거리가 멀 경우(물리적인 이유), 서버에서 컨텐츠를 받아오는 시간이 오래걸린다.
- 서버가 겪는 불편함: 수많은 요청들을 처리해야 한다는 점.
CDN 서버는 컨텐츠 전달이라는 용도에 특화되어 서버의 요청 처리를 분산한다. CDN 업체가 전세계 곳곳에 서버를 두고 있다면, 요청을 클라이언트에게 가장 빠르게 서비스를 제공할 수 있는 CDN 서버에서 해당 요청을 처리하는 것이다. 이 CDN 서버에는 해당 서비스 사이트의 각종 이미지, 기타 정적 요소들이 저장, 캐싱 되어있기 때문에 클라이언트가 보다 빠르게 사이트를 이용할 수 있다.
브라우저는 먼저 DNS(Domain Name System) 에서 사이트의 서버 아이피를 조회하고 요청을 보내 사이트에 접속하는데, CDN 을 사용할 경우, DNS 에서 Original Server 가 아니라 EDGE Server(CDN 서버) 로 연결해주는 것이다. 단지 물리적으로 가까운 CDN 에 연결해주는 것이 아니라, 특정 지역에 요청이 집중이 될 경우, 각 엣지들이 잘 돌아가고 있는지 꾸준히 Health Check 를 하여 가장 빠르게 서비스(컨텐츠)를 제공할 수 있는 CDN 서버에 연결을 주선한다.
- 정적 캐싱: 캐싱할 컨텐츠들을 미리 각 엣지에 보내는 것-> 무거운 컨텐츠에 적합.
- 동적 캐싱: 사용자가 요청을 보낼 때마다 보낼 컨텐츠가 해당 엣지에 존재하는지 여부를 먼저 확인한 후 있다면(cache hit) 바로 사용자에게 보내고, 없을 경우(cache miss) 그 때 서버에 요청해서 받아온다. -> 가벼운 컨텐츠에 적합.
- 정적 컨텐츠: HTML, CSS, 자바스크립트 파일이나 이미지처럼 내용이 고정된 것
- 동적 컨텐츠: 최신 정보 불러오기 같은 API 요청처럼 해당 시점의 데이터베이스 변수 등에 따라 내용이 변할 수 있는 것.
동적 컨텐츠 일 경우 캐싱이 까다로울 수 있는데,
1) 동적 컨텐츠를 바이트 단위로 분석하여 바뀐 부분만 새로 받아와 속도를 높이기도 하고
2) 서버에서 사용자까지 전달되는 경로를 최적화하기도 하고
3) 데이터를 압축하거나 handshake 등의 과정을 간소화,
4) 지정된 시간에 한해 캐싱할 수 있도록 하는 등 효율적으로 컨텐츠를 받아올 수 있도록 한다.
데이터가 캐시에 얼마나 남아있을지 지정하는 값을 Time To Live, TTL 이라고 하는데 같은 사이트나 서비스에서도 컨텐츠의 종류마다 각각 적합한 TTL 을 지정할 수 있다. 이처럼 CDN 업체들은 캐싱을 컨트롤할 수 있는 많은 옵션들을 제공한다.
CDN 업체: Cloudflare, Akamai, CloudFront(AWS), Azure CDN 서비스
CDN 장점(좋은 CDN 업체일 경우)
- CDN 을 사용하면 서버로 직접 요청들이 들어오지 않기 때문에 *대역폭 비용이 크게 절감된다. 대역폭을 넓게 설정할 필요가 없기에 서버 호스팅 비용이 절감되는 것이다. 비용 절감 뿐만 아니라 가용성과 안정성도 향상된다. 본 서버에 과부하로 인한 오류의 위험성이 줄고 한 CDN 엣지에 이상이 생겨도 빠르게 다른 엣지로 연결되기 때문에 보다 안정적인 서비스를 사용자들에게 제공할 수 있다.
- 보안: **Ddos 공격(서버에 과부하를 주어 )이 있을 경우, CDN 서버는 정상적인 요청과 공격 요청을 구분해 내고, 특정 시점의 요청 수를 제한하기도 하고, 집중된 요청들을 수많은 엣지들로 분산시키는 등 DDoS 를 무력화시킬 방안을 갖추고 있다.
- 컨텐츠의 암호화: 엣지들과 사용자 간의 연결에 최신의 검증된 인증 방식들을 사용하기 때문에 본 서버에서 구현한 인증서의 보안 등급이 낮더라도 방문자(Client) 들은 CDN 에서 제공하는 강력한 보안을 누릴 수 있다.
*bandwidth(대역폭): The maximum amount of data transmitted over an internet connection in a given amount of time. Bandwidth is often mistaken for internet speed when it's actually the volume of information that can be sent over a connection in a measured amount of time – calculated in megabits per second (Mbps).
**분산 서비스 거부(DDoS: Distributed DoS attack) 공격: 인터넷 트래픽의 폭주로 공격 대상이나 그 주변 인프라를 압도하여 공격 대상 서버나 서비스, 네트워크의 정상적인 트래픽을 방해하는 악의적인 시도를 말한다.
참고
웹서비스에 필수! CDN이 뭔가요?: https://youtu.be/_kcoeK0ITkQ
'Web Development > General Tech Knowledges' 카테고리의 다른 글
What is JSON File ? (0) | 2021.09.09 |
---|---|
Service worker (0) | 2021.09.03 |
PWA (0) | 2021.08.01 |
SPA - CSR/SSR/SSG (0) | 2021.08.01 |
DOM/CSSOM/BOM/Virtual DOM (0) | 2021.07.31 |