
캐시는 값비싼 연산 결과 또는 자주 참조되는 데이터를 메모리 안에 두고, 뒤이은 요청이 보다 빨리 처리될 수 있도록 하는 저장소입니다. 애플리케이션의 성능은 데이터베이스를 얼마나 자주 호출하느냐에 크게 좌우되는데, 캐시는 그런 문제를 완화할 수 있는 방법입니다.
캐시 계층은 데이터가 잠시 보관되는 곳으로 데이터베이스보다 훨씬 빠릅니다. 별도의 캐시 계층을 두면 성능이 개선될 뿐 아니라 데이터베이스의 부하를 줄일 수 있습니다. 또한, 캐시 계층의 규모를 독립적으로 확장시키는 것도 가능합니다. 캐시 서버를 두게되면 다음과 같이 동작하게 됩니다.

위와 같은 캐시 전략을 읽기 주도형 캐시 전략이라고 부릅니다. 이외에도 다양한 캐시 전략이 있는데, 데이터 종류/크기/액세스 패턴 등을 고려하여 전략을 결정합니다.
캐시를 사용할 때는 다음 사항들을 고려한 후 사용하는 것이 좋습니다.
CDN은 정적 콘텐츠를 전송하는 데 쓰이는 지리적으로 분산된 서버의 네트워크입니다. 이미지, 비디오, CSS, JavaScript와 같은 파일 등을 캐시할 수 있습니다.

위 그림과 같이 어떤 사용자가 웹사이트를 방문하면, 사용자와 지리적으로 가까운 CDN 서버가 정정 콘텐츠를 전달하게 됩니다. 직관적으로도 당연하겠지만, 사용자가 CDN 서버로부터 멀면 멀수록 웹사이트는 천천히 로드됩니다. 예를 들어, CDN 서버가 서울에 있다면 부산에 있는 사용자는 유럽에 있는 사용자보다 더 빠른 응답을 받을 수 있습니다.


응답 HTTP 헤더에 파일의 캐시 만료 기간인 TTL을 포함하여 전달

파일은 HTTP 헤더의 TTL에 명시된 시간이 끝날 때까지 존재

다른 사용자가 동일한 이미지를 요청했을 때 캐시가 남아있을 경우, 남아있지 않다면 이전 작업 재수행

CDN은 보통 서드-파티 제공자에 의해 운영되어 CDN을 들어가고 나가는 데이터 전송 양에 따라 요금이 부과됩니다. 자주 사용되지 않는 콘텐츠를 캐싱하는 것은 효율이 좋지 않으므로, CDN에서 제외시켜야 합니다.
실시간성이 중요한 콘텐츠의 경우 만료 시점을 잘 정해야 합니다. 너무 길지도 짧지도 않아야 하는데, 너무 길면 콘텐츠의 신선도는 떨어질 것이고, 너무 짧으면 원본 서버에 빈번히 접속하게 됩니다.
CDN 자체가 죽었을 경우 웹사이트/애플리케이션이 어떻게 동작해야 하는지 고려해야 합니다. 일시적으로 CDN이 응답하지 않을 경우, 해당 문제를 감지하여 원본 서버로부터 직접 콘텐츠를 가져오도록 구성하는 것이 필요할 수 있습니다.
아직 만료되지 않은 콘텐츠라 하더라도 아래 방법 가운데 하나를 쓰면 CDN에서 제거 가능합니다.
image.png?v=2 와 같은 식캐시 계층과 CDN 계층이 도입된 설계는 다음과 같습니다.

두 계층의 도입으로 생긴 변화는 다음과 같습니다.