CloudFront (AWS CloudFront) 

📌 Amazon Web Services(AWS)에서 제공하는 콘텐츠 전송 네트워크(CDN) 서비스입니다.

  • CloudFront는 웹 콘텐츠(이미지, 동영상, HTML 파일 등)를 전 세계 사용자에게 빠르고 안전하게 전달하기 위해 설계되었습니다.
  • 말 그대로 콘텐츠 전송 네트워크(CDN) 인데 아래의 파란색 글을 참고하면 이해가 쉽다.

CloudFront의 주요 특징

  1. 콘텐츠 캐싱
    • CloudFront는 사용자 가까운 위치(엣지 로케이션, Edge Location)에서 콘텐츠를 캐싱하여 전송 속도를 향상시킵니다.
    • 사용자 요청 시 콘텐츠를 캐싱 서버에서 제공하므로 원본 서버(예: S3 또는 EC2) 부하를 줄일 수 있음.
  2. 글로벌 엣지 로케이션
    • CloudFront는 AWS의 글로벌 엣지 로케이션 네트워크를 활용.
      • 엣지 로케이션은 전 세계 여러 지역에 분포한 데이터센터로, 사용자와 가까운 위치에서 콘텐츠를 제공.
  3. 보안 강화
    • HTTPS 지원 및 데이터 암호화를 통해 전송 중 데이터의 보안을 보장.
    • AWS WAF(웹 애플리케이션 방화벽)와 통합하여 DDoS 공격 방지.
  4. 동적/정적 콘텐츠 지원
    • 정적 콘텐츠(이미지, CSS, JS 등)뿐만 아니라 동적 콘텐츠(API 응답, HTML 등)도 효율적으로 전달 가능.
  5. 통합된 AWS 서비스
    • S3, EC2, Elastic Load Balancer, API Gateway와 쉽게 통합 가능.

CloudFront의 주요 구성 요소

구성 요소 설명
배포(Distribution) 콘텐츠를 전송하기 위한 CloudFront 설정.
원본(Origin) CloudFront가 콘텐츠를 가져오는 원본 서버 (예: S3, EC2, 외부 서버).
캐시 동작(Cache Behavior) 콘텐츠 캐싱 및 동작 방식을 정의 (예: TTL, HTTP 메서드 허용 여부).
엣지 로케이션(Edge Location) 사용자와 가까운 위치에서 콘텐츠를 캐싱하고 제공하는 데이터센터.

CloudFront의 동작 방식

  1. 사용자 요청
  2. 엣지 로케이션 확인
    • 요청이 가장 가까운 **엣지 로케이션(Edge Location)**으로 라우팅.
  3. 캐시 확인
    • 엣지 로케이션에 요청한 콘텐츠가 캐싱되어 있다면, 캐시에서 즉시 제공.
    • 캐싱되지 않았다면, CloudFront가 원본 서버(예: S3, EC2)에서 콘텐츠를 가져옴.
  4. 콘텐츠 제공 및 캐싱
    • 가져온 콘텐츠를 사용자에게 제공하고, 엣지 로케이션에 캐싱하여 이후 요청 시 빠르게 제공.

CloudFront의 주요 사용 사례

  1. 웹사이트 콘텐츠 배포
    • 정적 파일(이미지, CSS, JavaScript 등)과 동적 콘텐츠(API 응답, HTML)을 빠르게 제공.
    • 예: S3에 저장된 정적 웹사이트 콘텐츠를 전 세계 사용자에게 빠르게 배포.
  2. 비디오 스트리밍
    • 대용량 비디오 파일을 전 세계적으로 스트리밍.
    • 예: MP4 비디오 또는 HLS(MPEG-DASH)로 실시간 스트리밍 제공.
  3. 애플리케이션 콘텐츠 가속
    • API 응답, 데이터베이스 결과 등의 동적 콘텐츠 전송을 가속화.
    • 예: RESTful API 또는 GraphQL API 가속.
  4. 보안 강화
    • HTTPS를 통한 데이터 암호화 및 AWS WAF를 사용하여 DDoS 공격 방지.
    • 예: EC2 서버나 S3 버킷 앞에 CloudFront를 배치해 직접 접근 차단.
  5. 소프트웨어 배포
    • 소프트웨어 설치 파일, 업데이트 파일 등을 효율적으로 전 세계에 배포.

