안녕하세요 서후아빠입니다. ^_^
이번 세션은 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 설정값과 동일하게 설정 |
'Networking' 카테고리의 다른 글
[실습] Amazon Route 53에서 Public & Private domain (도메인) 등록하기 (0) | 2022.07.20 |
---|---|
[실습] Amazon TGW(Transit Gateway) 구성하기 (Hub역할 TGW, On-premise와 Site-to-Site VPN 연결)-6편 (0) | 2022.07.20 |
[Tip] NAT 구조, L2 동작하는 3rd party 인스턴스에서 이상 동작하는 경우 해결하기 (0) | 2022.07.19 |
[실습] AWS Site-to-Site VPN 구성하기 (Static, Openswan)-2편 (0) | 2022.07.19 |
[실습] AWS Endpoint (Interface, Gateway) 이용하여 S3 접근하기 (0) | 2022.07.19 |