Amazon CloudFront Day 2019
성능 최대화를 위한 CloudFront 설정 Best Practice
GS네오텍과 Amazon이 함께하는
1. CloudFront를 활용한 웹 서비스 성능 향상
2. 성능 최적화 설정방안 및 예시
3. 기타 기능 활용방안
CONTENTS
AWS CloudFront로 웹 서비스
성능 향상은 어떻게?
• 대규모 / 고성능 Super Pop Architecture
• 단순 적용만으로도 글로벌 서비스 배포 성능 향상
Amazon CloudFront : Global Infra
30개국 / 69개 도시 / 180개 Edge (169개 Edge Location & 11개 Regional Edge Caches)
CloudFront를 활용한 서비스 성능 향상01 |
VPC
ALB
EC2 EC2
Amazon CloudFront
※ 2019년 6월 기준
※ 2019년 6월 기준
• 대규모 / 고성능 Super Pop Architecture
• 단순 적용만으로도 글로벌 서비스 배포 성능 향상
Amazon CloudFront : Global Infra
30개국 / 69개 도시 / 180개 Edge (169개 Edge Location & 11개 Regional Edge Caches)
CloudFront를 활용한 서비스 성능 향상01 |
VPC
ALB
EC2 EC2
Amazon CloudFront
10ms
Amazon CloudFront
90ms
지리적으로 가까운~
CDN X
100ms
아주 먼 !!!
ORIGIN
CloudFront 성능 최적화는 어떻게?
콘텐츠 유형별 배포정책 설정
콘텐츠 유형별 배포정책 설정
네트워크 환경 최적화
콘텐츠 유형별 배포정책 설정
네트워크 환경 최적화
성능 최적화 설정방안02 |
1. 콘텐츠 유형별 배포정책 설정 및 예시
콘텐츠 특징에 따른 유형 분류 및 TTL(Time To Live)정의
Long-lived
*.css, *.js, *.jpg, *.png
소프트웨어 다운로드,
이미지 파일,
VOD Manifests
• 높은 TTL 사용
• 버전관리를 통해 갱신된
객체 전달
Static Contents Dynamic Contents
Always Updated
항상 최신화
캐싱이 불가능한 객체
• 빈번한 업데이트가
발생하는 리소스
• 요청마다 다르게 응답하는
콘텐츠
• 매우 낮거나 0 TTL 사용
Short-lived
Landing pages – index.jsp
뉴스, 날씨 등
Live Streaming manifests
• 낮은 TTL 사용,
주기적 업데이트 사용
• 원본 부하 최소화
성능 최적화 설정방안02 |
1. 콘텐츠 유형별 배포정책 설정 및 예시 > 1.1. Static Contents
콘텐츠 특징에 따른 유형 분류 및 TTL(Time To Live)정의
Long-lived
*.css, *.js, *.jpg, *.png
소프트웨어 다운로드,
이미지 파일,
VOD Manifests
• 높은 TTL 사용
• 버전관리를 통해 갱신된
객체 전달
Static Contents Dynamic Contents
Always Updated
항상 최신화
캐싱이 불가능한 객체
• 빈번한 업데이트가
발생하는 리소스
• 요청마다 다르게 응답하는
콘텐츠
• 매우 낮거나 0 TTL 사용
Short-lived
Landing pages – index.jsp
뉴스, 날씨 등
Live Streaming manifests
• 낮은 TTL 사용,
주기적 업데이트 사용
• 원본 부하 최소화
성능 최적화 설정방안02 |
1. 콘텐츠 유형별 배포정책 설정 및 예시 > 1.1. Static Contents
객체별 오리진 Cache-control header 예시
• Long-Lived, High TTL
 Cache-control :
max-age=31536000; (브라우저)
s-maxage=86400 (엣지캐시)
• Short-Lived, Low TTL
 Cache-control :