CloudFront의 TTL(Time To Live)

  • TTL은 콘텐츠가 엣지 로케이션에 얼마나 오래 캐싱되는지 정의.
  • 짧은 TTL: 원본 서버의 변경 사항을 빠르게 반영.
  • 긴 TTL: 원본 서버 부하 감소, 빠른 응답 시간 제공.

CloudFront와 S3의 차이점

특징 CloudFront S3
목적 콘텐츠를 빠르게 전달 데이터를 저장하는 서비스
캐싱 글로벌 엣지 로케이션에서 콘텐츠를 캐싱 기본적으로 캐싱 기능 없음
데이터 저장 여부 데이터 저장하지 않음 데이터를 직접 저장 및 관리
보안 HTTPS, AWS WAF와 통합 가능 버킷 정책, IAM 정책 등으로 보안 설정

CloudFront의 장단점

장점 단점
사용자 가까운 위치에서 콘텐츠를 제공하여 빠른 속도 복잡한 설정이 필요할 수 있음
S3, EC2 등 AWS 서비스와 쉽게 통합 가능 추가 비용 발생 (데이터 요청 및 전송량 기준)
HTTPS를 기본 제공하여 보안 강화 원본 서버가 자주 변경되면 캐시 효율이 낮아질 수 있음

CloudFront를 쉽게 이해하기

CloudFront는 **"AWS에서 제공하는 글로벌 CDN"**입니다.

  • 사용자가 요청한 콘텐츠(이미지, 동영상 등)를 **가장 가까운 서버(엣지 로케이션)**에서 빠르게 제공.
  • 캐싱을 통해 콘텐츠 제공 속도를 높이고 원본 서버의 부하를 줄입니다.
  • 보안 기능을 통해 안전한 콘텐츠 전송을 보장합니다.

 

Content Delivery Network

 🐳 전 세계 여러 지역에 분산된 서버 네트워크를 통해 사용자에게 콘텐츠(웹페이지, 이미지, 동영상 등)를 더 빠르고 안정적으로 전달하는 기술입니다.

  • CDN은 사용자와 가까운 서버에서 콘텐츠를 제공함으로써 지연(latency)을 줄이고, 속도를 높이며, 서버의 부하를 분산시킵니다.

CDN의 동작 방식

  1. 사용자 요청
    • 사용자가 웹사이트에 접속하거나 콘텐츠를 요청(예: 이미지를 다운로드, 동영상을 스트리밍).
  2. 가장 가까운 CDN 서버로 라우팅
    • 요청은 **사용자와 물리적으로 가까운 CDN 서버(엣지 서버)**로 라우팅됩니다.
    • 이 과정은 DNS와 CDN 제공업체의 라우팅 시스템을 통해 처리.
  3. 캐싱된 콘텐츠 제공
    • 요청한 콘텐츠가 CDN 서버(엣지 서버)에 캐싱되어 있다면, 이 서버에서 바로 사용자에게 전달.
    • 캐시된 콘텐츠가 없으면 원본 서버에서 콘텐츠를 가져와 사용자에게 제공하고, 동시에 CDN 서버에 캐싱.
  4. 캐시 유지 및 만료
    • 콘텐츠는 일정 기간 동안 CDN 서버에 저장(캐싱)되며, 만료된 콘텐츠는 갱신.

CDN의 주요 구성 요소

구성 요소 설명
엣지 서버(Edge Server) 전 세계에 분산된 CDN 서버로, 사용자와 가까운 위치에서 콘텐츠를 제공.
원본 서버(Origin Server) 콘텐츠가 실제로 저장된 서버. 예: S3 버킷, EC2, 외부 서버.
캐싱(Cache) CDN 서버에 저장된 콘텐츠. 캐시된 콘텐츠를 제공하여 원본 서버의 부하를 줄임.
DNS(Domain Name System) 사용자 요청을 가장 가까운 CDN 서버로 라우팅하는 역할.

CDN의 주요 기능

  1. 콘텐츠 캐싱
    • 정적 콘텐츠(이미지, CSS, JS, 동영상 등)를 캐싱하여 빠르게 제공.
  2. 지리적 분산
    • 전 세계 사용자에게 콘텐츠를 빠르게 전달하기 위해 엣지 서버를 지리적으로 분산.
  3. 속도 향상
    • 사용자와 가까운 서버에서 콘텐츠를 제공함으로써 네트워크 지연(latency) 최소화.
  4. 서버 부하 분산
    • 원본 서버의 요청 수를 줄여 부하를 분산시키고 안정성을 높임.
  5. 보안 강화
    • HTTPS 지원, DDoS 공격 방지, 방화벽(WAF)과 통합 가능.
  6. 애플리케이션 가속
    • 동적 콘텐츠(API 응답 등)도 최적화된 경로로 전송하여 속도 개선.

