Amazon CloudFront

강재민·2022년 11월 30일
0

AWS 서비스 정복하기

목록 보기
11/16

Amazon CloudFront란 무엇입니까?

Amazon CloudFront는 .html, .css, .js 및 이미지 파일과 같은 정적동적 웹 콘텐츠를 사용자에게 더 빨리 배포하도록 지원하는 웹 서비스입니다. CloudFront는 엣지 로케이션이라고 하는 데이터 센터의 전 세계 네트워크를 통해 콘텐츠를 제공합니다. CloudFront를 통해 서비스하는 콘텐츠를 사용자가 요청하면 지연 시간이 가장 낮은 엣지 로케이션으로 요청이 라우팅되므로 가능한 최고의 성능으로 콘텐츠가 제공됩니다.

콘텐츠가 이미 지연 시간이 가장 낮은 엣지 로케이션에 있는 경우 CloudFront가 콘텐츠를 즉시 제공합니다.

콘텐츠가 엣지 로케이션에 없는 경우 CloudFront는 콘텐츠의 최종 버전에 대한 소스로 지정된 오리진(Amazon S3 버킷, MediaPackage 채널, HTTP 서버(예: 웹 서버) 등)에서 콘텐츠를 검색합니다.

예를 들어, CloudFront가 아닌 일반적인 웹 서버에서 이미지를 제공한다고 가정합니다. 예를 들어 https://example.com/sunsetphoto.png URL을 사용하여 sunsetphoto.png라는 이미지를 서비스할 수 있습니다.

사용자는 이 URL로 쉽게 이동해 해당 이미지를 볼 수 있습니다. 하지만 이미지가 발견될 때까지 인터넷으로 이루어진 상호 연결된 네트워크의 복잡한 모음을 통해 네트워크에서 다른 네트워크로 요청이 라우팅되었다는 사실은 아마도 모르고 있을 것입니다.

CloudFront는 AWS 백본 네트워크를 통해 콘텐츠를 가장 효과적으로 서비스할 수 있는 엣지로 각 사용자 요청을 라우팅하여 콘텐츠 배포 속도를 높입니다. 일반적으로 CloudFront 엣지가 최종 사용자에게 가장 빨리 제공합니다. AWS 네트워크를 사용하면 사용자의 요청이 반드시 통과해야 하는 네트워크의 수가 줄어들어 성능이 향상됩니다. 파일의 첫 바이트를 로드하는 데 걸리는 지연 시간이 줄어들고 데이터 전송 속도가 빨라집니다.

또한 파일(객체라고도 함)의 사본이 전 세계 여러 엣지 로케이션에 유지(또는 캐시)되므로 안정성과 가용성이 향상됩니다.


콘텐츠를 전송하도록 CloudFront를 설정하는 방법


콘텐츠를 전송하도록 CloudFront를 구성하는 방법

  1. Amazon S3 버킷 또는 고유 HTTP 서버와 같은 오리진 서버를 지정하고, CloudFront는 이로부터 파일을 가져온 다음 전 세계 CloudFront 엣지 로케이션에 배포합니다.

오리진 서버는 객체의 최종 원본 버전을 저장합니다. HTTP를 통해 콘텐츠를 서비스하는 경우 오리진 서버가 Amazon S3 버킷 또는 웹 서버 같은 HTTP 서버입니다. HTTP 서버는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스나 사용자가 관리하는 서버에서 실행할 수 있습니다. 이 서버를 사용자 지정 오리진이라고도 합니다.

  1. 오리진 서버에 파일을 업로드합니다. 객체라고도 하는 파일은 일반적으로 웹 페이지, 이미지 및 미디어 파일을 포함하지만 HTTP를 통해 제공될 수 있는 모든 항목이 될 수 있습니다.

