0Pricing
AI Agents · 강의

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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Docker 기반 에이전트 샌드박스
  2. 고도 보안 코드 에이전트를 위한 VM 격리
  3. E2B 및 클라우드 샌드박스 서비스
  4. 코드 실행을 위한 보안 정책
← AI Agents(으)로 돌아가기