CDN의 주요 사용 사례

  1. 정적 웹사이트 호스팅
    • 이미지, 동영상, HTML, CSS, JavaScript 등 정적 콘텐츠를 사용자에게 빠르게 제공.
  2. 비디오 스트리밍
    • Netflix, YouTube 같은 서비스에서 대규모 동영상을 스트리밍할 때 사용.
  3. API 및 동적 콘텐츠 가속
    • REST API, GraphQL API 등과 같은 동적 데이터 응답 속도를 최적화.
  4. 전자상거래
    • 제품 이미지, 웹페이지 로딩 속도를 개선하여 사용자 경험 향상.
  5. 소프트웨어 배포
    • 애플리케이션 업데이트 파일, 소프트웨어 설치 파일 등을 전 세계 사용자에게 신속히 배포.

CDN의 장점

장점 설명
빠른 콘텐츠 제공 사용자와 가까운 서버에서 콘텐츠를 제공하여 로딩 속도 개선.
원본 서버 부하 감소 요청의 대부분을 CDN 서버에서 처리하므로 원본 서버 부하가 줄어듦.
전 세계적 접근성 글로벌 네트워크를 통해 어디서나 빠르게 콘텐츠를 제공.
보안 강화 HTTPS 지원, 방화벽(WAF), DDoS 방지 기능 제공.
대규모 트래픽 처리 동시에 많은 사용자가 접속하더라도 안정적으로 콘텐츠 제공.

CDN의 단점

단점 설명
비용 증가 CDN 사용량(요청 수, 전송량)에 따라 비용이 발생.
캐시 갱신 문제 콘텐츠가 자주 변경되면 캐시와 원본 서버의 데이터가 동기화되지 않을 수 있음.
복잡한 설정 설정 및 관리가 복잡할 수 있음.
동적 콘텐츠 한계 캐싱이 정적 콘텐츠에 더 적합하며, 동적 콘텐츠는 제한적으로 최적화 가능.

AWS CloudFront와의 관계

AWS의 CloudFront는 대표적인 CDN 서비스로, 다음과 같은 기능을 제공합니다:

  1. S3, EC2와 통합: AWS 서비스와의 원활한 연동.
  2. 엣지 로케이션 제공: 전 세계적으로 분산된 엣지 서버를 통해 빠른 콘텐츠 제공.
  3. 보안 옵션: HTTPS, WAF, DDoS 방지 지원.

쉽게 이해하기

  • **CDN은 "전 세계에 퍼져 있는 콘텐츠 배달 네트워크"**입니다.
    • 사용자와 가까운 위치에서 콘텐츠를 전달하므로 빠르고 안정적인 서비스를 제공합니다.
    • 예: 사용자가 미국에 있고, 원본 서버가 한국에 있다면, CDN은 미국에 있는 서버에서 콘텐츠를 제공하여 로딩 시간을 줄입니다.

 

 

Invalidation(인밸리데이)

 🐳 엣지 로케이션(캐시 서버)에 저장된 콘텐츠를 무효화(삭제)하여, 원본 서버에서 최신 콘텐츠를 가져오도록 만드는 작업입니다.

 

[ 그래서 뭔말인가? ]

더보기
더보기

CloudFront와 같은 CDN 캐시는 클라이언트(사용자 기기)가 아닌, 서버 측에서 사용자의 가까운 위치(엣지 로케이션)에 저장되는 캐시를 의미합니다.

 

= 그러니까, 유튜브 영상 재상을 예로들면, 클라이언트인 사용자의 스마트폰의 캐시, 데이터를 처리하는 서버의 캐시 말고, 서버에서 처리된 데이터를 전송하기 위한 캐시 서버의 캐시를 지운다는 것

 

= 그럼 왜 필요한데? 유튜브 영상의 조회수나 제목이 바뀌면 서버에서 당연히 임시 저장하는 캐시 서버에도 변경사항을 보내준다. 그런데 변경된 데이터를 캐시 서버에는 굳이 저장할 필요없으니 지운다는 것