Amazon S3 버킷을 오리진 서버로 사용할 경우 버킷에 있는 객체를 공개적으로 읽을 수 있는 상태로 만들 수 있으므로 객체의 CloudFront URL을 아는 사람이라면 누구나 액세스할 수 있습니다. 객체를 비공개로 유지하고 액세스할 수 있는 사용자를 제어할 수 있는 옵션도 있습니다. 서명된 URL과 서명된 쿠키를 사용하여 프라이빗 콘텐츠 제공을(를) 참조하세요.

  1. 사용자가 웹 사이트나 애플리케이션을 통해 파일을 요청할 경우 &CF;에 어떤 오리진 서버에서 파일을 가져올지 알려 주는 CloudFront 배포를 만듭니다. 동시에 CloudFront에서 모든 요청을 기록할지, 배포를 만들자마자 활성화할지 여부와 같은 세부 사항을 지정합니다.

  2. CloudFront는 새 배포에 도메인 이름을 할당하고, 이는 CloudFront 콘솔에서 볼 수 있습니다. 또는 API 요청 등과 같은 프로그램 요청에 대한 응답으로 반환됩니다. 원하는 경우 대신 사용할 대체 도메인 이름을 추가할 수 있습니다.

  3. CloudFront에서는 배포의 구성(사용자의 콘텐츠가 아님)을 모든 해당 엣지 로케이션 또는 CloudFront가 파일의 사본을 캐싱하는 지리적으로 분산된 데이터 센터의 POP(Point of Presence) 서버 모음으로 보냅니다.

웹 사이트 또는 애플리케이션을 개발할 경우 CloudFront가 URL에 제공하는 도메인 이름을 사용합니다. 예를 들어, CloudFront가 d111111abcdef8.cloudfront.net을 배포의 도메인 이름으로 반환할 경우 Amazon S3 버킷(또는 HTTP 서버의 루트 디렉터리)에 있는 logo.jpg의 URL이 https://d111111abcdef8.cloudfront.net/logo.jpg가 됩니다.

또는 CloudFront를 설정하여 고유한 도메인 이름을 배포와 사용할 수도 있습니다. 이 경우 URL이 https://www.example.com/logo.jpg가 될 수 있습니다.

또는 파일에 머리글을 추가하도록 오리진 서버를 구성할 수 있습니다. 이는 CloudFront 엣지 로케이션의 캐시에 파일을 얼마나 오래 보관할지 나타냅니다. 기본적으로 각 파일은 만료되기 전에 24시간 동안 엣지 로케이션에 남아 있습니다. 최소 만료 시간은 0초이며, 최대 만료 시간은 없습니다. 자세한 내용은 콘텐츠가 캐시에 유지되는 기간(만료) 관리 단원을 참조하세요.


CloudFront 사용 사례

CloudFront를 사용하면 다양한 목표를 달성할 수 있습니다. 이 단원에서는 이에 대한 정보를 몇 가지 설명하고 추가 정보에 대한 링크를 제공합니다.


정적 웹 사이트 콘텐츠 전송 속도 향상

CloudFront는 전 세계 최종 사용자에게 제공되는 정적 콘텐츠(이미지, 스타일 시트, JavaScript 등)의 전송 속도를 높일 수 있습니다. CloudFront를 사용하면 AWS 백본 네트워크CloudFront 엣지 서버의 장점을 활용하여 해당 웹 사이트를 방문하는 뷰어에게 빠르고 안전하며 신뢰할 수 있는 환경을 제공할 수 있습니다.

정적 콘텐츠를 저장하고 전송하기 위한 간단한 방법은 Amazon S3 버킷을 사용하는 것입니다. S3와 CloudFront를 함께 사용하면 오리진 액세스 제어를 통해 S3 콘텐츠에 대한 액세스를 쉽게 제한할 수 있으며 이외에도 다양한 장점이 있습니다.

빠른 시작을 도와주는 AWS CloudFormation 템플릿을 비롯해 CloudFront와 S3를 함께 사용하는 방법에 대한 자세한 내용은 Amazon S3 + Amazon CloudFront: A Match Made in the Cloud 섹션을 참조하세요.


온디맨드 비디오 또는 라이브 스트리밍 비디오 제공

CloudFront는 전 세계 최종 사용자에게 미디어(녹화 파일 및 라이브 이벤트)를 스트리밍하기 위한 몇 가지 옵션을 제공합니다.

온디맨드 비디오(VOD) 스트리밍의 경우 CloudFront를 사용하면 MPEG DASH, Apple HLS, Microsoft Smooth Streaming, CMAF 등과 같은 일반적인 포맷으로 디바이스에 상관없이 스트리밍할 수 있습니다.

라이브 스트림 방송의 경우에는, 엣지에 미디어 조각을 캐싱하여 해당 조각을 올바른 순서로 전송하는 매니페스트 파일에 대한 여러 요청을 결합함으로써 오리진 서버의 부하를 줄일 수 있습니다.


시스템 처리를 통해 특정 필드 암호화