public;
max-age=60
Amazon
CloudFront
10ms
Cache
Hit
성능 최적화 설정방안02 |
Login Pages
Index.html
Cache-Control:
no-cache;
max-age=30
1. 콘텐츠 유형별 배포정책 설정 및 예시 > 1.1. Static Contents
Static Assets
*.css, *.js, images,
Software Downloads
Cache-Control:
Public;
Max-age=31536000
Static Contents Cache-Control Header 예시
Live Streaming
*.m3u8
Cache-Control:
public;
max-age=2
Media Fragment
*.ts
Cache-Control:
public;
max-age=31536000
성능 최적화 설정방안02 |
Amazon
CloudFront
10ms
Cache
Hit
• Origin 캐시 헤더와 다른 CloudFront Edge Cache TTL 정의
CloudFront Min, Max, Default TTL 활용하여 Edge Cache TTL 재정의
1. 콘텐츠 유형별 배포정책 설정 및 예시 > 1.1. Static Contents
성능 최적화 설정방안02 |
1. 콘텐츠 유형별 배포정책 설정 및 예시 > 1.2. Dynamic Contents
콘텐츠 특징에 따른 유형 분류 및 TTL(Time To Live)정의
Long-lived
*.css, *.js, *.jpg, *.png
소프트웨어 다운로드,
이미지 파일,
VOD Manifests
• 높은 TTL 사용
• 버전관리를 통해 갱신된
객체 전달
Static Contents Dynamic Contents
Always Updated
항상 최신화
캐싱이 불가능한 객체
• 빈번한 업데이트가
발생하는 리소스
• 요청마다 다르게 응답하는
콘텐츠
• 매우 낮거나 0 TTL 사용
Short-lived
Landing pages – index.jsp
뉴스, 날씨 등
Live Streaming manifests
• 낮은 TTL 사용,
주기적 업데이트 사용
• 원본 부하 최소화
성능 최적화 설정방안02 |
1. 콘텐츠 유형별 배포정책 설정 및 예시 > 1.2. Dynamic Contents
• 0초 TTL 사용으로 항상 새로운 객체 전달
 Cache-control :
no-cache;
max-age=0;
private (브라우저캐시)
 Cache-Control:
public; (엣지캐시)
max-age=0;
객체별 Cache-control header를 이용한 Dynamic Contents 전송
10ms
Origins
Cache
Miss
90ms
성능 최적화 설정방안02 |
1. 콘텐츠 유형별 배포정책 설정 및 예시 > 1.2. Dynamic Contents
객체별 Cache-control header를 이용한 Dynamic Contents 전송
• no-cache, max-age=0은 Edge에 캐시됨
 두번째 요청이 만료된 객체의 변화 여부를 확인
 변화가 없음을 확인했다면 캐싱된 객체 제공
10ms
Origins
Cache
Miss
90ms
성능 최적화 설정방안02 |
1. 콘텐츠 유형별 배포정책 설정 및 예시 > 1.2. Dynamic Contents
객체별 Cache-control header를 이용한 Dynamic Contents 전송
• Edge에 캐시 하지 않으려면 (ALL-BYPASS)
 Cache-Control : private, no-store
 AWS CloudFront Behavior Setting (Custom Origin인 경우에만)
