DevOps31일차 - Cloud Front

문한성·2023년 4월 19일
0

부트캠프

목록 보기
59/123
post-thumbnail

CloudFront

클라우드프론트는 개발자 친화적 환경에서 짧은 지연 시간과 빠른 전송 속도로 데이터, 동영상, 애플리케이션 및 API를 전세계 고객에게 안전하게 전송하는 고속 콘텐츠 전송 네트워크(CDN) 서비스이다.

CloudFront는 CDN 서비스와 이외에도 기본 보안 기능(Anti-DDoS)을 제공한다.

엣지 로케이션

  • 컨텐츠가 캐싱되고 유저에게 제공되는 지점
  • AWS가 CDN 을 제공하기 위해서 만든 서비스인 CloudFront의 캐시 서버 (데이터 센터의 전 세계 네트워크)
  • CloudFront 서비스는 엣지 로케이션을 통해 콘텐츠를 제공
  • CloudFront를 통해 서비스하는 콘텐츠를 사용자가 요청하면 지연 시간이 가장 낮은 엣지 로케이션으로 라우팅되므로 콘텐츠 전송 성능이 뛰어나다.
  • 콘텐츠가 이미 지연 시간이 가장 낮은 엣지 로케이션에 있는 경우 CloudFront가 콘텐츠를 즉시 제공

CloudFront 동작방식

CloudFront는 AWS 백본 네트워크를 통해 콘텐츠를 가장 효과적으로 서비스할 수 있는 엣지로 각 사용자 요청을 라우팅하여 콘텐츠 배포 속도를 높인다.

일반적으로 CloudFront 엣지가 최종 사용자에게 가장 빨리 제공한다.

  • 콘텐츠가 엣지 로케이션에 없는 경우
    • CloudFront는 콘텐츠의 최종 버전에 대한 소스로 지정된 오리진(Amazon S3 버킷, MediaPackge 채널, HTTP 서버(예 : 웹 서버)등) 에서 콘텐츠를 검색
    • 컨텐츠를 제공하는 근원에서 제공받아 전달
  • 콘텐츠가 엣지 로케이션에 있는 경우
    • 바로 전달

예시를 들어보자.

우리나라의 대표적인 스트리밍 서비스는 아프리카 TV가 있다고 하자.

만일 미국과 남아프리카, 호주에서 우리나라 서비스 아프리카TV의 방송이나 영상을 보고 싶다면, 당연히 아프리카TV 본사가 위치하고 있는 한반도 리전에 접속해서 다운로드 해야 한다.

사진에서 볼수 있듯이 길게 설명안해도 속도가 엄청나게 느릴것 같아 보인다.

거기다 오늘 보고 끄고, 내일 또 방송을 보고싶을때 그 멀리까지 다시 연결해 다운받아야 할 것이다.

이러한 단점을 극복하기위해 엣지 로케이션 이라는 개념과 시설을 사용 하는 것이다.

각 거점마다 가깝고 적당한 곳에 엣지 로케이션(임시 데이터 저장소 센터)을 배치한다. 하늘색 바둑알이 엣지 로케이션이다.

그러면 각 대륙의 사람들(검은색 바둑알)은 가까이 위치한 지역내의 엣지 로케이션에 접속해 스트리밍 서비스를 이용할 수 있게 된다.

당연히 훨씬 속도 면에서 유리하고, 또한 일정기간동안 요청한 데이터를 저장하는 기능(캐시, 콘텐츠 복사)도 갖춰 있어서 오늘 보고 내일 또 보고싶을때 저 멀리 까지 재연결 하는 일 없이 바로바로 볼 수 있는 장점도 있다.

그리고 이 엣지로케이션에 내 서비스를 등록하는 AWS 서비스가 바로 CloudFront이다.

