Amazon CloudFront는 글로벌 콘텐츠 전송 네트워크(CDN) 서비스입니다. 이 서비스는 사용자에게 콘텐츠를 빠르게 전달하기 위해 전 세계에 분산된 서버 네트워크를 사용합니다. CloudFront는 웹페이지, 이미지, 동영상 등 다양한 웹 자원을 끝 사용자에게 빠르게 전달합니다.
1. Origin (원본)
실제 컨텐츠가 존재하는 서버 (S3, EC2 등)
2. Distribution (배포)
loudFront의 CDN 구분 단위로 여러 엣지 로케이션으로 구성된 컨텐츠 제공 채널
3. Behavior (동작)
프로토콜, 캐싱 정책, 로그 등 어떻게 컨텐츠를 클라이언트에게 전달할지 설정
4. Edge Location(POP, 엣지 로케이션)
데이터를 가장 빠른 속도로 제공하기 위한 거점
CloudFront는 전 세계에 걸쳐 수십 개의 데이터 센터(엣지 로케이션)를 보유하고 있어 사용자가 어디에 있든지 가까운 위치에서 콘텐츠를 받아볼 수 있습니다. 이는 콘텐츠 로딩 시간을 줄여줍니다.
AWS의 보안 기능과 통합되어 DDoS 공격 방어, SSL/TLS 암호화, 그리고 선택적으로 사용자 정의 가능한 보안 정책을 제공하여 콘텐츠와 애플리케이션을 보호합니다.
클라이언트에게 보여줄 컨텐츠의 원본이 있는 거점입니다.
Origin 크게 두가지의 종류가 있습니다. S3가 아니면 다 Custom Origin 입니다.
S3에는 다양한 기능을 추가적으로 제공하고 Custom Origin에서는 Origin을 그룹화 하여 Failover에도 대응할 수 있습니다.
Origin Group으로 요청할때 Primary, Secondary에서 모두 실패할 경우 따로 커스텀 에러페이지도 생성이 가능합니다.
Regional Edge Cache
Edge Location의 상위 단위로 좀 더 큰 캐싱 거점
실제 CloudFront는 2티어로 이루어져 있고 Edge Location에서 바로 원본으로 접속하는것이 아니라 Regional Edge Cache을 거쳐 2단계 캐싱이 됩니다. (1:N:M)
CloudFront에서 캐싱되는 데이터들은 고유의 CacheKey 단위로 캐시됩니다.
주요 구성 요소
1. Path
2. Query String
3. HTTP Header
4. Cookie
위와 같은 여러 요소로 Cache Key를 만들어 데이터가 캐싱됩니다.
헤더 명은 대소문자를 구분하지 않지만 값은 대소문자를 구분합니다.
캐시된 오브젝트는 일정기간 (TTL) 이후 만료됩니다.
만료된 이후 요청이 올 경우 CloudFront는 Origin에 오브젝트가 갱신이 되었는지 확인합니다.
Origin이 304 Not Modified를 줄 경우 갱신하지 않음
Origin이 200 ok와 오브젝트를 줄 경우 갱신
Cache 오브젝트를 얼마나 오래 보관할지 설정합니다.
기본 24시간동안 Cache를 유지하고 있고 모든 CloudFront의 오브젝트에 적용됩니다.
파일 단위에서는 Origin에서 Cache-Control 헤더 혹은 Expires 헤더를 포함해서 조절이 가능합니다. 즉 얼마나 오래 오브젝트를 캐시하는지 기간을 설정합니다.
Cache-Control: max-age=3600
1. max-age:
CloudFront 캐시와 브라우저 캐시에 둘 다 영향
2. s-maxage:
CloudFront만 영향
3. no-cache, no-store:
캐싱하지 않음 (단 Min TTL이 0이상일 경우 Min TTL로 최저 설정 (10초))
4. Expires:
Cache가 만료되는 정확한 시간을 설정
Cache Behavior란 CloudFront의 요청이 어떻게 처리되는지 정의하는 다양한 설정입니다.
경로 패턴 단위로 Behavior를 구성할 수 있습니다.
(files/*
, files/*.png
, *.png
)
경로 패턴 목록 중 처음으로 매칭된 패턴의 Behavior를 적용합니다.
즉 CloudFront에 CacheKey와 오브젝트가 캐싱될때 CacheKey를 맞춤설정 할 수 있습니다.
클라이언트가 오브젝트를 요청해 CloudFront에서 Origin으로 요청이 전달될 때 Origin Request Policy를 설정해주지 않는다면 CacheKey로 설정되지 않은 내용들은 전부 사라져 버립니다. 그렇기 때문에 Origin Request Policy 설정해주면 됩니다.
응답 과정에서 어떤 HTTP Header를 제거하거나 더할지 설정
reference:
- https://www.jerrychang.ca/writing/amazon-cloudfront-an-overview-of-policies
- [Youtube] AWS 강의실 - Amazon Cloud 완벽정리
- https://trackit.io/cloudfront-functions-vs-lambdaedge/
- 메인 이미지 출처 : https://real-dongsoo7.tistory.com/86