CDN이 캐싱하는 방법에 대해서 배워보려고 한다.
캐싱은 CDN에 있어서 핵심적인 부분이다.
OS 가 캐싱을 하는 것처럼 빠른 작업을 위해 임시로 저장해놓는 것을 의미한다.
CDN 에서는 유저가 조금 더 빠르게 컨텐츠에 접근하여 서비스를 받을 수 있게 한다.
그래서 캐시가 정말 중요하다.
그 중 우리가 CDN에서 주로 올리는 파일인 static file을 알아보자
정적 파일로 해석되는데..
파일을 다시 재구성할 필요가 없는 그 파일 그자체로써의 역할만하는 것이 정적 파일이라고 할 수 있다.
DB의 정보를 그대로 가져온다면.. DB도 Static이 될 수 있고
DB의 querying 결과를 가져온다면 DB가 Dynamic이 될 수 있다.
대부분의 웹사이트는 정적과 동적을 나누어놓았는데 우리가 웹페이지를 볼 때 마다 같은 위치에 같은 포맷에 같은 컨텐츠가 있다면 그것은 대부분 정적파일이다.
이러한 것들이 정적 파일의 대표적인 예며 다른 것들은
- Images
- Videos
- Musics
- Javascript
- CSS Files
들이 있다.
이러한 캐싱을 하는 것이 구체적으로 나에게 어떤 도움을 줄까?
물론 빨라진다는 것은 알지만 일반적으로 CDN 캐시의 장점은 무엇일까?
크게 3가지가 있다.
앞서 말했듯이 우리가 체감상 빠른 서비스를 제공 받아서 좋은 것부터 시작이다.
1. Improve UX
프록시 서버에 캐싱을 하게 되고, 전세계 수많은 사람들이 파일을 요청할 때, Origin 까지 가지 않고 Proxy에 저장된 것만 해도 빠르게 컨텐츠를 받을 수 있다.
다시 말하자면 굳이 북미에 있는 인스턴스에 접근하지 않아도 된다는 뜻이다.
유저 입장에서도 좋고 또한 그것이 효율적이다.
2. Cut down on bandwidth costs
대역폭 비용이라고 해석되는데 이것은 CDN의 사용 비용을 얘기한다.
당연히 Origin까지 가지 않는데 비용이 줄 것이다.
3. Ensure reliable content delivery
다른 곳에서 파일을 받는 것은 위험성이 존재한다.
self-hosted로 운영한다면 여러가지 취약점이 생긴다.
트래픽이 몰리거나 그럴 때 말이다.
특히 DDoS 같은 것에도 취약할 수 있다.
CDN 캐싱을 함으로써, Reverse Proxy를 함으로써 신뢰도가 높아질 수 있는 것이다.
그림을 보면서 조금 더 살펴보자
Proxy를 이용한 Cache는 여러 데이터 센터에 걸쳐서 있다.
그렇게 때문에 북미의 Origin Server에 접근하지 않아도 된다는 장점이 있는 것이다.
즉, 컨텐츠에 한해서는 지역에서 자유로운 통신이 가능해진다.
이러한 캐싱이 영원할까?
당연히 내가 접근하는 모든 컨텐츠들이 무조건 빠르게 들어올까?
당연히 캐시 서버는 한계가 존재한다.
그렇다면 캐시 서버는 어떻게 동작하는 것일까?
우리가 수동으로 조작할 수 있는 여러가지 캐시 옵션이 있다.
크게 3가지로 나눌 수 있다.
1. Purge Cache
=> Origin 에서 다시 캐싱을 해야할 때, 기존에 캐싱되어 있던 것을 삭제 후 다시 받아야 한다.
이러한 작업은 모든 CDN 에 걸쳐서 이루어지기 때문에 큰 작업이라고 할 수 있다.
Purge는 비용이 크다는 것을 알아두자.
2. Always/Never Cache
항상 제공되어야 하거나 항상 제공되지 말아야 하는 파일에 Tag 를 지정하는 것이다.
이렇게 한다면 다시 받아와야 할(Origin) 항목들과 항상 변하지 않을 파일(Cache)에 대해서 효과적으로 적용할 수 있다.
다시 말해서 파일을 3개(image, file, video) 올리더라도 image와 같은 것들이 자주 바뀐다면 image 폴더에 대해 캐싱을 하지 않을 수 있다.
이런 식으로 태깅을 하면서 효율적으로 캐시를 운영한다.
3. Cache for Period
캐시 옵션에 Expire 기간을 두는 것이다.
해당 파일에 대해 캐싱을 얼마동안 유지할 지와 같은 것이다.
참고링크
https://www.imperva.com/learn/performance/cdn-caching/
'DevOps' 카테고리의 다른 글
Logging Application 비교 (0) | 2023.01.21 |
---|---|
SVN_Command (0) | 2023.01.21 |
CDN, Content Delivery Network - 1 (0) | 2022.11.27 |
Source tree, 소스트리로 형상관리 쉽게 하기 (0) | 2022.11.12 |
PlantUML, UML 직접 그리지 말고 코드로 그리자 (0) | 2022.11.12 |