AWS - CloudFront(1)

etc-image-0


1. AWS CloudFront

 AWS CloudFront는 Amazon이 제공하는 CDN(콘텐츠 전송 네트워크) 서비스로, 글로벌 사용자를 대상으로 빠르고 안정적으로 웹 콘텐츠를 제공하는 역할을 합니다. 웹 페이지, 이미지, 동영상 등 다양한 콘텐츠를 원본 서버에서 캐싱하여, 사용자가 콘텐츠 요청 시 캐시된 데이터로부터 빠르게 응답할 수 있도록 합니다.

 

클라우드프론트.drawio.png
CDN

 

 CDN(콘텐츠 전송 네트워크)은 마치 대도시에 있는 여러 배달 센터와 같습니다. 사람이 물건을 주문하면 가장 가까운 센터에서 빠르게 배달해주듯, CDN은 사용자에게 가장 가까운 서버에서 콘텐츠를 제공하여 빠른 로딩 속도를 보장합니다. 이렇게 하면 배송 시간이 단축되고, 교통 체증 같은 문제로 인한 지연을 피할 수 있습니다. 결국 사용자에게 더 나은 경험을 제공합니다. 이때 실제 콘텐츠가 존재하는 서버 즉, CDN이 컨텐츠를 가져오는 서버를 원본(Origin)이라고 합니다.

 

1)  AWS CloudFront의 기능과 특징

 

- 엣지와 리전

1. 리전: 기본적으로 US-East-1 리전을 취급하지만, 전 세계적으로 서비스를 제공합니다.

2. 엣지 로케이션: 콘텐츠 캐싱을 위해 CloudFront가 구축한 서버 위치입니다.

 

- 오리진(Origin) 종류

1. S3 Origin: Amazon S3에 저장된 콘텐츠를 말합니다.

2. Custom Origin: S3를 제외한 모든 서버 형태를 말합니다.(ELB, EC2, 온프레미스 서버 등)

 

- CloudFront 구성/옵션

1. 배포(Distribution): CloudFront CDN의 구성 단위로, 여러 엣지 로케이션에 콘텐츠를 분배합니다.

2. 동작(Behavior): 어떤 프로토콜을 사용하며, 캐싱 방식, 로그 설정 등을 정의합니다.

3. Origin Group: 원본 서버 그룹으로, 기본(primary) 원본과 대체(secondary) 원본으로 구성되어 있습니다. 기본 원본이 실패하면 대체 원본으로 자동 전환됩니다.

4. 오리진 커스텀 헤더: CloudFront에서 요청 헤더를 수정하여 원본으로 전달할 수 있습니다. 이를 통해 요청의 출처를 식별하거나 보안 키를 전달할 수 있습니다.

 

2) 기본 실습

 

1. Cloudfront 생성에서 Origin과 원본에 대한 액세스, 사용자가 정의한 헤더들을 추가합니다.

cdn 실습1.png

 

2. 배포 단위로 CDN이 생성되었습니다.

cdn 실습2.png

 

3. 배포된 CDN은 도메인이름으로 접속하여 Origin의 컨텐츠를 받을 수 있습니다.

edited_cdn 실습3.png

 

 

 

- 원본그룹 생성

1. 원본그룹 생성에 들어갑니다.

cdn 원본그룺빌습1.png

 

 

2. 원본 그룹이 생성되었습니다. (기본)이라고 되어 있는 CDN이 우선 적용됩니다. 기본 CDN에 장애가 장기화될 경우, 원본 그룹 내의 다른 CDN이 작동하여 가용성을 확보합니다.

cdn 원본그룺빌습2.png

 

2. AWS CloudFront 캐시 

 

1) AWS CloudFront 캐시 티어

클라우드프론트캐시티어.png

 

CloudFront는 캐시를 두 가지 로케이션에서 관리합니다.

 

- Edge Location: CloudFront의 가장 가까운 엣지 서버 위치입니다.

- Regional Edge Location: Edge Location의 하위 개념으로, 캐시된 콘텐츠를 저장합니다.

 

따라서 우선 "Edge Location"을 확인하고 없으면 "Reginal Edge Location"를 확인하는 식으로 진행합니다.

 

 

