CloudFront — 엣지 CDN
CloudFront — 엣지 CDN
정적 파일·동영상·API 응답을 사용자 가까이에 캐시해 두면 응답이 빨라지고 원본 서버의 부담이 줄어듭니다. 이 일을 전세계 분산 엣지에서 처리하는 서비스가 CDN (Content Delivery Network) 입니다.
1. CloudFront 에 대한 이야기
| 시기 | 사건 |
|---|---|
| 2008 | CloudFront 출시. |
| 2014 | HTTPS · 사용자 정의 인증서. |
| 2017 | Lambda@Edge · HTTP/2. |
| 2020 | Origin Shield. |
| 2021 | CloudFront Functions. |
전 세계 PoP (Point of Presence) 에서 콘텐츠를 캐시·전달합니다. 600+ PoP, 90+ 도시 정도가 자주 거론됩니다.
핵심 객체:
- Distribution — 도메인 + 동작 + Origin 의 묶음.
- Origin — 콘텐츠의 원본 (S3 · ALB · EC2 · 외부 HTTP).
- Behavior — URL 패턴별 처리 규칙.
- Cache Policy · Origin Request Policy · Response Headers Policy — 분리된 정책 객체.
2. 캐시 키
요청을 캐시에서 찾을 때 사용하는 키. 기본은 URL. Cache Policy 에서 추가로 헤더·쿠키·쿼리 파라미터를 캐시 키에 포함시킬 수 있습니다.
캐시 키에 포함될수록 캐시 적중률이 떨어집니다. 같은 URL 이라도 헤더가 다르면 다른 객체로 취급되기 때문. 정말 필요한 항목만 키에 포함합니다.
3. TTL 과 Cache-Control
CloudFront 는 두 신호를 함께 봅니다:
- Origin 응답의
Cache-Control: max-age또는Expires헤더. - Distribution 의 Cache Policy 의 Min/Default/Max TTL.
Cache-Control: public, max-age=86400 같이 Origin 이 명시한 값이 우선되는 자리가 흔합니다. Cache-Control: no-cache, no-store, private 같은 응답은 캐시에 담기지 않습니다.
4. Invalidation
이미 캐시된 객체를 강제로 무효화. 경로 패턴 (/static/*) 으로 일괄 가능. 매 달 1000 경로 무료 + 추가 과금.
aws cloudfront create-invalidation \
--distribution-id E1XXXX \
--paths "/index.html" "/static/*"
운영에서는 invalidation 보다 버전화된 파일명 (app.abc123.js) 으로 캐시를 우회하는 흐름이 권장됩니다. 이전 버전 파일도 그대로 두면 롤백·점진 배포가 자연스럽습니다.
5. 엣지 컴퓨트
Lambda@Edge — Lambda 함수를 PoP 가까이에서 실행. 4 가지 트리거 (Viewer Request · Origin Request · Origin Response · Viewer Response). 헤더 변형 · 인증 · A/B 분기 · 이미지 처리. 콜드 스타트와 메모리 한계가 있습니다.
CloudFront Functions — 훨씬 가벼운 JS 런타임. 매우 짧은 헤더 변형 · URL 재작성 같은 자리. Lambda@Edge 보다 비용·지연이 낮습니다 (메모리·실행 시간 더 엄격, 2 MB · 1 ms).
function handler(event) {
const req = event.request;
if (!req.uri.endsWith('/') && !req.uri.includes('.')) {
req.uri += '.html';
}
return req;
}
6. 보안 통합
Signed URL · Signed Cookie — CloudFront 키페어로 서명한 URL · 쿠키만 접근 허용. 시간 · IP 제한 가능. 비공개 콘텐츠 (영상 스트리밍 · 다운로드) 자리.
OAC (Origin Access Control) — S3 origin 의 직접 접근을 막고 CloudFront 만 통과하게. 옛 OAI 의 후속 (2022). 버킷 정책에 CloudFront distribution ARN 만 허용.
WAF · Shield — AWS WAF 를 CloudFront 앞에 부착 (SQL 인젝션 · XSS · rate-based). Shield Standard 는 모든 사용자에게 무료 자동 적용 DDoS 방어.
7. 다른 CDN 비교
| CDN | 등장 | 메모 |
|---|---|---|
| Akamai | 1998 | 가장 오래된 상용 CDN. 엔터프라이즈. |
| Cloudflare | 2010 | 무료 티어 강력. WAF · DDoS · Workers. |
| Fastly | 2011 | VCL 기반 강력한 캐싱 제어. 인스턴트 invalidation. |
| CloudFront | 2008 | AWS 통합. 결제 · IAM 자연. |
| Bunny.net | 2017 | 가격 단순 · 저렴. 신생. |
선택 결정 요인:
- AWS 위주 인프라 — CloudFront.
- 무료 티어 · DDoS 보호 — Cloudflare.
- 인스턴트 캐시 무효화 — Fastly (수 초 단위).
- 단순한 가격 — Bunny.net.
8. S3 + CloudFront 정적 사이트
사용자 → CloudFront (HTTPS · 캐시) → S3 (private, OAC) → 콘텐츠
- ACM 인증서로 사용자 정의 도메인.
default_root_object = "index.html".- SPA 라면 404 →
/index.html200 으로 변환 (CloudFront Functions 또는 Custom Error Responses).
비용 구조:
- Data Transfer Out — 리전 · 사용자 위치별 GB 단가.
- Request 수 — HTTP · HTTPS 별 단가.
- Lambda@Edge · Functions — 호출 수 · 실행 시간.
엣지 → 사용자 트래픽이 비용의 대부분.
9. 자주 걸리는 자리
잘못된 캐시 키 — 사용자별 토큰을 캐시 키에 넣으면 적중률이 0 에 가까워집니다.
Origin 의 Cache-Control 누락 — Origin 이 캐시 헤더를 안 보내면 의도치 않은 TTL 적용. Origin 쪽 응답 명시.
OAC 누락 — S3 origin 이 public 으로 노출된 채 CloudFront 도 같이 사용 → 우회 가능. OAC + Block Public Access.
invalidation 의존 — 매 배포마다 invalidation 을 거는 흐름은 비싸지고 느려집니다. 버전화된 파일명으로 대체.
Lambda@Edge 의 글로벌 배포 — 함수 변경이 모든 PoP 에 전파되는 데 시간이 걸립니다.
Cookie 의 캐시 영향 — 쿠키 전달 정책을 잘못 설정하면 캐시 적중률이 급락.
하고픈 말
CDN 의 핵심은 캐시 키 설계입니다. 적중률이 떨어지면 origin 부담이 그대로 — CDN 의 의미가 사라집니다. 작은 운영은 Cloudflare 무료 티어, AWS 위주 인프라는 CloudFront, 인스턴트 무효화가 필요한 자리는 Fastly 가 자연스러운 자리입니다.
Next
- lambda
- route53
CloudFront 사용자 가이드 · Lambda@Edge · CloudFront Functions · Cloudflare · Fastly · Bunny.net · RFC 9111 HTTP Caching 을 참고합니다.