AWS Cloudfront와 CDN 이해하기
AWS CloudFront란?
AWS CloudFront란 Amazon Web Service에서 제공하는 CDN 서비스이다. 쉽게 말해, 전세계 사용자들에게 빠른 웹 콘텐츠(사진, 동영상, HTML, JS 등)를 제공하는 것을 목표로한다.
Cloud Front at a High Level
해당 사진에서 볼수 있듯이 정적 웹 콘텐츠를 캐싱하여 클라이언트에게 전송해준다.
Client: 특정 웹서버와 S3로 부터 beach.jpg 파일을 요청하고 있다.
case1: Cloud Front Edge Location에 캐싱이 되어있을때
Orign Server로 향하지 않고, Edge Location의 Local Cache로 부터 캐싱된 값을 요청하여 받아온다.
case2: Cloud Front Edge Location에 캐싱이 되어있지 않을때
Origin Server로 요청을 보내 데이터를 받고, 캐시에 저장한다.
결국, 해당 Edge Location을 통해 전세계의 사용자는 지역과 인접한 Edge Location을 통해 캐싱받아 더 빠르게 콘텐츠를 받아 볼 수 있는데, 아래 사진을 통해 좀 더 쉽게 알 수 있다.
ClouFront: ALB or EC2 as an Origin
그렇다면, Cloud Front는 정적 콘텐츠 로딩에만 쓰일까?
정답은 아니다. Cloud Front는 CDN기능을 위해서인데, 이는 정적 콘텐츠 뿐만아니라 API 응답과도 같은 동적 콘텐츠에도 사용할 수 있다.
사진 처럼 Edge Location 뒤에 ALB나 EC2의 Public IP를 갖다 붙여서 API 응답속도를 향상시킬 수 있다.
만약 Origin Server가 업데이트 되었다면?
CloudFront는 캐싱 기반인것 처럼, 결국 원본 파일이나 서버가 변경이 되면 어떻게 업데이트 될까?
일단 기본적으로 CloudFront의 Caching은 TTL을 기준으로 업데이트된다.
-> 즉, 특정 시간이 지나면 캐시가 만료되어 다시 Origin Server로 요청을 보내야한다는 것이다.
근데, 지금 문제는 Origin Server가 변경되면 CloudFront는 TTL이 지날때까지 기다려야 하나? 라는 것이다.
이는 Cache Invalidation(캐시 무효화)으로 해결가능하다.
사진 속 처럼, Origin server가 업데이트 되었다면 이를 각 EdgeLocation에 알리는 것이다.
쉽게 말해, Origin Server가 Edge Locations들에게 TTL이 지나지 않았더라도 알려주는 것이다.
"야, 이거 바뀌었으니까 캐시 삭제하고 다시 받아가(Cache Invalidation)"
Cloud Front는 왜써야하는가?
AWS는 여러 Region과 AZ(Available zone)으로 나누어져 있다. 이는 전세계 사용자들이 본인이 있는 곳과 근처의 서버를 사용할 수 있도록 도와주는 것이다. 근데, 실제 웹서비스는 그렇지 않다. 보통 한국에서 사용하는 서비스이면 한국 서버에만 구축하지 전세계에 구축하진 않기 때문이다.
그래서 이제 Cloud Front를 사용해서 CDN을 구현하는 것이다. 전 세계에 있는 EdgeLocation을 이용해서 Cache 기반으로 더 빠른 웹 콘텐츠를 제공함으로서 사용자의 편리성을 높여주는 것이다.
참고자료/강의: