CloudFront 캐싱 최적화: 성능을 극대화하는 방법
Amazon CloudFront 캐시 정책, TTL 설정, 압축 구성으로 웹 성능을 극대화하는 방법을 알아봅니다.
관련 시험 도메인
- Domain 3: Design High-Performing Architectures
핵심 요약 (BLUF)
CloudFront 성능 최적화의 핵심은 캐시 적중률(Cache Hit Ratio)을 높이는 것입니다. 적절한 TTL 설정, 캐시 키 최소화, 압축 활성화, Origin Shield 사용으로 오리진 부하를 줄이고 사용자 응답 속도를 개선하세요.
시험 팁
시험 핵심: "캐시 적중률 높이기 = 캐시 키 최소화 + 적절한 TTL + 동일한 콘텐츠에 동일한 URL"
CloudFront는 어떻게 동작할까?
CloudFront는 전 세계 450개 이상의 엣지 로케이션에서 콘텐츠를 캐싱하여 사용자와 가장 가까운 위치에서 응답합니다.
[사용자 요청]
│
▼
┌────────────────┐
│ Edge Location │ ─── 캐시 HIT → 즉시 응답 (빠름)
│ (서울) │
└────────────────┘
│
│ 캐시 MISS
▼
┌────────────────┐
│ Origin Shield │ ─── 캐시 HIT → 오리진 보호
│ (선택) │
└────────────────┘
│
│ 캐시 MISS
▼
┌────────────────┐
│ Origin │ ─── S3, ALB, EC2 등
│ (오리진 서버) │
└────────────────┘
캐시 적중률이 중요한 이유
| 캐시 적중률 | 효과 |
|---|---|
| 높음 (90% 이상) | 오리진 부하 감소, 비용 절감, 빠른 응답 |
| 낮음 (50% 미만) | 오리진 과부하, 높은 비용, 느린 응답 |
시험 팁
CloudWatch 지표: CacheHitRate로 캐시 적중률을 모니터링하세요.
캐시 정책 (Cache Policy) 이해하기
캐시 정책은 캐시 키에 포함할 값과 TTL 설정을 정의합니다.
캐시 키(Cache Key)란?
캐시 키는 CloudFront가 요청을 캐시에서 찾을 때 사용하는 식별자입니다.
기본 캐시 키: URL 경로 + 쿼리 문자열
예시:
/images/logo.png → 캐시 키 A
/images/logo.png?v=1 → 캐시 키 B (다른 객체로 취급!)
캐시 키 최소화가 중요한 이유
캐시 키에 포함되는 값이 많을수록 캐시 적중률이 낮아집니다.
| 캐시 키에 포함 | 결과 |
|---|---|
| 모든 헤더 | ❌ 매우 낮은 적중률 |
| 모든 쿠키 | ❌ 사용자마다 다른 캐시 |
| 불필요한 쿼리 문자열 | ❌ 같은 콘텐츠가 다르게 캐싱 |
| 최소한의 값 | ✅ 높은 적중률 |
관리형 캐시 정책
AWS는 일반적인 사용 사례에 맞는 관리형 캐시 정책을 제공합니다:
| 정책 이름 | 용도 | TTL |
|---|---|---|
| CachingOptimized | 정적 콘텐츠 (권장) | 기본 24시간, 최대 1년 |
| CachingDisabled | 캐싱 비활성화 | 0 |
| Elemental-MediaPackage | 미디어 스트리밍 | - |
시험 팁
정적 콘텐츠: CachingOptimized 정책 사용 동적 콘텐츠: CachingDisabled + Origin Request Policy
TTL(Time To Live) 최적화
TTL은 캐시된 객체가 유효한 시간을 결정합니다.
TTL 설정 우선순위
1. 오리진의 Cache-Control/Expires 헤더
2. CloudFront 캐시 정책의 Min/Max/Default TTL
콘텐츠 유형별 권장 TTL
| 콘텐츠 유형 | 권장 TTL | 이유 |
|---|---|---|
| 정적 자산 (JS, CSS, 이미지) | 1년 (31536000초) | 파일명에 해시 포함 시 |
| HTML 페이지 | 5분~1시간 | 자주 변경될 수 있음 |
| API 응답 | 0~60초 | 실시간성 요구 |
| 비디오/오디오 | 1일~1주 | 크기가 크므로 캐싱 효과 높음 |
Cache-Control 헤더 설정
오리진에서 직접 TTL을 제어할 수 있습니다:
# 1년 캐싱 (정적 자산)
Cache-Control: max-age=31536000, public
# 캐싱 금지 (동적 콘텐츠)
Cache-Control: no-cache, no-store, must-revalidate
# 5분 캐싱 + 재검증
Cache-Control: max-age=300, must-revalidate
캐시 무효화 (Invalidation)
콘텐츠가 변경되었을 때 캐시를 강제로 갱신하는 방법입니다.
무효화 방법
# AWS CLI로 무효화
aws cloudfront create-invalidation \
--distribution-id E1234567890ABC \
--paths "/images/*" "/css/*"
무효화 비용
| 항목 | 비용 |
|---|---|
| 월 1,000개 경로 | 무료 |
| 추가 경로당 | $0.005 |
무효화 vs 버전 관리
| 방법 | 장점 | 단점 |
|---|---|---|
| 무효화 | 즉시 적용 | 비용 발생, 전파 시간 |
| 버전 관리 | 즉시 적용, 비용 없음 | URL 변경 필요 |
버전 관리 예시:
/css/style.css → /css/style.abc123.css (해시 포함)
시험 팁
베스트 프랙티스: 정적 자산은 파일명에 해시를 포함하고 긴 TTL 사용. 무효화는 긴급 상황에만.
압축 (Compression) 활성화
CloudFront는 Gzip과 Brotli 압축을 지원합니다.
압축 효과
| 파일 유형 | 원본 크기 | Gzip | Brotli |
|---|---|---|---|
| JavaScript | 100KB | 30KB | 25KB |
| CSS | 50KB | 12KB | 10KB |
| HTML | 80KB | 20KB | 16KB |
압축 설정
캐시 동작에서 압축을 활성화합니다:
- CloudFront 콘솔 → 배포 → 동작 편집
- Compress objects automatically 활성화
- 캐시 정책에서
EnableAcceptEncodingGzip,EnableAcceptEncodingBrotli활성화
시험 팁
압축은 텍스트 기반 콘텐츠(HTML, CSS, JS, JSON)에 효과적. 이미 압축된 파일(JPEG, PNG, ZIP)에는 적용하지 마세요.
Origin Shield 활용
Origin Shield는 추가 캐싱 레이어로, 오리진 부하를 더욱 줄여줍니다.
일반 구성:
[사용자] → [Edge Location] → [Origin] (많은 요청)
Origin Shield 구성:
[사용자] → [Edge Location] → [Origin Shield] → [Origin] (적은 요청)
Origin Shield 선택 기준
| 상황 | Origin Shield 권장 |
|---|---|
| 글로벌 사용자 + 단일 오리진 | ✅ 강력 권장 |
| 오리진 비용이 높음 (EC2, Lambda) | ✅ 권장 |
| 이미 Multi-Region 오리진 | ⚠️ 선택적 |
Origin Shield 리전 선택
오리진과 가장 가까운 리전을 선택하세요:
- S3 버킷이 ap-northeast-2 → Origin Shield도 ap-northeast-2
- ALB가 us-east-1 → Origin Shield도 us-east-1
SAA-C03 시험 출제 포인트
- ✅ 캐시 적중률 향상: "캐시 키 최소화, 불필요한 헤더/쿠키 제외"
- ✅ TTL 전략: "정적 자산은 긴 TTL + 버전 관리"
- ✅ Origin Shield: "오리진 부하 감소, 글로벌 사용자 대상"
- ✅ 압축: "텍스트 기반 콘텐츠에 Gzip/Brotli 활성화"
- ✅ 무효화: "긴급 업데이트 시 사용, 비용 발생"
시험 팁
시험 문제 예시: "글로벌 사용자 대상 웹사이트에서 오리진 서버 부하가 높습니다. 캐시 적중률을 높이고 오리진 부하를 줄이려면?" → 정답: Origin Shield 활성화 + 캐시 정책에서 불필요한 헤더/쿠키 제외
자주 묻는 질문 (FAQ)
Q: 캐시 적중률은 얼마가 적정한가요?
정적 콘텐츠는 90% 이상, 동적 콘텐츠가 섞인 경우 70-80%를 목표로 하세요. CloudWatch의 CacheHitRate 지표로 모니터링할 수 있습니다.
Q: 무효화가 즉시 적용되나요?
무효화 요청 후 전 세계 엣지 로케이션에 전파되는 데 보통 수 분이 걸립니다. 긴급 상황에서만 사용하고, 평소에는 버전 관리를 권장합니다.
Q: S3와 CloudFront의 캐시 설정이 충돌하면 어떻게 되나요?
CloudFront는 오리진(S3)의 Cache-Control 헤더를 존중합니다. 단, CloudFront 캐시 정책의 Min/Max TTL 범위 내에서만 적용됩니다.
Q: Origin Shield는 추가 비용이 발생하나요?
네. Origin Shield를 통해 처리되는 요청에 대해 추가 요금이 발생합니다. 하지만 오리진 요청이 줄어 전체 비용이 절감될 수 있습니다.
Q: Lambda@Edge와 CloudFront Functions의 차이점은?
CloudFront Functions는 뷰어 요청/응답에서 경량 작업(헤더 조작)에 적합하고, Lambda@Edge는 오리진 요청/응답에서 복잡한 로직에 적합합니다.