이전 포스팅에서 사용자가 특정 사이트로 요청했을 때 전반적인 처리 과정에 대해서 살펴보았다. 클라이언트가 서버에 요청을 보냈을 때 일차적으로 자체 DNS 캐시를 검색하고, 없을 경우 DNS Server에 해당 DNS에 대한 IP를 질의하여 자신이 원하는 사이트의 IP를 알아낸다. 하지만 이 IP 주소가 본 서버의 IP 주소가 아닐 수 있다. 큰 서버일수록 대용량의 트래픽을 관리하기 위해 서버를 분산하여 본 서버로의 접속을 줄인다. 분산된 서버들을 CDN이라 볼 수 있다.
AWS, Cloudfare, Akamai의 CDN 관련 문서 자료를 참고하였습니다.
CDN(Content Delivery Network)
CDN은 콘텐츠 전송 네트워크로 콘텐츠를 효율적으로 전달하기 위해 여러 노드를 가진 네트워크에 데이터를 저장하여 제공하는 시스템을 말한다. 사용자와 본 서버의 중간다리 역할을 하는 CDN은 본 서버의 콘텐츠들을 CDN 서버에서 캐싱을 해두고 사용자가 요청할 때 CDN 서버에서 정적, 동적 콘텐츠를 제공하여 사용자가 오래 기다리지 않도록 한다.
본 서버의 기능을 그대로 따라한 것이 아닌 콘텐츠 전송에 목적을 둔 서버를 말하며 엣지 서버라고도 한다.
※캐싱 : 본 서버의 콘텐츠들을 CDN 서버에 저장하는 프로세스
CDN 서버가 없다면?
본 서버가 한대뿐이라면 어떠한 문제가 발생할까? 사용자는 사용자의 위치에 따라 물리적인 거리의 영향을 받을 수 있다. 본 서버와의 거리가 멀다면 해당 서버에 도착하기 위해 복잡한 여러 라우터를 거쳐야 하기 때문에 사용자의 요청을 서버에 전달하는 데 있어 시간적 소요가 발생한다. 뿐만 아니라 사용자들은 서버와 TCP 연결 과정을 가져야 하기에 누군가 연결 과정을 진행하고 있다면 다른 누군가는 그만큼 대기하며 자신의 순서를 기다린다. 즉, 이러한 대기 시간은 사용자가 이탈하는 원인이 된다.
그렇다고 위의 상황을 완전히 해결할 수 없는 것은 아니다. 서버의 대역폭과 전송 속도를 높여 빠른 시간 안에 응답하도록 할 수 있다. 하지만 상황에 따라 CDN을 사용하는 것보다 비용이 크기 때문에 좋은 해결 방안은 될 수 없다.
※대역폭(bandwidth) : 일정한 시간 안에 데이터가 얼마나 많이 저장되어서 보내질 수 있는 정도를 말함
처리과정
1. 사용자는 웹 브라우저를 통해 url 주소 입력
2. DNS 캐시에 해당 url의 IP 주소가 없다면 DNS 서버에 질의
3. DNS 서버는 가장 가까운 또는 트래픽이 적은 CDN 서버의 IP 주소 반환
4-1. CDN 서버에 클라이언트 Http 요청
4-2. CDN에 콘텐츠가 존재하지 않는 경우 본 서버에 요청
5. 본 서버에서 CDN 서버에 콘텐츠 전송(Response). CDN은 해당 콘텐츠를 캐싱하여 복사본 저장
다음 방문자는 본 서버에 요청하지 않고 CDN 서버에 요청하여 CDN 서버에서 응답을 보낸다.
6. 브라우저는 Response를 받음
7. 사용자가 보기 편하도록 렌더링 하여 정보 제공
CDN의 특성
CDN을 사용하는 이유는 클라이언트의 대기 시간을 줄이고, 트래픽을 분산하여 서버의 과부하를 막기 위함이다. 따라서 본 서버는 대역폭 소비를 줄일 수 있다.
- 페이지 로딩 시간 단축 : 본 서버에서 콘텐츠를 제공하지 않고 가까운 CDN 서버에서 콘텐츠를 제공하므로 페이지 로딩 시간을 단축시킬 수 있다. 또한 본 서버와 CDN 서버 간의 통신은 신뢰할 수 있기 때문에 연결과정이 단순화되어 있다. 따라서 콘텐츠를 주고받는 속도가 빠르다.
- 대역폭 비용 절감 : 캐싱 및 최적화를 통해 본 서버에서 제공하는 데이터의 양을 줄일 수 있기 때문에 비용을 절감할 수 있다.
- 콘텐츠 가용성 제고 : CDN을 통해 트래픽을 분산시켜 서버의 로드를 줄일 수 있고, 하나의 CDN 서버가 중단되더라도 다른 CDN 서버가 대체할 수 있다.
- 웹사이트 보안 강화 : DDoS(Distributed Denial-of-Service) 공격으로 인해 발생되는 많은 트래픽은 CDN에 의해 분산되기 때문에 본 서버의 과부하를 막을 수 있다.
- 콘텐츠 암호화 : CDN에서 콘텐츠를 한 단계 더 암호화할 수 있다.
제공되는 콘텐츠
▷ 정적 콘텐츠
- HTML, CSS, JS, Image
- 정적 콘텐츠는 쉽게 변경될 일이 없기 때문에 본 서버에서 미리 CDN 서버에 보내 놓는다. → 정적 캐싱
▷ 동적 콘텐츠
- 동적 콘텐츠는 사용자의 요청에 따라 매번 바뀌는 콘텐츠들이다.
- 사용자의 요청을 확인 후 CDN에서 보낼 데이터가 있다면 보내지만(cache hit), 없다면(cache miss) 본 서버에서 받아와 전달한다. → 동적 캐싱
- 동적 콘텐츠의 특성상 캐싱에 어려움이 있다. 하지만 바이트 단위로 분석을 하여 바뀐 부분만 받아오거나, 데이터를 압축하거나, 서버와의 통신과정(handshake)을 간소화하여 보완하기도 한다.
- 가벼운 동적 콘텐츠의 경우(ex. 날씨 정보) 주기적으로 캐싱하여 속도를 향상시키기도 한다.
CDN의 사용 예
- 고속 콘텐츠 전송
- 실시간 스트리밍
- 다중 사용자 확장
GSLB(Global Server Load Balancing)
※로드 밸런싱 : 네트워크의 트래픽을 분산시켜 하나의 서버에 트래픽이 몰리지 않게 한다.
IP 주소와 Port를 기반으로 트래픽을 분산시키는 로드밸런서와는 달리 GSLB는 기존의 DNS에서 한 단계 더 발전한 개념이다.(DNS 기반 로드밸런싱 서비스) 기존 DNS는 라운드 로빈 방식을 사용함으로써 정교하진 않지만, GSLB의 경우 주기적으로 HealthCheck를 통해 원활한 서버로 접근할 수 있도록 한다.
[참고]
재해복구
DNS의 경우 서버의 상태를 보장할 수 없기 때문에 서버가 중단되더라도 사용자는 계속해서 요청을 할 수 있다. 반면, GSLB는 한 곳의 서버에서 문제 발생 시 다른 서버의 IP를 반환하여 정상적으로 응답할 수 있도록 한다. Host가 실패할 경우 DNS 응답에서 해당 호스트가 제거되어 요청이 가지 않도록 한다.
로드밸런싱
서버의 로드 상태를 지속적으로 모니터링하여 트래픽이 적은 서버의 IP를 반환한다. (HealthCheck)
위치기반 서비스
클라이언트가 응답 속도가 빠른 가까운 서버를 사용할 수 있도록 해당 서버의 IP를 반환한다.
레이턴시 기반 서비스
가까운 서버와의 통신속도가 느리면 멀더라도 빠른 서버의 IP를 반환한다.
참고하면 좋은 사이트
'CS > Network' 카테고리의 다른 글
HTTP와 HTTPS (0) | 2022.09.16 |
---|---|
클라이언트의 서비스 요청에 따른 서버의 처리과정 (0) | 2022.09.01 |
TCP와 UDP (0) | 2022.08.24 |
Proxy 프록시 (0) | 2022.05.16 |
Web에서의 인증과 인가(세션과 토큰) (0) | 2021.12.29 |