콘텐츠 유형별 배포정책 설정
네트워크 환경 최적화
성능 최적화 설정방안02 |
2. 네트워크 최적화 방안
AWS Global Backbone 기본 적용으로 전송성능 향상
Cac
he
Miss
• Region, Edge 간 전용회선
• 이중화된 100GbE 네트워크
• 모든 AWS 리전 간 트래픽은
Amazon Global Backbone
을 사용하도록 설계
• AWS Origin 사용하는 경우
Backbone 활용 극대화
성능 최적화 설정방안02 |
2. 네트워크 최적화 방안
Origin Keep Alive Connection 을 통한 연결 설정 시간 단축
AWS Cloud
VPC
Amazon
EC2
Elastic Load
Balancing (ELB)
10ms
2번째 사용자
130ms
90ms
Amazon
CloudFront
Keep Alive
Connection400ms
1번째 사용자
Origins
기본 5초
~180초 상향
성능 최적화 설정방안02 |
2. 네트워크 최적화 방안
Gzip 압축 기능으로 최대 80%의 속도, 비용 개선
• 1KB ~ 10MB 크기의 파일 압축
• 텍스트위주 js, css 등 효과적
• 웹 페이지 로딩 속도 개선
• 데이터 전송 비용 절감
Accept-
Encoding
:gzip
HTTP
Amazon
CloudFront Origin
Header 포워딩
Amazon CloudFront 정책 예시
AWS CloudFront 정책 예시03 |
• Ex) www.nam0jae.com 웹사이트 메인 페이지 CloudFront 배포시,
단일 AWS CloudFront Behavior에 콘텐츠 Path(유형)별 정책 적용
• 이 경우 Default(*) 는 Dynamic All By-PASS 로 설정.
Static Contents
Dynamic Content
Amazon CloudFront + Amazon Media Service
AWS CloudFront 정책 예시03 |
Amazon
CloudFront
LIVE
VOD
VOD Source
AWS Elemental
MediaConvert
Amazon
S3
Amazon
S3
Transcoding
Transcoded
Media Origin
Content
Delivery
Media
upload
Live Source
AWS Elemental
MediaLive
AWS Elemental
MediaStore
Ingest
Encode
Stream
Content
Delivery
AWS CloudFront 정책 예시03 |
• Cache Behavior (Min, Max, Default TTL)
 <0순위> *master.m3u8 (TTL : 86,400 sec)
 <1순위> *.m3u8 (TTL : 2 sec, Segment length 2 초 이하인 경우)
 <2순위> *.ts (TTL : 86,400 sec) (출력 이름에 $dt$ 사용)
 <3순위> Default (*) (TTL : default)
