CloudFront
CloudFront 개념 원리 & 사용 세팅 정리
CloudFront ( CDN ) 가 뭐야?
CloudFront
란 AWS 에서 제공하는 CDN
( Content Delivery Network ) 서비스
CDN 이란?
CDN
( Content Delivery Network ) 은 콘텐츠 전송 네트워크로써 지리 ∙ 물리적으로 떨어져 있는 사용자에게 컨텐츠를 더 빠르게 제공하는 시스템을 말함
- 사용자가 원격지에 있는 서버 ( Origin Server ) 로 부터 Content ( 예시: Web Object ∙ Video ∙ Music ∙ Image ∙ Document 등 ) 을 다운 받을 때 가까이 있는 서버에서 받는 것보다 시간이 오래 걸림
- 그러기에 사용자와 가까운 곳에 위치한 Cache Server 에 해당 Content 를 저장 ( 캐싱 ) 하고 Content 요청 시에 Cache Server 가 응답을 줌
CDN 의 장점
- 웹사이트 로딩 속도 개선
- 오리지날 서버의 트래픽 부하 및 비용을 줄일 수 있음
- 컨텐츠 제공의 안정성
- 인터넷 서비스 제공자에 직접 연결되어 데이터를 전송 하므로 컨텐츠를 빠른 속도로 제공할 수 있음
- 웹사이트 보안 개선
- 대규모 분산 서버 장비로 공격 트래픽을 완화시킬 수 있음
CDN 의 작동 원리
-
최초 요청은 서버로부터 컨텐츠를 가져와 고객에게 전송하며 동시에 CDN
캐싱 장비에 저장
-
두번째 이후 모든 요청은 CDN
업체에서 지정하는 해당 컨텐츠 만료 시점까지 CDN
캐싱 장비에 저장된 컨텐츠를 전송
-
자주 사용하는 페이지에 한해서 CDN
장비에서 캐싱이 되며 해당 컨텐츠 호출이 없을 경우 주기적으로 삭제
-
서버가 파일을 찾는 데 실패하는 경우 CDN
플랫폼의 다른 서버에서 콘텐츠를 찾아 엔드 유저에게 응답을 전송
-
콘텐츠를 사용할 수 없거나 콘텐츠가 오래된 경우 CDN
은 서버에 대한 요청을 프록시로 작동하여 향후 요청에 대해 응답할 수 있도록 새로운 콘텐츠를 저장
CloudFront 란?
CloudFront
는 AWS 에서 제공하는 CDN
서비스
- 캐싱을 통해 사용자에게 좀 더 빠른 전송 속도를 제공하는 것을 목적으로 함
- 전 세계 이곳저곳에 Edge Server ( Location ) 을 두고 사용자에게 가장 가까운 Edge Server 를 찾아 빠른 데이터를 제공
Tip! 추가 내용
CloudFront
는 개발자 친화적 환경에서 짧은 지연 시간과 빠른 전송 속도로 데이터 ∙ 동영상 ∙ 애플리케이션 및 API를 전세계 고객에게 안전하게 전송하는 고속 콘텐츠 전송 네트워크 ( CDN
) 서비스
CloudFront
는 CDN
서비스와 이외에도 기본 보안 기능 ( Anti-DDoS ) 을 제공
CloudFront 구성
- Origin Server
- 원본 데이터를 가지고 있는 서버
- AWS 에서는 S3 ∙ EC2 instance 를 나타냄
- Edge Server
- AWS 에서 실질적으로 제공하는 전 세계에 퍼져있는 서버
- Edge Server 에는 요청 받은 데이터에 대해서 빠르게 응답해주기 위해 캐싱 기능을 제공
CloudFront 작동 방식
-
사용자로부터 요청이 발생
-
요청이 발생한 Edge Server 는 요청이 발생한 데이터에 대하여 캐싱 여부를 확인
-
사용자의 근거리에 위치한 Edge Server 중 캐싱 데이터가 존재한다면 사용자의 요청에 맞는 데이터를 응답
-
사용자의 요청에 적합한 데이터가 캐싱되어 있지 않은 경우 Origin Server 로 요청이 포워딩
-
요청 받은 데이터를 Origin Server 에서 획득한 후 Edge Server 에 캐싱 데이터를 생성하고 클라이언트로 응답 전송
Tip! 추가 내용
CloudFront 장점
- AWS 네트워크를 사용하면 사용자의 요청이 반드시 통과해야 하는 네트워크의 수가 줄어 들어 성능이 향상
- 파일의 첫 바이트를 로드하는 데 걸리는 지연 시간이 줄어들고 데이터 전송 속도가 빨라짐
- 파일 ( 객체 ) 의 사본이 전 세계 여러 엣지 로케이션에 유지 ( 또는 캐시 ) 되므로 안정성과 가용성이 향상
- 보안성 향상
- Origin Server 에 대한 종단 간 연결의 보안이 보장됨 (
HTTPS
)
- 서명된 URL 및 쿠키 사용 옵션으로 자체 사용자 지정 오리진에서 프라이빗 콘텐츠를 제공하도록 할 수 있음
Tip! 추가 내용
CloudFront 다양한 기능
🍨 정적 & 동적 컨텐츠 분별 제공
정적 (Static) 컨텐츠
- 서버를 거치지 않고 클라이언트에서 직접 보여주는 내용
- 예시: 이미지 ∙ CSS ∙ 기타 서버가 필요 없는 내용들
동적 (Dynamic) 컨텐츠
- 네트워크 최적화 ∙ 연결 유지 ∙ Gzip 압축 등을 사용
- 서버랑 통신을 할 때 전처리 작업이 있는데 주소가 어디로 전달되는지 ( DNS Lookup ) ∙ TCP Connection ∙ Titm to First Byte 등을 CloudFront 에서 네트워크를 최적화
- 실제로 내용을 최적화 해서 보내는 것이 아니라 통신을 최적화 해서 속도를 최적화 시키는 것
정적 & 동적 컨텐츠 처리
- 경로 패턴으로 URL에 따라 정적 ∙ 동적 컨텐츠 분기 처리
🍨 HTTPS 지원
- Origin 에서
HTTPS
를 지원하지 않더라도 CloudFront
내에서 HTTPS
통신을 지원할 수 있도록 구성 가능
- 예를 들어, S3 정적 웹 호스팅 URL 같은 경우 SSL 설정이 쉽지 않은데
CloudFront
를 통해서 HTTPS
통신을 지원할 수 있도록 설정 가능
🍨 지리적 제한 설정
- 특정 지역의 컨텐츠 접근을 제한 가능
- 예를 들어, 아프키라 티비 스트리밍 서비스를 하는데 라이센스나 계약에 따라 일본권에서는 볼 수 있지만 아프리카권은 볼 수 없도록 설정 가능
Tip! 추가 내용
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 Cookie
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
의 접근을 허용해야 사용 가능