Cloudflare Dynamic Workers 소개
AI 에이전트가 사용자 요청을 처리하기 위해 코드를 직접 생성하고 실행하는 방식, 이른바 코드 모드(Code Mode) 가 주목받고 있습니다. Cloudflare가 지난 2025년 9월 소개한 Code Mode는 에이전트가 도구 호출을 순차적으로 수행하는 대신, API를 호출하는 코드를 직접 작성하여 실행하는 접근법입니다. 실제로 MCP 서버를 TypeScript API로 변환하는 것만으로 토큰 사용량을 81%까지 줄일 수 있다는 것이 입증되었습니다. 그런데 에이전트가 AI가 즉석에서 생성한 코드를 실행하려면, 그 코드가 실행될 안전한 공간이 필요합니다.
AI가 생성한 코드를 애플리케이션 안에서 직접 eval()로 실행하는 것은 매우 위험합니다. 악의적인 사용자가 AI를 유도하여 취약점을 삽입하는 프롬프트 인젝션 공격이 가능하기 때문입니다. 따라서 샌드박스(Sandbox), 즉 애플리케이션과 격리된 실행 환경이 반드시 필요합니다. 현재 업계에서는 이 용도로 Linux 컨테이너를 주로 사용하지만, 컨테이너는 부팅에 수백 밀리초, 메모리는 수백 메가바이트가 필요하고, 실행 간 재사용 시 보안이 취약해지는 문제가 있습니다.
Cloudflare가 2026년 3월 24일 발표한 Dynamic Worker Loader 는 이 문제에 대한 새로운 해답입니다. Cloudflare Workers 플랫폼의 핵심 기술인 V8 아이솔레이트를 활용하여, 컨테이너 대비 100배 빠르고 10~100배 더 메모리 효율적인 경량 샌드박스를 제공합니다. 현재 유료 Workers 플랜 사용자를 대상으로 오픈 베타로 제공되고 있습니다.
컨테이너의 한계와 V8 Isolate의 등장
AI 에이전트가 소비자 규모로 확산되면, 즉 모든 최종 사용자가 하나 이상의 에이전트를 갖고 각 에이전트가 코드를 작성하는 세상이 된다면, 컨테이너 기반 샌드박스는 현실적으로 감당하기 어렵습니다. 컨테이너 기반 샌드박스 서비스들은 대부분 동시 샌드박스 수와 생성 속도에 전역 제한을 둡니다. 준비된 컨테이너를 미리 따뜻하게 유지해야 하고, 여러 작업 간에 컨테이너를 재사용하면 보안이 무너집니다.
V8 Isolate는 Google Chrome에서 사용하는 것과 동일한 V8 JavaScript 실행 엔진의 인스턴스입니다. 아이솔레이트는 시작에 수 밀리초, 메모리는 수 메가바이트만 필요합니다. 컨테이너와 비교하면:
| 항목 | V8 Isolate | Linux 컨테이너 |
|---|---|---|
| 시작 시간 | 수 밀리초 | 수백 밀리초 |
| 메모리 | 수 MB | 수백 MB |
| 스케일 | 요청마다 새 인스턴스, 즉시 | 사전 웜업 필요 |
| 격리 수준 | 프로세스 수준 | OS 수준 |
| 언어 | JavaScript/Python/WASM | 모든 언어 |
이 특성 덕분에 Dynamic Workers는 모든 사용자 요청마다 새 Isolate를 온디맨드(On-demand)로 생성하고, 코드 스니펫 하나를 실행한 뒤 즉시 폐기하는 방식이 완전히 실용적입니다.
Cloudflare Dynamic Workers 더 알아보기
Dynamic Workers 공식 문서
Cloudflare Workers의 동작 원리
Dynamic Worker Loader API 사용법
Dynamic Worker Loader API 의 기본 사용법은 매우 간결합니다. Cloudflare Worker 안에서 다른 Worker를 런타임에 코드와 함께 즉석 생성할 수 있습니다:
// LLM이 생성한 에이전트 코드
let agentCode = `
export default {
async myAgent(param, env, ctx) {
// AI가 생성한 코드가 여기에서 실행됩니다
}
}
`;
// 에이전트가 접근할 수 있는 API RPC 스텁
let chatRoomRpcStub = ...;
// Dynamic Worker 로드 (샌드박스 생성)
let worker = env.LOADER.load({
compatibilityDate: "2026-03-01",
mainModule: "agent.js",
modules: { "agent.js": agentCode },
// 에이전트에게 채팅방 API 접근 권한 부여
env: { CHAT_ROOM: chatRoomRpcStub },
// 인터넷 접근 차단
globalOutbound: null,
});
// 에이전트 코드의 RPC 메서드 호출
await worker.getEntrypoint().myAgent(param);
Dynamic Worker Loader의 세 가지 핵심 특성
100배 빠른 시작: Isolate는 수 밀리초만에 시작되어, 모든 요청에서 신선한 샌드박스를 온디맨드로 생성하고 폐기할 수 있습니다. 재사용으로 인한 보안 위협이 원천 차단됩니다.
무제한 확장성: 컨테이너 기반 서비스들이 부과하는 동시 샌드박스 수나 생성 속도 제한이 없습니다. 초당 수백만 요청에서 모든 요청이 별도의 Dynamic Worker를 생성하더라도 문제없습니다. Cloudflare 플랫폼 자체가 원래 이렇게 동작해왔기 때문입니다.
제로 레이턴시: 동적으로 로드된 Worker는 대부분 생성한 Worker와 동일한 머신, 심지어 동일한 스레드에서 실행됩니다. 전 세계 수백 개 Cloudflare 위치 모두에서 지원되므로, 요청이 도착한 곳에서 바로 실행됩니다.
AI 에이전트를 위한 도구 정의: TypeScript vs OpenAPI
에이전트가 유용한 작업을 수행하려면 외부 API와 통신해야 합니다. 이때 에이전트에게 API를 어떻게 알려줄지가 핵심 설계 결정입니다. Cloudflare는 JavaScript API에는 TypeScript가 자연스러운 선택이라고 주장합니다.
아래는 채팅방 API를 TypeScript 인터페이스로 표현한 예시입니다:
// 채팅방과 상호작용하는 인터페이스
interface ChatRoom {
// 최근 limit개의 채팅 기록 조회
getHistory(limit: number): Promise<Message[]>;
// 새 메시지 구독 (반환된 객체를 dispose하면 구독 해제)
subscribe(callback: (msg: Message) => void): Promise<Disposable>;
// 메시지 전송
post(text: string): Promise<void>;
}
type Message = {
author: string;
time: Date;
text: string;
}
동일한 API를 OpenAPI 스펙으로 표현하면 스크롤이 필요할 만큼 길어집니다. Cloudflare의 주장은 세 가지입니다:
첫째, TypeScript 인터페이스는 OpenAPI보다 훨씬 적은 토큰으로 API를 정확히 표현합니다.
둘째, 에이전트가 TypeScript 인터페이스를 호출하는 코드를 작성할 때도 훨씬 적은 토큰이 필요합니다.
셋째, TypeScript 인터페이스는 에이전트에게 허용할 기능을 정밀하게 제한하기 쉽습니다. HTTP 프록시 방식은 모든 API 호출의 의미를 완전히 해석해야 하므로 구현이 어렵습니다.
Dynamic Worker Loader는 Workers RPC(Cap'n Web RPC)를 통해 샌드박스와 하네스 코드 사이에 자동으로 브릿지를 생성합니다. 에이전트 코드는 마치 로컬 라이브러리를 사용하듯 API를 호출할 수 있습니다:
// 에이전트가 작성하는 코드 (보안 경계를 넘어 RPC로 실행됨)
let history = await env.CHAT_ROOM.getHistory(1000);
return history.filter(msg => msg.author == "alice");
TypeScript RPC vs HTTP API 더 알아보기
Code Mode 소개 블로그
Cap'n Web RPC 라이브러리 소개
HTTP 필터링과 자격증명 주입
TypeScript API 대신 HTTP API를 선호하는 경우도 지원됩니다. globalOutbound 옵션을 통해 Dynamic Worker가 발생시키는 모든 HTTP 요청을 가로채는 콜백을 등록할 수 있습니다. 이를 통해 요청 검사, 재작성, 직접 응답, 차단 등이 가능합니다.
특히 자격증명 주입(Credential Injection) 이 핵심 활용 사례입니다. 에이전트가 인증이 필요한 서비스에 HTTP 요청을 보낼 때, 하네스 코드가 요청에 인증 키를 추가합니다. 에이전트 코드 자체는 비밀 자격증명을 알 수 없으므로 유출 위험이 없습니다. 이미 학습 데이터에 포함된 잘 알려진 API를 사용하거나, REST API 기반 라이브러리를 에이전트 샌드박스 안에서 사용하고 싶을 때 HTTP 방식이 유용합니다.
Cloudflare의 뛰어난 보안 아키텍처(Battle-hardened Security)
Isolate 기반 샌드박스는 하드웨어 가상 머신보다 공격 표면이 복잡하여 보안 강화가 까다롭습니다. V8 보안 버그는 일반 하이퍼바이저보다 빈번하게 발견되므로, 심층 방어(Defense-in-Depth) 전략이 필수입니다.
Cloudflare는 약 10년 간 Isolate 기반 플랫폼을 운영하며 다층적 보안 체계를 구축했습니다:
-
빠른 패치 배포: V8 보안 패치를 Chrome보다도 빠른 몇 시간 내에 프로덕션에 배포
-
2차 샌드박스: 위험도 평가에 기반한 테넌트 동적 격리가 포함된 맞춤형 2차 샌드박스
-
하드웨어 기능 활용: MPK(Memory Protection Keys) 등 하드웨어 기능으로 V8 샌드박스 자체를 확장
-
Spectre 방어: TU Graz와의 공동 연구를 통한 Spectre 공격 대응 기술 개발
-
악성 코드 감지: 악성 패턴을 스캔하여 자동 차단하거나 추가 샌드박스 레이어 적용
Dynamic Workers를 사용하면 이 모든 보안 체계가 자동으로 적용됩니다.
Cloudflare Workers 보안 아키텍처 더 알아보기
Workers 보안 모델: Spectre 및 기타 위협 완화
V8 샌드박스 보안 강화
헬퍼 라이브러리: Dynamic Workers를 더 쉽게 사용하기
Cloudflare는 Dynamic Workers와 함께 사용할 수 있는 세 가지 공식 라이브러리를 제공합니다.
@cloudflare/codemode: AI 도구 코드 실행 단순화
@cloudflare/codemode 는 모델이 생성한 코드를 AI 도구에서 Dynamic Workers로 실행하는 과정을 단순화합니다. 핵심은 DynamicWorkerExecutor()로, 일반적인 포맷 오류를 처리하는 코드 정규화와 globalOutbound 페처 제어 기능을 갖춘 샌드박스를 생성합니다:
const executor = new DynamicWorkerExecutor({
loader: env.LOADER,
globalOutbound: null, // 완전 격리
});
const codemode = createCodeTool({
tools: myTools,
executor,
});
return generateText({
model,
messages,
tools: { codemode },
});
서버 측 유틸리티 함수도 제공합니다. codeMcpServer({ server, executor }) 는 기존 MCP 서버를 감싸 단일 code() 도구로 대체하고, openApiMcpServer({ spec, executor, request }) 는 OpenAPI 스펙과 익스큐터를 받아 search()와 execute() 도구를 갖춘 완전한 MCP 서버를 구성합니다.
@cloudflare/worker-bundler: 런타임 번들링
@cloudflare/worker-bundler 는 Dynamic Workers가 필요로 하는 사전 번들된 모듈을 처리합니다. 소스 파일과 package.json을 주면 npm 레지스트리에서 의존성을 해결하고, esbuild로 번들링하여 Worker Loader가 기대하는 모듈 맵을 반환합니다:
import { createWorker } from "@cloudflare/worker-bundler";
const worker = env.LOADER.get("my-worker", async () => {
const { mainModule, modules } = await createWorker({
files: {
"src/index.ts": `
import { Hono } from 'hono';
const app = new Hono();
app.get('/', (c) => c.text('Hello from Hono!'));
export default app;
`,
"package.json": JSON.stringify({
dependencies: { hono: "^4.0.0" }
})
}
});
return { mainModule, modules, compatibilityDate: "2026-01-01" };
});
createApp 을 통해 서버 Worker, 클라이언트 사이드 JavaScript, 정적 에셋을 하나로 묶는 풀스택 앱 번들링도 지원합니다.
@cloudflare/shell: 에이전트를 위한 가상 파일시스템
@cloudflare/shell 은 Dynamic Worker 안에 가상 파일시스템을 제공합니다. 에이전트 코드는 state 객체의 타입화된 메서드(읽기, 쓰기, 검색, 교체, diff, glob, JSON 쿼리 등)를 호출하며, 저장소는 SQLite + R2로 뒷받침되는 내구성 있는 Workspace 에 영속됩니다:
import { Workspace } from "@cloudflare/shell";
import { stateTools } from "@cloudflare/shell/workers";
import { DynamicWorkerExecutor, resolveProvider } from "@cloudflare/codemode";
const workspace = new Workspace({
sql: this.ctx.storage.sql,
r2: this.env.MY_BUCKET,
name: () => this.name
});
const executor = new DynamicWorkerExecutor({ loader: env.LOADER });
const result = await executor.execute(
`async () => {
// TypeScript 파일에서 패턴 검색
const hits = await state.searchFiles("src/**/*.ts", "answer");
// 여러 편집을 단일 트랜잭션으로 계획
const plan = await state.planEdits([
{ kind: "replace", path: "/src/app.ts",
search: "42", replacement: "43" },
]);
return await state.applyEditPlan(plan);
}`,
[resolveProvider(stateTools(workspace))]
);
searchFiles, replaceInFiles, planEdits 같은 배치 연산은 RPC 왕복 횟수를 최소화합니다. 배치 쓰기는 기본적으로 트랜잭션으로 처리되어 일부 실패 시 자동 롤백됩니다.
실제 활용 사례
Code Mode: 도구 호출 대신 코드 작성
가장 핵심적인 활용은 에이전트가 여러 API를 순차 호출하는 대신, 여러 호출을 하나의 TypeScript 함수로 엮어 Dynamic Worker에서 실행하는 것입니다. 중간 결과가 컨텍스트 윈도우에 쌓이지 않아 레이턴시와 토큰 사용량이 모두 줄어듭니다. 실제로 Cloudflare의 자체 MCP 서버는 이 방식으로 전체 Cloudflare API를 단 두 개의 도구와 1,000 토큰 미만으로 노출합니다.
AI 생성 커스텀 자동화
Zite는 사용자가 채팅 인터페이스를 통해 앱을 만드는 플랫폼을 구축하고 있습니다. LLM이 TypeScript를 작성하여 CRUD 앱을 빌드하고, Stripe, Airtable, Google Calendar 등 서드파티 서비스에 연결하며 백엔드 로직을 실행합니다. 모든 자동화는 각자의 Dynamic Worker에서 격리 실행됩니다. Zite의 CTO Antony Toron은 이렇게 말했습니다:
"서버 측 코드 실행을 위해 즉각적이고, 격리되고, 안전한 실행 레이어가 필요했습니다. Cloudflare Dynamic Workers는 세 가지 모두를 충족했으며, 속도와 라이브러리 지원에서 벤치마킹한 모든 플랫폼을 앞질렀습니다. Dynamic Workers 덕분에 Zite는 현재 하루 수백만 건의 실행 요청을 처리하고 있습니다."
AI 생성 애플리케이션 플랫폼
개발자들은 AI가 완성된 애플리케이션을 생성하는 플랫폼을 구축하고 있습니다. Dynamic Workers는 각 앱을 온디맨드로 스핀업하고, 호출이 없으면 콜드 스토리지로 돌아가게 합니다. 빠른 시작 덕에 개발 중 변경 사항 미리보기도 원활합니다.
가격 정책
유료 Workers 플랜의 경우, Dynamic Worker 로딩은 하루에 고유 Worker당 $0.002 이 부과됩니다(이 글 작성 시점 기준). 여기에 일반 Workers의 CPU 시간 및 호출 요금이 추가됩니다. AI 코드 모드 용도처럼 매번 새로운 Worker를 생성하는 경우, 이 비용은 코드 생성을 위한 LLM 추론 비용에 비해 미미한 수준입니다.
베타 기간 중에는 $0.002 요금이 면제됩니다. 최신 가격은 Dynamic Workers 가격 페이지에서 확인할 수 있습니다.

Cloudflare Dynamic Workers 소개 블로그
Cloudflare Agents 예제 GitHub 저장소
Dynamic Workers 공식 문서
이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. ![]()
파이토치 한국 사용자 모임
이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일
로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)
아래
쪽에 좋아요
를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ ![]()

