피드로 돌아가기
A one-line cache key bug cost me $187/month and leaked advertiser data across tenants
Dev.toDev.to
Backend

Cache Key 설계 오류 해결을 통한 비용 50% 절감 및 테넌트 데이터 유출 차단

A one-line cache key bug cost me $187/month and leaked advertiser data across tenants

강해수2026년 6월 26일2intermediate

Context

Cloudflare Worker 기반의 MCP router 구조에서 Module-scope 변수를 활용한 캐싱 로직 적용. V8 Isolate boundary가 요청 간 상태를 분리한다는 오해로 인해 Tenant ID가 누락된 공유 Cache Key 설계의 취약점 발생.

Technical Solution

  • Cache Key 구성 요소에 Tenant ID를 추가하여 Tenant 간 Namespace 분리 체계 구축
  • Module-level shared state로 인한 데이터 오염 가능성을 인지하고 요청 단위의 격리 구조 설계
  • Tool response metadata 내 Tenant ID 일치 여부를 검증하는 PostToolUse hook 도입을 통한 2차 방어선 구축
  • 잘못된 캐시 데이터로 인한 LLM의 재시도 루프 및 Token 낭비를 유발하는 Cascade 효과 차단
  • ExecutionContext 기반의 요청 범위 스코핑을 통해 Warm Instance 내 상태 공유 문제 해결
  • Node.js 환경의 AsyncLocalStorage와 Worker 환경의 ExecutionContext 차이에 따른 런타임별 격리 전략 구분

1. Serverless Function의 글로벌 변수/캐시 사용 시 요청 간 상태 공유 가능성 검토

2. Multi-tenant 데이터 접근 시 API Key 외에 데이터 식별자 수준의 Tenant ID 검증 로직 추가

3. 비정상적인 API 비용 상승이나 쿼리량 증가 시 캐시 히트율과 테넌트 매칭 로그 교차 분석

4. 런타임 특성(V8 Isolate vs Node.js Event Loop)에 맞는 컨텍스트 격리 도구 선택

원문 읽기