CDN은 정적 컨텐츠를 전송하는 데 쓰이는, 지리적으로 분산된 서버의 네트워크입니다. 이미지, 비디오, CSS, JavaScript 파일 등을 캐시할 수 있습니다.
참고
동적 컨테츠 캐싱: 요청 경로(request path), 질의 문자열(query string), 쿠키(cookie), 요청 헤더(request header) 등의 정보에 기반하여 HTML 페이지를 캐시하는 것입니다.
CDN 동작 원리
어떤 사용자가 웹사이트를 방문하면, 그 사용자에게 가장 가까운 CDN 서버가 정적 콘텐츠를 전달하게 됩니다. 사용자가 CDN 서버로부터 멀면 멀수록 웹사이트는 천천히 로드될 것입니다.
사이트 로딩 시간을 개선하기 위해 CDN이 사용되는 예시
CDN 동작 설명
- 사용자 A가 이미지 URL을 이용해 image.png에 접근합니다. URL의 도메인은 CDN 서비스 사업자가 제공한 것입니다.
- 예시
- 클라우드 프론트(Cloudfront)
- 아카마이(Akamai)
- 예시
- CDN 서버의 캐시에 해당 이미지가 없는 경우, 서버는 원본(origin) 서버에 요청하여 파일을 가져옵니다. 원본 서버는 웹 서버일 수도 있고 아마존(Amazon) S3 같은 온라인 저장소일 수도 있습니다.
- 원본 서버가 파일을 CDN 서버에 반환합니다. 응답의 HTTP 헤더에는 해당 파일이 얼마나 오래 캐시될 수 있는지를 설명하는 TTL(Time-To-Live) 값이 들어 있습니다.
- CDN 서버는 파일을 캐시하고 사용자 A에게 반환합니다. 이미지는 TTL에 명시된 시간이 끝날 때까지 캐시됩니다.
- 사용자 B가 같은 이미지에 대한 요청을 CDN 서버에 전송합니다.
- 만료되지 않은 이미지에 대한 요청은 캐시를 통해 처리됩니다.
CDN 사용 시 고려해야 할 사항
- 비용: CDN은 보통 제3 사업자(third-party providers)에 의해 운영되며, 여러분은 CDN으로 들어가고 나가는 데이터 전송 양에 따라 요금을 내게 됩니다. 자주 사용되지 않는 콘텐츠를 캐싱하는 것은 이득이 크지 않으므로, CDN에서 빼는 것을 고려해야 합니다.
- 적절한 만료 시한 설정: 시의성이 중요한(time-sensitive) 콘텐츠의 경우 만료 시점을 잘 정해야 합니다. 너무 길면 콘텐츠의 신선도는 떨어질 것이고, 너무 짧으면 원본 서버에 빈번히 접속하게 되어서 좋지 않습니다.
- CDN 장애에 대한 대처 방안: CDN 자체가 죽었을 경우 웹사이트/애플리케이션이 어떻게 동작해야 하는지 고려해야 합니다. 가령 일시적으로 CDN이 응답하지 않을 경우, 해당 문제를 감지하여 원본 서버로부터 직접 콘텐츠를 가져오도록 클라이언트를 구성하는 것이 필요할 수도 있습니다.
- 콘텐츠 무효화(invalidation) 방법: 아직 만료되지 않은 콘텐츠를 CDN에서 제거하는 방법
- CDN 서비스 사업자가 제공하는 API를 이용하여 콘텐츠 무효화
- 콘텐츠의 다른 버전을 서비스하도록 오브젝트 버저닝(object versioning)이용. 콘텐츠의 새로운 버전을 지정하기 위해서는 URL 마지막에 버전 번호를 인자로 주면 됩니다.
- 예시) image.png?v=2
CDN과 캐시가 추가된 설계
- 정적 콘텐츠(JS, CSS, 이미지 등)는 더 이상 웹 서버를 통해 서비스하지 않으며, CDN을 통해 제공하여 더 나은 성능을 보장합니다.
- 캐시가 데이터베이스 부하를 줄여줍니다.
참조
'System Design' 카테고리의 다른 글
[사용자 수에 따른 규모 확장성] 데이터 센터 (0) | 2021.09.07 |
---|---|
[사용자 수에 따른 규모 확장성] 무상태(stateless) 웹 계층 (0) | 2021.09.07 |
[사용자 수에 따른 규모 확장성] 캐시 (0) | 2021.09.01 |
[사용자 수에 따른 규모 확장성] 수직적 규모 확장 vs 수평적 규모 확장 (0) | 2021.08.31 |
[사용자 수에 따른 규모 확장성] 데이터베이스 (0) | 2021.08.31 |
댓글