캐시는 어디에 저장될까?

  1. 클라이언트 측 캐시 (Client-Side Cache)
    • 사용자의 브라우저나 앱에 저장된 캐시.
    • 예: 웹 브라우저가 이미지, CSS, JS 파일을 로컬 디스크에 저장해 다음 요청 시 빠르게 제공.
    • 유튜브 예: 유튜브 앱이 썸네일, 동영상 리스트를 로컬에 저장하는 것.
  2. CDN 캐시 (CloudFront와 같은 엣지 캐시)
    • 전 세계에 분산된 **엣지 로케이션(캐시 서버)**에 저장된 데이터.
    • 원본 서버로부터 데이터를 가져온 뒤, 이 데이터를 사용자와 가까운 CDN 서버에 캐싱.
    • 유튜브 예: 사용자가 재생하려는 동영상이 CDN 서버(유튜브의 전 세계 데이터 센터 중 하나)에 이미 캐싱되어 있다면, 바로 제공. 그렇지 않다면 원본 서버에서 가져와 캐싱 후 제공.
  3. 원본 서버 측 캐시
    • 데이터베이스나 애플리케이션 서버에 가까운 캐시.
    • 예: Redis, Memcached 같은 서버 쪽 캐싱 기술.

CloudFront Invalidation은 어떤 캐시를 삭제하나?

CloudFront Invalidation은 **CDN 서버(엣지 로케이션)**에 저장된 캐시를 무효화합니다.
이것은 클라이언트 측 브라우저 캐시를 삭제하지 않습니다.


유튜브를 예로 들면 이런 동작을 하게 됩니다:

  1. 사용자가 유튜브에서 동영상을 재생 요청.
    • 이 요청은 **CDN 서버(엣지 로케이션)**로 라우팅.
  2. CDN 서버에서 동영상 확인
    • CDN 서버에 요청한 동영상이 캐싱되어 있다면, 캐시된 데이터를 바로 제공.
    • 만약 캐시가 없다면, **원본 서버(유튜브 데이터센터)**에서 데이터를 가져오고 이를 캐싱.
  3. Invalidation 발생 (유튜브 운영 측에서 동영상 정보를 업데이트한 경우)
    • 운영자가 CDN 캐시를 Invalidation하면, CDN 서버에서 캐시된 동영상 데이터를 무효화(삭제).
    • 다음 요청 시, CDN 서버는 원본 서버에서 최신 데이터를 가져와 사용자에게 제공.

캐시 무효화(Invalidation)는 왜 필요할까?

  1. 콘텐츠 업데이트
    • 동영상 제목, 썸네일, 또는 자막이 변경되었을 경우.
    • 클라이언트가 변경된 최신 콘텐츠를 볼 수 있도록 캐시를 무효화.
  2. 긴 TTL 설정 문제
    • CDN 캐시에 설정된 TTL(Time-To-Live, 캐시 유효 시간)이 길다면, 원본 서버에서 변경이 있어도 오래된 콘텐츠를 계속 제공할 수 있음.
    • Invalidation으로 즉시 최신 콘텐츠 제공 가능.

CloudFront Invalidation과 브라우저 캐시의 차이

캐시 위치 CDN 캐시 (CloudFront) 브라우저 캐시 (클라이언트 측)
캐시 위치 엣지 로케이션(전 세계 CDN 서버) 사용자 기기의 로컬 저장소
누가 관리하나? CDN 제공업체 (AWS CloudFront 등) 사용자 브라우저나 앱
삭제 방법 CloudFront Invalidation으로 삭제 브라우저 설정에서 삭제하거나 HTTP 헤더로 무효화
사용 목적 서버 부하를 줄이고 전송 속도를 높임 로컬에서 데이터를 빠르게 제공
삭제 주체 운영자(AWS 관리 콘솔 또는 CLI로 Invalidation 요청) 사용자가 직접 캐시를 지우거나 브라우저가 TTL 만료 시
유튜브 예시 CDN에 저장된 동영상 데이터를 무효화 브라우저가 저장한 동영상 썸네일을 삭제

결론

  • CloudFront Invalidation엣지 로케이션(캐시 서버)에 저장된 데이터를 무효화하여, 원본 서버에서 최신 데이터를 가져오도록 만듭니다.
  • 이것은 브라우저나 앱의 클라이언트 캐시와는 별개의 동작입니다.
  • 유튜브 예시로 보면:
    • 동영상 정보나 콘텐츠가 변경되었을 때, **CDN 서버에서 캐시를 삭제(Invalidation)**하여 사용자에게 최신 콘텐츠를 제공.

왜 Invalidation이 필요한가?

