아마존 CloudFront
더 많은 작업
- Amazon CloudFront; CloudFront; 아마존 클라우드프런트
- 전 세계 엣지 로케이션에 콘텐츠를 캐시해 정적·동적 웹 콘텐츠와 API를 사용자 가까이에서 빠르게 전달하는 AWS의 CDN 서비스
아마존 CloudFront는 사용자의 요청을 지연 시간이 가장 짧은 엣지 로케이션으로 보내고, 그곳에 콘텐츠가 캐시되어 있으면 바로 돌려준다. 캐시에 없으면 사용자가 정의한 오리진(아마존 S3 버킷, 로드 밸런서, 일반 웹 서버 등)에서 가져와 응답하면서 캐시에 저장한다. 엣지와 오리진 사이는 AWS 백본 네트워크를 타므로 캐시되지 않는 동적 콘텐츠나 API 호출도 공용 인터넷만 쓸 때보다 빨라질 수 있다.
시험에서는 성능(지연 시간 단축, 오리진 부하 감소)뿐 아니라 보안(S3를 CloudFront로만 열기, 서명된 URL, WAF·Shield 결합)과 비용(데이터 전송비 절감) 관점에서도 자주 등장한다.

| 항목 | 설명 |
|---|---|
| 배포(distribution) | CloudFront 설정의 단위. 오리진, 캐시 동작, 도메인, 인증서 등을 묶는다. xxxx.cloudfront.net 도메인이 할당되고 대체 도메인을 쓸 수 있다 |
| 엣지 로케이션(POP) | 전 세계에 분산된 캐시 서버 묶음. 콘텐츠가 실제로 캐시되는 곳 |
| 오리진 | 원본 콘텐츠가 있는 곳. S3 버킷, ALB, NLB, EC2, 사용자 지정 HTTP 서버, MediaPackage 등 |
| 캐시 동작(cache behavior) | 경로 패턴(예: /images/*, /api/*)별로 오리진, 캐시 정책, 프로토콜, 함수를 지정 |
| 캐시 정책 | 캐시 키에 넣을 헤더·쿠키·쿼리 문자열과 TTL을 정한다 |
| 오리진 그룹 | 기본·보조 오리진 두 개로 구성. 기본 오리진이 실패하면 보조로 자동 전환 |
| 엣지 함수 | CloudFront Functions와 Lambda@Edge로 요청·응답을 엣지에서 가공 |
| 오리진 유형 | 특징 | 접근 제한 방법 |
|---|---|---|
| S3 버킷(REST 엔드포인트) | 정적 파일 배포의 기본형 | 원본 액세스 제어(OAC)로 CloudFront만 읽게 하고 버킷 퍼블릭 접근 차단 |
| S3 정적 웹 사이트 엔드포인트 | 리디렉션, 인덱스 문서 등 웹 사이트 기능 사용 | 사용자 지정 오리진으로 취급. OAC·OAI 사용 불가 |
| ALB, NLB, EC2(퍼블릭) | 동적 웹 애플리케이션 | 사용자 지정 헤더 검사, 보안 그룹에 CloudFront 관리형 접두사 목록 허용 |
| VPC 오리진 | 프라이빗 서브넷의 ALB, NLB, EC2를 오리진으로 사용 | 오리진을 인터넷에 노출하지 않고 CloudFront를 유일한 진입점으로 만듦 |
| 온프레미스·타사 서버 | 사용자 지정 오리진(HTTP/HTTPS) | 오리진 쪽 인증·IP 제한 |
CloudFront가 S3 오리진에 인증된 요청을 보내는 방법은 원본 액세스 제어(origin access control, OAC)와 원본 액세스 ID(origin access identity, OAI) 두 가지이다. AWS는 OAC를 권장하며 OAI는 레거시로 취급된다. OAC만 다음을 지원한다.
- 모든 리전의 S3 버킷(2022년 12월 이후 출시된 옵트인 리전 포함)
- SSE-KMS로 암호화된 객체
- S3에 대한 PUT, DELETE 같은 동적 요청
버킷 정책에서 CloudFront 서비스 주체에게 읽기를 허용하고, 조건으로 특정 배포의 ARN을 지정하는 방식이다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowCloudFrontServicePrincipalReadOnly",
"Effect": "Allow",
"Principal": { "Service": "cloudfront.amazonaws.com" },
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::example-static-bucket/*",
"Condition": {
"StringEquals": {
"AWS:SourceArn": "arn:aws:cloudfront::111122223333:distribution/EDFDVBD6EXAMPLE"
}
}
}
]
}
- 캐시 키는 캐시된 객체를 구분하는 식별자이다. 캐시 키에 넣는 헤더·쿠키·쿼리 문자열이 적을수록 캐시 적중률이 오른다.
- 캐시 기간은 캐시 정책의 최소·기본·최대 TTL과 오리진이 보내는 Cache-Control, Expires 헤더가 함께 결정한다. 캐시 정책을 쓰지 않으면 기본 TTL은 24시간이다.
- 오리진의 파일을 바꿨는데 캐시가 남아 있다면 무효화(invalidation)를 요청하거나, 파일 이름에 버전을 붙여 새 객체로 배포한다.
- 오리진 그룹을 쓰면 캐시 미스 때 기본 오리진이 응답하지 않거나 지정한 오류 상태 코드를 돌려주면 보조 오리진으로 다시 요청한다.
| 기능 | 용도 |
|---|---|
| HTTPS | 뷰어–CloudFront, CloudFront–오리진 구간을 각각 HTTPS로 강제할 수 있다. 사용자 지정 도메인에 ACM 인증서를 쓰려면 인증서를 미국 동부(버지니아 북부, us-east-1) 리전에서 발급하거나 가져와야 한다 |
| 서명된 URL | 개별 파일(예: 설치 파일 다운로드) 접근 제한, 쿠키를 지원하지 않는 클라이언트 |
| 서명된 쿠키 | 여러 파일(예: HLS 동영상 조각 전체, 회원 전용 영역) 접근 제한, 기존 URL을 바꾸고 싶지 않을 때 |
| 지리적 제한 | 국가 단위 허용 목록·차단 목록으로 배포 전체 접근 제한. 더 세밀한 제한은 타사 위치 서비스 사용 |
| AWS WAF | 웹 ACL을 배포에 연결해 SQL 인젝션, XSS, 악성 IP, 요청 속도 제한 적용 |
| AWS Shield | Shield Standard가 추가 비용 없이 자동 적용되며, CloudFront 배포는 알려진 네트워크·전송 계층 공격에 대한 보호를 특히 잘 받는다 |
같은 파일에 서명된 URL과 서명된 쿠키를 함께 쓰면 서명된 URL이 우선한다.
CloudFront Functions는 엣지 로케이션에서 실행되는 가벼운 JavaScript 함수이다. 실행 시간이 1밀리초 미만 수준인 짧은 작업에 맞으며, 초당 수백만 건 규모로 확장된다. 뷰어 요청과 뷰어 응답 이벤트에서만 실행되고, 네트워크·파일 시스템·요청 본문에는 접근할 수 없다. 캐시 키 정규화, 헤더 추가·수정, URL 리디렉션·재작성, JWT 같은 토큰 검증에 쓴다.
Lambda@Edge는 CloudFront 이벤트에 반응해 실행되는 AWS Lambda 함수이다. Node.js와 Python을 쓰고, 뷰어 요청·응답뿐 아니라 오리진 요청·응답 이벤트에서도 실행된다. 네트워크 접근, 외부 라이브러리(AWS SDK 포함), 요청 본문 접근이 필요하거나 실행에 수 밀리초 이상 걸리는 작업에 쓴다.
| 항목 | CloudFront Functions | Lambda@Edge |
|---|---|---|
| 언어 | JavaScript(ECMAScript 5.1 호환) | Node.js, Python |
| 실행 이벤트 | 뷰어 요청, 뷰어 응답 | 뷰어 요청·응답, 오리진 요청·응답 |
| 규모 | 초당 수백만 요청 | 리전당 초당 최대 10,000 요청 |
| 실행 시간 | 1밀리초 미만 | 최대 30초 |
| 최대 메모리 | 2MB | 뷰어 이벤트 128MB, 오리진 이벤트 최대 10,240MB |
| 코드 크기 | 10KB | 50MB |
| 네트워크·파일 시스템 접근 | 없음 | 있음 |
| 요청 본문 접근 | 없음 | 있음 |
| CloudFront KeyValueStore | 지원 | 지원 안 함 |
- 사용자에게 S3나 EC2에서 직접 내보내던 트래픽을 CloudFront 뒤로 옮기면, 캐시 적중분만큼 오리진이 처리하는 요청과 오리진에서 나가는 데이터가 함께 준다.
- 캐시 키를 줄여 적중률을 높이면 오리진 요청이 줄어 비용과 지연 시간이 함께 감소한다.
- 요금은 사용량 기반(pay-as-you-go) 요금 외에 월 정액 요금제가 있다. 정액 요금제에서는 아마존 S3, ALB, API Gateway 같은 AWS 오리진과 CloudFront 사이의 데이터 전송 요금이 자동으로 면제되고, CDN과 여러 AWS 서비스·기능이 하나의 월 요금으로 묶인다. 트래픽 패턴에 따라 두 방식을 비교한다.
- 전 세계 사용자에게 정적 콘텐츠를 빠르게 제공하고 오리진 부하를 줄이라는 요구에는 CloudFront가 정답이다.
- S3 버킷을 CloudFront를 통해서만 접근하게 하려면 OAC를 쓰고 버킷의 퍼블릭 접근을 막는다. OAI는 레거시 선택지이다.
- 유료 회원에게만 파일 하나를 내려 주려면 서명된 URL, 여러 파일을 URL 변경 없이 보호하려면 서명된 쿠키이다.
- 특정 국가 차단은 CloudFront 지리적 제한, 애플리케이션 계층 공격 차단은 CloudFront에 AWS WAF를 연결한다.
- 단순한 헤더 조작이나 리디렉션처럼 가벼운 엣지 처리는 CloudFront Functions, 오리진 이벤트나 외부 호출이 필요하면 Lambda@Edge이다.
- HTTP가 아닌 TCP·UDP 트래픽 가속, 여러 리전 엔드포인트 앞의 고정 IP 진입점, 빠른 리전 장애 조치가 필요하면 CloudFront가 아니라 AWS Global Accelerator를 고른다.
- Amazon CloudFront란 무엇입니까? – AWS
- Amazon S3 오리진에 대한 액세스 제한 – AWS
- 서명된 URL 또는 서명된 쿠키 사용 결정 – AWS
- CloudFront Functions와 Lambda@Edge 간 차이점 – AWS
- Amazon CloudFront 요금 – AWS