
[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
| 약어 | 풀네임 | 의미 |
|---|---|---|
CDN | Content Delivery Network | 콘텐츠를 엣지에 캐싱해 전달하는 네트워크 |
Edge Location | Edge Location | 콘텐츠 캐싱을 위한 전 세계 분산 지점 |
Origin | Origin | 원본 콘텐츠를 가진 서버(S3, EC2, ALB 등) |
TTL | Time To Live | 캐시가 유효한 시간 |
OAC | Origin Access Control | S3 오리진을 CloudFront로만 접근하게 제한(현행 권장) |
OAI | Origin Access Identity | OAC 이전의 구식 S3 접근 제한 방식(레거시) |
WAF | Web Application Firewall | 웹 애플리케이션 방화벽 |
Cache Behavior | Cache 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 OAI | OAC가 현행 권장. 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
| 구분 | CloudFront | Global Accelerator | S3 Transfer Acceleration |
|---|---|---|---|
| 주 목적 | 콘텐츠 캐싱(CDN) | 네트워크 경로 최적화 | S3 업로드/다운로드 가속 |
| 프로토콜 | HTTP/HTTPS | 모든 TCP/UDP | HTTP/HTTPS (S3 전용) |
| 캐싱 | 함 | 안 함 | 안 함 |
| 대표 케이스 | 웹·동영상·정적 자산 | 게임·IoT·멀티리전 페일오버·고정 IP | 먼 지역에서 S3로 대용량 전송 |
Common Wrong Directions
| 오답 방향 | 왜 부족한가 |
|---|---|
| 전 세계 게임(UDP) 가속에 CloudFront | CloudFront는 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
댓글
아직 댓글이 없습니다.