Cloudflare Workers Cache: Serverless Origin을 위한 Edge Caching

Cloudflare Workers Cache: Serverless Origin을 위한 Edge Caching

Cloudflare는 Worker 바로 앞에 위치하는 계층형 캐싱 시스템인 Workers Cache를 출시했습니다. 이 아키텍처를 통해 Cloudflare는 Worker를 호출하지 않고도 캐시된 응답을 제공할 수 있어, 캐시 히트 시 CPU 비용을 절감하고 최종 사용자에게 지연 시간을 줄여줍니다.

아키텍처의 변화: Origin으로서의 Worker

기존에는 Cloudflare Workers가 캐시와 origin의 앞에 위치했습니다. 이는 요청 변환, URL 재작성 또는 캐시된 origin에 도달하기 전 A/B 테스트를 수행하는 데 이상적이었습니다. 그러나 Astro, Next.js, Remix, SvelteKit과 같은 현대적인 프레임워크가 Workers를 주요 서버(the origin)로 점점 더 많이 사용함에 따라, 이전 모델에서는 동일한 응답에 대해서도 모든 요청이 Worker 호출을 트리거한다는 의미가 되었습니다.

Workers Cache는 이 모델을 뒤집습니다. 캐시를 Worker 앞에 배치함으로써, Cloudflare는 이제 edge에서 응답을 직접 제공할 수 있습니다. 신선한 캐시 응답이 존재하면 Worker는 실행되지 않으며 CPU 시간은 청구되지 않습니다. 캐시 미스(miss)가 발생하면 Worker가 한 번 실행되어 캐시를 채우고, 이후의 요청은 전 세계적으로 캐시에서 제공됩니다.

주요 기술적 특징

표준화된 HTTP 제어

Workers Cache는 wrangler.jsonc의 단 한 줄로 구성되며 표준 HTTP 헤더를 사용하여 관리됩니다:

  • Cache-Control: TTL(Time-to-Live)과 캐싱 동작을 정의합니다.
  • stale-while-revalidate: Cloudflare가 백그라운드에서 콘텐츠를 새로 고침하는 동안 오래된(stale) 응답을 즉시 제공할 수 있게 하여, 사용자가 렌더링을 기다리지 않도록 보장합니다.
  • Vary: 콘텐츠 협상을 가능하게 합니다. Cloudflare는 지정된 요청 헤더(예: Accept-Language 또는 Accept-Encoding)를 기반으로 별도의 캐시 변형(variants)을 저장하여 각 클라이언트에게 올바른 표현이 제공되도록 합니다.
  • Cache-Tag: ctx.cache.purge()를 통해 특정 콘텐츠 그룹을 프로그래밍 방식으로 세밀하게 무효화할 수 있습니다.

지역별 계층형 캐싱

캐싱이 활성화된 모든 Worker는 기본적으로 2계층 토폴로지를 사용합니다:

  1. Lower Tier: 사용자에게 가장 가까운 데이터 센터에 위치합니다.
  2. Upper Tier: 하위 계층을 채우는 지역적 집계기(regional aggregator) 역할을 합니다.

이 구조는 전 세계 어디에서든 첫 번째 요청이 upper tier를 채우도록 보장하여, 평면적인(flat) 캐시와 비교했을 때 전체 네트워크의 캐시 히트율을 크게 높여줍니다.

ctx.props를 통한 멀티테넌트 안전성

인증된 데이터 또는 사용자별 데이터를 지원하기 위해, Workers Cache는 ctx.props와 통합됩니다. 서비스 바인딩을 통해 Worker가 호출될 때, ctx.props에 전달된 모든 식별자(예: userId 또는 tenantId)는 캐시 키의 일부가 됩니다. 이는 인증된 응답을 edge에서 캐시할 수 있게 하면서도 사용자 간의 데이터 유출을을 방지합니다.

고급 구성 패턴

Workers Cache는 모든 Worker 엔트리포인트(이름이 지정된 WorkerEntrypointctx.exports 호출 포함) 앞에 위치하기 때문에, 개발자는 메모이제이션된 단계들의 체인으로 애플리케이션을 구축할 수 있습니다:

  • Gateway Stage: 인증 및 요청 정규화를 처리하는 외부 엔트리포인트(캐싱 비활성화).
  • Backend Stage: 비용이 많이 드는 데이터 페칭 및 렌더링을 수행하는 내부 엔트리포인트(캐싱 활성화).

이를 통해

Sources