CloudFront란?
: 서버로부터 멀리 떨어져있는 사용자에게 컨텐츠를 전달할때 오랜 지연시간이 발생한다.
=> CDN(Content Distribution Network) 역할을 하는 CloudFront를 이용하여 해결 할 수 있다!컨텐츠들을 캐싱하여 캐싱 서버에 저장하고, 새로고침 즉 리퀘스트가 있을 때 캐싱서버에 저장된 정보를 불러 오기 때문에 상대적으로 빠른 속도로 컨텐츠를 전달해준다.
참고 : CDN의 특징
- 웹 페이지, 이미지, 동영상 등의 컨텐츠를 본래 서버에서 받아와 캐싱
- 컨텐츠를 제공하는 서버와 실제 요청 지점 간의 지리적 거리가 매우 먼 경우 or 통신 환경이 안좋은 경우 → 요청지점의 CDN을 통해 빠르게 컨텐츠 제공 가능
- 서버의 요청이 필요 없기 때문에 서버의 부하를 낮추는 효과
엣지 로케이션
- 컨텐츠가 캐싱되고 유저에게 제공되는 지점
- AWS가 CDN 을 제공하기 위해서 만든 서비스인 CloudFront의 캐시 서버 (데이터 센터의 전 세계 네트워크)
- CloudFront 서비스는 엣지 로케이션을 통해 콘텐츠를 제공
- CloudFront를 통해 서비스하는 콘텐츠를 사용자가 요청하면 지연 시간이 가장 낮은 엣지 로케이션으로 라우팅되므로 콘텐츠 전송 성능이 뛰어나다.
- 콘텐츠가 이미 지연 시간이 가장 낮은 엣지 로케이션에 있는 경우 CloudFront가 콘텐츠를 즉시 제공
그럼 이제 CloudFront를 이용하는 방법을 알아보자!
클라우드 프론트를 통해 캐싱될 오리진 설정
캐싱할 Origin을 설정한다. (실습해볼 S3를 선택함)
기본적인 캐싱 동작을 설정하는 옵션
Compress Objects automatically
: 오리진에서 가져온 오브젝트의 전송속도나 효율을 높이기 위해 자동으로 압축하는 옵션
캐시 정책 (캐싱 방법 및 압축), 원본 요청 정책(Origin으로 어떤 내용을 보낼 것인지), 응답 헤더 정책을 별도로 변경할 수도 있다.
일반 세팅 옵션
Price Class
: 어느 지역 범위까지의 Edge Node를 사용할 건지 선택
AWS WAF 웹 ACL
: 원하지 않는 요청에 대한 방화벽을 설정 (방화벽에 의해 거절된 요청은 HTTP Status 403(Forbidden)을 응답)
Alternate Domain Names(CNAMEs)
: CloudFront 생성 시 할당받는 도메인 이름 대신 객체의 URL에 사용할 하나 이상의 도메인 이름을 지정
SSL 인증서
: HTTPS를 사용하여 객체에 접근하는 경우 인증서를 등록해야 한다.
기본값 루트 객체 (Default Root Object)
: 특정 객체가 아닌 배포 URL을 요청할 때 CloudFront가 Origin에 요청할 객체 정보 (
홈페이지 화면 느낌)
1. CloudFront를 사용하지 않고 직접 S3 버킷의 정적 웹사이트 호스팅 url을 통해 접근한 결과
정적 웹사이트로 접속 후, 개발자 모드(F12)를 통해 파일 업로드 시간을 확인할 수 있다.
평균적으로 20초 걸림!
2. CloudFront를 사용한 결과
CloudFront 배포 도메인 이름으로 접속 후, 동일하게 테스트
평균적으로 1.8s가 걸렸다!
※ 해당 테스트는 CloudFront의 성능 개선을 더욱 명확히 보기 위해 컨텐츠를 저장하고 있는 S3 버킷을 테스트 환경인 서울에서 멀리떨어진 미국 버지니아 리전으로 설정하였다.
8.7MB밖에 되지 않는 사진에 대해서도 지리적, 네트워크 환경에 따라 극심한 차이가 날 수 있음을 확인했기 때문에 성능 개선을 위해 CloudFront를 채택하는 것도 좋은 방법인 것 같다 !
- 참고로 테스트는 정적 컨텐츠만을 진행했지만, CloudFront는 서버 계산이나 DB 조회와 같은 기능을 담당하는 동적 컨텐츠에서도 네트워크를 최적화하여 속도를 개선해준다!
참고 :
https://docs.aws.amazon.com/ko_kr/AmazonCloudFront/latest/DeveloperGuide/GettingStarted.SimpleDistribution.html
https://inpa.tistory.com/entry/AWS-%F0%9F%93%9A-CloudFront-%EA%B0%9C%EB%85%90-%EC%9B%90%EB%A6%AC-%EC%82%AC%EC%9A%A9-%EC%84%B8%ED%8C%85-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC#cdn_%EC%9D%B4%EB%9E%80?