Amazon CloudFront (CDN) 정리

salgu·2024년 3월 9일
0

AWS

목록 보기
10/10
post-thumbnail

Amazon CloudFront란


Amazon CloudFront는 글로벌 콘텐츠 전송 네트워크(CDN) 서비스입니다. 이 서비스는 사용자에게 콘텐츠를 빠르게 전달하기 위해 전 세계에 분산된 서버 네트워크를 사용합니다. CloudFront는 웹페이지, 이미지, 동영상 등 다양한 웹 자원을 끝 사용자에게 빠르게 전달합니다.

  1. 웹페이지, 이미지, 동영상 등 컨텐츠를 원본 서버에서 받아와 엣지 로케이션에 캐싱
  2. 해당 컨텐츠에 대한 요청이 들어오면 캐싱해둔 컨텐츠 제공

용어

1. Origin (원본)
실제 컨텐츠가 존재하는 서버 (S3, EC2 등)

2. Distribution (배포)
loudFront의 CDN 구분 단위로 여러 엣지 로케이션으로 구성된 컨텐츠 제공 채널

3. Behavior (동작)
프로토콜, 캐싱 정책, 로그 등 어떻게 컨텐츠를 클라이언트에게 전달할지 설정

4. Edge Location(POP, 엣지 로케이션)
데이터를 가장 빠른 속도로 제공하기 위한 거점

특징

글로벌 분산 네트워크

CloudFront는 전 세계에 걸쳐 수십 개의 데이터 센터(엣지 로케이션)를 보유하고 있어 사용자가 어디에 있든지 가까운 위치에서 콘텐츠를 받아볼 수 있습니다. 이는 콘텐츠 로딩 시간을 줄여줍니다.

보안

AWS의 보안 기능과 통합되어 DDoS 공격 방어, SSL/TLS 암호화, 그리고 선택적으로 사용자 정의 가능한 보안 정책을 제공하여 콘텐츠와 애플리케이션을 보호합니다.


Origin (원본)


클라이언트에게 보여줄 컨텐츠의 원본이 있는 거점입니다.
Origin 크게 두가지의 종류가 있습니다. S3가 아니면 다 Custom Origin 입니다.

  1. S3
  2. Custom Origin (EC2, ELB 등등)

S3에는 다양한 기능을 추가적으로 제공하고 Custom Origin에서는 Origin을 그룹화 하여 Failover에도 대응할 수 있습니다.
Origin Group으로 요청할때 Primary, Secondary에서 모두 실패할 경우 따로 커스텀 에러페이지도 생성이 가능합니다.


CloudFront의 캐싱 티어


Regional Edge Cache
Edge Location의 상위 단위로 좀 더 큰 캐싱 거점

실제 CloudFront는 2티어로 이루어져 있고 Edge Location에서 바로 원본으로 접속하는것이 아니라 Regional Edge Cache을 거쳐 2단계 캐싱이 됩니다. (1:N:M)


Cache Key


CloudFront에서 캐싱되는 데이터들은 고유의 CacheKey 단위로 캐시됩니다.

주요 구성 요소
1. Path
2. Query String
3. HTTP Header
4. Cookie
위와 같은 여러 요소로 Cache Key를 만들어 데이터가 캐싱됩니다.

HTTP Header

  1. 언어별 캐싱
  2. 클라이언트의 디바이스별로 캐싱
    CloudFront에서 별도로 User-Agent를 기반으로 전용헤더를 생성
  3. 지역별 캐싱

헤더 명은 대소문자를 구분하지 않지만 값은 대소문자를 구분합니다.


Cache 만료


캐시된 오브젝트는 일정기간 (TTL) 이후 만료됩니다.
만료된 이후 요청이 올 경우 CloudFront는 Origin에 오브젝트가 갱신이 되었는지 확인합니다.
Origin이 304 Not Modified를 줄 경우 갱신하지 않음
Origin이 200 ok와 오브젝트를 줄 경우 갱신

TTL

Cache 오브젝트를 얼마나 오래 보관할지 설정합니다.
기본 24시간동안 Cache를 유지하고 있고 모든 CloudFront의 오브젝트에 적용됩니다.

TTL의 종류

  1. Minimum TTL: 최소 TTL, 파일 단위 컨트롤에서 줄 수 있는 최소 TTL
  2. Maximum TTL: 최대 TTL, 파일 단위 컨트롤에서 줄 수 있는 최대 TTL
  3. Default TTL: 별도의 설정이 없을 경우 부여되는 기본 TTL (24시간)

Cache-Control

파일 단위에서는 Origin에서 Cache-Control 헤더 혹은 Expires 헤더를 포함해서 조절이 가능합니다. 즉 얼마나 오래 오브젝트를 캐시하는지 기간을 설정합니다.
Cache-Control: max-age=3600

1. max-age:
CloudFront 캐시와 브라우저 캐시에 둘 다 영향

2. s-maxage:
CloudFront만 영향

3. no-cache, no-store:
캐싱하지 않음 (단 Min TTL이 0이상일 경우 Min TTL로 최저 설정 (10초))

4. Expires:
Cache가 만료되는 정확한 시간을 설정


Cache Behavior


Cache Behavior란 CloudFront의 요청이 어떻게 처리되는지 정의하는 다양한 설정입니다.

경로 패턴 단위로 Behavior를 구성할 수 있습니다.
(files/*, files/*.png, *.png)
경로 패턴 목록 중 처음으로 매칭된 패턴의 Behavior를 적용합니다.

Policy

Caching Policy

  1. 어떤 키(HTTP Header, Cookie, QueryString 등)로 오브젝트를 캐시하는지
  2. 얼마나 오래 캐시하는지 (TTL)
  3. 오브젝트를 압축 저장 관련 설정

즉 CloudFront에 CacheKey와 오브젝트가 캐싱될때 CacheKey를 맞춤설정 할 수 있습니다.

Origin Request Policy

  1. Origin에 오브젝트를 요청할 때 어떤 내용을 전달할 것인지(HTTP Header, Cookie, QueryString 등)
  2. Cache Key로 사용할지 여부와 독립적으로 설정 가능

클라이언트가 오브젝트를 요청해 CloudFront에서 Origin으로 요청이 전달될 때 Origin Request Policy를 설정해주지 않는다면 CacheKey로 설정되지 않은 내용들은 전부 사라져 버립니다. 그렇기 때문에 Origin Request Policy 설정해주면 됩니다.

Response Headers Policy

응답 과정에서 어떤 HTTP Header를 제거하거나 더할지 설정



reference:

profile
https://github.com/leeeesanggyu, leeeesanggyu@gmail.com

0개의 댓글