Cloud & Platform
9강. CloudFront
9강. CloudFront 학습 내용을 정리한 백필 노트입니다.
이 글은 2025년 학습 기록을 블로그 형식으로 정리한 백필 노트입니다.
목차
- CloudFront
- (실습) S3 버킷 생성
- (실습) S3 버킷에 파일 업로드
- (실습) CloudFront 배포 생성
- (실습) CloudFront 배포 삭제
1. CloudFront란?
CDN (Content Delivery Network)
- *콘텐츠 전송 네트워크(CDN)**의 약자입니다.
- 이미지, HTML과 같은 콘텐츠를 사용자와 가까운 곳에 캐싱하여 전송 속도를 향상시키는 기술입니다.
CloudFront의 특징
- 콘텐츠 전송 네트워크(CDN) 서비스: 정적 및 동적 웹 콘텐츠(이미지, 비디오, 애플리케이션, API 등)를 사용자에게 더 빨리 배포하도록 지원합니다.
- 성능 가속: 전 세계에 분산된 **엣지 로케이션(Edge Location)**을 통해 콘텐츠를 캐싱하여 지연 시간을 줄입니다.
- 글로벌 인프라:
- 31개 리전(Region)
- 99개 가용 영역(Availability Zone)
- 400개 이상의 엣지 로케이션(Edge Location)
- 비용 효율성: AWS 서비스와 CloudFront 간의 데이터 전송은 무료입니다.
- 보안: AWS Shield Standard를 통해 추가 비용 없이 DDoS 공격 방어 기능을 기본으로 제공합니다.
기본 용어
- 배포 (Distribution): CloudFront의 가장 기본적인 단위로, 각 배포는 고유한 도메인 주소(
.cloudfront.net)를 가집니다. Route 53을 사용해 사용자 소유의 도메인과 연결할 수 있습니다. - 오리진 (Origin): CloudFront가 콘텐츠를 가져오는 원본 서버의 위치입니다.
- 기본 설정: S3 버킷
- 커스텀 설정: EC2 인스턴스, Elastic Load Balancing, 외부 서버 등
2. (실습) S3 버킷 생성
CloudFront의 오리진으로 사용할 S3 버킷을 생성하는 과정입니다.
- S3 서비스 이동: AWS Management Console에서 'S3'를 검색하여 이동합니다.
- 버킷 만들기:
버킷 만들기버튼을 클릭합니다.- 일반 구성:
- 버킷 이름: 전 세계적으로 고유한 DNS 형식의 이름을 입력합니다 (예:
soaple-bucket-230708). - AWS 리전: 버킷을 생성할 리전을 선택합니다 (예:
아시아 태평양(서울) ap-northeast-2).
- 버킷 이름: 전 세계적으로 고유한 DNS 형식의 이름을 입력합니다 (예:
- 객체 소유권:
ACL 비활성화됨(권장)을 선택합니다. - 이 버킷의 퍼블릭 액세스 차단 설정: 기본값(모든 퍼블릭 액세스 차단)을 유지합니다.
- 버킷 버전 관리:
비활성화상태를 유지합니다. - 기본 암호화: 기본값(
SSE-S3)을 유지합니다. 버킷 만들기버튼을 클릭하여 생성을 완료합니다.
3. (실습) S3 버킷에 파일 업로드
생성한 S3 버킷에 CloudFront를 통해 배포할 파일을 업로드합니다.
- 테스트 파일 준비:
Hello, S3!라는 내용이 담긴hello.txt파일을 로컬에 생성합니다. - 파일 업로드:
- 생성된 S3 버킷을 클릭하여 들어갑니다.
업로드버튼을 클릭합니다.파일 추가를 선택하거나 파일을 끌어다 놓아hello.txt를 추가합니다.업로드버튼을 클릭하여 업로드를 완료합니다.
- 업로드 확인: 버킷 내에
hello.txt파일이 성공적으로 업로드되었는지 확인합니다.- 파일을 클릭하면 객체 URL(
https:..s3...amazonaws.com/...)을 확인할 수 있습니다.
- 파일을 클릭하면 객체 URL(
4. (실습) CloudFront 배포 생성
S3 버킷을 오리진으로 하는 CloudFront 배포를 생성하고 S3 접근을 제어합니다.
1단계: 배포 생성 시작
- AWS Management Console에서 'CloudFront'를 검색하여 이동합니다.
CloudFront 배포 생성버튼을 클릭합니다.
2단계: 오리진 설정
- 원본 도메인: 드롭다운 메뉴에서 이전에 생성한 S3 버킷(
...s3.amazonaws.com)을 선택합니다. - 원본 액세스:
원본 액세스 제어 설정(권장)을 선택합니다.제어 설정 생성버튼을 클릭합니다.- 이름(예:
MyOriginAccess)을 입력하고생성버튼을 클릭합니다. - "S3 버킷 정책을 업데이트해야 함" 경고가 나타납니다. 이는 정상이며, 배포 생성 후 정책을 업데이트할 예정입니다.
3단계: 기본 캐시 동작 및 설정
- 뷰어 프로토콜 정책:
HTTP and HTTPS또는Redirect HTTP to HTTPS를 선택합니다. - 허용된 HTTP 방법:
GET, HEAD를 유지합니다. - 웹 애플리케이션 방화벽(WAF):
보안 보호 비활성화를 선택합니다. - 기본값 루트 객체: 뷰어가 루트 URL(
/)로 접근했을 때 반환할 객체 파일명을 입력합니다 (예:hello.txt). - 모든 설정을 완료한 후
배포 생성버튼을 클릭합니다.
4단계: S3 버킷 정책 업데이트
배포가 생성되면, CloudFront만이 S3 버킷의 객체에 접근할 수 있도록 S3 버킷의 권한 정책을 수정해야 합니다.
-
배포 생성 후 나타나는
정책 복사버튼을 클릭하거나, AWS 공식 문서에서 S3 버킷 정책 예제를 복사합니다. -
다시 S3 서비스로 이동하여 생성했던 버킷을 선택합니다.
-
권한탭으로 이동하여버킷 정책섹션의편집버튼을 클릭합니다. -
복사한 JSON 정책을 붙여넣습니다.JSON
{ "Version": "2012-10-17", "Statement": { "Sid": "AllowCloudFrontServicePrincipalReadOnly", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::[S3_BUCKET_NAME]/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::[AWS_ACCOUNT_ID]:distribution/[CLOUDFRONT_DISTRIBUTION_ID]" } } } } -
[S3_BUCKET_NAME]과[CLOUDFRONT_DISTRIBUTION_ID]부분을 실제 값으로 수정합니다.Resource에는 버킷 ARN을 붙여넣습니다 (예:arn:aws:s3:::soaple-bucket-230708/*).AWS:SourceArn에는 CloudFront 배포 ARN을 붙여넣습니다.
-
변경 사항 저장버튼을 클릭합니다.
5단계: 배포 확인
- S3 객체 URL 직접 접근: S3 콘솔에서 확인한 객체 URL로 접속하면
Access Denied오류가 발생합니다. (버킷 정책으로 인해 외부 직접 접근이 차단됨) - CloudFront 도메인으로 접근: CloudFront 배포 대시보드에서
배포 도메인 이름(.cloudfront.net)을 복사하여 웹 브라우저로 접속합니다.hello.txt의 내용인 "Hello, S3!"가 정상적으로 표시됩니다.
- 캐시 확인:
- 브라우저 개발자 도구(F12)의 Network 탭에서 응답 헤더를 확인합니다.
- 첫 번째 요청:
x-cache: Miss from cloudfront(오리진에서 콘텐츠를 가져와 캐싱) - 두 번째 요청 이후:
x-cache: Hit from cloudfront(엣지 로케이션에 캐싱된 콘텐츠를 바로 전송)
5. (실습) CloudFront 배포 삭제
실습이 끝난 후 리소스를 정리하기 위해 배포를 삭제합니다.
- CloudFront 콘솔의 배포 목록으로 이동합니다.
- 삭제할 배포를 선택합니다.
- 비활성화: 먼저
비활성화버튼을 클릭합니다. 배포 상태가사용 중지로 변경될 때까지 몇 분 정도 소요됩니다. - 삭제: 배포가 비활성화되면, 다시 배포를 선택하고
삭제버튼을 클릭하여 영구적으로 삭제합니다.
9강 요약
- CloudFront: AWS의 CDN 서비스로, 전 세계 엣지 로케이션에 콘텐츠를 캐싱하여 사용자에게 빠르고 안정적으로 전송합니다.
- 주요 기능: 성능 가속, DDoS 방어, AWS 서비스와의 무료 데이터 전송.
- 핵심 용어:
- 배포(Distribution): CloudFront의 기본 실행 단위.
- 오리진(Origin): 콘텐츠 원본이 저장된 위치 (예: S3, EC2).
- 실습 흐름: S3 버킷 생성 → 파일 업로드 → CloudFront 배포 생성 → S3 버킷 정책 수정 → 배포 확인 → 배포 삭제.