E2B 및 클라우드 샌드박스 서비스
코드 해석기 에이전트를 위한 E2B SDK, Daytona, 관리형 샌드박스 API를 학습합니다.
E2B 및 클라우드 샌드박스 서비스은(는) CoddyKit의 무료 AI Agents 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 AI Agents 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. AI Agents 강의에는 총 4개의 강의가 포함되어 있습니다.
E2B란 무엇인가요?
E2B(빌드를 위한 환경)는 AI 코드 에이전트를 위해 특별히 설계된 클라우드 샌드박스 서비스입니다. Docker나 VM을 직접 관리하지 않고도 간단한 Python/JS SDK를 통해 안전하고 격리된 환경을 제공합니다.
각 샌드박스는 E2B 클라우드의 Firecracker microVM입니다.
# Install the SDK
# pip install e2b-code-interpreter
from e2b_code_interpreter import Sandbox
sandbox = Sandbox() # creates a new cloud sandbox
print('Sandbox ID:', sandbox.sandbox_id)샌드박스에서 코드 실행하기
Sandbox 객체는 Python을 실행하는 run_code() 메서드를 제공하며, 표준 출력, 표준 오류 및 풍부한 표시 객체(그래프, 데이터프레임)를 포함한 구조화된 출력을 반환합니다.
from e2b_code_interpreter import Sandbox
with Sandbox() as sandbox:
result = sandbox.run_code('print(2 ** 10)')
print(result.logs.stdout) # ['1024']
print(result.error) # None if no error오류 및 예외 처리
코드에서 예외가 발생하면 result.error에 오류 추적 정보가 저장됩니다. 샌드박스 자체는 계속 실행되므로 오류를 수정하는 후속 코드를 보낼 수 있습니다.
from e2b_code_interpreter import Sandbox
with Sandbox() as sandbox:
result = sandbox.run_code('1 / 0')
if result.error:
print('Error name:', result.error.name) # ZeroDivisionError
print('Traceback:', result.error.traceback)
else:
print(result.logs.stdout)샌드박스에 파일 업로드하기
분석 코드를 실행하기 전에 sandbox.files.write()를 사용하여 데이터 파일(CSV, JSON, 이미지)을 샌드박스 파일 시스템에 업로드하십시오.
from e2b_code_interpreter import Sandbox
csv_content = 'name,score\nAlice,95\nBob,87\nCarol,92'
with Sandbox() as sandbox:
sandbox.files.write('/home/user/data.csv', csv_content.encode())
result = sandbox.run_code(
'import csv\n'
'rows = list(csv.DictReader(open("/home/user/data.csv")))\n'
'print([r["name"] for r in rows])'
)
print(result.logs.stdout) # ["['Alice', 'Bob', 'Carol']"]샌드박스에서 파일 다운로드하기
계산이 끝나면 sandbox.files.read()를 사용하여 출력 파일(보고서, 차트, 처리된 데이터)을 가져오십시오. 파일은 바이트로 반환됩니다.
from e2b_code_interpreter import Sandbox
import json
with Sandbox() as sandbox:
sandbox.run_code(
'import json\n'
'result = {"mean": 91.3, "max": 95}\n'
'json.dump(result, open("/home/user/output.json", "w"))'
)
data = sandbox.files.read('/home/user/output.json')
parsed = json.loads(data)
print(parsed) # {'mean': 91.3, 'max': 95}실행 중 패키지 설치하기
E2B 샌드박스에는 Python이 미리 설치되어 있습니다. run_code()에서 pip 명령어를 실행하여 추가 패키지를 설치한 다음, 같은 샌드박스 세션의 이후 호출에서 해당 패키지를 사용하십시오.
from e2b_code_interpreter import Sandbox
with Sandbox() as sandbox:
# Install pandas inside the sandbox
sandbox.run_code('import subprocess; subprocess.run(["pip", "install", "pandas", "-q"])')
# Now use pandas
result = sandbox.run_code(
'import pandas as pd\n'
'df = pd.DataFrame({"x": [1,2,3], "y": [4,5,6]})\n'
'print(df.describe())'
)
print(result.logs.stdout)지속형 샌드박스와 일회성 샌드박스
E2B는 두 가지 샌드박스 수명 주기 모드를 지원합니다.
- 일회성:
with블록이 끝나면 샌드박스가 폐기됩니다. 한 번만 코드를 실행할 때 사용하십시오. - 지속형: 여러 요청에 걸쳐 샌드박스가 계속 실행됩니다. 에이전트의 여러 차례 작업에 걸쳐 상태를 축적해야 할 때 사용하십시오.
from e2b_code_interpreter import Sandbox
# Ephemeral (default context manager)
with Sandbox() as sb:
sb.run_code('x = 42')
# Sandbox destroyed here
# Persistent: keep alive for N seconds
sb = Sandbox(timeout=300) # keep alive 5 minutes
try:
sb.run_code('import numpy as np') # expensive import cached
sb.run_code('arr = np.arange(1000)')
result = sb.run_code('print(arr.mean())')
print(result.logs.stdout)
finally:
sb.kill() # explicit cleanup실행 중인 샌드박스에 다시 연결하기
에이전트 프로세스가 다시 시작되거나 sandbox_id가 다른 서비스로 전달된 경우에도 ID를 사용하여 기존 샌드박스에 다시 연결할 수 있으며 상태를 잃지 않습니다.
from e2b_code_interpreter import Sandbox
# First session
sb1 = Sandbox(timeout=300)
sb1.run_code('accumulated_data = []')
sandbox_id = sb1.sandbox_id
print('Created:', sandbox_id)
# Later — different process, same sandbox
sb2 = Sandbox.connect(sandbox_id)
result = sb2.run_code('accumulated_data.append(1); print(accumulated_data)')
print(result.logs.stdout) # '[1]' — state preserved
sb2.kill()E2B 요금 모델
E2B는 샌드박스 초 단위를 기준으로 요금을 부과합니다. 이는 코드가 실행 중인 시간만이 아니라 샌드박스가 살아 있는 시간입니다. 주요 요금 요소는 다음과 같습니다.
- 샌드박스가 지속형이면 유휴 시간에도 요금이 부과됩니다.
- 일회성 샌드박스는 생성부터 폐기까지 요금이 부과됩니다.
- 네트워크 송신에는 별도 요금이 부과될 수 있습니다.
timeout을 사용하여 자동 종료 기한을 설정하십시오.
# Cost-optimization patterns:
# 1. Use short timeouts for one-shot executions
with Sandbox(timeout=60) as sb:
result = sb.run_code('print("done")')
# Auto-kills after 60s if not killed first
# 2. Kill immediately after use
sb = Sandbox()
try:
sb.run_code('process_data()')
finally:
sb.kill() # don't wait for timeout
# 3. Share one sandbox across multiple agent steps
# instead of creating a new one per step에이전트 반복 과정에서 E2B 사용하기
여러 차례 작업을 수행하는 에이전트에서는 샌드박스를 한 번 생성하고 그 ID를 반복 과정에 전달하십시오. LLM이 생성한 각 코드 조각은 같은 세션에서 실행되므로 여러 작업에 걸쳐 변수와 설치된 패키지가 유지됩니다.
from e2b_code_interpreter import Sandbox
import openai
client = openai.OpenAI(api_key='YOUR_OPENAI_KEY')
def run_agent(user_question: str):
with Sandbox(timeout=120) as sb:
messages = [{'role': 'user', 'content': user_question}]
for _ in range(5): # max 5 turns
resp = client.chat.completions.create(
model='gpt-4o', messages=messages,
tools=[{'type': 'function', 'function': {
'name': 'run_python',
'description': 'Execute Python in a secure sandbox',
'parameters': {'type': 'object',
'properties': {'code': {'type': 'string'}},
'required': ['code']}
}}]
)
msg = resp.choices[0].message
if msg.tool_calls:
code = eval(msg.tool_calls[0].function.arguments)['code']
result = sb.run_code(code)
messages.append({'role': 'tool',
'tool_call_id': msg.tool_calls[0].id,
'content': str(result.logs.stdout)})
else:
return msg.content클라우드 샌드박스의 다른 서비스
E2B만이 유일한 선택지는 아닙니다. 다른 클라우드 샌드박스 서비스로는 다음이 있습니다.
- Modal: 서버리스 GPU/CPU 샌드박스, 사용자 지정 Docker 이미지
- AWS Lambda: 호출마다 실행 격리 제공(내부적으로 Firecracker 사용)
- Code Interpreter API: ChatGPT 도구를 위한 OpenAI의 내장 샌드박스
- Daytona: Git 통합을 지원하는 개발 샌드박스
일회성 E2B 샌드박스가 컨텍스트 관리자를 종료하면 변수는 어떻게 되나요?
여러 차례에 걸친 에이전트 대화에서 일회성 샌드박스와 지속형 샌드박스 중 언제 어떤 것을 사용할지 결정하려면 샌드박스 수명 주기를 이해하는 것이 중요합니다.
E2B 클라우드 샌드박스 복습
E2B는 클라우드에서 호스팅되는 Firecracker microVM 샌드박스를 위한 간단한 SDK를 제공합니다. 주요 패턴은 한 번만 코드를 실행할 때 사용하는 일회성 샌드박스, 여러 차례 작업을 수행하는 에이전트에 사용하는 지속형 샌드박스, 데이터의 입출력을 위한 파일 업로드 및 다운로드, 서비스 간 작업 흐름을 위한 ID로 다시 연결하기입니다.
불필요한 요금이 발생하지 않도록 항상 샌드박스를 명시적으로 종료하십시오.
자주 묻는 질문
“E2B 및 클라우드 샌드박스 서비스” 강의는 무료인가요?
네 — “E2B 및 클라우드 샌드박스 서비스” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 AI Agents 강의 전체를 잠금 해제할 수 있습니다. AI Agents 강의에는 총 4개의 강의가 포함되어 있습니다.
“E2B 및 클라우드 샌드박스 서비스”에서 뭘 배우나요?
코드 해석기 에이전트를 위한 E2B SDK, Daytona, 관리형 샌드박스 API를 학습합니다. 브라우저에서 직접 실행하는 실습 코드로 AI Agents을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
AI Agents을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 AI Agents은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“E2B 및 클라우드 샌드박스 서비스” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 AI Agents 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 AI Agents 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- Docker 기반 에이전트 샌드박스
- 고도 보안 코드 에이전트를 위한 VM 격리
- E2B 및 클라우드 샌드박스 서비스
- 코드 실행을 위한 보안 정책