참고: 가상 면접 사례로 배우는 대규모 시스템 설계 기초, 알렉스 쉬
CDN
정적 컨텐츠를 전송하는 데 쓰이는, 지리적으로 분산된 네트워크이다. (ex, AWS의 CloudFornt)
예를 들어, 내 서버는 서울에 있는데, 일본 유저가 내 서버에 접촉할 경우 거리가 멀어 응답속도가 느려지게 된다. 이때, 일본에 내 서울 서버를 본뜬 서버를 둔다면, 빠르게 응답할 수 있다.
즉, 거리가 매우 먼 지리적 상황을 극복하기 위한 일종의 캐시 서버와 비슷하다.
CDN 서버에 캐시할 수 있는 종류
이미지, 비디오, CSS, HTML, JavaScript 등 정적 파일들을 저장할 수 있다.
예시
예시 1. 서울에만 서버가 있는 경우)
위 그림처럼, 서울에만 서버가 있다면, 응답속도가 느려질 것이다.
예시 2. 일본에 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)
이전까지 구성도와 합친 전체 구성도