기록용으로 작성하였으니 피드백 주시면 감사하겠습니다
Amazon CloudFront
CloudFront는 🌐전 세계의 유저에게 동영상이나 이미지와 같은 콘텐츠를 안정적이고 빠르게 전송가능한 콘텐츠 전송 네트워크(CDN, Content Delivery Network) 서비스이다.
AWS는 전 세계 각지에 엣지 서버(Edge server)가 있기 때문에, 어떤 장소에서의 접근이라도 유연하게 대처 가능하다. 즉 어느 장소에 있는 유저라도 적은 대기시간(low latency)으로 콘텐츠에 접근가능하다.
↓ ↓ 🔍일단 CloudFront에 사용되는 전문 용어 정리하기 ↓ ↓
CDN (Content Delivery Network)
CDN이란 전 세계 사용자에게 빠르고 안전하게 웹 콘텐츠를 전송할 수 있는 콘텐츠 전송 기술을 의미한다.
CDN은 전 세계의 서버 위치를 활용하여 트래픽을 효과적으로 관리한다.
💬 아주 쉬운 예시)
미국 사용자가 한국의 웹사이트에 접속하는 경우 물리적 거리가 아주 멀기 때문에 로딩 시간이 오래걸린다.
이 때 미국 서버를 활용해서 미국 사용자와의 물리적 거리를 최소화 한다.
서버와 사용자 사이의 물리적인 거리를 줄여 콘텐츠 로딩에 소요되는 시간을 최소화한다.
아래의 이미지를 보면 아주 쉽게 이해 가능하다.
CDN의 작동방식
일반적인 경우)
아래와 같이 유저와 서버가 상호작용한다.
위 방식의 문제점)
요청이 많아질 경우 서버의 처리 능력에 한계가 있기 때문에 로딩 시간이 길어지거나 서버가 다운 될 수도 있다.
CDN의 캐시서버는 응답을 대신해준다
CDN의 캐시(Cache)서버를 활용하여 위와 같은 상황의 문제를 해결 할 수 있다.
전세계 각국에 설치되어있는 CDN의 캐시 서버가 유저와 오리진 서버의 중간에 있어서 유저의 응답을 대신해준다.
사용자가 CDN의 캐시서버에 요청을 하면, CDN의 캐시서버는 오리진 서버에 콘텐츠를 요청한다.
이 때 오리진 서버는 CDN의 캐시서버에게 응답하면서 CDN은 캐시서버의 받은 콘텐츠를 캐시(Cache)의 형태로 저장한다. 한번 캐시로 저장하면 그 이후로는 캐시로 저장된 콘텐츠를 유저에게 제공한다.
CDN의 활용 사례
대용량의 데이터 로딩이 필요한 경우 CDN을 활용하는 경우가 많다.
- 전 세계에 배포하는 웹사이트
- 동영상 스티리밍: 유튜브(Youtube), 넷플릭스(Netflix), 아마존 프라임(Amazon Prime).. etc
- 음악 뮤직 스트리밍: 스포티파이(Spotify)
CloudFront 특징
- 전 세계에 분포된 엣지 로케이션을 통해 콘텐츠를 사용자에게 빠르게 전달한다.
- 정적 콘텐츠(이미지, 비디오, CSS, JavaScript 등)와 동적 콘텐츠(API 응답, 사용자 데이터 등)를 캐싱하여 전달 속도를 향상시킵니다.
- TTL(Time-To-Live) 설정을 통해 캐시된 콘텐츠의 유효 기간을 조절할 수 있습니다.
- AWS Shield Standard가 자동으로 기본 제공되어 DDoS 공격으로부터 보호한다.
🔧 엣지 로케이션 (Edge Location)
엣지 로케이션(Edge Location)은 캐시 서버가 있는 거점을 의미한다.
AZ와는 다른 AWS 데이터 센터로, AZ보다 훨씬 더 많이 전 세계에 배치되어 있다.
Amazon CloudFront와 Amazon Route 53 등 일부 글로벌 서비스를 제공하며, AWS Global Accelerator를 사용하여 사용자로부터 리전 서비스로 접근할 때의 통신 경로 역할도 한다.
참고) https://jibinary.tistory.com/112
🔧 CloudFront 작동방식: 데이터 전달 방식
🔧 Distribution (디스트리뷰션)
CloudFront를 사용하려면 먼저 "Distribution"을 생성해야 한다.
디스트리뷰션에서는 오리진 서버나 캐시 등 콘텐츠를 배포하기 위한 다양한 설정을 한다.
디스트리뷰션을 생성하면 CloudFront를 통해 콘텐츠에 접근할 수 있는 URL "http(s)://xxxxxx.cloudfront.net"이 발행된다. URL은 통신 암호화 여부(HTTP/HTTPS)를 선택할 수 있다.
또한, AWS Certificate Manager(서버 인증서를 관리하는 서비스)에서 발행된 서버 인증서를 가져와서 URL에 독자적인 도메인 이름을 사용할 수도 있다.
🔧 캐시 TTL (Time To Live: TTL)
캐시를 유지하는 시간이다. URL 경로마다 지정할 수 있다.
CloudFront는 캐시 TTL이 초과된 후 클라이언트로부터 요청을 받으면 오리진 서버에 콘텐츠가 갱신되었는지 확인하고, 갱신된 경우 캐시에 반영하며 응답을 반환한다.
캐시 TTL을 포함한 캐시 설정을 "캐시 정책"이라고 한다.
Q. 문제
Amazon CloudFront를 사용하는 환경에서 문제가 있었던 콘텐츠를 수정했다. 모든 클라이언트가 최신 콘텐츠를 즉시 참조하게 하려면 어떻게 해야 할까?
정답
Edge Server의 캐시를 삭제하기
🔧 Invalidation (캐시 삭제)
엣지 서버에 저장된 캐시를 즉시 삭제할 수 있는 기능이다.
캐시를 삭제한 후 클라이언트로부터 데이터 요청을 받으면, 엣지 서버는 반드시 오리진 서버에서 콘텐츠를 가져오므로 클라이언트에게 제공되는 콘텐츠가 최신화된다.
삭제할 데이터는 폴더명이나 파일명으로 지정할 수 있다.
🔧 OAC (Origin Access Control)
OAC(Origin Access Control)는 CloudFront가 S3 버킷과 같은 오리진에 안전하게 접근할 수 있도록 제어하는 기능이다.
CloudFront에서 S3 버킷을 원본으로 사용할 때, OAC를 사용하면 S3 버킷이 퍼블릭하게 노출되지 않고 CloudFront를 통해서만 안전하게 접근할 수 있게 만든다.
Q. 문제
어떤 회사가 Amazon S3에 호스팅하여 웹사이트를 설계하고 있습니다.
사용자가 S3 버킷에 있는 자산에 직접 링크를 걸지 못하도록 하려면 어떻게 해야 하나요?
즉, S3 버킷에 있는 파일들이 외부에서 직접 접근되는 것을 방지하고, 오직 웹사이트를 통해서만 자산에 접근할 수 있도록 하려는 방법은??
정답
Amazon CloudFront Distrubute를 생성하고, 원본 액세스 제어(OAC)를 설정한 다음, Bucket Policy을 업데이트하여 OAC에만 권한을 부여한다.