CloudFront 데이터 전달 과정

  • 클라이언트로부터 Edge Server로의 요청이 발생한다.
  • Edge Server는 요청이 발생한 데이터에 대하여 캐싱 여부를 확인
  • 사용자의 근거리에 위치한 Edge Server 중 캐싱 데이터가 존재한다면 사용자의 요청에 맞는 데이터를 응답
  • 사용자의 요청에 적합한 데이터가 캐싱되어 있지 않은 경우 Origin Server로 요청이 포워딩
  • 요청받은 데이터에 대해 Origin Server에서 획득한 후 Edge Server에 캐싱 데이터를 생성하고, 클라이언트로 응답이 발생

CloudFront 장점

  • AWS 네트워크를 사용하면 사용자의 요청이 반드시 통과해야 하는 네트워크의 수가 줄어들어 성능이 향상
  • 파일의 첫 바이트를 로드하는 데 걸리는 지연 시간이 줄어들고 데이터 전송 속도가 빨라진다.
  • 파일(객체)의 사본이 전 세계 여러 엣지 로케이션에 유지(또는 캐시)되므로 안정성과 가용성이 향상
  • 보안성 향상
    • 오리진 서버에 대한 종단 간 연결의 보안이 보장됨(https)
    • 서명된 URL 및 쿠키 사용 옵션으로 자체 사용자 지정 오리진에서 프라이빗 콘텐츠를 제공하도록 할 수 있음

CloudFront 다양한 기능

정적 & 동적 컨텐츠 분별 제공

정적(Static) 컨텐츠

  • 서버를 거치지 않고 클라이언트에서 직접 보여주는 내용
    ex) 이미지, CSS, 기타 서버가 필요없는 내용들
  • 캐싱으로 접근속도 최적화

동적(Dynamic) 컨텐츠

  • 서버 계산, DB조회 등이 필요한 내용
    ex) 로그인, 게시판 등
  • 네트워크 최적화, 연결 유지, Gzip 압축 등을 사용
  • 서버랑 통신을 할 때 전처리 작업이 있는데, 주소가 어디로 전달되는지(DNS Lookup), TCP Connection, Titm to First Byte 등을 CloudFront에서 네트워크를 최적화한다.
  • 실제로 내용을 최적화 해서 보내는 것이 아니라, 통신을 최적화 해서 속도를 최적화 시키는 것

동적 / 정적 컨텐츠 처리

경로 패턴으로 URL에 따라 정적/동적 컨텐츠 분기 처리 한다.

HTTPS 지원

Origin에서 HTTPS를 지원하지 않더라도 클라우드 프론트내에서 HTTPS 통신을 지원할 수 있도록 구성 가능

예를 들어, S3 정적 웹 호스팅 URL 같은 경우 SSL설정이 쉽지 않은데, CloudFront를 통해서 HTTPS 통신을 지원할수 있게끔 할 수 있다.

지리적 제한 설정

특정 지역의 컨텐츠 접근을 제한 가능 하다.

예를들어 아프키라 티비 스트리밍 서비스를 하는데 라이센스나 계약에 따라 일본권에서는 볼 수 있지만, 아프리카권은 볼수 없게 설정 가능하다.

다른 서비스와 연계

AWS WAF, Lambda@Edge 등과 연동 가능

Lambda@Edge

  • 엣지 로케이션에서 돌아가는 람다

  • 람다엣지 사용 사례 :

    • 한국에서 요청이 올 경우 한국 웹서버, 미국에서 요청이 올 경우 미국 웹서버로 분산
    • 커스텀 에러 페이지
    • Cookie를 검사해 다른 페이지로 리다이렉팅 → A/B 테스팅
    • CloudFront에서 Origin 도착 이전에 인증 ..등
  • 유저에서 CloudFront 도착하기 전,

  • CloudFront에서 Origin에 요청 보내기 전,

  • Origin에서 CloudFront로 응답을 보내기 전,

  • CloudFront에서 유저한테 응답 보내기 전

  • 이 4단계에서 람다를 실행 해서 이 전달 내용을 변경 할 수 있다.

CloudFront Function

  • Lambda@Edge의 6분의 1 비용으로 경량 javascript 실행
  • 아주 간단한 액션에서만 사용
  • 사용사례 : 캐싱, 헤더 조작 등

