AWS S3와 CloudFlont 알아보기
✔️AWS S3은 뭘까?
AWS 공식 문서에 따르면 S3(Simple Storage Service)는 인터넷 스토리지 서비스이다.
웹 호스팅 서비스가 아니라 '스토리지 서비스'인만큼 파일을 단순히 저장하거나, 다른 AWS 서비스의 로그를 저장하는 등의 기능이 모두 가능하다. 웹 호스팅 서비스는 단지 S3에서 제공하는 수많은 기능들 중 하나일 뿐이다.
🤔 S3의 장점은 무엇일까?
✅ 데이터 저장 - 데이터를 무한정으로 저장할 수 있다. 배포를 하게되면 bucket을 생성해 그 안에 파일을 넣게 되는데, 이 bucket은 유연해서 자동으로 확대/축소가 된다. Storage 저장 공간이 얼마나 남았는지 걱정하지 않아도 된다.
✅ 데이터 다운로드 - 데이터를 직접 다운로드 하거나, 다른 사람이 다운로드 할 수 있도록 한다.
✅ 권한 - 권한이 있는 사용자만 데이터에 접근할 수 있게 한다. 보안 굿!
✅ 표준 Interface를 사용 - 인터넷 표준인 REST 및 SOAP Interface를 사용한다. (HTTP-SOAP는 지원 중단, HTTPS로 사용해야함)
요런 장점들이 있다. AWS에서 정적 리소스를 다룰 때 가장 권장하고 있는 방법이기도 하다.
✔️ AWS Cloudfront는 뭘까?
Amazon CloudFront is a fast content delivery network (CDN) service that securely delivers data, videos, applications, and APIs to customers globally with low latency, high transfer speeds, all within a developer-friendly environment. - Amazon 공식 문서 (https://www.amazonaws.cn/en/cloudfront/)
읽어보면, AWS Cloudfront는 HTML, CSS, JS 및 이미지 파일과 같은 정적 및 동적 웹 컨텐츠를
사용자에게 더 '빠르게' 배포할 수 있도록 지원하는 웹 서비스라고 나와있다.
Cloudfront도 결국 CDN의 일종이라는 건데, 요 CDN은 도데체 뭘까?
🤔 CDN(Content Delivery Network / Content Distribution Network), 콘텐츠 전송 네트워크란?
CDN은 콘텐츠를 효율적으로 전달하기 위해 여러 노드를 가진 네트워크에 데이터를 저장해 제공하는 시스템을 말한다.
말이 되게 어려운데, CDN은 콘텐츠를 사용자들에게 빠르게 전달하기 위해
웹 콘텐츠를 사용자와 '지리적으로 가까운' 곳에서 전송해 전송 속도를 높이는 역할을 한다.
🤔 그럼 CDN의 장점은 무엇일까?
✅ 빠른 데이터 제공 - 서버와 사용자 사이의 물리적인 거리를 줄여 콘텐츠 로딩에 소요되는 시간을 최소화 한다.
✅ 서버의 트래픽 부하 및 비용을 줄임(성능 up!) - 한 개의 Origin Server에서 모든 요청에 일일히 응답하기보다는 여러 대로 나누어 응답하는 편이 더 부하의 가능성이 낮다.
✅ 웹 사이트의 보안 개선 - DDoS 공격 같은 일반적인 악성 공격으로부터 웹 사이트를 보호할 수 있고, 인증 개선과 최적화를 제공한다.
✅ 콘텐츠 가용성 개선 - 대규모 트래픽이 오더라도 CDN은 분산되어있기 때문에, Origin SErver보다 더 많은 트래픽을 처리하고, 그에 견딜 수 있다.
🤔 그래그래.. S3도 알겠고, Cloudfront도 알겠는데, 왜 굳이 같이 써야해?
위 장점으로 모든 것이 설명 가능한데, 조금 더 설명해보겠다.
사용자가 원격지에 있는 Origin Server로부터 HTML, CSS, JS 등의 Contents를 다운받을 때
물리적으로 가까이 있는 서버에서 받는 것보다 시간이 좀 더 오래 걸린다.
그렇기 때문에 이 응답 시간을 줄이려면 Cloudfront와 같은 CDN 서비스를 이용해
사용자가 있는 위치에서 가장 가까운 곳에 위치한 Cache Server에 해당 Contents를 저장해 캐싱하고,
Content 요청 시에 멀리 있는 Origin Server가 아닌, 가까이에 있는 Cache Server가 응답을 줄 수 있도록 해야한다.
보통 이런 CDN은 전 세계적으로 서비스를 할 때에 중요시된다.
넷플릭스를 예로 들자면, 넷플릭스는 전 세계로 동영상 스트리밍 서비스를 제공하기 때문에,
콘텐츠를 더 안정적이고 빠르게 사용자에게 제공할 필요가 있다. 실제로 넷플릭스는 2011년 자체 CDN을 구축하기도 했다.
하지만 이 예시처럼 글로벌한 서비스를 하는 경우가 아니라, 특정 국가나 지역만을 타깃으로 할 때에는
CDN 서비스가 오히려 불필요한 연결 지점을 늘릴 수 있어 성능 저하를 가져올 수 있다.
https://www.cloudflare.com/ko-kr/learning/cdn/what-is-a-cdn/
✔️ AWS S3 + Cloudfront! 간단하게 정리해보자.
S3는 우리가 사용자에게 보여줄 정적인 파일들을 넣어두는 역할을 한다.
그리고 S3이 제공하는 많은 속성 중에, 정적인 웹 호스팅 속성을 통해 호스팅도 가능하다.
Cloudfront는 사용자와 S3에서 호스팅하는 페이지 중간에서 사용자에게 빠르게 페이지를 응답할 수 있도록
사용자와 지리적으로 가까운 Cache Server에 페이지를 캐싱을 하고, 보안을 강화해주는 역할을 한다고 보면 된다.
맨 처음에는 [사용자 → Cloudfront → S3] 이렇게 웹 페이지를 요청하게 되는데,
Cloudfront의 캐싱 이후에는 S3까지 요청이 가지 않고, [사용자 → Cloudfront] 사이에서 응답과 요청이 처리되게 된다.