Ops-Beginner
article thumbnail
Published 2023. 8. 29. 23:51
CloudFront - (1) AWS
반응형

안녕하세요.

오늘은 CloudFront에 대해서 알아보겠습니다.

CloudFront 무엇인가?

CloudFront는 .html, .css, .js 및 이미지 파일과 같은 정적 및 동적 웹 콘텐츠를 사용자에게 더 빨리 배포하도록 지원하는 웹 서비스입니다.

CloudFront는 엣지 로케이션이라고 하는 데이터 센터의 전 세계 네트워크를 통해 콘텐츠를 제공합니다.

CloudFront를 통해 서비스하는 콘텐츠를 사용자가 요청하면 지연 시간이 가장 낮은 엣지 로케이션으로 요청이 라우팅되므로 가능한 최고의 성능으로 콘텐츠가 제공됩니다.

  • 콘텐츠가 이미 지연 시간이 가장 낮은 엣지 로케이션에 있는 경우 CloudFront가 콘텐츠를 즉시 제공합니다.
  • 콘텐츠가 엣지 로케이션에 없는 경우에는 CloudFront는 콘텐츠의 최종 버전에 대한 소스로 지정된 오리진(Amazon S3 버킷 등)에서 콘텐츠를 검색합니다.

AWS에서 제공하는 이미지

  1. Amazon S3 버킷 or 고유 HTTP 서버와 같은 오리진 서버를 지정하고, CloudFront는 이로부터 파일을 가져온다음 전 세계 CloudFront 엣지 로케이션에 배포합니다. 오리진 서버는 객체의 최종 원본 버전을 저장하고, HTTP를 통해 콘텐츠를 서비스하는 경우 오리진 서버가 Amazon S3 버킷 또는 웹 서버 같은 HTTP 서버입니다. HTTP 서버는 Amazon EC2 인스턴스나 사용자가 관리하는 서버에서 실행할 수 있습니다. 이 서버를 사용자 지정 오리진이라고도 합니다.
  2. 오리진 서버에 파일을 업로드합니다. 객체라고도 하는 파일은 일반적으로 웹 페이지, 이미지 및 미디어 파일을 포함하지만 HTTP를 통해 제공될 수 있는 모든 항목이 될 수 있습니다. S3 버킷을 오리진 서버로 사용할 경우 버킷에 있는 객체를 공개적으로 읽을 수 있는 상태로 만들 수 있으므로 객체의 CloudFront URL을 아는 사람이라면 누구나 액세스할 수 있습니다. 객체를 비공개로 유지하고 액세스를 할 수 있는 사용자를 제어할 수 있는 옵션도 있습니다.
  3. 사용자가 웹 사이트나 애플리케이션을 통해 파일을 요청할 경우 어떤 오리진 서버에서 파일을 가져올지 알려주는 CloudFront 배포를 만듭니다. 동시에 CloudFront에서 모든 요청을 기록할지, 배포를 만들자마자 활성화할지 여부와 같은 세부 사항을 지정합니다.
  4. CloudFront는 새 배포에 도메인이름을 할당하고, 이는 CloudFront가 콘솔에서 볼 수 있습니다. 또는 API 요청 등과 같은 프로그램 요청에 대한 응답으로 반환됩니다. 원하는 경우 대신 사용할 대체 도메인 이름을 추가할 수 있습니다.
  5. CloudFront에서는 배포의 구성을 모든 해당 엣지 로케이션 또는 CloudFront가 파일의 사본을 캐싱하는 지리적으로 분산된 데이터 센터의 POP(Point of Presence) 서버 모음으로 보냅니다.

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

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

 

사용사례

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

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

정적 콘텐츠를 저장하고 전송하기 위한 간단한 방법은 S3를 사용하는 것입니다. S3와 CloudFront를 함께 사용하면 OAI(원본 액세스 ID)를 통해 S3 콘텐츠에 대한 액세스를 쉽게 제한할 수 있으며 이외에도 다양한 장점이 있습니다.

 

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

CloudFront는 전 세계 최종 사용자에게 미디어를 스트리밍하기 위한 몇 가지 옵션을 제공합니다.

  • 온디맨드 비디오(VOD) 스트리밍의 경우 CloudFront를 사용하면 MPEG DASH, Apple HLS, Microsoft Smooth Streaming, CMAF 등과 같은 일반적인 포맷으로 디바이스에 상관없이 스트리밍할 수 있습니다.
  • 라이브 스트림 방송의 경우에는, 엣지에 미디어 조각을 캐싱하여 해당 조각을 올바른 순서로 전송하는 매니페스트 파일에 대한 여러 요청을 결합함으로써 오리진 서버의 부하를 줄일 수 있습니다.

 

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

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

 

엣지에서의 사용자 지정

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

CloudFront에서 Lambda@Edge를 사용하면 CloudFront가 제공하는 콘텐츠를 다양한 방법으로 사용자 지정할 수 있습니다.

 

 

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

CloudFront를 구성한 후에 사용자가 객체를 요청하면 다음과 같은 단계로 진행이 됩니다.

  1. 사용자가 웹 사이트 또는 애플리케이션에 액세스하고 이미지 파일 및 HTML 파일 같은 하나 이상의 객체에 대한 요청을 보냅니다.
  2. DNS가 요청을 최적으로 서비스할 수 있는 CloudFront POP로 요청을 라우팅합니다. 이 위치는 일반적으로 지연 시간과 관련해 가장 가까운 CloudFront POP이며, 요청을 엣지 로케이션으로 라우팅합니다.
  3. CloudFront는 해당 캐시에 요청된 객체가 있는지 확인합니다. 객체가 캐시에 있으면 CloudFront는 객체를 사용자에게 반환합니다. 객체가 캐시에 없으면 CloudFront가 다음을 수행합니다.

        3a. CloudFront는 배포의 사양과 요청을 비교하고 요청을 해당하는 객체로 사용자의 원본 서버에 전달합니다.

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

        3c. 오리진에서 첫 번째 바이트가 도착하면 CloudFront가 객체를 사용자에게 전달하기 시작합니다.

               CloudFront는 다음에 다른 사용자가 객체를 요청할 때 캐시에 해당 객체를 추가합니다.

 

마무리

CloudFront를 AWS Docs에서 제공하는 내용으로 공부해봤습니다.

다소 복잡한 내용인거같지만 사용자에게 더 빨리 콘텐츠를 전달해줄 수있는 좋은 서비스 인거같습니다.

다음에는 테스트 페이지로 설정하는 내용을 가져오겠습니다.

감사합니다.

 

반응형

'AWS' 카테고리의 다른 글

CloudFront - (2)  (0) 2023.08.30
IAM User 만들기  (0) 2023.08.17
EC2로 웹 서버 구축하기 시리즈 - Terraform 편  (0) 2023.08.16
EC2로 웹 서버 구축하기 시리즈 - Console 편  (0) 2023.07.13
profile

Ops-Beginner

@asher_r

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!