SAABlog
네트워킹중급

CloudFront 캐싱 최적화: 성능을 극대화하는 방법

Amazon CloudFront 캐시 정책, TTL 설정, 압축 구성으로 웹 성능을 극대화하는 방법을 알아봅니다.

PHILOLAMB-
CloudFrontCDN캐싱성능 최적화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는 GzipBrotli 압축을 지원합니다.

압축 효과

파일 유형원본 크기GzipBrotli
JavaScript100KB30KB25KB
CSS50KB12KB10KB
HTML80KB20KB16KB

압축 설정

캐시 동작에서 압축을 활성화합니다:

  1. CloudFront 콘솔 → 배포 → 동작 편집
  2. Compress objects automatically 활성화
  3. 캐시 정책에서 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 시험 출제 포인트

  1. 캐시 적중률 향상: "캐시 키 최소화, 불필요한 헤더/쿠키 제외"
  2. TTL 전략: "정적 자산은 긴 TTL + 버전 관리"
  3. Origin Shield: "오리진 부하 감소, 글로벌 사용자 대상"
  4. 압축: "텍스트 기반 콘텐츠에 Gzip/Brotli 활성화"
  5. 무효화: "긴급 업데이트 시 사용, 비용 발생"

시험 팁

시험 문제 예시: "글로벌 사용자 대상 웹사이트에서 오리진 서버 부하가 높습니다. 캐시 적중률을 높이고 오리진 부하를 줄이려면?" → 정답: 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는 오리진 요청/응답에서 복잡한 로직에 적합합니다.

관련 글

참고 자료