home
SAA-C03

[compute] CloudFront (CDN)

지구 반대편 사용자도 바로 옆에서 받는 것처럼. 콘텐츠를 전 세계 엣지에 뿌리는 CDN, CloudFront를 파봅니다.

One-Line Summary

CloudFront는 전 세계 엣지 로케이션에 콘텐츠를 캐싱해 사용자와 가까운 곳에서 응답하는 CDN이다. "웹/동영상/정적 자산을 전 세계에 빠르게" 나오면 CloudFront.

Why It Exists

오리진 서버가 한 리전(예: 서울)에만 있으면, 지구 반대편 사용자는 매번 먼 거리를 왕복해야 해서 느리고, 모든 요청이 오리진에 몰려 부하가 커진다.

CloudFront는 이 문제를 해결한다.

오리진(예: S3, EC2, ALB)
  -> 전 세계 엣지 로케이션에 콘텐츠 캐싱
  -> 사용자는 가장 가까운 엣지에서 응답 받음

- 지연시간 감소 (사용자와 가까움)
- 오리진 부하 감소 (엣지가 캐시로 대신 응답)
- HTTPS, DDoS 방어(Shield 통합)
효과설명
지연 감소사용자와 가까운 엣지에서 응답
오리진 부하 감소캐시 히트 시 오리진까지 안 감
보안HTTPS, AWS Shield/WAF 통합

Abbreviations

약어풀네임의미
CDNContent Delivery Network콘텐츠를 엣지에 캐싱해 전달하는 네트워크
Edge LocationEdge Location콘텐츠 캐싱을 위한 전 세계 분산 지점
OriginOrigin원본 콘텐츠를 가진 서버(S3, EC2, ALB 등)
TTLTime To Live캐시가 유효한 시간
OACOrigin Access ControlS3 오리진을 CloudFront로만 접근하게 제한(현행 권장)
OAIOrigin Access IdentityOAC 이전의 구식 S3 접근 제한 방식(레거시)
WAFWeb Application Firewall웹 애플리케이션 방화벽
Cache BehaviorCache Behavior경로 패턴별로 오리진·캐시 정책을 다르게 적용하는 규칙

Static vs Dynamic Content

콘텐츠 종류처리 방식
정적 콘텐츠 (이미지, JS, CSS, 동영상)엣지에 캐싱해 재사용 → 효과 가장 큼
동적 콘텐츠 (API 응답 등)캐싱은 어렵지만 엣지↔오리진 구간을 AWS 백본으로 최적화해 그래도 빨라짐

시험 감각:

CloudFront는 정적/동적 둘 다 지원한다. 정적은 캐싱으로, 동적은 경로 최적화로 가속한다.

Common Origins

오리진용도
Amazon S3정적 웹사이트, 이미지/동영상 자산
EC2 / ALB동적 애플리케이션
외부 HTTP 서버온프레미스/서드파티 오리진도 가능

S3를 오리진으로 쓸 때는 OAC로 S3 버킷을 CloudFront를 통해서만 접근하게 제한하는 패턴이 자주 나온다.

Origin Access Control (OAC) — S3 오리진 보호 (빈출)

S3 버킷을 CloudFront 오리진으로 쓸 때, 버킷을 퍼블릭으로 열면 사용자가 CloudFront를 우회해 S3 URL로 직접 접근할 수 있다(캐싱·WAF·로깅 우회). OAC는 이걸 막아 "S3에는 오직 CloudFront를 통해서만" 접근하게 강제한다.

[사용자] ─▶ [CloudFront] ─(SigV4 서명 요청)─▶ [S3 (버킷은 비공개)]
                              ▲
사용자가 S3 URL로 직접 접근 ──✕ (버킷 정책이 CloudFront 서비스 주체만 허용)

동작 원리:

  • CloudFront가 오리진(S3)으로 갈 때 요청에 SigV4 서명을 붙인다.
  • S3 버킷은 퍼블릭 액세스 차단 상태로 두고, 버킷 정책에서 그 CloudFront 배포(서비스 주체)만 허용한다.
  • 결과: S3 직접 접근은 차단, CloudFront 경유만 통과.
항목내용
OAC vs OAIOAC가 현행 권장. OAI는 레거시(신규는 OAC 사용)
OAC가 더 나은 점SSE-KMS 암호화 오리진 지원, SigV4, 모든 리전, POST/PUT 등 지원
세트 구성S3 퍼블릭 차단 + 버킷 정책에 CloudFront 배포 허용 + 배포에 OAC 연결

시험 트리거: "serve S3 privately via CloudFront / prevent direct S3 access" → OAC. "encrypted (SSE-KMS) S3 origin behind CloudFront" → OAC(OAI는 KMS 제약).

캐시 무효화 (Invalidation) & 캐시 제어

엣지는 콘텐츠를 TTL 동안 캐싱한다. 오리진에서 파일을 바꿔도 TTL이 남아 있으면 엣지는 옛 버전을 계속 응답한다. 이 옛 캐시를 강제로 지우는 게 Invalidation이다.

