CloudFront (AWS CloudFront)
📌 Amazon Web Services(AWS)에서 제공하는 콘텐츠 전송 네트워크(CDN) 서비스입니다.
- CloudFront는 웹 콘텐츠(이미지, 동영상, HTML 파일 등)를 전 세계 사용자에게 빠르고 안전하게 전달하기 위해 설계되었습니다.
- 말 그대로 콘텐츠 전송 네트워크(CDN) 인데 아래의 파란색 글을 참고하면 이해가 쉽다.
CloudFront의 주요 특징
- 콘텐츠 캐싱
- CloudFront는 사용자 가까운 위치(엣지 로케이션, Edge Location)에서 콘텐츠를 캐싱하여 전송 속도를 향상시킵니다.
- 사용자 요청 시 콘텐츠를 캐싱 서버에서 제공하므로 원본 서버(예: S3 또는 EC2) 부하를 줄일 수 있음.
- 글로벌 엣지 로케이션
- CloudFront는 AWS의 글로벌 엣지 로케이션 네트워크를 활용.
- 엣지 로케이션은 전 세계 여러 지역에 분포한 데이터센터로, 사용자와 가까운 위치에서 콘텐츠를 제공.
- CloudFront는 AWS의 글로벌 엣지 로케이션 네트워크를 활용.
- 보안 강화
- HTTPS 지원 및 데이터 암호화를 통해 전송 중 데이터의 보안을 보장.
- AWS WAF(웹 애플리케이션 방화벽)와 통합하여 DDoS 공격 방지.
- 동적/정적 콘텐츠 지원
- 정적 콘텐츠(이미지, CSS, JS 등)뿐만 아니라 동적 콘텐츠(API 응답, HTML 등)도 효율적으로 전달 가능.
- 통합된 AWS 서비스
- S3, EC2, Elastic Load Balancer, API Gateway와 쉽게 통합 가능.
CloudFront의 주요 구성 요소
구성 요소 | 설명 |
배포(Distribution) | 콘텐츠를 전송하기 위한 CloudFront 설정. |
원본(Origin) | CloudFront가 콘텐츠를 가져오는 원본 서버 (예: S3, EC2, 외부 서버). |
캐시 동작(Cache Behavior) | 콘텐츠 캐싱 및 동작 방식을 정의 (예: TTL, HTTP 메서드 허용 여부). |
엣지 로케이션(Edge Location) | 사용자와 가까운 위치에서 콘텐츠를 캐싱하고 제공하는 데이터센터. |
CloudFront의 동작 방식
- 사용자 요청
- 사용자가 CloudFront 배포의 URL(예: https://d123abc.cloudfront.net/image.jpg)에 콘텐츠를 요청.
- 엣지 로케이션 확인
- 요청이 가장 가까운 **엣지 로케이션(Edge Location)**으로 라우팅.
- 캐시 확인
- 엣지 로케이션에 요청한 콘텐츠가 캐싱되어 있다면, 캐시에서 즉시 제공.
- 캐싱되지 않았다면, CloudFront가 원본 서버(예: S3, EC2)에서 콘텐츠를 가져옴.
- 콘텐츠 제공 및 캐싱
- 가져온 콘텐츠를 사용자에게 제공하고, 엣지 로케이션에 캐싱하여 이후 요청 시 빠르게 제공.
CloudFront의 주요 사용 사례
- 웹사이트 콘텐츠 배포
- 정적 파일(이미지, CSS, JavaScript 등)과 동적 콘텐츠(API 응답, HTML)을 빠르게 제공.
- 예: S3에 저장된 정적 웹사이트 콘텐츠를 전 세계 사용자에게 빠르게 배포.
- 비디오 스트리밍
- 대용량 비디오 파일을 전 세계적으로 스트리밍.
- 예: MP4 비디오 또는 HLS(MPEG-DASH)로 실시간 스트리밍 제공.
- 애플리케이션 콘텐츠 가속
- API 응답, 데이터베이스 결과 등의 동적 콘텐츠 전송을 가속화.
- 예: RESTful API 또는 GraphQL API 가속.
- 보안 강화
- HTTPS를 통한 데이터 암호화 및 AWS WAF를 사용하여 DDoS 공격 방지.
- 예: EC2 서버나 S3 버킷 앞에 CloudFront를 배치해 직접 접근 차단.
- 소프트웨어 배포
- 소프트웨어 설치 파일, 업데이트 파일 등을 효율적으로 전 세계에 배포.
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의 동작 방식
- 사용자 요청
- 사용자가 웹사이트에 접속하거나 콘텐츠를 요청(예: 이미지를 다운로드, 동영상을 스트리밍).
- 가장 가까운 CDN 서버로 라우팅
- 요청은 **사용자와 물리적으로 가까운 CDN 서버(엣지 서버)**로 라우팅됩니다.
- 이 과정은 DNS와 CDN 제공업체의 라우팅 시스템을 통해 처리.
- 캐싱된 콘텐츠 제공
- 요청한 콘텐츠가 CDN 서버(엣지 서버)에 캐싱되어 있다면, 이 서버에서 바로 사용자에게 전달.
- 캐시된 콘텐츠가 없으면 원본 서버에서 콘텐츠를 가져와 사용자에게 제공하고, 동시에 CDN 서버에 캐싱.
- 캐시 유지 및 만료
- 콘텐츠는 일정 기간 동안 CDN 서버에 저장(캐싱)되며, 만료된 콘텐츠는 갱신.
CDN의 주요 구성 요소
구성 요소 | 설명 |
엣지 서버(Edge Server) | 전 세계에 분산된 CDN 서버로, 사용자와 가까운 위치에서 콘텐츠를 제공. |
원본 서버(Origin Server) | 콘텐츠가 실제로 저장된 서버. 예: S3 버킷, EC2, 외부 서버. |
캐싱(Cache) | CDN 서버에 저장된 콘텐츠. 캐시된 콘텐츠를 제공하여 원본 서버의 부하를 줄임. |
DNS(Domain Name System) | 사용자 요청을 가장 가까운 CDN 서버로 라우팅하는 역할. |
CDN의 주요 기능
- 콘텐츠 캐싱
- 정적 콘텐츠(이미지, CSS, JS, 동영상 등)를 캐싱하여 빠르게 제공.
- 지리적 분산
- 전 세계 사용자에게 콘텐츠를 빠르게 전달하기 위해 엣지 서버를 지리적으로 분산.
- 속도 향상
- 사용자와 가까운 서버에서 콘텐츠를 제공함으로써 네트워크 지연(latency) 최소화.
- 서버 부하 분산
- 원본 서버의 요청 수를 줄여 부하를 분산시키고 안정성을 높임.
- 보안 강화
- HTTPS 지원, DDoS 공격 방지, 방화벽(WAF)과 통합 가능.
- 애플리케이션 가속
- 동적 콘텐츠(API 응답 등)도 최적화된 경로로 전송하여 속도 개선.
CDN의 주요 사용 사례
- 정적 웹사이트 호스팅
- 이미지, 동영상, HTML, CSS, JavaScript 등 정적 콘텐츠를 사용자에게 빠르게 제공.
- 비디오 스트리밍
- Netflix, YouTube 같은 서비스에서 대규모 동영상을 스트리밍할 때 사용.
- API 및 동적 콘텐츠 가속
- REST API, GraphQL API 등과 같은 동적 데이터 응답 속도를 최적화.
- 전자상거래
- 제품 이미지, 웹페이지 로딩 속도를 개선하여 사용자 경험 향상.
- 소프트웨어 배포
- 애플리케이션 업데이트 파일, 소프트웨어 설치 파일 등을 전 세계 사용자에게 신속히 배포.
CDN의 장점
장점 | 설명 |
빠른 콘텐츠 제공 | 사용자와 가까운 서버에서 콘텐츠를 제공하여 로딩 속도 개선. |
원본 서버 부하 감소 | 요청의 대부분을 CDN 서버에서 처리하므로 원본 서버 부하가 줄어듦. |
전 세계적 접근성 | 글로벌 네트워크를 통해 어디서나 빠르게 콘텐츠를 제공. |
보안 강화 | HTTPS 지원, 방화벽(WAF), DDoS 방지 기능 제공. |
대규모 트래픽 처리 | 동시에 많은 사용자가 접속하더라도 안정적으로 콘텐츠 제공. |
CDN의 단점
단점 | 설명 |
비용 증가 | CDN 사용량(요청 수, 전송량)에 따라 비용이 발생. |
캐시 갱신 문제 | 콘텐츠가 자주 변경되면 캐시와 원본 서버의 데이터가 동기화되지 않을 수 있음. |
복잡한 설정 | 설정 및 관리가 복잡할 수 있음. |
동적 콘텐츠 한계 | 캐싱이 정적 콘텐츠에 더 적합하며, 동적 콘텐츠는 제한적으로 최적화 가능. |
AWS CloudFront와의 관계
AWS의 CloudFront는 대표적인 CDN 서비스로, 다음과 같은 기능을 제공합니다:
- S3, EC2와 통합: AWS 서비스와의 원활한 연동.
- 엣지 로케이션 제공: 전 세계적으로 분산된 엣지 서버를 통해 빠른 콘텐츠 제공.
- 보안 옵션: HTTPS, WAF, DDoS 방지 지원.
쉽게 이해하기
- **CDN은 "전 세계에 퍼져 있는 콘텐츠 배달 네트워크"**입니다.
- 사용자와 가까운 위치에서 콘텐츠를 전달하므로 빠르고 안정적인 서비스를 제공합니다.
- 예: 사용자가 미국에 있고, 원본 서버가 한국에 있다면, CDN은 미국에 있는 서버에서 콘텐츠를 제공하여 로딩 시간을 줄입니다.
Invalidation(인밸리데이)
🐳 엣지 로케이션(캐시 서버)에 저장된 콘텐츠를 무효화(삭제)하여, 원본 서버에서 최신 콘텐츠를 가져오도록 만드는 작업입니다.
[ 그래서 뭔말인가? ]
CloudFront와 같은 CDN 캐시는 클라이언트(사용자 기기)가 아닌, 서버 측에서 사용자의 가까운 위치(엣지 로케이션)에 저장되는 캐시를 의미합니다.
= 그러니까, 유튜브 영상 재상을 예로들면, 클라이언트인 사용자의 스마트폰의 캐시, 데이터를 처리하는 서버의 캐시 말고, 서버에서 처리된 데이터를 전송하기 위한 캐시 서버의 캐시를 지운다는 것
= 그럼 왜 필요한데? 유튜브 영상의 조회수나 제목이 바뀌면 서버에서 당연히 임시 저장하는 캐시 서버에도 변경사항을 보내준다. 그런데 변경된 데이터를 캐시 서버에는 굳이 저장할 필요없으니 지운다는 것
캐시는 어디에 저장될까?
- 클라이언트 측 캐시 (Client-Side Cache)
- 사용자의 브라우저나 앱에 저장된 캐시.
- 예: 웹 브라우저가 이미지, CSS, JS 파일을 로컬 디스크에 저장해 다음 요청 시 빠르게 제공.
- 유튜브 예: 유튜브 앱이 썸네일, 동영상 리스트를 로컬에 저장하는 것.
- CDN 캐시 (CloudFront와 같은 엣지 캐시)
- 전 세계에 분산된 **엣지 로케이션(캐시 서버)**에 저장된 데이터.
- 원본 서버로부터 데이터를 가져온 뒤, 이 데이터를 사용자와 가까운 CDN 서버에 캐싱.
- 유튜브 예: 사용자가 재생하려는 동영상이 CDN 서버(유튜브의 전 세계 데이터 센터 중 하나)에 이미 캐싱되어 있다면, 바로 제공. 그렇지 않다면 원본 서버에서 가져와 캐싱 후 제공.
- 원본 서버 측 캐시
- 데이터베이스나 애플리케이션 서버에 가까운 캐시.
- 예: Redis, Memcached 같은 서버 쪽 캐싱 기술.
CloudFront Invalidation은 어떤 캐시를 삭제하나?
CloudFront Invalidation은 **CDN 서버(엣지 로케이션)**에 저장된 캐시를 무효화합니다.
이것은 클라이언트 측 브라우저 캐시를 삭제하지 않습니다.
유튜브를 예로 들면 이런 동작을 하게 됩니다:
- 사용자가 유튜브에서 동영상을 재생 요청.
- 이 요청은 **CDN 서버(엣지 로케이션)**로 라우팅.
- CDN 서버에서 동영상 확인
- CDN 서버에 요청한 동영상이 캐싱되어 있다면, 캐시된 데이터를 바로 제공.
- 만약 캐시가 없다면, **원본 서버(유튜브 데이터센터)**에서 데이터를 가져오고 이를 캐싱.
- Invalidation 발생 (유튜브 운영 측에서 동영상 정보를 업데이트한 경우)
- 운영자가 CDN 캐시를 Invalidation하면, CDN 서버에서 캐시된 동영상 데이터를 무효화(삭제).
- 다음 요청 시, CDN 서버는 원본 서버에서 최신 데이터를 가져와 사용자에게 제공.
캐시 무효화(Invalidation)는 왜 필요할까?
- 콘텐츠 업데이트
- 동영상 제목, 썸네일, 또는 자막이 변경되었을 경우.
- 클라이언트가 변경된 최신 콘텐츠를 볼 수 있도록 캐시를 무효화.
- 긴 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의 동작 방식
- 사용자가 특정 객체 또는 경로에 대해 Invalidation 요청을 수행.
- CloudFront는 지정된 객체(캐시된 콘텐츠)를 무효화(삭제).
- 다음 요청이 들어오면, CloudFront는 원본 서버에서 최신 콘텐츠를 가져와 캐싱하고 사용자에게 제공.
Invalidation의 주요 특징
- 대상 지정
- 특정 파일(예: image.jpg)이나 전체 경로(예: /images/*)에 대해 Invalidation 수행 가능.
- TTL(Time-To-Live)와 관계 없음
- Invalidation은 캐시의 TTL 설정과 상관없이 즉시 무효화 작업을 실행.
- 비용 발생
- 매월 1,000개의 요청은 무료.
- 이후 추가 요청은 비용 발생(1,000개당 약 $0.005).
- 빠른 반영
- Invalidation 요청은 대부분 몇 초에서 몇 분 내에 처리.
Invalidation 요청 방법
- CloudFront 콘솔에서 수행
AWS Management Console에서 CloudFront 배포를 선택 후, Invalidation 요청을 생성. - AWS CLI 사용
예: - aws cloudfront create-invalidation --distribution-id EXAMPLE123 --paths "/images/*"
- 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의 주요 사용 사례
- 콘텐츠 변경 후 즉시 반영
- 웹사이트의 CSS, JS, 이미지가 업데이트된 경우 캐시를 무효화하여 최신 파일 제공.
- 긴 TTL 설정으로 캐시가 오래 유지되는 경우
- 캐시 TTL이 길게 설정되었지만, 원본 서버의 콘텐츠가 변경된 경우.
- 긴급 콘텐츠 변경
- 중요한 정보나 이미지를 긴급하게 업데이트해야 할 때.
- 동적 콘텐츠 제공
- 특정 콘텐츠가 자주 업데이트되어 캐시를 수동으로 관리해야 하는 경우.
Invalidation 요청을 최소화하는 방법
- 파일 이름 버전 관리
- 파일 이름에 버전을 포함하여 변경 시 새 이름을 사용.
- 예: style-v1.css → style-v2.css.
- 이 방법은 Invalidation 요청 없이도 새 파일을 캐시하도록 강제.
- 적절한 TTL 설정
- 캐시 만료 주기를 적절히 설정하여 Invalidation 빈도를 줄임.
- 부분 Invalidation 사용
- 전체 경로나 모든 파일을 무효화하는 대신, 필요한 파일만 지정.
쉽게 이해하기
- Invalidation은 "CDN 캐시를 강제로 갱신"하는 작업입니다.
- 예: CloudFront에 저장된 오래된 이미지 파일을 최신 파일로 교체하려면, 해당 파일을 Invalidation 요청하여 새 버전이 제공되도록 설정.
'Cloud > AWS' 카테고리의 다른 글
[AWS] EKS (AWS의 쿠버네티스 관리 서비스) (0) | 2025.03.13 |
---|---|
[AWS] Elastic Beanstalk (애플리케이션 배포 및 관리 플랫폼) (1) | 2025.03.12 |
[AWS] ACL (AWS의 리소스 접근 권한을 제어하는 규칙) (0) | 2025.03.10 |
[AWS] ARN (AWS의 고유 식별자) (0) | 2025.03.09 |
[AWS] Bucket (S3에서 데이터를 저장하는 기본 단위(컨테이너)) (1) | 2025.03.08 |