Skip to content

Commit

Permalink
Merge pull request #63 from gdsc-ssu/ChoiSangwon/week20
Browse files Browse the repository at this point in the history
[week20] CloudFront란?
  • Loading branch information
halfmoon-mind authored Oct 18, 2024
2 parents 48030ac + eca0fb4 commit c8d60e5
Show file tree
Hide file tree
Showing 7 changed files with 119 additions and 0 deletions.
95 changes: 95 additions & 0 deletions AWS/CloudFront/CloudFront.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
## CloudFront란?

<aside>
💡 html, css, js 등의 정적 및 동적 웹 콘텐츠를 사용자에게 더 빨리 배포하도록 지원하는 서비스
→ 즉 `CDN` 역할을 하는 서비스다.

</aside>

- “엣지 로케이션”이라고 하는 aws 데이터 센터를 이용하여 전세계 네트워크를 통해 콘텐츠를 제공
- 일반적인 웹 서버에서 이미지의 경우 url을 통해 제공되어짐
ex) https://example.com/sunsetphoto.png
- 해당 이미지로 접속하게 되면 여러 네트워크의 복잡한 방식을 통해 라우팅 된다.
→ 클라우드 프론트의 경우 이런 라우팅 방식을 효과적으로 제어해 콘텐츠 배포 속도를 올린다.
(최종 사용자에게 가장 가까운 네트워크를 사용해서 빠르게 데이터를 제공한다)
![[스크린샷 2024-06-05 13.15.19.png]]

전세계에 퍼져있는 aws 백본 네트워크와, 엣지 서버를 활용해 사용자에게 제일 가까이 존재하는 cloudfront를 사용하여 속도를 올릴 수 있다.

### CDN (Content Delivery Network) 이란?

- cdn은 content delivery network의 약자로 네트워크 설계로 인해 발생하는 통신 지연을 줄이기 위한 것.
- 물리적으로 거리가 멀면 멀수록 지연시간이 생길 수 밖에 없다.
- 이럴 때 클라이언트와 서버 중간에 캐시 서버를 두어 속도를 높이는 것

![[스크린샷 2024-07-25 오후 4.46.23.png]]

![[스크린샷 2024-07-25 오후 4.46.28.png]]

## Cloud Front 콘텐츠 제공 방법

1. 웹사이트 혹은 앱에서 객체(데이터)에 대한 요청을 보낸다.
2. DNS는 최적으로 요청을 처리할 수 있는 CloudFront POP(엣지 로케이션)로 라우팅 (일반적으로는 지연시간이 가장 짧은 곳)
3. CloudFront는 해당 캐시에 요청된 객체가 있는지 확인, 있으면 사용자에게 반환
1. 없으면 해당 객체(데이터)의 오리진에서 데이터를 가져옴
2. 오리진에서 첫 번째 바이트가 도착하는 순간부터 CloudFront가 객체를 사용자에게 전달하기 시작.
3. CloudFront는 다음에 다른 사용자가 객체를 요청할 때 캐시에 해당 객체를 추가

- 또한 CloudFront는 캐시를 두단계로 나눠서 관리.

1. 전역 엣지 로케이션인 POP는 사용자에게 가장 가까운 위치.
2. 리전 엣지 캐시는 리전내에 위치하며 POP을 도와준다. (POP보다는 덜 사용되는 데이터들의 정보를 가지고 있다.)

![[스크린샷 2024-06-05 13.42.27.png]]

## 사용 사례

- s3 + cloudFront로 정적 웹 콘텐츠 (html, css, js)의 전송속도를 높일 수 있다.
![[스크린샷 2024-06-10 13.352331.png]]
- 미디어를 스트리밍하기 위한 몇 가지 옵션을 제공한다
- 온디맨드 비디오 : hls, mpeg dash 등과 같은 일반적인 포맷으로 디바이스에 상관없이 스트리밍 가능
- 라이브 스트리밍 : 엣지에 미디어 조각을 캐싱하여 해당 소작을 올바른 순서로 전송하는 manifast 파일에 대한 여러 요청을 결합함으로써 오리진 서버의 부하를 줄일 수 있음.
- https로도 구성 가능 (보안)
- 엣지에서 서버리스 코드를 실행하면 지연 시간을 최소화하면서 다양한 방식으로 최종 사용자에 대한 콘텐츠와 환경을 사용자 지정할 수 있다.
- 예를 들어 오리진 서버가 유지보수를 위해 다운된 경우 최종 사용자에게 일반 HTTP 오류 메시지를 표시하는 대신 사용자 지정 오류 메시지를 표시할 수 있다.

## 특징