CloudFront에서 HTTPS를 구성할 경우 오리진 서버에 대한 종단 간 연결의 보안이 보장됩니다. 파일 수준 암호화를 추가하는 경우, HTTPS 보안뿐 아니라 시스템 처리 전체에서 특정 데이터를 보호함으로써 오리진의 특정 애플리케이션만 데이터를 보게 할 수 있습니다.

필드 레벨 암호화를 설정하려면 CloudFront에 퍼블릭 키를 추가한 후 이 키를 사용하여 암호화하려는 필드 세트를 지정합니다. 자세한 내용은 필드 레벨 암호화 사용으로 민감한 데이터 보호 단원을 참조하세요.


엣지에서의 사용자 지정

엣지에서 서버리스 코드를 실행하면 지연 시간을 최소화하면서 다양한 방식으로 최종 사용자에 대한 콘텐츠와 환경을 사용자 지정할 수 있습니다. 예를 들어 오리진 서버가 유지보수를 위해 다운된 경우 최종 사용자에게 일반 HTTP 오류 메시지를 표시하는 대신 사용자 지정 오류 메시지를 표시할 수 있습니다. 또는 함수를 사용하여 CloudFront오리진으로 요청을 전송하기 전사용자를 인증하고 콘텐츠에 대한 액세스를 제어할 수 있습니다.

CloudFront에서 Lambda@Edge를 사용하면 CloudFront가 제공하는 콘텐츠를 다양한 방법으로 사용자 지정할 수 있습니다. Lambda@Edge에 대한 자세한 내용과 CloudFront를 사용하여 함수를 생성하고 배포하는 방법을 알아보려면 Lambda@Edge를 사용하여 엣지에서 사용자 지정 단원을 참조하십시오. 해당 솔루션에 맞게 사용자 지정할 수 있는 다양한 코드 샘플을 보려면 Lambda@Edge 예제 함수 단원을 참조하십시오.


CloudFront에서 콘텐츠를 제공하는 방법

초기 설정 후에 CloudFront는 해당 웹 사이트나 애플리케이션과 상호 작용하여 콘텐츠 전송 속도를 높입니다. 이 단원에서는 최종 사용자가 콘텐츠를 요청할 때 CloudFront가 콘텐츠를 어떻게 제공하는지를 설명합니다.


CloudFront에서 사용자에게 콘텐츠를 제공하는 방법

콘텐츠를 제공하도록 CloudFront를 구성한 후에 사용자가 객체를 요청하면 다음과 같은 결과를 얻습니다.

  1. 사용자가 웹 사이트 또는 애플리케이션에 액세스하고 이미지 파일 및 HTML 파일 같은 하나 이상의 객체에 대한 요청을 보냅니다.

  2. DNS가 요청을 최적으로 서비스할 수 있는 CloudFront POP(엣지 로케이션)로 요청을 라우팅합니다. 이 위치는 일반적으로 지연 시간과 관련해 가장 가까운 CloudFront POP이며, 요청을 엣지 로케이션으로 라우팅합니다.

  3. CloudFront는 해당 캐시요청된 객체가 있는지 확인합니다. 객체가 캐시에 있으면 CloudFront는 객체를 사용자에게 반환합니다. 객체가 캐시에 없으면 CloudFront가 다음을 수행합니다.

    a. CloudFront는 배포의 사양요청을 비교하고 요청을 해당하는 객체로 사용자의 원본 서버(예: Amazon S3 버킷 또는 HTTP 서버)에 전달합니다.

    b. 원본 서버는 객체를 다시 엣지 로케이션으로 보냅니다.

    c. 오리진에서 첫 번째 바이트가 도착하면 CloudFront가 객체를 사용자에게 전달하기 시작합니다. CloudFront는 다음에 다른 사용자가 객체를 요청할 때 캐시에 해당 객체를 추가합니다.


CloudFront에서 리전 에지 캐시를 사용하는 방식

CloudFront 상호 접속 위치(POP 또는 엣지 로케이션이라고도 함)는 많이 사용되는 콘텐츠를 최종 사용자에게 빠르게 제공할 수 있도록 합니다. CloudFront에는 또한 리전 엣지 캐시가 있어 POP에 있을 정도로 많이 사용되는 콘텐츠가 아닌 경우에도 최종 사용자가 보다 많은 콘텐츠를 가까이에서 액세스할 수 있도록 하여 콘텐츠의 성능을 개선하는 데 도움을 줍니다.

