Infra

CloudFront(CDN), S3란?

Creative_Lee 2023. 9. 14. 22:43

1. CDN(Content Delivery Network)이란?

클라이언트와 서버의 물리적 통신거리가 긴 경우(ex. 한국에서 미국 웹사이트에 접속) 동영상 또는 웹 사이트 이미지와 같은 대용량 파일을 로드하는 데 시간이 오래 걸립니다. 

 

CDN은 클라이언트와 서버 중간에서 통신에 관여해 위와 같은 문제를 해결해 줍니다.

클라이언트와 물리적으로 가까운 CDN을 통해 데이터를 주고받아 웹 트래픽을 줄이고 빠른 로딩으로 사용자 경험을 개선할 수 있습니다.

 


1-1. CDN 적용 시 장점

  • 물리적 거리 감소 및 캐싱을 통해 페이지 로드 시간 단축되고, 이로 인해 사용자 경험이 좋아집니다.
  • 자체 캐싱 및 최적화를 통해 서버가 제공해야하는 데이터 양을 줄일 수 있고, 이로 인해 서버 호스팅비용을 절감할 수 있습니다. 
  • 트래픽 급증시 트래픽을 분산하여 서버에 미치는 영향을 줄일 수 있습니다. 

2. CloudFront란?

AWS에서 제공하는 CDN 서비스입니다.

전세계의 각 지역마다 엣지 로케이션(임시 데이터 저장소)를 가지고 있으며, 오리진으로부터 데이터를 받아 보관합니다.

사용자는 가까운 엣지 로케이션으로부터 데이터를 받아 빠르게 서비스를 사용할 수 있습니다.


2-1. 캐시 정책

CloudFront가 어떤 방식으로 캐싱할 지 지정하는 옵션입니다.

제공되는 캐시 정책을 선택해도 되고, 새로운 캐시정책을 만들수도 있습니다.

정책 내부로 들어가면 TTL, 압축 지원 등의 세부 정책을 설정할 수 있습니다.


2-1-1. TTL(Time To Live) 

CloudFront가 origin(원본 데이터를 소유하고 있는 곳)으로 부터 받은 데이터를 캐시할 최소, 최대, 기본 시간을 나타내는 옵션입니다.

 

TTL 옵션은 origin의 Cache-Control(max-age, s-maxage) 및 Expires 설정에 따라 선택적으로 적용됩니다.

자세한 정책은 공식 문서를 참고하세요!


2-1-2. 압축 지원

CloudFront가 지원할 압축 형식을 지정하는 옵션입니다.

뷰어(브라우저)가 지원한다면, 객체를 Gzip 또는 Brotli 형식으로 압축하여 전달합니다.

 


2-2. 응답 헤더 정책

CloudFront가 뷰어(브라우저)에게 응답을 전달할 때 함께 실어 보낼 HTTP Header를 지정하는 옵션입니다.

반대로 제거할 Header를 지정할 수도 있습니다.

보안, CORS, 사용자 지정 헤더(Cache-Control등) 를 지정할 수 있습니다. 

 

 


2-1-1. 사용자 지정 헤더, origin 재정의

CloudFront가 뷰어(브라우저)에게 전달할 커스텀 헤더(예시에선 Cache-Control)를 지정할 수 있습니다.

 

오리진 재정의는 원본(Origin에서 전달받은 CloudFront에 캐시된 데이터)에 동일한 헤더가 포함되어 있을 때,

원본의 헤더를 덮어쓸지(무시) 선택하는 옵션입니다.

자세한 정책은 공식문서를 참고하세요!


3. S3(Simple Storage Service)란?

AWS에서 제공하는 인터넷 파일 서버 서비스입니다.

텍스트파일, 이미지, 비디오 어떤 종류의 파일이던지 저장할 수 있습니다.


3-1. S3 장점

  • S3는 트래픽, 용량, 데이터 유실, 서버 다운, 보안 등 여러 이슈에 대한 부분을 대행합니다.
    때문에 사용자는 본래 목적인 저장에만 집중하여 사용할 수 있습니다.

3-2. 기본 용어 개념

객체(Object)

데이터가 저장되는 기본 단위이며 파일과 메타데이터로 구성됩니다.
key value 형식의 객체 개념을 생각하면 됩니다.

하나에 객체에는 여러개의 또 다른 객체가 있을수도 있고, 여러개의 파일이 있을수도 있습니다.

 

버킷(Bucket)

S3에서 최상위 디렉터리의 개념입니다.

버킷 단위로 지역(region)을 지정할 수 있고, 버킷에 포함된 객체에 대해 일괄적인 설정이 가능합니다.


3-3. 메타데이터

key-value 형태로 객체의 정보를 나타내는 속성입니다.

주로 Cache-Control 과 같은 헤더를 정의하는데 사용됩니다.

 

각 객체마다 개별 메타데이터 설정이 가능합니다.

이를 통해 객체 별 캐싱 전략을 다르게 가져갈 수 있습니다.

 

CloudFront와 같이 사용하는 경우, 캐시 정책과 관련된 헤더의 값 및 우선 순위에 변동이 생길 수 있으므로 주의해야 합니다.

 

 

 

infra도 기본이 중요하다!