- 기본적으로 Amazon s3 버킷의 파일은 비공개로 설정. 버킷을 만든 AWS 계정만 파일을 읽거나 쓸 수 있는 권한이 있음. (공개 읽기 권한 부여하면 누구나 읽을 수 있음)
- 사용자 지정 도메인 이름을 사용하도록 할 수 있음

## 정책

- 3가지의 정책 설정 가능

1. 캐시 정책 (Cache Control)
- TTL 및 Cache Key 정책
- 클라우드프론트가 어떻게 캐싱을 할지 결정
2. 원본 요청 정책 (Origin Request)
- 오리진에 쿠키, 헤더, 쿼리스트링 중 어떤 것을 보낼 것인가.
3. 응답 헤더 정책
- 클라우드 프론트가 응답과 함께 실어 보낼 HTTP Header

### 장점

- 지연 시간을 줄일 수 있음 (사용자가 빠르게 정보를 받을 수 있다.)
- 보안 관리의 용이
- DDos가 줄어듬
- DDoS 공격은 호스팅 서버에 과부하를 주어 작동하기 때문에 CDN은 지리적으로 분산되어 있고 사용자와 더 가까운 여러 서버에서 부하를 균등하게 공유함으로써 도움이 된다.
- 이렇게 하면 한 서버가 다운되더라도 계속 작동하는 서버가 존재한다
⇒ cdn 자체가 여러개의 캐시 서버를 두는 것이므로 오리진에 대한 부하를 효과적으로 줄일 수 있다.
- 인증서 관리와 자동 인증서 생성 및 갱신을 제공하여 보안을 지킨다.

## 요금

- 요금의 경우 데이터를 "전송"할 때만 청구된다.

## 기타

- 캐시 기능으로 인해 원본이 업데이트가 안될 수 있다.
- 이럴때에는 “무효화 기능(invalidation)”을 통해 수정된 파일이 캐시로 바로 반영하도록 설정할 수 있다.
→ TTL이 지나기 전에 강제로 캐시 삭제하는 것, 추가적인 비용이 발생한다 (1000건 무료, 그 뒤는 요청 하나당 5~6원)

### Reference

[[AWS] S3와 CloudFront 연동하기](https://velog.io/@rungoat/AWS-S3와-CloudFront-연동하기)
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
24 changes: 24 additions & 0 deletions review/week20/최상원.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
## 접두사 목록을 활요한 보안 그룹의 CIDR 관리

- **CIDR (Classless Inter-Domain Routing)**: IP 주소의 클래스에 구애받지 않고 네트워크를 유연하게 설계할 수 있는 방법. 네트워크 주소와 서브넷 마스크를 간단한 "/숫자" 형식으로 표현.
- **서브네팅**: IP 주소를 더 세밀하게 나누는 방식으로, CIDR의 하위 개념. 네트워크를 작은 단위로 쪼개는 과정.
- **AWS CIDR 블록**: AWS에서는 서브넷을 CIDR 블록으로 관리하며, 네트워크 범위를 설정할 때 주로 사용.
- **관리형 접두사 목록**: 여러 CIDR 블록을 한데 모아 관리하는 AWS 기능으로, 보안 그룹 및 라우팅 테이블 구성에 편리함을 제공.
- **보안 그룹**: 인스턴스의 인바운드/아웃바운드 트래픽을 제어하는 AWS 보안 기능. CIDR 블록을 통해 접근을 제한할 수 있음.
- **버전 관리**: 접두사 목록은 버전 관리를 제공하며, 수정 후 문제가 발생할 경우 이전 버전으로 롤백할 수 있음.
- **IP 주소 추가/삭제**: 테스트 환경이나 보안 요구 사항에 맞춰 임시로 IP 주소를 추가하고 삭제할 수 있음.

## CloudFront

- **CloudFront** : html, css, js 등의 정적 및 동적 웹 콘텐츠를 사용자에게 더 빨리 배포하도록 지원하는 AWS 서비스
→ 즉 `CDN` 역할을 하는 서비스다.
- **CDN (Content Delivery Network)** : 네트워크 설계로 인해 발생하는 통신 지연을 줄이기 위한 것.
- 이럴 때 클라이언트와 서버 중간에 캐시 서버를 두어 속도를 높이는 것

- 클라우드 프론트의 캐시 정책
- TTL 및 Cache Key 정책
클라우드프론트가 어떻게 캐싱을 할지 결정
- 원본 요청 정책 (Origin Request)
오리진에 쿠키, 헤더, 쿼리스트링 중 어떤 것을 보낼 것인가.
- 응답 헤더 정책
클라우드 프론트가 응답과 함께 실어 보낼 HTTP Header

0 comments on commit c8d60e5

Please sign in to comment.