Zeroboot 소개
AI 에이전트가 코드를 실행할 때 가장 큰 병목 중 하나는 실행 환경을 준비하는 시간입니다. 보안을 위해 격리된 환경이 필요하지만, 매번 새로운 가상 머신(VM)을 부팅하면 수백 밀리초에서 수 초가 걸립니다. Zeroboot는 이 문제를 파이어크래커(Firecracker) 스냅샷과 복사 후 쓰기(Copy-on-Write, CoW) 메모리 매핑을 조합하여 해결합니다. 새로운 VM 샌드박스를 0.79ms(p50 기준) 만에 생성할 수 있으며, 각 샌드박스는 하드웨어 수준에서 격리된 실제 KVM 가상 머신입니다. Rust로 작성되었으며, Apache 2.0 라이선스로 공개된 오픈소스 프로젝트입니다.

기존의 AI 코드 실행 서비스들은 컨테이너나 마이크로VM을 매번 새로 시작하는 방식을 사용하기 때문에 생성 지연 시간이 수십~수백 밀리초에 달합니다. E2B의 경우 샌드박스당 약 128MB의 메모리를 사용하며, 생성 지연은 p50 기준 약 150ms입니다. Zeroboot는 이미 부팅되고 초기화된 VM의 메모리와 CPU 상태를 스냅샷으로 저장해두고, 요청이 들어올 때마다 그 스냅샷을 CoW 방식으로 복제하는 접근법을 택합니다. 결과적으로 샌드박스 하나당 메모리 사용량은 약 265KB에 불과하며, 1000개의 샌드박스를 동시에 생성하는 데 815ms밖에 걸리지 않습니다.
Zeroboot과 기존 서비스의 주요 특징들을 비교하면 다음과 같습니다:
| 지표 | Zeroboot | E2B | microsandbox | Daytona |
|---|---|---|---|---|
| 생성 지연 p50 | 0.79ms | ~150ms | ~200ms | ~27ms |
| 생성 지연 p99 | 1.74ms | ~300ms | ~400ms | ~90ms |
| 샌드박스당 메모리 | ~265KB | ~128MB | ~50MB | ~50MB |
Zeroboot의 동작 원리
Zeroboot의 핵심은 세 단계로 구성됩니다.
Firecracker snapshot ──► mmap(MAP_PRIVATE) ──► KVM VM + 복원된 CPU 상태
(copy-on-write) (~0.8ms)
첫 번째 단계는 템플릿 생성(일회성)입니다. Firecracker가 VM을 부팅하고 Python 등 원하는 런타임을 미리 로드한 뒤, 메모리와 CPU 상태 전체를 스냅샷으로 저장합니다. 이 과정은 약 15초가 소요되지만 한 번만 수행합니다.
두 번째 단계는 포크(Fork)(약 0.8ms)입니다. 새 요청이 들어오면 스냅샷 메모리를 mmap(MAP_PRIVATE)으로 매핑하여 새 KVM VM을 생성하고 CPU 상태를 복원합니다. MAP_PRIVATE 플래그 덕분에 각 VM이 메모리를 실제로 복사하지 않고, 쓰기가 발생할 때만 물리 메모리를 할당합니다. 이것이 265KB라는 낮은 메모리 사용량의 비결입니다.
세 번째 단계는 격리입니다. 포크된 각 샌드박스는 독립된 KVM 가상 머신이며, 하드웨어 수준에서 메모리가 격리됩니다. 컨테이너나 프로세스 수준의 격리와 달리 커널을 공유하지 않으므로 더 강한 보안 경계를 제공합니다.
Zeroboot 설치 및 사용법
Zeroboot는 관리형 API와 자체 호스팅 두 가지 방식을 모두 지원합니다. 관리형 API는 데모 키(zb_demo_hn2026)로 바로 시험해볼 수 있습니다.
curl로 즉시 테스트:
curl -X POST https://api.zeroboot.dev/v1/exec \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer zb_demo_hn2026' \
-d '{"code":"import numpy as np; print(np.random.rand(3))"}'
Python SDK:
pip install zeroboot
from zeroboot import Sandbox
sb = Sandbox("zb_live_your_key")
result = sb.run("print(1 + 1)")
TypeScript SDK:
npm install @zeroboot/sdk
import { Sandbox } from "@zeroboot/sdk";
const result = await new Sandbox("zb_live_your_key").run("console.log(1+1)");
자체 호스팅은 KVM을 지원하는 Linux 서버가 있으면 가능합니다. 자세한 설치 방법은 GitHub 저장소의 Deployment Guide를 참고하세요.
알려진 제한 사항
현재 작동하는 프로토타입 수준이며, 프로덕션 환경에서의 강화(hardening)는 아직 진행 중입니다. 몇 가지 알려진 제한 사항이 있습니다. 포크된 VM들은 스냅샷 시점의 암호학적으로 안전한 난수 생성기(CSPRNG) 상태를 공유합니다.
커널 엔트로피는 RNDADDENTROPY를 통해 다시 초기화되지만, numpy나 OpenSSL 같은 사용자 공간 PRNG는 포크마다 명시적으로 재시드(reseed)해야 합니다. 또한 현재 포크당 vCPU가 하나뿐이며, 포크 내부에서 네트워크 통신을 사용할 수 없고 직렬 입출력(serial I/O)만 지원합니다. 템플릿을 업데이트하려면 전체 재스냅샷(약 15초)이 필요하며 증분 패치는 지원하지 않습니다.
라이선스
Zeroboot 프로젝트는 Apache License 2.0으로 공개되어 있어 개인 및 상업적 목적으로 자유롭게 사용, 수정, 배포할 수 있습니다.
Zeroboot 얼리 액세스 신청
Zeroboot 프로젝트 GitHub 저장소
더 읽어보기
-
Sandbox Runtime(srt): Anthropic이 공개한 AI 에이전트를 위한 안전하고 가벼운 코드 실행 환경
-
BoxLite: AI 에이전트를 위한, 안전하고 가벼운 샌드박스 런타임 (no daemon, no dependencies)
-
CodeRunner: LLM의 코드를 안전하게 로컬에서 처리하는 프로젝트 (feat. Apple Container)
-
ScreenEnv: 데스크탑 에이전트를 위한 Docker 기반 풀스택 자동화 환경 (feat. Hugging Face)
이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. ![]()
파이토치 한국 사용자 모임
이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일
로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)
아래
쪽에 좋아요
를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ ![]()

