Cloudflare가 Workers Cache를 출시했다. Worker 엔트리포인트 바로 앞에 위치하는 리전 2-티어 캐싱 레이어로, Wrangler 설정 한 줄("cache": { "enabled": true })과 표준 HTTP Cache-Control 헤더만으로 활성화된다. 캐시 히트 시 Worker가 실행되지 않아 CPU 비용이 발생하지 않으며, 모든 플랜에서 추가 스토리지 비용 없이 사용 가능하다.
핵심 포인트- 2-티어 구조: 각 Cloudflare 데이터센터(하위 티어) + 전략적 배치 상위 티어로 구성되어, 첫 요청 후 전 세계 어디서든 Worker 실행 없이 캐시 응답을 서빙한다.
- stale-while-revalidate 지원: 만료 후에도 즉시 캐시 응답을 반환하면서 Worker가 백그라운드에서 비동기로 새 콘텐츠를 채운다.
- Cache-Tag 기반 세밀한 무효화: ctx.cache.purge({ tags: ["product:123"] })로 특정 태그가 붙은 캐시만 선택 삭제 가능하다.
- ctx.props 격리: WorkerEntrypoint의 ctx.props(예: userId)가 캐시 키에 포함되어 멀티테넌트 환경에서도 사용자별 캐시 엔트리를 안전하게 분리한다.
- 엔트리포인트 단위 캐시 소유권: 존 설정(Cache Rules, Page Rules) 불필요. 캐시 무효화가 해당 Worker 엔트리포인트 범위로만 제한된다.
- 과금: 캐시 히트는 표준 요청 요금만 부과, CPU 시간 청구 0. 별도 스토리지 요금 없음.
상세 정리- 배경: 2017년 Worker 출시 당시 캐시/오리진 서버 앞에서 요청을 변환하는 미들웨어 역할로 설계됐다. 이후 Astro/Next.js/Remix 등 SSR 프레임워크가 Worker 자체를 오리진으로 사용하면서, 캐시 레이어 없이 매 요청마다 렌더링 비용이 발생하는 구조가 됐다.
- 변화: Workers Cache는 Worker 뒤가 아닌 앞에 캐시 레이어를 두어 캐시 가능한 요청이 Worker에 닿기 전에 처리되게 한다.
- 2-Tier 캐시: 하위 티어는 트래픽을 받는 각 데이터센터에, 상위 티어는 소수의 전략적 위치에 배치된다. 첫 요청이 상위 티어를 채우면 이후 전 세계 데이터센터가 Worker 실행 없이 캐시에서 응답한다.
- stale-while-revalidate 동작: max-age 내에서는 캐시 직접 반환, 스테일 윈도우 내에서는 캐시 즉시 반환 + Worker 백그라운드 갱신, 양 윈도우 외에서는 Worker가 직접 응답 생성 후 사용자 대기.
- Vary 헤더: 동일 URL에서 Accept 등 요청 헤더 값에 따라 별도 캐시 엔트리 저장. RFC 9110/9111 준수. 예: WebP/JPEG 이미지를 Accept 헤더에 따라 분리 캐시.
- 캐시 소유권 격리: 캐시 무효화가 해당 Worker 엔트리포인트 범위로만 제한되어 다른 존의 캐시를 실수로 삭제하지 않는다. workers.dev, 프리뷰 URL, Workers for Platforms 환경 모두 지원.
- ctx.props 캐시 키: WorkerEntrypoint에서 this.ctx.props 값이 캐시 키에 포함된다. userId 등을 props로 넘기면 사용자별 별도 엔트리가 생성되어 인증 API에서도 안전하게 캐시 가능.
- 엔트리포인트 간 캐시 조합: 기본 export, 명명된 WorkerEntrypoint, ctx.exports 내부 호출 각각에 독립 캐시를 설정할 수 있다. 인증 레이어(캐시 없음)와 데이터 레이어(캐시 있음)를 같은 Worker 안에서 분리하는 패턴이 가능하다.
- Smart Placement 연동: 유저 가까운 Worker A(인증/라우팅)와 데이터 가까운 Worker B(렌더링/DB) 사이에 Workers Cache를 두어, 히트 시 Worker B 호출 없이 응답한다.
- Astro 통합: @astrojs/cloudflare의 cacheCloudflare() 어댑터가 캐시 활성화, Cache-Control 설정, 태그 부착, 무효화를 자동 처리. routeRules로 경로별 max-age/stale 윈도우를 설정한다.
- 과금 모델: 히트는 요청 요금만, CPU 시간 0. 미스/바이패스는 요청 + CPU 요금. 스토리지 비용 없음. 단, 캐시 활성화 시 기존 무료 요청(정적 에셋, 서비스 바인딩 호출)도 표준 요청 요금이 적용된다.
- 예정 기능: Smart Placement와 상위 티어 캐시 co-location, 더 큰 캐시 응답 크기, Next.js/TanStack Start 통합, ctx.cache.invalidate() API.
왜 읽나Cloudflare Workers로 SSR 앱을 운영하거나 엣지 캐싱 전략을 설계하는 인프라/백엔드 엔지니어에게 Workers Cache 아키텍처와 실전 설정 패턴을 한 번에 파악할 수 있는 레퍼런스.