본문 바로가기

카테고리 없음

[시스템 설계] 사용자 수에 따른 규모 확장성 - 3

참고: 가상 면접 사례로 배우는 대규모 시스템 설계 기초, 알렉스 쉬

CDN

정적 컨텐츠를 전송하는 데 쓰이는, 지리적으로 분산된 네트워크이다. (ex, AWS의 CloudFornt)

예를 들어, 내 서버는 서울에 있는데, 일본 유저가 내 서버에 접촉할 경우 거리가 멀어 응답속도가 느려지게 된다. 이때, 일본에 내 서울 서버를 본뜬 서버를 둔다면, 빠르게 응답할 수 있다.

즉, 거리가 매우 먼 지리적 상황을 극복하기 위한 일종의 캐시 서버와 비슷하다.

CDN 서버에 캐시할 수 있는 종류

이미지, 비디오, CSS, HTML, JavaScript 등 정적 파일들을 저장할 수 있다.

예시

예시 1. 서울에만 서버가 있는 경우)

서울에만 서버가 있는 경우

위 그림처럼, 서울에만 서버가 있다면, 응답속도가 느려질 것이다. 

 

예시 2. 일본에 CDN 서버를 추가

일본에 CDN 서버를 추가

위 그림처럼 일본에도 서울 서버와 같은 CDN 서버를 둔다면 일본 유저에게도 빠르게 응답할 수 있을 것이다.

CDN 서버에 요청 파일이 없는 경우

CDN 서버에 요청에 대한 파일이 없는 경우가 있을 수 있다. 이런 경우, CDN 서버는 원래 서버로부터 해당 파일을 캐시해온 후 응답한다. 

CDN 서버에 없는 경우

이떄, 3번 과정에서 CDN으로 파일이 전송될 때, TTL(Time-To-Live)값이 함께 전달된다. CDN은 이 TTL값 만큼 해당 파일을 저장한다. 

CDN 사용시 주의사항

비용

  • 보통 CDN으로 들어가고, 나가는 데이터 전송 양에 따라 요금을 부가한다. 즉, 자주 사용되지 않는 콘텐츠에 대한 캐싱은 이득이 적다.
  • 즉, 자주 사용하는 데이터들을 위주로 캐싱해야, 들어가는 데이터 전송 요금을 줄일 수 있다.

적절한 만료 시기 설정

  • 만료 기간이 너무 길 경우: 원본 데이터와 콘텐츠간 차이가 발생 할 수 있다. 
  • 만료 기간이 너무 짧은 경우: 자주 캐싱해야 한다. 따라서, 비용도 크게 증가하고, CDN을 사용하는 의미가 퇴색될 수 있다.( 캐싱 서버와 비슷하다)
  • 즉, 원본 데이터와의 차이를 최대한 적은 한도 내에서 기간을 길게 가져가는게 좋은거 같다.

CDN 장애에 대한 대처 방안

CDN 서버가 다운 될 경우에 대한 상황을 미리 대처해야 한다. 예를 들어, 일시적으로 CDN 서버가 응답하지 않을 경우, 원본 서버에 대신 요청하도록 클라이언트를 구성할 수 있다.

콘텐츠 무효화

특정 상황에 따라 아직 만료 기간이 남은 콘텐츠를 CDN에서 제거해야하는 경우도 있다. 아래는 2가콘지 방법 예시이다.

  • CDN 서비스 제공 업체의 API를 이용해 CDN 콘텐츠 무효화하기
  • 콘텐츠의 버전이 바뀔 경우, 콘텐츠의 다른 버전을 서비스하도록 오브젝트 버저닝을 이용한다. 이를 위해 콘텐츠의 버전을 지정할 수 있도록 URL의 쿼리를 추가한다. (ex, ...?version=2)

이전까지 구성도와 합친 전체 구성도