AWS CloudFront

greenTea·2024년 2월 12일
0

AWS CloudFront 소개

AWS CloudFront는 글로벌 컨텐츠 전송 네트워크(CDN) 서비스로, 안정적이고 빠른 콘텐츠 전송을 제공합니다. CloudFront는 정적 및 동적 콘텐츠를 안정적으로 분산하고 사용자에게 빠르게 제공하여 웹 애플리케이션의 성능을 향상시킵니다.

핵심 기능

1. 콘텐츠 전송 최적화

CloudFront는 세계 곳곳에 위치한 엣지 로케이션을 통해 콘텐츠를 전송하므로, 사용자에게 가까운 지역에서 콘텐츠를 효율적으로 제공할 수 있습니다. 이로 인해 빠른 응답 시간과 낮은 지연 시간을 보장합니다.

2. 보안 및 인증

CloudFront는 SSL/TLS를 통한 안전한 콘텐츠 전송을 지원하며, AWS Identity and Access Management(IAM) 및 AWS Certificate Manager와 통합하여 보안을 강화합니다.

3. 다양한 콘텐츠 유형 지원

정적 및 동적 웹 콘텐츠, 비디오 및 스트리밍 데이터, API 호출 등 다양한 콘텐츠 유형을 지원하여 다양한 웹 애플리케이션에 대한 최적의 솔루션을 제공합니다.

4. 캐싱 및 최적화

CloudFront는 자동 캐싱, 압축, 애드민 URL 리다이렉트 및 Lambda@Edge를 통한 사용자 정의 코드 실행과 같은 다양한 최적화 기능을 제공하여 콘텐츠의 성능을 향상시킵니다.

5. 비용 효율성

사용한 만큼만 비용을 지불하도록 설계되어 있으며, 사용자는 트래픽 양에 따라 비용을 지불하게 됩니다. 또한, 데이터 전송 비용을 절감하고자 자주 액세스되는 데이터에 대한 가속화를 위해 콘텐츠를 캐싱합니다.

CloudFront 사용 예시

1. 웹 사이트 가속화

CloudFront를 사용하면 전 세계 사용자에게 빠르고 안정적인 웹 사이트 액세스를 제공할 수 있습니다.

2. 미디어 스트리밍

비디오 및 오디오 스트리밍을 위해 CloudFront를 사용하여 사용자에게 미디어 스트리밍을 제공할 수 있습니다.

3. API 가속화

RESTful API 또는 GraphQL API의 성능을 향상시켜 클라이언트 응용 프로그램과의 통신을 최적화할 수 있습니다.

4. 속도 및 성능 최적화

CloudFront는 다양한 최적화 기능을 제공하여 콘텐츠를 더 빠르게 전송하고 웹 사이트의 성능을 최적화합니다.

AWS CloudFront을 사용한 CDN 설정

준비 단계

1. 서비스 생성

AWS에서는 다양한 서비스를 이용하여 웹 애플리케이션을 구축할 수 있습니다. 이 가이드에서는 이미 S3 버킷이 생성되어 있다고 가정하고, 해당 버킷에 이미지를 업로드하여 CloudFront를 통해 CDN을 설정하는 과정을 안내합니다.

1.1. S3 버킷 생성

먼저, AWS 콘솔에 로그인하여 S3 서비스로 이동합니다. S3 대시보드에서 "버킷 생성"을 선택하고, 원하는 이름과 옵션을 선택하여 새로운 S3 버킷을 생성합니다.

S3 Bucket Creation

1.2. 이미지 업로드

생성한 S3 버킷에 이미지를 업로드합니다. 업로드할 이미지를 선택한 후, "업로드" 버튼을 클릭하여 이미지를 S3 버킷에 추가합니다.

Image Upload

CloudFront 설정

2. CloudFront 배포 생성

이제 CloudFront를 사용하여 CDN을 설정합니다.

2.6. 배포 생성

위에서 만든 s3를 이용할 수 있도록 s3를 선택해줍니다.

oac설정을 통해 더 안전하게 s3를 이용할 수 있도록 합니다.
이를 통해 s3는 private하게 구성할 수 있게 되고 외부에서 s3로 직접 접근을 하지 못하게 하며 cloudfront만을 통해서 접근할 수 있도록 설정 할 수 있습니다.


나머지는 기본 값 그대로 두고 생성을 눌러줍니다.

모든 설정을 확인한 후, "배포 생성"을 클릭하여 CloudFront 배포를 생성합니다.

3. 정책 수정

