# CloudFront & Global Accelerator

> AWS 말고 CloudFlare 쓰자

### CloudFront란?

Content Delivery Network (CDN)이다. DDoS 공격을 막고, 방화벽 역할을 하며, 외부 HTTPS 노출시켜 내부 HTTPS와 소통할 수 있게 한다. 또한 엣지 로케이션을 타고 가며 캐싱을 해 다음 Fetch 때는 더 빠르게 반응할 수 있도록 한다. CloudFront의 오리진(진입점)은 아래와 같다.

- S3 버킷 - 파일을 엣지(지역 데이터 센터)에 뿌려서 캐시의 역할을 하게 할 수 있다. S3 버킷과 OAI(**Origin **Access Identity)를 통해 암호화할 수 있으며, S3에 파일을 업로드하는 입구로 쓸 수도 있다.

- Custom Origin (HTTP) - ALB, EC2 instance, S3 website, 그리고 HTTP 백엔드 아무거나 오리진이 될 수 있다.

**엣지 로케이션**은 CloudFront의 한 지점으로 여기를 통해 요청이 들어가면 거기에 대한 응답을 엣지 로케이션이 캐싱한다. 요청이 엣지 로케이션으로 가도록 하는 것은 따로 설정할 수 있다.

![Image](https://upload.cafenono.com/image/slashpageHome/20240820/134031_r7s9N5MrYOfUpMAtnG?q=80&s=1280x180&t=outside&f=webp)

Cloudfront는 위치에 따라서 Whitelist와 Blacklist를 만들어 각 지역별로 접근을 차단/허용할 수 있다.

### CloudFront vs S3 Cross Region Replication

CloudFront

- 글로벌 엣지 네트워크

- 모든 파일은 TTL 만큼만 캐싱된다.

- 정적 콘텐츠를 사용하는데 최적이다.

S3 Cross Region Replication

- 지역별로 직접 세팅을 해주어야 한다.

- 거의 실시간으로 파일이 업데이트 된다.

- 읽기 전용

- 적은 리전에 짧은 시연 시간으로 동적 콘텐츠를 사용하는데 최적이다.

### 서명된 URL / 쿠키

유튜브 프리미엄처럼 특정 유저에게만 콘텐츠를 제공해야 할 필요가 있을 때 쓴다. URL 만료시간, 허용 IP 범위, 그리고 이 URL을 만들 수 있는 AWS 계정을 설정한다. 서명된 URL은 개개의 파일에, 쿠키는 여러 파일에 접근할 때 사용한다.

### CloudFront Signed URL vs S3 Signed URL

**CloudFront Signed URL** - 오리진에 상관없이 URL만 있으면 접근이 가능하다. 루트 계정만 관리 가능하고 캐싱이 가능하다.

**S3 Pre-Signed URL** - IAM Key를 사용해 S3 버킷에 직접 접근해 파일을 가져온다. 버킷 정책 등 고려해야 할 게 많다.

### Advanced

**가격 - **지역 (엣지 로케이션) 별로 다 다르다. 아래는 3가지 클래스로 가격을 책정할 수 있다.

![Image](https://upload.cafenono.com/image/slashpageHome/20240820/134033_pJE0KcWTpll0G1PuxH?q=80&s=1280x180&t=outside&f=webp)

**멀티 오리진 - **URL별로 트래픽을 라우팅할 수 있다.

**오리진 그룹 -** 한 오리진이 fail 했을 때, 다른 오리진으로 트래픽을 보내도록 묶는 방법이다.

**필드 레벨 암호화** - 민감한 정보를 CloudFront가 모르게 하는 기술이다. 비대칭키를 사용해 첫 엣지 로케이션에서 민감한 정보를 암호화한다. 그리고 쭉 암호화되어 있다 마지막 웹 서버(EC2)에 가서 웹 서버의 개인 키로 복호화를 하게 한다.

## Global Accelerator

Q. 특정 리전에 배포된 어플리케이션을 어떻게 적은 지연 시간으로 전 세계 사람들이 이용할 수 있을까?

A. Edge Location을 타고 해당 리전에 접근하면 된다.

이렇게 이야기하면 CloudFront와는 무슨 차이냐 이야기할 수 있다. CloudFront는 정적/동적 콘텐스를 캐싱해서 전송한다. 그래서 빠른 속도를 낼 수 있다.

Global Accelerator는 단순한 Proxy로 TCP, UDP 통신 모두 직접적으로 최종 목적지의 IP를 가지게 된다. 이때, 여러 리전에 같은 IP의 같은 리소스를 두고 Anycast를 접근할 수 있다. Anycast는 같은 IP가 여러 개일 때, 가장 가까운 IP로 접근하는 방법을 말한다. 실제 리소스를 운영한다는 것이 CloudFront와의 차이일 것이다.

For the site tree, see the [root Markdown](https://slashpage.com/kaonmir.md).