CDN은 콘텐츠를 캐싱하여 제공하므로, 원본 서버에서 콘텐츠가 변경되어도 엣지 로케이션(캐시 서버)에 저장된 데이터는 자동으로 갱신되지 않습니다.
따라서, 캐시된 데이터와 원본 데이터가 달라질 수 있는 상황에서 Invalidation을 수행하여 최신 데이터를 제공할 수 있습니다.


Invalidation의 동작 방식

  1. 사용자가 특정 객체 또는 경로에 대해 Invalidation 요청을 수행.
  2. CloudFront는 지정된 객체(캐시된 콘텐츠)를 무효화(삭제).
  3. 다음 요청이 들어오면, CloudFront는 원본 서버에서 최신 콘텐츠를 가져와 캐싱하고 사용자에게 제공.

Invalidation의 주요 특징

  1. 대상 지정
    • 특정 파일(예: image.jpg)이나 전체 경로(예: /images/*)에 대해 Invalidation 수행 가능.
  2. TTL(Time-To-Live)와 관계 없음
    • Invalidation은 캐시의 TTL 설정과 상관없이 즉시 무효화 작업을 실행.
  3. 비용 발생
    • 매월 1,000개의 요청은 무료.
    • 이후 추가 요청은 비용 발생(1,000개당 약 $0.005).
  4. 빠른 반영
    • Invalidation 요청은 대부분 몇 초에서 몇 분 내에 처리.

Invalidation 요청 방법

  1. CloudFront 콘솔에서 수행
    AWS Management Console에서 CloudFront 배포를 선택 후, Invalidation 요청을 생성.
  2. AWS CLI 사용
    예:
  3. aws cloudfront create-invalidation --distribution-id EXAMPLE123 --paths "/images/*"
  4. API 호출
    AWS SDK 또는 HTTP API를 사용해 Invalidation 요청을 생성.

Invalidation 요청의 예

1. 특정 파일 무효화

/image1.jpg
  • 엣지 로케이션에 캐시된 image1.jpg를 삭제하고 최신 버전을 가져오도록 설정.

2. 특정 경로의 모든 파일 무효화

/images/*
  • /images/ 디렉토리에 있는 모든 파일을 삭제.

3. 전체 캐시 무효화

/*
  • CloudFront 배포에 캐시된 모든 콘텐츠를 삭제(비용이 높을 수 있음).

Invalidation vs TTL

  Invalidation TTL (Time-To-Live)
목적 캐시를 강제로 삭제하여 최신 콘텐츠를 반영 콘텐츠를 자동으로 만료하여 일정 시간 이후 원본 서버에서 재요청
작업 시점 수동으로 요청 (사용자가 필요할 때 수행) 자동으로 만료 (설정된 시간이 지나면 캐시 만료)
비용 발생 여부 무료 한도 이후 비용 발생 (1,000개당 약 $0.005) TTL 자체는 비용이 없음
적용 대상 특정 객체 또는 경로 전체 콘텐츠 또는 개별 객체

Invalidation의 주요 사용 사례

  1. 콘텐츠 변경 후 즉시 반영
    • 웹사이트의 CSS, JS, 이미지가 업데이트된 경우 캐시를 무효화하여 최신 파일 제공.
  2. 긴 TTL 설정으로 캐시가 오래 유지되는 경우
    • 캐시 TTL이 길게 설정되었지만, 원본 서버의 콘텐츠가 변경된 경우.
  3. 긴급 콘텐츠 변경
    • 중요한 정보나 이미지를 긴급하게 업데이트해야 할 때.
  4. 동적 콘텐츠 제공
    • 특정 콘텐츠가 자주 업데이트되어 캐시를 수동으로 관리해야 하는 경우.

Invalidation 요청을 최소화하는 방법

  1. 파일 이름 버전 관리
    • 파일 이름에 버전을 포함하여 변경 시 새 이름을 사용.
    • 예: style-v1.css → style-v2.css.
    • 이 방법은 Invalidation 요청 없이도 새 파일을 캐시하도록 강제.
  2. 적절한 TTL 설정
    • 캐시 만료 주기를 적절히 설정하여 Invalidation 빈도를 줄임.
  3. 부분 Invalidation 사용
    • 전체 경로나 모든 파일을 무효화하는 대신, 필요한 파일만 지정.

쉽게 이해하기

  • Invalidation은 "CDN 캐시를 강제로 갱신"하는 작업입니다.
  • 예: CloudFront에 저장된 오래된 이미지 파일을 최신 파일로 교체하려면, 해당 파일을 Invalidation 요청하여 새 버전이 제공되도록 설정.

 

+ Recent posts