Media Contents (LIVE)
AWS CloudFront 정책 예시03 |
• Cache Behavior (Min, Max, Default TTL)
 <0순위> *.m3u8 (TTL : 86,400 sec)
 <1순위> *.ts (TTL : 86,400 sec // 21600 sec ~ 604800 sec)
 <2순위> Default (*) (TTL : default)
Media Contents (VOD)
추가! 팁
기타 활용 기능04 |
캐싱키 Forwarding 최소화
CloudFront 캐시 Key 가 되는 Request Header Whitelist 적용
• 캐싱키 최소화 지정으로 원본부하감소 및 캐시효율 향상
기타 활용 기능04 |
캐싱키 Forwarding 최소화
• 캐싱키 최소화 지정으로 원본부하감소 및 캐시효율 향상
CloudFront 캐시 Key 가 되는 Cookies, Query String Whitelist 적용
기타 활용 기능04 |
캐싱키 Forwarding 최소화
• GET /index.html HTTP/1.1
 Host: www.nam0jae.com
• Connection: keep-alive
• User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/74.0.3729.169 Safari/537.36
• Accept: text/html,application/xhtml+xml,application/xml;
 Referer: https://www.google.com/
• Accept-Encoding: gzip, deflate, br
• Accept-Language: ko-KR,ko;
 Cookie: _ga=GA1.2.1510404968.1561333683; user-id_=158979;
CloudFront 캐시 Key 가 되는 Value만 Forwarding
기타 활용 기능04 |
Custom Error Page 설정
• Edge 에러페이지 기본 300초 캐시. 에러페이지 빠른 복구시 사용
• 주로 라이브 서비스에는 기본 적용.
사용자 정의 에러페이지 설정 및 TTL 정의
기타 활용 기능04 |
Origin 장애 조치 지원
• Origin Group 내에 2개이상 이상의 Origin 설정
• Primary Origin 장애 감지 시
• Secondary Origin 에서 서비스 제공
• 장애 조치 기준코드 복수 선택
 500 Internal Server Error
 502 Bad Gateway
 503 Service Unavailable
 504 Gateway Timeout
 404 Not Found
 403 Forbidden
Origin Group
복잡한 원본 환경
어려운 Cache-Control
쉽고 간편한 Amazon CloudFront 적용
어떻게?
감사합니다

성능 최대화를 위한 CloudFront 설정 Best Practice

  • 1.
    Amazon CloudFront Day2019 성능 최대화를 위한 CloudFront 설정 Best Practice GS네오텍과 Amazon이 함께하는
  • 2.
    1. CloudFront를 활용한웹 서비스 성능 향상 2. 성능 최적화 설정방안 및 예시 3. 기타 기능 활용방안 CONTENTS
  • 3.
    AWS CloudFront로 웹서비스 성능 향상은 어떻게?
  • 4.
    • 대규모 /고성능 Super Pop Architecture • 단순 적용만으로도 글로벌 서비스 배포 성능 향상 Amazon CloudFront : Global Infra 30개국 / 69개 도시 / 180개 Edge (169개 Edge Location & 11개 Regional Edge Caches) CloudFront를 활용한 서비스 성능 향상01 | VPC ALB EC2 EC2 Amazon CloudFront ※ 2019년 6월 기준
  • 5.
    ※ 2019년 6월기준 • 대규모 / 고성능 Super Pop Architecture • 단순 적용만으로도 글로벌 서비스 배포 성능 향상 Amazon CloudFront : Global Infra 30개국 / 69개 도시 / 180개 Edge (169개 Edge Location & 11개 Regional Edge Caches) CloudFront를 활용한 서비스 성능 향상01 | VPC ALB EC2 EC2 Amazon CloudFront 10ms Amazon CloudFront 90ms 지리적으로 가까운~ CDN X 100ms 아주 먼 !!! ORIGIN
  • 6.
  • 7.
  • 8.
    콘텐츠 유형별 배포정책설정 네트워크 환경 최적화
  • 9.
    콘텐츠 유형별 배포정책설정 네트워크 환경 최적화
  • 10.
    성능 최적화 설정방안02| 1. 콘텐츠 유형별 배포정책 설정 및 예시 콘텐츠 특징에 따른 유형 분류 및 TTL(Time To Live)정의 Long-lived *.css, *.js, *.jpg, *.png 소프트웨어 다운로드, 이미지 파일, VOD Manifests • 높은 TTL 사용 • 버전관리를 통해 갱신된 객체 전달 Static Contents Dynamic Contents Always Updated 항상 최신화 캐싱이 불가능한 객체 • 빈번한 업데이트가 발생하는 리소스 • 요청마다 다르게 응답하는 콘텐츠 • 매우 낮거나 0 TTL 사용 Short-lived Landing pages – index.jsp 뉴스, 날씨 등 Live Streaming manifests • 낮은 TTL 사용, 주기적 업데이트 사용 • 원본 부하 최소화
  • 11.
    성능 최적화 설정방안02| 1. 콘텐츠 유형별 배포정책 설정 및 예시 > 1.1. Static Contents 콘텐츠 특징에 따른 유형 분류 및 TTL(Time To Live)정의 Long-lived *.css, *.js, *.jpg, *.png 소프트웨어 다운로드, 이미지 파일, VOD Manifests • 높은 TTL 사용 • 버전관리를 통해 갱신된 객체 전달 Static Contents Dynamic Contents Always Updated 항상 최신화 캐싱이 불가능한 객체 • 빈번한 업데이트가 발생하는 리소스 • 요청마다 다르게 응답하는 콘텐츠 • 매우 낮거나 0 TTL 사용 Short-lived Landing pages – index.jsp 뉴스, 날씨 등 Live Streaming manifests • 낮은 TTL 사용, 주기적 업데이트 사용 • 원본 부하 최소화
  • 12.
    성능 최적화 설정방안02| 1. 콘텐츠 유형별 배포정책 설정 및 예시 > 1.1. Static Contents 객체별 오리진 Cache-control header 예시 • Long-Lived, High TTL  Cache-control : max-age=31536000; (브라우저) s-maxage=86400 (엣지캐시) • Short-Lived, Low TTL  Cache-control : public; max-age=60 Amazon CloudFront 10ms Cache Hit
  • 13.
    성능 최적화 설정방안02| Login Pages Index.html Cache-Control: no-cache; max-age=30 1. 콘텐츠 유형별 배포정책 설정 및 예시 > 1.1. Static Contents Static Assets *.css, *.js, images, Software Downloads Cache-Control: Public; Max-age=31536000 Static Contents Cache-Control Header 예시 Live Streaming *.m3u8 Cache-Control: public; max-age=2 Media Fragment *.ts Cache-Control: public; max-age=31536000
  • 14.
    성능 최적화 설정방안02| Amazon CloudFront 10ms Cache Hit • Origin 캐시 헤더와 다른 CloudFront Edge Cache TTL 정의 CloudFront Min, Max, Default TTL 활용하여 Edge Cache TTL 재정의 1. 콘텐츠 유형별 배포정책 설정 및 예시 > 1.1. Static Contents
  • 15.
    성능 최적화 설정방안02| 1. 콘텐츠 유형별 배포정책 설정 및 예시 > 1.2. Dynamic Contents 콘텐츠 특징에 따른 유형 분류 및 TTL(Time To Live)정의 Long-lived *.css, *.js, *.jpg, *.png 소프트웨어 다운로드, 이미지 파일, VOD Manifests • 높은 TTL 사용 • 버전관리를 통해 갱신된 객체 전달 Static Contents Dynamic Contents Always Updated 항상 최신화 캐싱이 불가능한 객체 • 빈번한 업데이트가 발생하는 리소스 • 요청마다 다르게 응답하는 콘텐츠 • 매우 낮거나 0 TTL 사용 Short-lived Landing pages – index.jsp 뉴스, 날씨 등 Live Streaming manifests • 낮은 TTL 사용, 주기적 업데이트 사용 • 원본 부하 최소화
  • 16.
    성능 최적화 설정방안02| 1. 콘텐츠 유형별 배포정책 설정 및 예시 > 1.2. Dynamic Contents • 0초 TTL 사용으로 항상 새로운 객체 전달  Cache-control : no-cache; max-age=0; private (브라우저캐시)  Cache-Control: public; (엣지캐시) max-age=0; 객체별 Cache-control header를 이용한 Dynamic Contents 전송 10ms Origins Cache Miss 90ms
  • 17.
    성능 최적화 설정방안02| 1. 콘텐츠 유형별 배포정책 설정 및 예시 > 1.2. Dynamic Contents 객체별 Cache-control header를 이용한 Dynamic Contents 전송 • no-cache, max-age=0은 Edge에 캐시됨  두번째 요청이 만료된 객체의 변화 여부를 확인  변화가 없음을 확인했다면 캐싱된 객체 제공 10ms Origins Cache Miss 90ms
  • 18.
    성능 최적화 설정방안02| 1. 콘텐츠 유형별 배포정책 설정 및 예시 > 1.2. Dynamic Contents 객체별 Cache-control header를 이용한 Dynamic Contents 전송 • Edge에 캐시 하지 않으려면 (ALL-BYPASS)  Cache-Control : private, no-store  AWS CloudFront Behavior Setting (Custom Origin인 경우에만)
  • 19.
    콘텐츠 유형별 배포정책설정 네트워크 환경 최적화
  • 20.
    성능 최적화 설정방안02| 2. 네트워크 최적화 방안 AWS Global Backbone 기본 적용으로 전송성능 향상 Cac he Miss • Region, Edge 간 전용회선 • 이중화된 100GbE 네트워크 • 모든 AWS 리전 간 트래픽은 Amazon Global Backbone 을 사용하도록 설계 • AWS Origin 사용하는 경우 Backbone 활용 극대화
  • 21.
    성능 최적화 설정방안02| 2. 네트워크 최적화 방안 Origin Keep Alive Connection 을 통한 연결 설정 시간 단축 AWS Cloud VPC Amazon EC2 Elastic Load Balancing (ELB) 10ms 2번째 사용자 130ms 90ms Amazon CloudFront Keep Alive Connection400ms 1번째 사용자 Origins 기본 5초 ~180초 상향
  • 22.
    성능 최적화 설정방안02| 2. 네트워크 최적화 방안 Gzip 압축 기능으로 최대 80%의 속도, 비용 개선 • 1KB ~ 10MB 크기의 파일 압축 • 텍스트위주 js, css 등 효과적 • 웹 페이지 로딩 속도 개선 • 데이터 전송 비용 절감 Accept- Encoding :gzip HTTP Amazon CloudFront Origin Header 포워딩
  • 23.
  • 24.
    AWS CloudFront 정책예시03 | • Ex) www.nam0jae.com 웹사이트 메인 페이지 CloudFront 배포시, 단일 AWS CloudFront Behavior에 콘텐츠 Path(유형)별 정책 적용 • 이 경우 Default(*) 는 Dynamic All By-PASS 로 설정. Static Contents Dynamic Content
  • 25.
    Amazon CloudFront +Amazon Media Service AWS CloudFront 정책 예시03 | Amazon CloudFront LIVE VOD VOD Source AWS Elemental MediaConvert Amazon S3 Amazon S3 Transcoding Transcoded Media Origin Content Delivery Media upload Live Source AWS Elemental MediaLive AWS Elemental MediaStore Ingest Encode Stream Content Delivery
  • 26.
    AWS CloudFront 정책예시03 | • Cache Behavior (Min, Max, Default TTL)  <0순위> *master.m3u8 (TTL : 86,400 sec)  <1순위> *.m3u8 (TTL : 2 sec, Segment length 2 초 이하인 경우)  <2순위> *.ts (TTL : 86,400 sec) (출력 이름에 $dt$ 사용)  <3순위> Default (*) (TTL : default) Media Contents (LIVE)
  • 27.
    AWS CloudFront 정책예시03 | • Cache Behavior (Min, Max, Default TTL)  <0순위> *.m3u8 (TTL : 86,400 sec)  <1순위> *.ts (TTL : 86,400 sec // 21600 sec ~ 604800 sec)  <2순위> Default (*) (TTL : default) Media Contents (VOD)
  • 28.
  • 29.
    기타 활용 기능04| 캐싱키 Forwarding 최소화 CloudFront 캐시 Key 가 되는 Request Header Whitelist 적용 • 캐싱키 최소화 지정으로 원본부하감소 및 캐시효율 향상
  • 30.
    기타 활용 기능04| 캐싱키 Forwarding 최소화 • 캐싱키 최소화 지정으로 원본부하감소 및 캐시효율 향상 CloudFront 캐시 Key 가 되는 Cookies, Query String Whitelist 적용
  • 31.
    기타 활용 기능04| 캐싱키 Forwarding 최소화 • GET /index.html HTTP/1.1  Host: www.nam0jae.com • Connection: keep-alive • User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36 • Accept: text/html,application/xhtml+xml,application/xml;  Referer: https://www.google.com/ • Accept-Encoding: gzip, deflate, br • Accept-Language: ko-KR,ko;  Cookie: _ga=GA1.2.1510404968.1561333683; user-id_=158979; CloudFront 캐시 Key 가 되는 Value만 Forwarding
  • 32.
    기타 활용 기능04| Custom Error Page 설정 • Edge 에러페이지 기본 300초 캐시. 에러페이지 빠른 복구시 사용 • 주로 라이브 서비스에는 기본 적용. 사용자 정의 에러페이지 설정 및 TTL 정의
  • 33.
    기타 활용 기능04| Origin 장애 조치 지원 • Origin Group 내에 2개이상 이상의 Origin 설정 • Primary Origin 장애 감지 시 • Secondary Origin 에서 서비스 제공 • 장애 조치 기준코드 복수 선택  500 Internal Server Error  502 Bad Gateway  503 Service Unavailable  504 Gateway Timeout  404 Not Found  403 Forbidden Origin Group
  • 34.
    복잡한 원본 환경 어려운Cache-Control 쉽고 간편한 Amazon CloudFront 적용 어떻게?
  • 35.