파일 갱신했는데 사용자에게 옛 버전이 보인다
   → 원인: 엣지 캐시 TTL이 아직 안 끝남
   → 해결 A: Invalidation (예: /images/* 무효화 → 엣지가 다음 요청 시 오리진에서 새로 가져옴)
   → 해결 B(권장): 파일명 버저닝 (logo.v2.png) → 새 URL이라 캐시 충돌 자체가 없음
방법특징
Invalidation경로 지정(/*, /images/*)해 캐시 즉시 무효화. 월 1,000 경로까지 무료, 초과 유료. 급한 배포·긴급 수정에
파일명 버저닝 (권장)app.abc123.js처럼 이름을 바꿔 배포 → 항상 새 객체라 무효화 불필요·비용 없음
TTL 조정Cache-Control 헤더/캐시 정책으로 TTL을 짧게/길게 제어
  • 캐시 여부·키는 Cache Policy(어떤 헤더·쿠키·쿼리스트링을 캐시 키에 포함할지)로 제어한다.
  • 동적/개인화 응답을 캐시하지 않으려면 TTL 0 또는 캐시 비활성 정책.

시험 감각: "배포 후에도 옛 콘텐츠가 계속 나온다" → Invalidation 또는 파일명 버저닝. 대량·상시 갱신이면 버저닝이 정석(무효화 비용·지연 회피).

멀티 오리진 & 오리진 그룹 (Multi-Origin)

하나의 CloudFront 배포는 여러 오리진을 두고, 경로 패턴(Cache Behavior)으로 요청을 라우팅할 수 있다. 또 Origin Group으로 오리진 장애 시 자동 페일오버도 된다.

경로 기반 라우팅 (Cache Behavior)

같은 도메인(shop.example) 하나로:
  /images/*  → S3 (정적 자산, 길게 캐시)
  /api/*     → ALB/EC2 (동적, 캐시 짧게/없음)
  /*(기본)   → S3 정적 사이트
  • Path pattern별로 오리진·캐시 정책·허용 메서드·WAF 등을 다르게 적용.
  • 한 도메인 뒤에 정적(S3)과 동적(ALB)을 함께 붙이는 정석 패턴.

Origin Group — 오리진 페일오버 (고가용성)

Origin Group = [Primary 오리진] + [Secondary 오리진]
  Primary가 지정 상태코드(예: 500/502/503/504)로 실패 → 자동으로 Secondary로 전환
  • 예: 주 리전 S3/ALB 장애 시 다른 리전 오리진으로 페일오버 → 오리진 이중화.

시험 트리거: "한 도메인에서 정적은 S3, 동적은 ALB로" → 다중 오리진 + Cache Behavior. "오리진 장애 시 자동 페일오버" → Origin Group.

CloudFront vs Global Accelerator vs S3 Transfer Acceleration

구분CloudFrontGlobal AcceleratorS3 Transfer Acceleration
주 목적콘텐츠 캐싱(CDN)네트워크 경로 최적화S3 업로드/다운로드 가속
프로토콜HTTP/HTTPS모든 TCP/UDPHTTP/HTTPS (S3 전용)
캐싱안 함안 함
대표 케이스웹·동영상·정적 자산게임·IoT·멀티리전 페일오버·고정 IP먼 지역에서 S3로 대용량 전송

Common Wrong Directions

오답 방향왜 부족한가
전 세계 게임(UDP) 가속에 CloudFrontCloudFront는 HTTP/HTTPS, TCP/UDP 가속은 Global Accelerator
고정 IP가 필요한데 CloudFront 선택고정 IP는 NLB 또는 Global Accelerator
먼 지역에서 S3 업로드 가속에 CloudFront업로드 가속은 S3 Transfer Acceleration
CloudFront가 동적 콘텐츠는 아예 못 다룬다고 이해캐싱은 어려워도 경로 최적화로 가속 가능
S3 직접 접근 차단에 버킷을 퍼블릭으로 두고 처리OAC로 CloudFront 경유만 허용(버킷은 비공개)
SSE-KMS S3 오리진에 OAI 사용KMS 오리진은 OAC 필요(OAI는 제약)
상시 갱신 콘텐츠를 매번 Invalidation비용·지연 → 파일명 버저닝이 정석
정적·동적 위해 배포를 2개 만든다한 배포에 다중 오리진 + Cache Behavior

Exam Triggers

문제에서 이런 표현이 나오면떠올릴 것
"cache content globally", "reduce latency for users worldwide"CloudFront
"static website / images / video delivery"CloudFront
"reduce load on origin server"CloudFront
"serve S3 content securely via CDN / prevent direct S3 access"CloudFront + OAC
"encrypted (SSE-KMS) S3 origin behind CloudFront"OAC (OAI 아님)
"old content still served after deploy"Invalidation 또는 파일명 버저닝
"one domain: static from S3, dynamic from ALB"다중 오리진 + Cache Behavior
"automatic failover to a backup origin"Origin Group
"attach WAF to web content"CloudFront (또는 ALB)
"accelerate uploads to S3 from far region"S3 Transfer Acceleration
"non-HTTP TCP/UDP, static IP, regional failover"Global Accelerator

Memory Sentence

CloudFront는 콘텐츠를 엣지에 캐싱하는 CDN이다. 정적은 캐싱으로, 동적은 백본 경로 최적화로 가속한다. S3 오리진은 OAC로 직접 접근을 막고(버킷 비공개), 갱신 반영은 Invalidation 또는 파일명 버저닝, 한 배포에 다중 오리진 + Cache Behavior로 정적·동적을 라우팅하고 Origin Group으로 페일오버한다. TCP/UDP 경로 최적화가 필요하면 Global Accelerator를 본다.

References

댓글

아직 댓글이 없습니다.