CloudFront 리포팅

  • 주요 CloudFront 이용 지표 확인 가능
    ex) 캐시 상태, 가장 많이 요청 받은 컨텐츠, Top Referrer(어디를 타고 들어와서 어느 웹사이트를 보고있는지..)
  • 구글 애널리틱스 같은거라고 보면 된다.

CloudFront 뷰어 정보

CloudFront에서 뷰어의 정보를 헤더에 더해 Origin에 전송한다.

  • 디바이스 타입 (Android / IOS / SmartTV / Desktop / Tablet)
  • IP Address
  • Country / 도시 / 위도 / 경도 / 타입존 등

    Info
    이 뷰어 정보를 통해서 어떤 Country에서는 어떤 컨텐츠를 제공한다던지, 위도 경도에 따라 서울에서는 서울에 맞는 아이템을 추천한다던지 처리를 할 수 있다.

CloudFront 정책과 보안

CloudFront 정책

CloudFront는 총 3가지 정책 설정 가능하다.

  • 캐시 정책 (Cache Control) : 캐싱 방법 및 압축
    • TTL 및 Cache Key 정책
    • CloudFront가 어떻게 캐싱을 할지를 결정
  • 원본 요청 정책 (Origin Request) : Origin으로 어떤 내용을 보낼 것인가
    • Origin에 쿠키, 헤더, 쿼리스트링 중 어떤 것을 보낼 것인가
  • 응답 헤더 정책
    • CloudFront가 응답과 함께 실어 보낼 HTTP Header

CloudFront 보안

Signed URL

어플리케이션에서 CloudFront의 컨텐츠에 접근 할 수 있는 URL을 제공하여 컨텐츠 제공을 제어하는 방법이다.

  • URL에는 시작시간, 종료시간, IP, 파일명, URL의 유효기간 등의 정보를 담을 수 있음
  • 이 URL 접근 이외의 접근을 막고 허용된 유저에게만 URL을 전달하여 컨텐츠 제공을 제어 가능
  • 단 하나의 파일 또는 컨텐츠에 대한 허용만 가능
  • S3 Signed URL과 비슷한 방식

Signed URL은 하나의 컨텐츠만 제공 제어를 한다고 하면, Signed Cookie는 다수의 컨텐츠의 제공방식을 제어하고 싶을 때 사용된다.

Signed URL과 마찬가지로 여러 제약사항 설정 가능
다수의 파일 및 스트리밍 접근 허용 가능
사용사례 : 정기 구독 프리미엄 유저만 볼 수 있는 강의 동영상 등

Origin Access Identity (OAI)

S3의 컨텐츠를 CloudFront를 사용해서만 볼 수 있도록 제한하는 방법이다.

즉, S3의 정적인 컨텐츠 URL로 바로 접근하는게 아니라 CDN을 통해서 접근하는 것이다.

왜냐하면 S3로 직접 접속을 하면 캐싱을 못해 속도 측면에서 마이너스가 될수 있고, 국가별 라우팅, 인증 등이 CloudFront에 구현 되어있다면 유저가 직접 S3로 접속하면 안되기 때문이다.

  • S3는 CloudFront와 잘 맞는다 → 정적인 컨텐츠를 호스팅 하기 때문에 CDN과 찰떡궁합
  • CloudFront만 권한을 가지고 S3에 접근하고 나머지 접근권한은 막음 → CloudFront는 유저와 S3사이에서 중개하는 역할
  • S3 Bucket Policy로 CloudFront의 접근을 허용해야 사용 가능

Field Level Encryption

  • CloudFront로부터 Origin 사이의 통신을 암호화
  • 최대 10개의 필드까지 가능
  • 공개키 방식으로 암호화 → CloudFront에 공개키를 제공 후 Origin에서 Private Key로 해독

레퍼런스

profile
기록하고 공유하려고 노력하는 DevOps 엔지니어

0개의 댓글