현재 S3 버킷은 외부에서의 접근이 차단되어 있습니다. 이를 해결하기 위해 CloudFront를 통해 접근할 수 있도록 S3 버킷의 정책을 수정해야 합니다. CloudFront가 생성한 정책을 확인하고 이를 기반으로 S3 버킷에 정책을 추가합니다.

3.1. CloudFront에서 정책 확인

CloudFront 콘솔에서 해당 배포의 "원본" 탭으로 이동합니다. 원본 탭에서 "원본 도메인 이름"을 클릭하면 원본의 상세 정보가 나타납니다. 여기서 "원본 탭"을 클릭하면 정책 편집 창이 나타납니다.

CloudFront Origin Policy

보이지 않을 경우, CloudFront의 대시보드에서 해당 배포를 선택하고 "원본 탭"을 클릭합니다.

3.2. CloudFront 정책 복사

CloudFront 정책을 복사합니다. 이 정책은 S3 버킷에 CloudFront를 통한 접근을 허용하는 역할을 합니다.

CloudFront Policy Copy

3.3. S3 버킷 정책 수정

이제 S3 콘솔로 이동하여 해당 버킷을 선택하고, "권한" 탭으로 이동합니다. 여기에서 "버킷 정책 편집"을 클릭하여 정책을 수정합니다.

3.4. 정책 추가

S3 버킷 정책 편집 창에서 기존 정책에 CloudFront 정책을 추가합니다. 이를 통해 CloudFront가 해당 S3 버킷에 접근할 수 있도록 허용합니다. 복사한 CloudFront 정책을 붙여넣고, 편집한 후에는 변경 사항을 저장합니다.

S3 Bucket Policy Edit

이제 S3 버킷은 CloudFront를 통해 안전하게 접근할 수 있게 되었습니다. CDN을 통한 이미지 및 콘텐츠 제공이 가능해졌습니다.

4. 기본 루트 객체 추가

CloudFront를 통해 접근할 경우, 기본으로 보여줄 데이터를 설정합니다. CloudFront 설정 탭에서 "편집"을 클릭합니다.

Edit CloudFront Settings

CloudFront 설정에서 "기본 루트 객체"를 지정합니다. S3를 사용하고 있으므로, S3의 최상위에 위치한 이미지를 지정합니다.

Set Default Root Object

5. CloudFront로의 접근

이제 CloudFront의 도메인에 접근해보겠습니다.

Access CloudFront Domain


이미지가 성공적으로 나오는 것을 확인할 수 있습니다.

반면에, S3에 직접 접근하면 "Access Denied" 오류가 발생합니다.

Access Denied on S3

이로써 CloudFront를 통해 S3에 안전하게 접근할 수 있고, 동시에 CloudFront가 제공하는 기능을 활용하여 이미지 및 콘텐츠를 효과적으로 전송할 수 있게 되었습니다.

추가 - CloudFront 캐시 정책 설정

CloudFront는 기본적으로 호스트와 리소스 URL을 기준으로 캐시를 설정합니다. 예를 들어, https://www.example.com/hello로의 요청은 다음과 같은 캐시 키로 저장될 수 있습니다:

  • 호스트: www.example.com
  • 리소스 URL: /hello

캐시 정책에는 다양한 옵션들이 있으며, 이를 통해 캐시 동작을 세밀하게 조절할 수 있습니다.

6.1. 기본적인 캐시 동작

기본적으로 CloudFront는 특별한 설정이 없을 경우에도 정적 콘텐츠를 효과적으로 캐시합니다. 하지만 동적 콘텐츠나 특정 조건에 따른 동작을 위해 캐시 정책을 사용할 수 있습니다.

6.2. Query String, Header, Cookie를 이용한 캐시 정책

6.2.1. Query String

Query String을 기준으로 캐시를 설정할 수 있습니다. 예를 들어, https://www.example.com/hello?version=1https://www.example.com/hello?version=2는 서로 다른 버전의 리소스로 간주되어 캐시됩니다.

6.2.2. Header

HTTP 헤더를 이용하여 특정 헤더의 값에 따라 캐시를 설정할 수 있습니다. 특정 헤더에 대한 변경이 있을 때만 다시 캐시를 가져오게 할 수 있습니다.

특정 쿠키의 값에 따라 캐시를 설정할 수 있습니다. 쿠키의 변경 여부에 따라 다시 캐시를 가져올 수 있습니다.

6.3. TTL(Time-To-Live) 설정

캐시의 TTL을 설정하여 얼마나 오래 캐시를 유지할지 결정할 수 있습니다.

6.4. 캐시 무시 (Cache Invalidation)

특정 파일이나 경로를 무시하고 항상 origin에서 새로운 데이터를 가져오게 설정할 수 있습니다.

profile
greenTea입니다.

0개의 댓글