리전 엣지 캐시는 모든 유형의 콘텐츠, 특히 시간이 지나면서 점차 사용되지 않게 되는 콘텐츠에 유용합니다. 이러한 콘텐츠의 예로는 동영상, 사진 또는 아트워크와 같은 사용자 생성 콘텐츠, 제품 사진 및 동영상과 같은 전자 상거래 자산, 갑자기 사용자가 많아질 수 있는 뉴스 및 이벤트 관련 콘텐츠 등이 있습니다.

리전 캐시 작동 방식

리전 엣지 캐시는 최종 사용자가 쉽게 접할 수 있도록 전역으로 배포되는 CloudFront 위치입니다. 최종 사용자에게 콘텐츠를 직접 제공하는 전역 엣지 로케이션인 POP원본 서버 사이에 위치합니다. 객체의 사용도가 떨어지면 개별 POP가 이러한 객체를 제거하여 보다 많이 사용되는 콘텐츠가 해당 공간을 사용하도록 합니다. 리전 엣지 캐시는 개별 POP보다 캐시가 더 큽니다. 따라서 객체가 가장 가까운 리전 엣지 캐시 위치에 더 오래 캐시 상태로 유지됩니다. 따라서 더 많은 콘텐츠를 최종 사용자와 가까운 거리가 유지할 수 있으므로 CloudFront가 오리진 서버로 돌아가야 할 필요성이 줄어들고 최종 사용자를 위한 전반적인 성능도 향상됩니다.

최종 사용자가 웹 사이트나 애플리케이션을 통해 요청하면, DNS는 이 요청을 사용자의 요청을 가장 잘 처리할 수 있는 POP로 라우팅합니다. 일반적으로 지연 시간을 기준으로 가장 가까운 CloudFront 엣지 로케이션이 여기에 해당합니다. POP에서 CloudFront는 해당 캐시에 요청된 객체가 있는지 확인합니다. 객체가 캐시에 있으면 CloudFront는 객체를 사용자에게 반환합니다. 객체가 캐시에 없으면, 일반적으로 POP가 가장 가까운 리전 엣지 캐시로 이동하여 객체를 가져옵니다. POP가 리전 엣지 캐시를 건너뛰고 오리진으로 직접 이동하는 경우에 대한 자세한 내용은 다음 참고 사항을 참조하세요.

만약 캐시되지 않은 객체에 대해서 다수의 사용자동시에 요청을 할 경우, PoPs는 중복된 객체에 대한 요청을 대기시켜놓고 한 개의 요청에 대해서 오리진을 통해 가져옵니다. 그리고 객체를 캐시하고 이후 모든 요청에 대해서 처리하게됩니다.


CloudFront 요금

AWS는 CloudFront에 대해 두 가지 사용 보고서를 제공합니다. 결제 보고서와 사용 활동을 요약하는 보고서입니다. 이러한 보고서에 대한 자세한 내용은 CloudFront에 대한 AWS 결제 및 사용 보고서 단원을 참조하십시오.

다음 다이어그램과 목록에는 CloudFront를 사용하는 데 드는 요금이 요약되어 있습니다.

AWS에서 보내는 월 청구서에는 AWS 서비스와 기능에 따라 사용량 및 달러 액수가 구분되어 있습니다. 다음에는 이전 그림에 설명된 요금이 나열되어 있습니다. 요금에 대한 자세한 내용은 Amazon CloudFront 요금을 참조하세요.

  1. Amazon S3 버킷에서의 스토리지에 대한 요금. 버킷에 객체를 보관하는 데 일반 Amazon S3 스토리지 요금을 지불합니다. 요금은 AWS 청구서의 Amazon S3 부분에 표시됩니다.

  2. 엣지 로케이션에서 객체 서비스에 대한 요금. CloudFront가 객체에 대한 요청에 응답할 때 CloudFront 요금이 발생합니다. 요금에는 WebSocket 데이터의 서버에서 클라이언트로의 전송에 따른 금액이 포함됩니다. CloudFront 요금은 AWS 청구서의 CloudFront 부분에 리전 -DataTransfer-Out-Bytes로 표시됩니다.

  3. 데이터 제출에 대한 요금. 사용자가 DELETE, OPTIONS, PATCH, POST 및 PUT 요청을 포함하는 데이터를 오리진 또는 엣지 함수에 전송할 경우 CloudFront 요금이 발생합니다. 요금에는 WebSocket 데이터의 클라이언트에서 서버로의 전송에 따른 금액이 포함됩니다. CloudFront 요금은 AWS 청구서의 CloudFront 부분에 리전 -DataTransfer-Out-OBytes로 표시됩니다.

