본문 바로가기

Networking

[이론] Amazon CloudFront (CDN 서비스) 기본 개념

반응형

안녕하세요 서후아빠입니다. ^_^

이번 세션은 Amazon CloudFront(일명 CDN)에 대해서 업무적으로 필요한 최소한의 개념에 대해서 간단히 정리해 보았습니다.


개요

Contents(웹페이지, 이미지, 동영상 등)를 Origin에서 받아와서 Caching하여 요청자에게 제공

  - Origin~요청자간 지리적 거리에 따른 지연 발생을 CDN 통해 제거

  - Origin(서버) 부하 줄여서 서버 성능 감소에 따른 인스턴스 비용 절감
Edge location : Contents가 Caching되고, 요청자에게 제공되는 지점
동작 방식

  - 요청받은 Contents가 Edge location에 있으면 즉시 제공

  - 요청받은 Contents가 Edge location에 없으면 Origin에서 받아와서 제공

구성

  - Origin : 실제 Contents 위치(S3, EC2, ELB, Route 53, 온프레미스 등)

  - Distribution : CloutFront의 CDN 구분 단위, 서비스별 구분, 여러 Edge location으로 구성된 Contents 제공 채널

주요 용어

TTL(Time to Live) : Caching된 Contents가 살아있는 시간, TTL 시간 이후 Caching에서 삭제

파일 무효화(Invalidate) : TTL 시간 전에 강제로 Caching에서 삭제

  - 주로 새로운 파일 업데이트 후 수동으로 진행

  - 비용 발생 : 1000건/월 무료, 이후 5~6원/건 

  - 방법 : CloudFront API, 콘솔, 3rd Party Tool 등 사용

Cache Key : 어떤 기준으로 Contents를 Caching할지 결정, 성능에 중요 

  - 기본적으로 URL 통해 동일 Contents 제공

  - 이후 Header와 Cookie, 쿼리 스트링 등 사용하여 지역에 따라 다른 언어의 Contents를 제공

정책 (CloudFront가 동작하는 방법 정의)

Cache Control : Caching 방법 및 압축

  - TTL, Cache Key 정책

  - CloudFront가 어떻게 Caching을 할지 결정

Origin Request : Origin으로 어떤 내용을 보낼지

  - Origin에 쿠키, Header, 쿼리 스트링 중 어떤 것을 보낼지

Viewer에게 보낼 HTTP Header

  - Origin으로 전송 가능한 뷰어 정보 : 디바이스 타입, IP, Country, 도시, 위/경도, 타임존 등

보안 (Viewer access 제한)

Signed URL : S3 Signed URL과 비슷한 방식, 허용된 유저에게만 URL 전달하여 Contents 제공, 하나의 File or Contents 허용 (ex : 유료회원만 접근 허용)

Signed Cookie : 다수 File or Contents 허용

Origin Access Identity : S3 Contents를 CloudFront 통해서만 허용

Field Level Encryption : CloudFront~Origin 구간, 최대 10개 필드, 공개키 방식

기능

정적/동적 모두 최적화

  - 정적 : Caching으로 속도 최적화

  - 동적 : Network 최적화, 연결 유지, gzip 압축 등 사용

     ※ Contents download 전단계 시간 최적화 : DSN쿼리 > TCP연결 > 첫번째 바이트

HTTPS 지원 : Origin에서 HTTPS 미지원이라도 CloudFront에서 HTTPS 구성 가능

지리적(Region) 제한 : 특정 Region 접근 제한

다른 서비스와 연계 : AWS Shield, Lambda@Egde, CloudFront Function 등
지표 기능 : 캐시 상태, 가장 많이 요청 받는 Contents, Top Referrer

Lambda@Egde, CloudFront Function

Lambda@Egde : Edge location에서 동작하는 Lambda

  - 한국 요청자는 한국 웹서버, 미국 요청자는 미국 웹서버 분산 처리

  - Custom Error 메시지 

  - 쿠키 검사해서 다른 페이지로 리다이렉팅 => A/B 테스팅
  -  CloudFront에서 Origin 도착 전 인증

CloudFront Function : Lambda@Edge 1/6비용으로 경량 javascript만 실행

비용 (ex : S3를 Origin으로 구성한 경우)

S3에서 발생되는 비용 목록

  - 데이터 저장 비용

  - 신규 데이터 업로드에 따른 PUT 비용

  - CloudFront(CF)에서 purge로 인하여 cache miss가 발생하면 CF에서 S3로 해당 데이터를 GET하는 비용

CloudFront(CF)에서 발생하는 비용 목록

  - Client에서 CF로 HTTPS 요청 비용 

  - CF에서 S3로 Requests 건수 비용 

  - 네트워크 비용

  - CF의 로그 비용 

  - CF의 필드레벨 암호화 비용

  - CF의 invalidation 비용

상세 비용은 AWS비용 계산기(https://calculator.aws/#/addService?nc2=pr)에서 확인하시기 바랍니다.

S3에서 이미지 CDN 제공하는 구성

S3의 버킷명은 mybuckt, 버킷 내 폴더(Prefix)명은 folder, 폴더 내 /common/images/logo.png 저장된 상태라고 가정

사용자 요청하는 URL은 http://sample.com/folder/common/images/logo.png라고 가정

구분 이미지를 서비스도메인별로 사용하는 경우 이미지를 서비스도메인별로 사용하지 않는 경우(공유)
CloudFront 설정 옵션 (Origin path) 설정 (folder) 미설정
사용자가 URL을 요청하면 CF에서는 folder 제외하고 이미지 연결
(/common/images/logo.png)
CF에서는 folder 포함하여 이미지 연결
(/folder/common/images/logo.png)
요청하는 URL에 대해서 CF로 연결되는 과정에서 Origin path를 어떻게 처리할지에 대해서 확인된 상태에서 Origin path 설정을 해야 합니다. 

타사 CDN에서 CF로 마이그레이션 (Origin은 S3 경우)

타사 CDN 컬럼 타사 CDN 설정값 CF 컬럼 CF 설정값
도메인 sample.com Origin domain sample.com
원본 Host header folder Alternate domain name (CNAME) sample.com
Querystring 인식 무시 Cache key and origin requests > Cache policy and origin request policy > Cache policy Query strings : None
TTL 원본 Max age Cache key and origin requests > Object caching Use origin cache headers
TTL HTTP code
 - 2xx : 300s
 - 3xx : 300s
Cache key and origin requests > Cache policy and origin request policy > Cache policy Min/Max/Default : 300/300/300
TTL HTTP code 
 - 4xx : 30s
 - 5xx : 30s
생성된 CF 선택 > Error pages  (tab) 타사 CDN 설정값과 동일하게 설정
응답헤더 적용(CORS) Access-Control-Allow-Origin: https://folder.sample.com:/9000
Access-Control-Allow-Headers: Content-Type *
Access-Control-Allow-Methods: GET
Access-Control-Allow-Credentials: ture
Cache key and origin requests > Origin request policy > response headers policy 타사 CDN 설정값과 동일하게 설정
반응형