Taeyoung Kim

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 버킷을 생성하는 과정입니다.

  1. S3 서비스 이동: AWS Management Console에서 'S3'를 검색하여 이동합니다.
  2. 버킷 만들기:
    • 버킷 만들기 버튼을 클릭합니다.
    • 일반 구성:
      • 버킷 이름: 전 세계적으로 고유한 DNS 형식의 이름을 입력합니다 (예: soaple-bucket-230708).
      • AWS 리전: 버킷을 생성할 리전을 선택합니다 (예: 아시아 태평양(서울) ap-northeast-2).
    • 객체 소유권: ACL 비활성화됨(권장)을 선택합니다.
    • 이 버킷의 퍼블릭 액세스 차단 설정: 기본값(모든 퍼블릭 액세스 차단)을 유지합니다.
    • 버킷 버전 관리: 비활성화 상태를 유지합니다.
    • 기본 암호화: 기본값(SSE-S3)을 유지합니다.
    • 버킷 만들기 버튼을 클릭하여 생성을 완료합니다.

3. (실습) S3 버킷에 파일 업로드

생성한 S3 버킷에 CloudFront를 통해 배포할 파일을 업로드합니다.

  1. 테스트 파일 준비: Hello, S3! 라는 내용이 담긴 hello.txt 파일을 로컬에 생성합니다.
  2. 파일 업로드:
    • 생성된 S3 버킷을 클릭하여 들어갑니다.
    • 업로드 버튼을 클릭합니다.
    • 파일 추가를 선택하거나 파일을 끌어다 놓아 hello.txt를 추가합니다.
    • 업로드 버튼을 클릭하여 업로드를 완료합니다.
  3. 업로드 확인: 버킷 내에 hello.txt 파일이 성공적으로 업로드되었는지 확인합니다.
    • 파일을 클릭하면 객체 URL(https:..s3...amazonaws.com/...)을 확인할 수 있습니다.

4. (실습) CloudFront 배포 생성

S3 버킷을 오리진으로 하는 CloudFront 배포를 생성하고 S3 접근을 제어합니다.

1단계: 배포 생성 시작

  1. AWS Management Console에서 'CloudFront'를 검색하여 이동합니다.
  2. CloudFront 배포 생성 버튼을 클릭합니다.

2단계: 오리진 설정

  1. 원본 도메인: 드롭다운 메뉴에서 이전에 생성한 S3 버킷(...s3.amazonaws.com)을 선택합니다.
  2. 원본 액세스: 원본 액세스 제어 설정(권장)을 선택합니다.
    • 제어 설정 생성 버튼을 클릭합니다.
    • 이름(예: MyOriginAccess)을 입력하고 생성 버튼을 클릭합니다.
    • "S3 버킷 정책을 업데이트해야 함" 경고가 나타납니다. 이는 정상이며, 배포 생성 후 정책을 업데이트할 예정입니다.

3단계: 기본 캐시 동작 및 설정

  1. 뷰어 프로토콜 정책: HTTP and HTTPS 또는 Redirect HTTP to HTTPS를 선택합니다.
  2. 허용된 HTTP 방법: GET, HEAD를 유지합니다.
  3. 웹 애플리케이션 방화벽(WAF): 보안 보호 비활성화를 선택합니다.
  4. 기본값 루트 객체: 뷰어가 루트 URL(/)로 접근했을 때 반환할 객체 파일명을 입력합니다 (예: hello.txt).
  5. 모든 설정을 완료한 후 배포 생성 버튼을 클릭합니다.

4단계: S3 버킷 정책 업데이트

배포가 생성되면, CloudFront만이 S3 버킷의 객체에 접근할 수 있도록 S3 버킷의 권한 정책을 수정해야 합니다.

  1. 배포 생성 후 나타나는 정책 복사 버튼을 클릭하거나, AWS 공식 문서에서 S3 버킷 정책 예제를 복사합니다.

  2. 다시 S3 서비스로 이동하여 생성했던 버킷을 선택합니다.

  3. 권한 탭으로 이동하여 버킷 정책 섹션의 편집 버튼을 클릭합니다.

  4. 복사한 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]"
                }
            }
        }
    }
    
  5. [S3_BUCKET_NAME][CLOUDFRONT_DISTRIBUTION_ID] 부분을 실제 값으로 수정합니다.

    • Resource에는 버킷 ARN을 붙여넣습니다 (예: arn:aws:s3:::soaple-bucket-230708/*).
    • AWS:SourceArn에는 CloudFront 배포 ARN을 붙여넣습니다.
  6. 변경 사항 저장 버튼을 클릭합니다.

5단계: 배포 확인

  1. S3 객체 URL 직접 접근: S3 콘솔에서 확인한 객체 URL로 접속하면 Access Denied 오류가 발생합니다. (버킷 정책으로 인해 외부 직접 접근이 차단됨)
  2. CloudFront 도메인으로 접근: CloudFront 배포 대시보드에서 배포 도메인 이름(.cloudfront.net)을 복사하여 웹 브라우저로 접속합니다.
    • hello.txt의 내용인 "Hello, S3!"가 정상적으로 표시됩니다.
  3. 캐시 확인:
    • 브라우저 개발자 도구(F12)의 Network 탭에서 응답 헤더를 확인합니다.
    • 첫 번째 요청: x-cache: Miss from cloudfront (오리진에서 콘텐츠를 가져와 캐싱)
    • 두 번째 요청 이후: x-cache: Hit from cloudfront (엣지 로케이션에 캐싱된 콘텐츠를 바로 전송)

5. (실습) CloudFront 배포 삭제

실습이 끝난 후 리소스를 정리하기 위해 배포를 삭제합니다.

  1. CloudFront 콘솔의 배포 목록으로 이동합니다.
  2. 삭제할 배포를 선택합니다.
  3. 비활성화: 먼저 비활성화 버튼을 클릭합니다. 배포 상태가 사용 중지로 변경될 때까지 몇 분 정도 소요됩니다.
  4. 삭제: 배포가 비활성화되면, 다시 배포를 선택하고 삭제 버튼을 클릭하여 영구적으로 삭제합니다.

9강 요약

  • CloudFront: AWS의 CDN 서비스로, 전 세계 엣지 로케이션에 콘텐츠를 캐싱하여 사용자에게 빠르고 안정적으로 전송합니다.
  • 주요 기능: 성능 가속, DDoS 방어, AWS 서비스와의 무료 데이터 전송.
  • 핵심 용어:
    • 배포(Distribution): CloudFront의 기본 실행 단위.
    • 오리진(Origin): 콘텐츠 원본이 저장된 위치 (예: S3, EC2).
  • 실습 흐름: S3 버킷 생성 → 파일 업로드 → CloudFront 배포 생성 → S3 버킷 정책 수정 → 배포 확인 → 배포 삭제.