다음에 유의하십시오.

HTTPS 요청에 대한 추가 요금과 필드 수준 암호화가 활성화된 요청 또는 Origin Shield를 증분 캐싱 계층으로 사용하는 요청에 대한 추가 요금도 발생합니다. 요금에 대한 자세한 내용은 Amazon CloudFront 요금을 참조하세요.

오리진 그룹을 사용할 때에는 추가적인 CloudFront 요금이 발생하지 않습니다. CloudFront를 다른 AWS 또는 비 AWS 오리진과 함께 사용할 때와 동일한 요청 수수료 및 데이터 전송 요금을 계속 지불하게 됩니다. 자세한 정보는 CloudFront 오리진 그룹 사용을 참조하십시오.

때문에 CloudFront는 비 aws 오리진과 연동이 가능은 하지만 권장하고 있지는 않습니다.


CloudFront Security Savings Bundle

CloudFront Security Savings Bundle은 선불 약정 시 AWS 청구서의 CloudFront 요금을 최대 30% 절감할 수 있는 간단한 방법입니다. Savings Bundle을 구매하면 일반적인 웹 공격으로부터 CloudFront 배포를 보호하는 웹 애플리케이션 방화벽인 AWS WAF에 대한 크레딧도 받게 됩니다.


Savings Bundle 개요

CloudFront Security Savings Bundle의 적용 방식은 다음과 같습니다.

  1. Savings Bundle을 구매하려면 CloudFront에 대해 1년간 일정 금액의 월간 요금(USD)을 약정해야 합니다. Savings Bundle을 구매한 결제 기간부터 12개월 동안 매월 약정한 금액이 청구됩니다. 결제 기간의 마지막 날에 Savings Bundle을 구매할 경우 청구 및 크레딧은 다음 결제 기간부터 시작됩니다.

  2. 약정에 대한 대가로 CloudFront는 1년 기간의 12회 결제 기간마다 AWS 청구서에 크레딧을 자동으로 적용합니다. 이러한 크레딧의 가치는 약정 결제 금액보다 높기 때문에 약정 금액의 CloudFront 표준 요금이 최대 30% 할인됩니다. 이러한 크레딧은 AWS 청구서의 CloudFront 요금을 자동으로 상쇄합니다. 자세한 예는 다음 섹션을 참조하세요.

한 마디로 지불한 금액을 크레딧으로 바꿔주고 해당 크레딧의 효율이 지불한 금액보다 좋기 때문에 할인이 되는 원리임.

  1. CloudFront 크레딧 외에 를 사용하는 데 따른 요청당 요금을 상쇄하는 크레딧도 받습니다. AWS WAF 크레딧 금액은 월별 CloudFront 약정 금액의 최대 10%입니다. CloudFront에서 AWS WAF를 사용하는 자세한 방법은 AWS WAF를 사용하여 콘텐츠에 대한 액세스 제어를 참조하세요.

Savings Bundle 예시

CloudFront 사용 요금이 일반적으로 매월 600 USD인 시나리오를 가정해 보겠습니다. CloudFront Security Savings Bundle을 최대한 활용하려면 1년 동안 매달 420 USD의 CloudFront 요금을 약정해야 합니다. 이는 일반적인 사용 요금보다 30% 저렴합니다(600 USD x 0.7). 이 약정에 대한 대가로 CloudFront는 향후 12개 결제 기간 동안 매달 AWS 청구서의 CloudFront 요금에 적용되는 600 USD의 크레딧을 제공합니다. 이러한 크레딧은 CloudFront 요금에 자동으로 적용되며, 이 요금은 청구서에 표준 요금으로 계속 표시됩니다. 실제로는 월간 CloudFront 사용 요금 600 USD에 대해 420 USD만 비용을 지불합니다.

또한 CloudFront 배포에서 AWS WAF를 사용하는 AWS WAF 요청 요금을 상쇄하기 위해 42 USD의 AWS WAF 크레딧을 받게 됩니다.

월간 420 USD의 약정 금액으로 CloudFront Security Savings Bundle을 구매하면 연간 총 절감액은 최대 2,664 USD입니다.


Savings Bundle 구매

는 알아서 ..


CloudFront 배포의 가격 등급 선택


한 마디로 돈을 더 주면 더 많은 PoPs 를 활용할 수 있다. 그럼 사용자위치에 더 가까운 PoPs를 사용할 수 있는 확률이 올라간다고 보면됨

0개의 댓글