CloudFront란?
AWS CloudFront는 정적, 동적 컨텐츠를 빠르게 응답하기 위한 캐시 기능을 제공하는 CDN 서비스이다.
캐싱을 지원하기 때문에 S3에 저장된 컨텐츠를 직접 접근하지 않아도 되므로 S3의 비용이 감소하며, 더 빠른 응답을 지원하므로 꼭 함께 적용해주는 것이 좋다.
이전에 S3 버킷을 생성하여 HTML 파일을 올리고, 정적 호스팅 기능을 사용하여 웹 페이지를 배포해보았다. 그런데 만약 S3를 사용해서 www.example.com 도메인으로 글로벌 서비스를 해야하는 상황이라고 해보자. S3 버킷은 생성할 때 리전이 정해져있다. 서울 리전에 있는 버킷을 호스팅 기능을 이용해서 미국에 서비스 한다고 하면 사이트가 매우 늦게 뜰 것이다. 그러면 서비스하는 나라의 가까운 리전마다 똑같은 S3 버킷을 생성해주어야할까? 그러면 비용이 더 많이 들 것이다.
이때 CloudFront를 사용하면 된다! CloudFront는 전 세계 이곳저곳에 Edge Server(Location)을 두고 Client에 가장 가까운 Edge Server를 찾아 Latency를 최소화시켜 빠른 데이터를 제공한다.
여기서 네트워크 용어들을 잠깐 살펴보자.
- Origin Server(오리진 서버): 원본 데이터를 가지고 있는 서버이다. 보통 AWS에서의 Origin Server는 S3, Ec2 instance이다.
- Edge Server = Edge Location: AWS에서 실질적으로 제공하는 전 세계에 퍼져있는 서버이다. Edge Server에는 요청받은 데이터에 대해서 같은 요청에 대해서 빠르게 응답해주기 위해 Cache 기능을 제공한다.
CloudFront의 특징
1. Amazon S3, Amazon EC2 또는 Elastic Load Balancing과 같은 AWS Origin을 사용하는 경우, 이러한 서비스와 CloudFront 간에 전송된 데이터에 대해서는 요금이 청구되지 않는다!
2. 애플리케이션과 인프라에 대한 “관문”으로 사용함으로써 중요한 콘텐츠, 데이터, 코드 및 인프라에 대한 주요 공격을 차단한다.
3. 콘텐츠, API 또는 애플리케이션을 SSL/TLS를 통해 전송할 수 있다.
4. 특정 콘텐츠에 대한 액세스를 제한할 수 있다.
5. 가용성 향상 : 캐싱을 통한 Origin의 워크로드를 줄일 수 있다.
CloudFront와 S3 연동하기
먼저 S3 버킷을 생성하고 S3에 HTML 파일을 업로드 및 권한 등 설정을 완료한다. 이 부분은 아래 게시글을 참고하면 된다.
https://daeunnniii.tistory.com/120
그리고 AWS Cloudfront 서비스를 접속한다. 참고로, CloudFront는 리전을 선택하지 않아도 된다! 그 이유는 위에서 살펴보았던 CloudFront의 특징을 살펴보면 알 것이다.
"배포" 탭에 들어가서 배포 생성 버튼을 누르면 아래와 같은 화면이 뜬다.
원본 도메인 칸을 선택하면 현재 사용할 수 있는 S3 버킷, ELB 등의 목록이 표시된다. 우리가 사용할 S3 버킷을 클릭하자.
원본 경로는 AWS 리소스나 사용자 지정 Origin에 있는 디렉터리에서 콘텐츠를 요청하게 하려면 슬래시(/) 뒤에 디렉터리 경로를 입력한다. 예를 들어, /production을 작성했다면 {OriginDomainName}/sample.jpg를 요청했을 때, {OriginDomainName}/production/sample.jpg에 대한 요청이 된다.
이름은 해당 배포 내의 Origin 또는 Origin Group을 고유하게 구별하는 문자열이며, 원본 도메인을 선택하면 자동으로 입력된다.
나머지 설정은 필요할 때마다 찾아서 설정하고, 일단 나머지는 기본값을 그대로 두고 생성한다.
잘 생성이 된 것을 확인할 수 있다.
ID는 자동으로 부여되는 값이며, 나중에 배포 시 사용된다.
Domain name(도메인 이름)은 URL이고, 브라우저에서 호출할 수 있다.
Origin(원본)은 이전에 생성한 S3의 URL 이다.
Status은 현재 상태를 나타내며 생성하자마자 보면 In Progress라고 뜰 것이다. In Progress 상태라는 것은 Edge Location에 배포 중이라는 뜻으로, 배포가 완료되면 Deployed(활성화됨) 상태가 된다.
이제 도메인 이름의 URL을 브라우저에서 호출해보면 아직은 AccessDenied가 뜰 것이다. 다시 설정한 옵션을 하나만 수정해주자.
Default Root Object(기본값 루트 객체)를 설정하지 않았기 때문에 에러가 난 것이다. Default Root Object는 CloudFront 배포 도메인의 최상위(루트 URL)로 요청할 때, CloudFront에서 Origin으로부터 요청할 객체를 작성하는 부분이다. 기본값 루트 객체를 지정하는 경우 아래와 같이 객체 이름만 입력하면 된다!
설정 완료 후 도메인 이름을 복사하여 웹페이지에서 호출해보자.
이제 설정한 index.html 파일이 잘 보인다!
참고: 스파르타코딩클럽 핵심쏙쏙 AWS
'AWS > 실습 기록' 카테고리의 다른 글
AWS 로드밸런서(ELB) 및 Auto Scaling 설정 방법 알아보기 (0) | 2021.09.17 |
---|---|
AWS EC2 탄력적 IP 사용하기 (EC2 IP주소 고정하기) (0) | 2021.09.17 |
Boto3를 활용한 AWS S3 파이썬 연동 및 S3 정적호스팅 기능을 활용해 외부에 공개하기(feat. S3 비용 계산) (0) | 2021.09.17 |
IAM을 이용하여 AWS SDK 활용한 S3 파일 업로드하기 (0) | 2021.09.16 |
AWS를 사용하는 기업 사례 알아보기 - 넷플릭스 (0) | 2021.09.16 |