- AI 에이전트의 코드 실행을 위한 경량 샌드박스, 컨테이너 대비 100배 빠른 기동 속도와 10~100배 높은 메모리 효율 제공
- V8 JavaScript 엔진의 isolate 기술 기반으로, 수 밀리초 내 시작되며 수 메가바이트만 사용하므로 요청마다 새 샌드박스를 생성하고 폐기하는 운용이 가능
- 에이전트가 도구 호출 대신 TypeScript 코드를 직접 작성·실행하는 Code Mode 방식으로 토큰 사용량을 81%까지 절감
- HTTP 필터링, 크레덴셜 인젝션, 가상 파일시스템 등 보안·유틸리티 라이브러리를 함께 제공하여 에이전트 개발 생태계 구축
- 컨테이너 기반 샌드박스의 비용·지연·확장성 한계를 넘어, 소비자 규모의 에이전트 서비스를 가능하게 하는 인프라 전환
배경: 에이전트 코드 실행의 보안 문제
- 에이전트(또는 MCP 서버)가 AI가 즉석에서 생성한 코드를 실행하려면, 해당 코드가 안전한 환경에서 동작해야 함
- 앱 내에서
eval()로 직접 실행하면 악의적 사용자가 프롬프트 인젝션을 통해 취약점을 삽입할 수 있음
- 애플리케이션과 외부 세계로부터 격리된 샌드박스가 필요하며, 코드가 접근해야 하는 특정 기능만 허용해야 함
기존 컨테이너 방식의 한계
- 현재 업계 대부분은 Linux 기반 컨테이너를 샌드박스로 사용 중
- 컨테이너는 부팅에 수백 밀리초, 실행에 수백 메가바이트 메모리 소요
- 지연 방지를 위해 워밍(warm) 상태 유지가 필요하고, 기존 컨테이너를 여러 작업에 재사용하면 보안이 저하됨
- 모든 최종 사용자가 에이전트를 갖고 각 에이전트가 코드를 작성하는 소비자 규모에서는 컨테이너로 충분하지 않음
Dynamic Worker Loader: 경량 샌드박스
- Cloudflare Worker가 런타임에 코드를 지정하여 새로운 Worker를 자체 샌드박스 내에서 즉석 생성할 수 있는 API
- 지난 9월 Code Mode 게시물에서 실험적 기능으로 소개되었으며, 현재 오픈 베타로 모든 유료 Workers 사용자에게 제공
- Worker 생성 시
compatibilityDate, mainModule, modules로 코드를 지정하고, env로 RPC 스텁을 전달하며, globalOutbound으로 인터넷 접근을 차단하거나 인터셉트 가능
100배 빠른 속도
- Dynamic Workers는 Cloudflare Workers 플랫폼이 8년간 사용해 온 동일한 샌드박싱 메커니즘인 V8 isolate 기반
- isolate는 Google Chrome에서 사용하는 것과 동일한 V8 JavaScript 실행 엔진의 인스턴스
- 시작에 수 밀리초, 메모리 사용량 수 메가바이트로, 컨테이너 대비 약 100배 빠르고 10~100배 메모리 효율적
- 모든 사용자 요청마다 새 isolate를 생성하고, 코드 한 조각을 실행한 뒤 폐기하는 운용 가능
무제한 확장성
- 많은 컨테이너 기반 샌드박스 제공업체가 글로벌 동시 샌드박스 수와 생성 속도에 제한을 부과
- Dynamic Worker Loader는 플랫폼을 구동해 온 것과 동일한 기술의 API이므로 이러한 제한 없음
- 초당 백만 건의 요청을 처리하되, 매 요청마다 별도의 Dynamic Worker 샌드박스를 로드하여 동시 실행 가능
제로 레이턴시
- 일회성 Dynamic Workers는 보통 생성한 Worker와 동일한 머신, 동일한 스레드에서 실행
- 워밍된 샌드박스를 찾기 위해 전 세계 통신이 불필요하며, 요청이 도착한 곳에서 바로 실행
- Cloudflare의 수백 개 글로벌 로케이션 모두에서 지원
JavaScript 전용 실행 환경
- 컨테이너 대비 유일한 제약은 에이전트가 JavaScript를 작성해야 한다는 점
- Workers는 기술적으로 Python과 WebAssembly도 지원하지만, 에이전트가 즉석 생성하는 작은 코드 조각에는 JavaScript가 훨씬 빠르게 로드·실행됨
- LLM은 모든 주요 언어에 능숙하며, JavaScript 학습 데이터가 방대함
- JavaScript는 웹의 특성상 샌드박싱을 위해 설계된 언어
TypeScript로 정의하는 도구 API
- MCP는 플랫 도구 호출 스키마만 정의하고, OpenAPI는 REST API를 표현하지만 스키마 자체와 호출 코드가 모두 장황함
- JavaScript에 노출되는 API에는 TypeScript가 단일한 최적 답
- TypeScript 인터페이스는 동일한 OpenAPI 스펙 대비 훨씬 적은 토큰으로 API를 정확하게 기술 가능
- Workers Runtime이 샌드박스와 호스트 코드 사이에 Cap'n Web RPC 브리지를 자동 설정하여, 에이전트가 로컬 라이브러리처럼 API를 호출 가능
HTTP 필터링과 크레덴셜 인젝션
-
globalOutbound 옵션으로 모든 HTTP 요청에 대한 콜백을 등록하여, 요청 검사·재작성·인증 키 주입·차단 등 수행 가능
-
크레덴셜 인젝션(토큰 인젝션): 에이전트가 인증이 필요한 서비스에 HTTP 요청을 보낼 때, 나가는 요청에 크레덴셜을 추가하여 에이전트 자체는 비밀 크레덴셜을 알지 못하게 함
- 잘 알려진 API가 에이전트 학습 데이터에 포함된 경우나 REST API 기반 라이브러리를 샌드박스 내에서 실행할 때 유용
- 다만 호환성 요구가 없다면 TypeScript RPC 인터페이스가 HTTP보다 우수: 적은 토큰 소비, 더 간결한 호출 코드, API 표면을 정확하게 좁히기 용이
검증된 보안 아키텍처
- isolate 기반 샌드박스는 하드웨어 가상 머신보다 복잡한 공격 표면을 가지며, V8의 보안 버그가 일반 하이퍼바이저보다 빈번
- 약 10년간 isolate 기반 플랫폼을 보안해 온 경험 보유
- V8 보안 패치를 Chrome보다 빠르게 수 시간 내 프로덕션 배포
- 커스텀 2차 레이어 샌드박스와 리스크 평가 기반 동적 테넌트 코르도닝(cordoning) 적용
-
MPK 같은 하드웨어 기능을 활용한 V8 샌드박스 확장
- TU Graz와 협력하여 Spectre 방어 등 새로운 방어 기법 개발
- 악성 패턴 자동 스캔 및 차단/추가 샌드박싱 시스템 운용
헬퍼 라이브러리
Code Mode (@cloudflare/codemode)
- 모델이 생성한 코드를 Dynamic Workers로 AI 도구에 대해 실행하는 것을 단순화하는 라이브러리
- 핵심은
DynamicWorkerExecutor()로, 코드 정규화를 통해 일반적인 포매팅 오류를 처리하고 globalOutbound 페처에 직접 접근 가능
-
codeMcpServer({ server, executor })는 기존 MCP Server를 래핑하여 도구 표면을 단일 code() 도구로 대체
-
openApiMcpServer({ spec, executor, request })는 OpenAPI 스펙과 실행기를 받아 search()와 execute() 도구를 갖춘 완전한 MCP Server를 자동 구축
번들링 (@cloudflare/worker-bundler)
- Dynamic Workers가 기대하는 사전 번들된 모듈을 생성
- 소스 파일과
package.json을 제공하면 npm 의존성 해결, esbuild로 번들링, Worker Loader가 기대하는 모듈 맵 반환
-
createApp을 통해 서버 Worker, 클라이언트 JavaScript, 정적 에셋을 함께 번들링하는 풀스택 앱 지원
- 콘텐츠 타입, ETag, SPA 라우팅을 처리하는 내장 에셋 서빙 포함
파일 조작 (@cloudflare/shell)
- Dynamic Worker 내부에서 에이전트에게 가상 파일시스템 제공
-
state 객체의 타입화된 메서드로 read, write, search, replace, diff, glob, JSON 쿼리/업데이트, 아카이브 등 수행
- 스토리지는 내구성 있는 Workspace(SQLite + R2)로 백업되어 실행 간 파일 유지
-
searchFiles, replaceInFiles, planEdits 같은 대규모 작업으로 RPC 왕복 최소화 — 개별 파일 루프 대신 한 번 호출
- 배치 쓰기는 기본적으로 트랜잭셔널: 하나라도 실패하면 이전 쓰기 자동 롤백
- 사전 빌드된 TypeScript 타입 선언과 시스템 프롬프트 템플릿 제공
활용 사례
Code Mode 활용
- 에이전트가 순차적 도구 호출 대신 TypeScript 함수 하나를 작성하여 여러 API 호출을 체이닝, Dynamic Worker에서 실행 후 최종 결과만 반환
- 중간 단계가 아닌 출력만 컨텍스트 윈도우에 들어가므로 레이턴시와 토큰 사용량 모두 감소
- Cloudflare MCP 서버가 이 방식으로 구축: 전체 Cloudflare API를 단 2개 도구(search, execute) 와 1,000 토큰 미만으로 노출
커스텀 자동화 구축
- Zite는 사용자가 채팅 인터페이스로 상호작용하는 앱 플랫폼을 구축 중
- LLM이 배후에서 TypeScript를 작성하여 CRUD 앱 생성, Stripe·Airtable·Google Calendar 연결, 백엔드 로직 실행
- 각 자동화가 자체 Dynamic Worker에서 실행되며, 해당 엔드포인트에 필요한 특정 서비스와 라이브러리에만 접근
- Zite CTO Antony Toron: "즉각적이고, 격리되며, 안전한 실행 레이어"로서 벤치마크한 모든 플랫폼 중 속도와 라이브러리 지원에서 최고 성능, 현재 매일 수백만 건의 실행 요청 처리 중
AI 생성 애플리케이션 실행
- AI로 완전한 애플리케이션을 생성하는 플랫폼 구축에 활용
- 각 앱을 온디맨드로 생성하고, 다시 호출될 때까지 콜드 스토리지에 보관
- 빠른 기동 시간으로 활발한 개발 중 변경 사항 미리보기 용이
- 생성된 코드의 네트워크 요청을 차단하거나 인터셉트하여 AI 생성 앱의 안전한 실행 보장
가격 정책
- 동적으로 로드된 Workers는 하루당 고유 Worker 로드 기준 $0.002 과금 (일반 Workers의 CPU 시간 및 호출 요금 별도)
- AI 생성 "Code Mode" 사용 사례에서 모든 Worker가 일회성이므로 로드당 $0.002이며, 코드 생성을 위한 추론 비용 대비 일반적으로 무시할 수 있는 수준
-
베타 기간 중 $0.002 요금 면제