CloudFront와 CloudFront를 통한 CDN 서비스
CDN이란 contents Delivery Network 의 약자로 콘텐츠 제공자와 사용자 간 지리적으로 떨어져 있는 환경에서 콘텐츠를 빠르게 제공하기 위한 기술입니다. 오늘날 콘텐츠들이 대용량 파일 형식이나 실시간 스트리밍 형태로 점점 늘어나는 환경에서 빠르게 콘텐츠를 전달하는 것은 굉장히 중요한 사항일 것입니다.
CDN이 없는 기본 네트워크 환경에서 오리진 서버(원본 콘텐츠 서버)는 모든 사용자 요청에 대해 일일이 처리하는 과부하 환경입니다. 그리고 오리진 서버와 사용자 간의 지리적 위치가 멀리 있다고 가정한다면, 지연 시간이 길어질 것은 불가피하며 원활한 서비스를 받기 어려울 것입니다.
이러한 문제를 CDN 기술을 통해 개선할 수 있습니다. CDN 기술의 핵심은 캐시 서버를 통한 지역적인 분산이 있습니다. 원본 콘텐츠를 가지고 있는 서버를 오리진 서버라고 부르는데, 해당 오리진 서버로부터 지역적으로 분산되어 있는 캐시 서버로 콘텐츠를 분배합니다
오리진 서버에서 콘텐츠를 지역적으로 분산된 캐시 서버로 분배하여 저장하고 있습니다. 이때 각 지역의 사용자는 가장 인접한 캐시 서버로부터 콘텐츠를 전달받아 원활한 서비스를 받을 수 있습니다. 이러한 CDN의 성능적인 우위와 높은 가용성 보장 등의 기술적 장점으로 많은 기업이 CDN을 도입하여 서비스하고 있으며, 콘텐츠 제공자와 콘텐츠 사용자 모두에게 이점을 제공합니다
CDN 캐싱 방식
오리진 서버에 저장된 콘텐츠를 지역적으로 분산된 캐시 서버로 저장하는 행위를 캐싱이라고 합니다
캐시 서버에서 콘텐츠를 가지고 있으면 Cache Hit 라고 하고, 콘텐츠를 가지고 있지 않을 경우 Cache Miss라고 합니다.Cache Miss 상태라면 오리진에서 콘텐츠를 요청하여 저장합니다
CDN에서 캐싱 방식은 다음과 같이 크게 두 가지로 나눌 수 있습니다
정적 캐싱
이미지 파일, 자바스크립트,CSS등과 같이 변경되지 않는 정적인 콘텐츠를 캐싱합니다. 웹 사이트에서 제공되는 대부분의 콘텐츠들은 시간이 지남에 따라 변경되지 않는 정적 콘텐츠로 구성되어 있어 이러한 콘텐츠를 캐싱하여 CDN의 이점을 얻을 수 있습니다
동적 캐싱
정적 캐싱과 달리 사용자 요청이나 데이터의 정보를 기반으로 즉석에서 생성되는 동적 콘텐츠의 경우, 캐싱하더라고 cache Hit가 높지 않아 캐싱의 이점을 얻기가 어렵습니다. 다만, 이러한 동적인 콘텐츠에 대해서도 CDN을통해서 배포하게 되면 오리진 서버를 보호할 뿐만 아니라 캐시 서버와 오리진 서버 간의 빠른 통신을 통해 제공되어 보다 빠른 콘텐츠를 받을 수 있습니다
참고 사항: TTL은 Time to Live의 약자로 콘텐츠를 캐싱하여 유지하는 기간을 말합니다. 동적 캐싱은 실제 콘텐츠를 캐싱하지 않기 때문에 TTL은 0으로 설정됩니다
CloudFront
CloudFront는 AWS에서 제공하는 CDN 기능입니다. 절리해보면 오리진 대상의 콘텐츠를 캐싱하여 짧은 지연 시간과 빠른 전송 속도로 전 세계 사용자에게 콘텐츠를 전송하는 CDN서비스 입니다
CloudFront 아키텍처
오리진:AWS 서비스 중 EC2,ELB,S3가 오리진 대상이 될 수 있으며, 고객 데이터 센터 내 별도의 서버도 가능합니다
Distribution: 오리진과 엣지 로케이션 중간에서 콘텐츠를 배포하는 역할을 수행하는 CloudFront의 독립적인 단위 입니다. HTTP(S) 전용의 Web Distribution 과 동영상 컨텐츠 전용의 RTMP Distribution으로 나누어집니다.
엣지 로케이션: 오리진에서 Distribution을 통해 배포되는 콘텐츠를 캐싱하는 장치입니다. 큰 단위로 리전별 엣지 케시가 존재하고 하위 엣지 로케이션이 구성되어 콘첸츠를 캐싱합니다
보안 장치:OSI 3/4 계층, DDoS를 완화하는 AWS Shield 및 OSI 7계층을 보호하는 AWS WAF와 원활하게 통합되어 보안을 강화합니다
도메인 구성: Distribution을 생성하면 xxxxxx.cloudfront.net 이라는 도메인 이름이 생성되며, 사용자는 해당 도메인 이름으로 접근이 가능합니다. 이 때 route53과 연결하여 사용자가 원하는 도메인 이름으로 별칭을 부여할 수 있습니다
사용자: 위 도메인 이름으로 접근하여 콘텐츠를 받을 수 있습니다
CloudFront의 주요 기능
Cloudfront 글로벌 엣지 네트워크
사용자에게 더 짧은 지연 시간으로 콘텐츠를 전송하기 위해 CloudFront는 42개국 84개 도시에서 216(엣지 로케이션 205개 , 리전 엣지 캐시 11개)개의 글로벌 네트워크를 사용하고 있습니다
정적/동적 콘텐츠 딜리버리
CloudFront는 단일 배포에서 여러 오리진을 구성하여 콘텐츠를 처리할 수 있습니다. 경로 패턴을 분석하여 오리진 대상의 콘텐츠를 분산할 수 있습니다
오리진 그룹을 통한 Failover
오리진 그룹 내에 기본 오리진과 보조 오리진을 구성하여 기본 오리진에서 응답할 수 없으면 자동으로 보조 오리진으로 반환하여 Failover를 유지합니다
SSL지원
CloudFront를 사용하면 콘텐츠에 대해 SSL/TLS를 통해 전송할 수 있으며, 고급 SSL 기능을 자동으로 활성화할 수 있습니다
액세스 제어
서명된 URL과 서명된 쿠키를 사용하면 토근 인증을 지원하여 인증된 최종 사용자만 액세스(다룰수 있도록)하도록 제한할 수 있습니다
보안
DDos 공격을 비롯한 여러 유형의 공격에 대해 유연한 계층형 보안 방어를 구축하기 위해 원활하게 통합 운영합니다.
실습:기본 환경 검증
F12를 눌러 개발자 도구를 출력합니다.상단 탭 중에 네트워크 탭을 선택 후 테스트를 진행합니다.
도메인 이름으로 접속을 하면 지연 시간을 확인해 볼 수 있습니다.
반복 테스트를 수행하기 위해 새로고침을 할 때는 캐시 비우기 및 강력 새로고침을 선택하는 것이 좋다(F12를 하고 해야 된다)
참고 사항
일반 새로고침을 하게 되면, 사용자 pc의 로컬 캐시에 의해 이미지가 바로 출력되어 실습을 위한 지연 시간 측정을 할 수 없습니다. 위 사항은 크롬 브라우저 기준으로 설명하였으며, 다른 웹 브라우저 캐시 삭제를 통해 실습을 할 수 있습니다.
본격 origin 서비스 사용과 그 구성
cloudfront에 들어가 Distribution을 만들어 보자
일단 origin setting하는 것이 제일 먼저일 것이다
이벤트에 대해 알아보자면
Origin Settings
오리진 대상에 대한 전반적인 설정을 하는 영역입니다
origin Domain Name : 오리진에 대한 도메인 이름을 설정
origin Path: cloudFront가 바라보는 오리진의 기준 경로 설정
origin ID: 오리진을 식별하는 ID(origin Domain Name에 따라 자동 지정)
origin custom header: 오리진으로 보내는 요청에 사용자 지정 헤더를 추가하는 기능
Default Cache Behavior Settings
캐시에 대한 정책을 설정하는 영역 프로토콜, http메소드, 캐시 정책 등을 설정할 수 있습니다
path pattern: 오리진에서 가져올 콘텐츠에 대한 패턴을 지정(기본 값은 * 모든 콘텐츠)
Viewer protocol Policy: 사용자가 콘텐츠를 액세스하는 데 사용한 프로토콜 지정
Allowed HTTP Methods: 허용하는 HTTP 메소스 지정
Cache Policy: 최소/최대 TTL 설정 및 Cache 키에 대한 설정(헤더, 쿠키, 쿼리)
Origin Request Policy:오리진 요청 내용에 대한 정책 설정(헤더, 쿠키, 쿼리)
Distribution Setting
CloudFront Distribution에 대해 설정하는 영역으로 배포 엣지 로케이션 영역 지정, CNAME, SSL, 로깅 등을 설정할 수 있습니다
Price class: 배포할 Edge Location범위 지정
Alternate Domain Names : CloudFront Distribution의 도메인 이름에 대한 별칭 지정(route 53도 지정)
SSL Certification: SSL 인증서 설정
https://www.notion.so/ongja/CNBA53-AWS-Certificate-Manager-4e7de7df4f3c449c9678da3abbfdd4c9
[CNBA53] AWS Certificate Manager 인증서 관리
작성자 : ongja.cloudnet@, 업데이트 : 2020.08.11
www.notion.so
간단한 방법이 나와있습니다
Default Root Object: 최상위 주소로 접근 시 보여줄 Root 대상 지정
Logging: CloudFront Distribution에 대한 로그 설정
Distribution State: 모든 설정 완료 후 최초 상채 지정(활성/ 비활성)
CloudFront Distribution 설정에서 Alternate Domain Name 을 부여하여 Route 53과 연결을 하고자 한다. 이 때 연결 대상 도메인 이름에 대해 SSL 인증서 등록 작업이 선행 되어야한다
실습을 다 마치고 알아야 할 점은
f12를 통해서 network에 이미지에 header로 들어가 x-cache에서
처음에 miss from cloudfront라고 써져 있는 것은 처음에는 엣지 로케이션에서 정보를 줄 수 없고 distridution에서 오리진에서 데이터를 불러와야하기 때문에 miss로 뜨고 한 번 이 과정을 끝냈다면 다음부터는 hit로 나올 것이다
그 이유는 distridution이 데이터를 받고 모든 엣지 로케이션에 그 값을 전달해 다음부터는 hit로 나오는 것이다