티스토리 뷰

Study

로드 밸런싱과 CDN

니용 2019. 11. 13. 19:00
반응형

 

Author: 주니용

 

 

2019년 기준으로 한국과 미국 간의 비행기 거리는 비행기 시간으로 18시간이 걸린다.

하지만 김포공항에서 출발한 비행기는 제주도까지 불과 1시간밖에 걸리지 않는다.

갑자기 뜬금포로 비행기 시간의 얘기가 왜 나오는 것이지??

 

거리가 멀수록 데이터를 전송할 때 걸리는 시간도 비례한다.

즉, 우리는 서울에 서버를 위치해둔 홈페이지를 제주도에서 들어가는데 1초가 걸린다면 

미국에서는 18배인 18초가 걸려야 하는 것이다.

 

충격이다. 대부분의 한국 사용자들은 못기다리고 탈주하겠지... (나는 그래요)

 

이런 문제를 해결하기 위해 한국 서버 <-> 미국 서버 사이에 중계기를 두어서 조금 더 빠르게 접근하고 전달하는데 필요한 자원낭비를 최소로 하는 것이 바로 CDN(Contents Delievery Network)라고 한다.

제대로 된 정의는 아래와 같다.

 

정의

더보기

1. 지리, 물리적으로 떨어져 있는 사용자에게 콘텐츠를 더 빠르게 제공할 수 있는 기술

2. 느린 응답속도 / 다운로딩 타임을 극복하기 위한 기술

3. 사용자와 가까운 곳에 위치한 Cache Server에 해당 Content를 캐싱하고 Content 요청 시 Cache Server가 응답 

캐시의 개념이 명확하지 않다면...? https://richong.tistory.com/95

서버의 개념이 명확하지 않으면 이쪽으로 >>> https://brunch.co.kr/@olivia0905/9

(귀찮은거 아니에요)

 

CDN을 사용하면 여러 가지 장점이 있다. 

앱이 배포되거나 수정되어 수요가 증가하면 병목현상이 일어난다.

병목현상(Bottleneck)이란 콜라병을 예시로 들면 쉽게 생각해낼 수 있다.

 

더보기

콜라병은 주둥이 둘레가 작다. 콜라병에 물을 넣고 싶어도 한 번에 넣을 수 있는 양은 정해져 있다.

콜라병의 둘레보다 큰 바가지로 물을 한번에 밀어넣을 수 없다.(???) 조금씩 계속 채워야한다.

쉽게 말하면 입구가 좁아 한 번에 수용할 수 있는 최대치가 되었을 때, 입구 밖에 대기하고 있는 상황이다.

다시 본론으로 돌아와서, 병목현상의 발생 시 CDN은 자기의 위치에서 적재적소에 맞게 사용자를 분배해주는 역할을 한다.

 

장점을 다시 한 번 살펴보자.

 

장점

더보기

장점1. 웹사이트 로딩 속도 개선

위에서 말했다시피 가까운 거리로 사용자를 이끌어주므로 접근 속도가 차이가 많이 난다. 처음에 접근할 때만 시간이 다소 걸릴 뿐이고 그 이후에는 자동으로 잡아주기에 속도가 로딩하는데 시간이 오래 걸리지 않는다.

 

장점2. 인터넷 회선 비용 절감

아무래도 먼 거리를 드나드려면 그만큼 선을 타고 이동하는 거리도 길어질 것이다. 선을 이용하는 것이 돈이 든다고 가정하면, 정말 긴 선을 타고 내가 원하는 요청을 보내고 그에 따른 응답을 받는데도 굉장히 오래 걸릴 것이다. 그렇게 되면 비용은 어마어마하게 청구될 것이다. 우리가 현재 스마트폰에서 사용하고 있는 데이터도 마찬가지이다. 데이터를 사용한만큼 돈을 지불해야하는데, 이것을 집대성하여 돈을 대신 납부해주는 것이 바로 통신사의 역할이다. 데이터 무제한이라는 것은 통신사에게 너무 감사한 것이다. (대한민국이 좋은 이유 중 하나)

 

장점3. 콘텐츠 제공이 안정적

뒤에 작동원리에서 살펴보겠지만, 사용자가 한 번 확인한 콘텐츠는 가까운 CDN 서버에 저장이 된다. 사용자가 확인한 콘텐츠는 오랜 기간이 지나야 삭제가 되기 때문에, 그 전에 또 다시 접근하게 된다면 안정적으로 콘텐츠를 다시 확인할 수 있다. 

콘텐츠가 삭제되는 기한은 CDN서버의 특징에 따라 모두 제각각이다.

 

장점4. 웹사이트 보안 개선

CDN 서버의 장점 중 하나는 사용자의 출발지와 경유지, 필요한 콘텐츠가 있는 도착지의 모든 정보를 가지고 있다는 것이다. 사용자가 많이 몰리는 쪽으로 CDN은 자연스럽게 빠른 경로를 학습하게 되는데, 많은 사용자가 있다는 것은 그만큼 안정적이라는 것이다. 다시 말해 안정적이기 때문에 해킹의 위험이 적고, 보안성이 우수하다는 얘기가 된다.

 