2) 캐시 키

각 오브젝트는 "캐시 키" 단위로 관리됩니다. 캐시 키는 CloudFront가 캐시된 콘텐츠를 식별하는 데 사용합니다.

 

- 캐시 키 구성 요소

- 경로: 요청 URL에서의 경로를 포함합니다.

- Query String: GET 요청의 파라미터를 포함합니다.

- HTTP Header: 요청에 포함된 HTTP 헤더.

- Cookie: 요청에 관련된 쿠키 정보.

 

이때 같은 경로라도 쿼리 스트링, 헤더 등에서 차이가 있으면 서로 다른 캐시 키로 인식되어 캐시 히트가 발생하지 않습니다.

 

캐시 키 정책에서 다음과 같이 추가정보를 기입할 수 있습니다. 이로써 여러 세부 정보를 기입하여 요청할 수 있습니다.

캐시정책.png

 

 

 만약에 캐시 키 정책에 기입되지 않은 정보들을 입력하여 요청하면 해당 내용은 CloudFront에서 무시된 채 Origin Server에 보내집니다.

캐시여러옵션.png

 

3) 캐시 제어(Caching Control)

- TTL (Time to Live)

 TTL은 캐시된 객체의 유효 기간을 설정하는 값으로, 기본 설정은 24시간입니다. 각 오브젝트에 대해 설정이 가능하며, 다음과 같은 요소에 따라 조정됩니다

 

- Minimum TTL: 어디에서 TTL을 설정하든 이 최소 값보다 밑으로 설정 할 수 없습니다.

- Maximum TTL: 어디에서 TTL을 설정하든 이 최대 값을 초과할 수 없습니다.

- Default TTL: 기본값으로 24시간 적용됩니다.

 

 

캐시의 동작을 조정하는 헤더입니다

- max-age: 캐시된 콘텐츠가 클라우드프론트 및 브라우저에서 얼마나 오래 사용할 수 있는지를 결정합니다.

- s-maxage: 오직 CloudFront의 캐시에만 영향을 미치는 값입니다.

- no-cache, `no-store`: 캐싱하지 않도록 설정합니다. 단, 최소 TTL에 영향을 받을 수 있습니다.

- Expires: 캐시가 만료되는 정확한 시각을 지정하며, CloudFront와 브라우저에 모두 영향을 미칩니다.

 

 

3. CloudFront를 이용한 HTTPS 요청 방법

https://kokoko12334.tistory.com/entry/AWS-S3

 

 해당 s3 글 마지막 부분에 웹 호스팅 방법을 적었습니다. 여기에 Cloudfront, ACM(Amazon Certificate Manager)를 이용하여 https를 적용하는 방법을 알아 보겠습니다.

 

- 아키텍처

클라우드프론트 https아키텍처.drawio.png

 

 우선, HTTPS를 이용하기 위해서는 CA기관에 등록하고 이에 대한 인증서를 받아야 합니다. 이를 대신해주는 역할이 ACM입니다. 직접 인증서를 발급하는 경우에는 유료이지만 이 서비스는 무료입니다.

 

1. ACM 메뉴에 가서 인증서 요청을 클릭합니다. 이때 리전은 반드시 "버지니아 북부"로 해야합니다.

https1.png

 

2. 퍼블릭 인증서 요청을 합니다.

https2.png

 

3. 도메인 이름을 입력하고 생성을 합니다.

https3.png

 

4. CloudFront에서 배포를 선택합니다.

https5.png

 

 

5. 오리진에 연결할 S3를 선택합니다.

https6.png

 

6. 뷰어가 http로 접속할 때 https로 리다이렉트해줍니다.

http3312.png

 

7. ACM에서 만든 인증서를 선택합니다.

https7.png

 

8. S3를 오리진으로 하는 CDN을 만들었습니다!

https8.png

 

9. 이제 Route53과 CloudFront를 연결할 차례입니다. Route53에 연결할 호스팅 영역에 들어가서 레코드를 추가합니다. 이때 레코드 이름과 CloudFront의 대체도메인이 일치해야 조회가 됩니다.

https323.png

반응형