Workers Cache로 캐시 제어권 확보!
Cloudflare Workers Cache 출시로 개발자가 직접 캐시 동작 제어 가능해짐
서버 렌더링(Server-Side Rendering) 환경에서 CPU 시간 및 지연 시간 절감 효과 기대
stale-while-revalidate 지원으로 사용자 경험 저하 없이 캐시 갱신 가능
Vary 헤더 지원으로 다양한 요청 헤더에 따른 캐시 분기 처리 가능
코드 기반 설정으로 Worker 어디서든 동일한 캐시 동작 보장
Workers Cache 아키텍처 전환의 필요성
기존 Cloudflare Workers는 캐시와 오리진 앞에 위치하여 요청 헤더 수정 등에 유리했으나, Astro, Next.js 등 프레임워크가 Workers를 오리진으로 사용하면서 아키텍처 전환이 불가피해졌다.
Worker가 오리진 역할을 할 경우, 모든 요청마다 Worker 코드가 실행되어 CPU 시간 및 지연 시간 비용이 발생함
Workers Cache는 캐시를 Worker 앞에 배치하여 캐시 히트 시 Worker 미실행으로 비용 절감, 캐시 미스 시에만 Worker 실행 및 캐시 저장
서버 렌더링(Server-Side Rendering) 환경에서 정적 사이트의 속도와 서버 렌더링의 최신성을 동시에 확보하는 새로운 옵션 제공
stale-while-revalidate를 통한 사용자 경험 극대화
stale-while-revalidate 지시어는 캐시 만료 시에도 이전 응답을 즉시 반환하면서 백그라운드에서 캐시를 갱신하여 사용자 경험을 향상시킨다.
캐시 히트(Cache Hit): Worker 미실행, 즉각적인 응답 제공
캐시 만료 후 (Stale Window): 이전 캐시 응답 즉시 제공 (Cf-Cache-Status: UPDATING 헤더 포함), 백그라운드에서 Worker 실행하여 캐시 갱신
완전 미스(Full Miss): Worker 실행하여 응답 생성 및 캐시 저장, 사용자 대기 시간 발생
이 방식을 통해 최신 콘텐츠 접근성과 정적 사이트 수준의 응답 속도를 동시에 달성할 수 있다.
Vary 헤더를 활용한 콘텐츠 협상(Content Negotiation)
Workers Cache는 표준 HTTP Vary 헤더를 지원하여 동일 URL에 대해 다양한 요청 헤더(Accept, Accept-Language 등)에 따라 별도의 캐시 변형(Variant)을 저장한다.
예를 들어, Accept 헤더 값에 따라 WebP 또는 JPEG 이미지 캐시를 분리하여 저장하고, 각 요청에 맞는 캐시를 반환함
이를 통해 Worker는 첫 요청 시 다양한 형식의 응답을 생성하지만, 이후 요청은 캐시에서 즉시 처리 가능
RFC 9110 및 RFC 9111 표준 준수로 유연한 캐시 키 구성 및 관리 가능
Worker 중심의 캐시 관리 및 구성
기존 존(Zone) 단위 설정과 달리, Workers Cache는 Worker 자체에 귀속되어 코드 기반으로 캐시를 관리한다.
Wrangler 설정 파일에서 `cache.enabled` 옵션으로 활성화하며, Cache-Control 헤더로 TTL, 태그 등을 제어
ctx.cache.purge() API를 통해 태그 또는 경로 기반으로 캐시 무효화 가능하며, 이는 해당 Worker의 캐시에만 영향을 미침
서비스 바인딩(Service Binding)을 통한 Worker 간 호출 시에도 캐시가 적용되어, 데이터 격리 아키텍처(Data Isolation Architecture)를 안전하게 구성 가능
계층형 캐시(Tiered Cache)와 성능 이점
Workers Cache는 사용자에게 가장 가까운 데이터센터의 로컬 캐시와 전체 네트워크를 아우르는 상위 계층 캐시로 구성된 계층형 캐시(Tiered Cache) 구조를 기본 제공한다.
첫 요청이 발생하면 상위 계층 캐시를 채우고, 이후 다른 지역의 요청도 상위 계층 캐시에서 처리 가능하여 전역적인 캐시 히트율(Cache Hit Ratio) 극대화
별도 설정 없이 모든 Worker에 자동으로 적용되며, Smart Placement와도 유연하게 연동됨
이를 통해 데이터센터 이동 비용(Data Center Hop Cost)을 절감하고 사용자에게 더 빠른 응답 제공
멀티테넌트 환경에서의 안전한 캐시 활용
사용자별 데이터를 캐싱할 때 ctx.props를 캐시 키의 일부로 활용하여 테넌트 간 캐시 유출을 방지한다.
게이트웨이 Worker에서 인증 후 사용자 ID를 ctx.props에 설정하면, 해당 사용자별로 별도의 캐시 항목이 생성됨
Authorization 헤더는 자동 무시되어 캐시를 활용하면서도 인증된 API의 안전성 보장
이는 데이터 미저장 정책(Zero-Retention Policy)과 함께 사용자별 민감 데이터 보호에 기여