작동 원리

더보기

1. 최초 요청은 서버로부터 콘텐츠를 가져와 고객에게 전송하여 동시에 CDN 캐싱 장비에 저장

2. 두번째 이후 모든 요청은 CDN업체에서 지정하는 해당 콘텐츠 만료 시점까지 CDN 캐싱 장비에 저장된 Content를 전송

3. 자주 사용하는 페이지에 한하여 CDN장비에서 캐싱이 되며, 해당 콘텐츠의 호출이 없을 경우 주기적으로 삭제

4. 서버가 파일을 찾는데 실패하면, CDN 플랫폼의 다른 서버에서 콘텐츠를 찾아 end-user에게 전송

5. 콘텐츠를 사용할 수 없거나 오래된 경우, CDN은 서버에 대한 요청을 Proxy로 작동

6. 향후 요청에 대해 응답할 수 있도록 새로운 콘텐츠 저장

 

이건 뭐 해외에 있는 사람은 CDN을 안쓰면 안되는거 아니냐는 소리가 나올 수 있다. 사실 요새 모든 콘텐츠는 CDN을 통해 사용한다고 하여도 무방하다. 대표적으로는 아마존 웹서버(AWS) 또한 Korea Region을 만든지 얼마 되지 않은 CDN 업체 중 하나이다.

대신 CDN은 기술을 사용하기 위해 몇 가지 알아두어야 할 것이 있다.

 

필요 기술

더보기

1. 로드 밸런스

부하분산이라고도 하는 이 기술은 네트워크 기술의 일종으로 둘 이상의 중앙처리장치 또는 저장장치와 같은 컴퓨터 자원들에게 작업을 분배하는 것을 의미한다. 병렬처리를 하는데 주로 사용한다. 

사용자에게 요청을 받았을 때 최적의 네트워크 환경을 찾아 연결하는 기술로 GSLB(Global Server Load Balancing)를 사용하고 DNS(Domain -> IP) 서비스의 발전형 모델이다.

DNS와 GSLB의 차이는 아래와 같다.

  DNS GSLB
1. 상태 체크 서버의 상태를 알 수 없다 서버의 상태를 모니터링하고 실패한 서버는 IP의 응답에서 제외한다
2. 로드 밸런싱 RoundRobin 방식을 사용하여 정교하지 않게 연결해준다 각 지역별로 서버에 대한 Latency 정보가 있어 사용자의 지역으로부터 가까운 Low Latency로 연결한다
3. GPS RoungRobin 방식을 사용한다 사용자 지역정보 기반으로 작동하며 해당 지역 서버로 매핑해준다

 

더보기

2. Content Deploy

콘텐츠를 배포하는데 수정하는 기술이 필요하고 불필요한 콘텐츠일 시 삭제하는 기술이 필요하다.

참고로, Deploy와 Release는 다른 개념이다.

Deploy: 프로그램을 서버와 같은 기기에 설치하여 작동하도록 만드는 일련의 과정

Release: 기존의 완성된 제품이 변경되거나 수정할 필요가 있어 버전을 올려 배포하는 과정

 

더보기

3. Traffic Monitoring

통계 자료를 고객에게 제공하기 위해 필요하며, 갑자기 수많은 트래픽이 들어와 과부하가 되더라도 이를 적절히 분산시켜 지연을 최소로 하게 만들고 사용자의 입장에서 문제없이 원하는 콘텐츠에 접근하도록하는 기술이다.

 

캐싱 방식

캐싱 방식도 2가지가 있는데 아래에 정리해보았다.

더보기

1. Static Caching

origin 서버에 있는 콘텐츠를 운영자가 미리 캐시 서버에 복사하는 것을 의미한다. 대부분의 국내 CDN에서 이와 같은 방식을 사용한다.

 

2. Dynamic Caching

콘텐츠를 미리 복사하지 않고, 사용자가 콘텐츠를 요구하면 실시간으로 콘텐츠를 origin 서버로부터 다운로드 받아 전달하는 방식이다. 추후에 콘텐츠가 캐시 서버에서 삭제될 가능성이 있다.

 

CDN에서는 동영상, 오디오 스트림, 앱/게임/운영체제 등 모든 디지털화 가능한 데이터를 다룰 수 있다.

이전부터 모든 세계가 하나로 연결되는 웹의 발전으로 글로벌화가 진행되었지만, 앞으로는 더 많은 데이터를 더 빠르게 요구하게 될 것이고 이 때문에 CDN의 활용도가 점차 커질 것이다.

 

모르고 사용하는 것 보다 알고 사용하는게 더 낫다고 생각하여 찾아본 글을 재구성해보았다.

반응형

'Study' 카테고리의 다른 글

개발자와 프레임워크  (0) 2020.06.14
개발자 일상 오픈!!  (0) 2020.06.12
Slack 활용법  (0) 2020.06.03
IntelliJ의 생산성을 높이는 방법  (0) 2020.02.05
개발 사이트 모아보기  (0) 2019.12.04
IntelliJ 알아보기  (1) 2019.09.25
댓글
공지사항