Novita Sandbox로 Claude Agent SDK 배포 및 호스팅하는 방법

Novita Sandbox로 Claude Agent SDK 배포 및 호스팅하는 방법

2026년, AI 환경은 실험적 지능에서 산업화된 실행으로의 전환점에 도달했습니다. 1차 AI 물결이 대화에 초점을 맞췄다면, 현재 시대는 에이전시(Agency)로 정의됩니다.

Claude Agent SDK의 출시로 패러다임이 상태 비저장(Stateless) API에서 상태 저장(Stateful) 지속 런타임으로 전환되었습니다. 개발자는 더 이상 단순히 코드를 생성하는 에이전트에 만족하지 않고, 자율적으로 실행, 디버깅 및 반복할 수 있는 시스템을 요구합니다. 모든 요청 후에 “잊어버리는” 기존 LLM과 달리, Claude Agent SDK는 지속적인 추론 루프를 유지하며 코드를 작성하고, 실시간으로 디버깅하며, 복잡한 파일 시스템을 관리합니다.

그러나 여전히 중요한 격차인 인프라가 남아 있습니다. 데모에서 프로덕션 등급의 디지털 워크포스로 전환하려면 에이전트는 지능뿐만 아니라 안전하고 확장 가능하며 고성능이고 저렴한 환경이 필요합니다.

이 격차를 비용 효율적이며 엔터프라이즈급 인프라로 해결하는 E2B 호환 클라우드 실행 환경인 Novita Sandbox를 사용하여 Claude 에이전트를 프로덕션에 배포하고 호스팅하는 방법을 알아보세요.

💡 빌드를 시작할 준비가 되셨나요? Novita는 대화형 CLI, 도구 구현, 모범 사례를 갖춘 완전한 프로덕션 준비 Claude Agent SDK 예제를 제공합니다. 리포지토리 클론하고 몇 분 안에 첫 번째 에이전트를 실행하세요.

핵심 장점: Anthropic에 맞춰 설계됨

1. 진정한 “제로 리팩터링” 마이그레이션

Novita는 완전히 호환되는 Anthropic API 엔드포인트를 제공합니다. 하나의 baseURL만 변경하면 기존 Claude 기반 애플리케이션에 실제 실행 기능을 부여할 수 있습니다.

  • 네이티브 통합: @anthropic-ai/sdk를 직접 사용하세요. 새로운 프레임워크를 배울 필요가 없습니다.
  • 간편한 전환: context-managementthinking 모드를 포함한 모든 Beta 기능과 호환됩니다.
import Anthropic from "@anthropic-ai/sdk";

// baseURL만 수정하면 Novita로 간편하게 전환
const anthropic = new Anthropic({
  baseURL: "https://api.novita.ai/anthropic",
  apiKey: process.env.NOVITA_API_KEY,
});

// 모든 Anthropic SDK 사용법은 변경되지 않음
const response = await anthropic.messages.create({
  model: "zai-org/glm-4.7",
  max_tokens: 4096,
  messages: [{ role: "user", content: "Hello, World!" }],
});

2. 클라우드 격리 “샌드박스 실험실”

Novita Sandbox는 파일 시스템 액세스, 네트워크 통신 및 백그라운드 프로세스를 지원하는 즉시 시작 가능한 Linux 환경을 제공합니다.

  • 안전한 격리: 각 요청은 독립적인 샌드박스에서 실행되어 코드 오염을 방지합니다.
  • 풀스택 기능: 내장 Node.js, Python 및 Jupyter 환경과 동적 npmpip 설치 지원.
  • 즉시 미리보기: 원클릭 공용 HTTPS 포트 노출 – 생성된 페이지를 즉시 확인 가능.
import { Sandbox } from "novita-sandbox/code-interpreter";

// 몇 초 만에 격리된 클라우드 환경 생성
const sandbox = await Sandbox.create({ timeoutMs: 10 * 60 * 1000 });

// 파일 작성
await sandbox.files.write("index.html", "<h1>Hello from Sandbox!</h1>");

// 백그라운드 서비스 시작 및 공용 URL 획득
const handle = await sandbox.commands.run("npx http-server -p 3000", { background: true });
const publicUrl = `https://${sandbox.getHost(3000)}`;

console.log(`🌐 미리보기 URL: ${publicUrl}`);

3. 컨텍스트 자가 치유 및 지능형 인식

Claude의 도구 사용(Tool Use) 기능을 활용하여 에이전트는 다음을 수행할 수 있습니다.

  • 적응 및 복구: 런타임 오류 발생 시 에이전트가 stderr를 확인하고 자동으로 코드를 다시 작성합니다.
  • 메모리 최적화: contextManagement 전략과 결합하여 시스템이 이전 코드 블록을 자동으로 정리하여 집중력을 유지합니다.
// context-management Beta 기능 활성화
// 참고: https://platform.claude.com/docs/en/build-with-claude/context-editing
const response = await anthropic.beta.messages.create({
  model: "zai-org/glm-4.7",
  max_tokens: 4096,
  betas: ["context-management-2025-06-27"],
  contextManagement: {
    edits: [
      {
        type: "clear_tool_uses_20250919",
        trigger: { type: "input_tokens", value: 10000 },  // 10k 토큰 초과 시 정리 트리거
        keep: { type: "tool_uses", value: 2 },            // 최근 2개의 도구 호출 유지
        clear_tool_inputs: true,                          // 도구 입력도 함께 정리
      },
    ],
  },
  tools: TOOLS,
  messages: conversationHistory,
});

작동 방식: 대화 컨텍스트가 설정된 임계값을 초과하면 API가 이전 도구 호출 결과를 자동으로 정리하고 최근 중요 정보는 보존합니다. 이는 에이전트 성능을 저하시키는 "메모리 오염"을 방지합니다.

사용 사례: 무한한 가능성

시나리오 Novita Sandbox가 제공하는 기능
대화형 웹 랩 한 문장으로 React/Tailwind 페이지를 생성하고 즉시 미리보기.
지능형 데이터 분석 Pandas와 Matplotlib로 동적으로 Python을 실행하여 차트 생성.
AI 자동화 테스트 격리된 환경에서 테스트 스크립트 실행, 버그 자동 캡처 및 수정.
개인화된 IDE 백엔드 각 사용자에게 독립적인 클라우드 실행기 제공 – 운영 오버헤드 제로.
자가 치유 코드 워크플로우 생성된 API 코드를 폐쇄 루프에서 테스트하여 전달 전에 올바르게 실행되는지 확인.

빠른 시작: 3단계로 대화형 에이전트 구축

복잡한 구성은 필요 없습니다. Novita가 개발을 간단하게 만듭니다.

1단계: 최소 설치

npm install @anthropic-ai/sdk novita-sandbox dotenv open

2단계: 스마트 API 키 통합

프로젝트에는 대화형 키 안내가 포함되어 있습니다. 환경 변수가 없어도 프로그램이 시작 시 키를 입력하도록 안내합니다:

// agent_en.ts 내부 로직
if (!agent.hasApiKey()) {
  const apiKey = await promptForApiKey(rl);
  agent.setApiKey(apiKey);
}

3단계: 원클릭 대화형 CLI 실행

npm run agent-en을 실행하여 대화형 모드로 들어갑니다. 요구 사항을 입력하면 Anthropic 호환 모델이 코드 생성, 서비스 실행, 브라우저 열기를 처리합니다.

npm run agent-en

핵심 코드 설명

📌 도구 정의: AI에 “물리적 능력” 부여

const TOOLS: Anthropic.Beta.Messages.BetaTool[] = [
  {
    name: "write_file",
    description: "샌드박스에서 파일을 생성하거나 수정합니다.",
    input_schema: {
      type: "object",
      properties: {
        path: { type: "string", description: "파일 경로 (예: index.html)" },
        content: { type: "string", description: "전체 파일 내용" },
      },
      required: ["path", "content"],
    },
  },
  {
    name: "get_preview_url",
    description: "웹 서버를 시작하고 미리보기 URL을 반환합니다. (서버가 이미 실행 중인 경우 기존 URL 반환)",
    input_schema: { type: "object", properties: {} },
  },
];

📌 에이전트 루프: 작업 완료까지 처리

async chat(userMessage: string): Promise<void> {
  // 각 사용자 입력 시 샌드박스 타임아웃 갱신
  await this.refreshSandboxTimeout();
  
  this.messages.push({ role: "user", content: userMessage });

  // 에이전트 루프 – 더 이상 도구 호출이 없을 때까지 계속 처리
  let continueLoop = true;
  while (continueLoop) {
    const { response, assistantContent } = await this.streamResponse();
    this.messages.push({ role: "assistant", content: assistantContent });

    // 도구 호출 처리
    const { hasToolUse, toolResults } = await this.processToolCalls(assistantContent);

    if (hasToolUse && toolResults.length > 0) {
      this.messages.push({ role: "user", content: toolResults });
      continueLoop = true;  // 도구 호출이 있으면 루프 계속
    } else {
      continueLoop = false; // 도구 호출이 없으면 종료
    }

    if (response.stop_reason === "end_turn") {
      continueLoop = false;
    }
  }
}

📌 서비스 자가 치유: 스마트 감지 및 자동 재시작

private async handleGetPreviewUrl(): Promise<string> {
  // 프로세스가 실제로 살아 있는지 확인
  if (this.previewUrl && this.serverHandle) {
    const processAlive = await this.checkServerProcessAlive();
    if (!processAlive) {
      console.log(`⚠️ 서버 프로세스가 종료되었습니다. 재시작 중...`);
      this.serverHandle = null;
      this.previewUrl = null;
    }
  }

  // 새 서버 시작
  this.serverHandle = await this.sandbox.commands.run(
    `npx -y http-server . -p ${CONFIG.serverPort} -c-1`,
    { background: true }
  );

  // 공용 URL 획득 및 상태 확인 실행
  const host = this.sandbox.getHost(CONFIG.serverPort);
  this.previewUrl = `https://${host}`;
  
  await waitForServer(this.previewUrl, maxRetries, intervalMs);
  await openBrowser(this.previewUrl);
  
  return `미리보기 URL: ${this.previewUrl}`;
}

전체 예제 살펴보기

Novita는 프로덕션에 바로 사용 가능한 코드 패턴을 갖춘 완전한 기능의 Claude Agent SDK 예제를 제공합니다. 이 예제는 다음을 보여줍니다:

  • 스트리밍 응답이 포함된 대화형 CLI 인터페이스
  • 완전한 도구 구현 (파일 작업, 코드 실행, 웹 서버 관리)
  • 자동 정리가 포함된 컨텍스트 관리
  • 오류 처리 및 재시도 로직
  • 자동 재시작이 포함된 서비스 상태 확인
  • 지속 상태를 유지하는 다중 턴 대화

GitHub 리포지토리: Novita-CollabHub/examples/claude-agent

예제로 빠르게 시작하기:

# 리포지토리 클론
git clone https://github.com/novitalabs/Novita-CollabHub.git
cd Novita-CollabHub/examples/claude-agent

# 종속성 설치
npm install

# API 키 설정
export NOVITA_API_KEY=your_api_key_here

# 대화형 에이전트 실행
npm run agent-en

다중 턴 대화 데모

다음은 에이전트가 사용자 피드백을 기반으로 페이지를 반복적으로 개선하는 완전한 다중 턴 대화 예제입니다.

1회차: 할 일 목록 앱 만들기

사용자 입력: 할 일 목록 앱 만들기

할 일 목록 앱 만들기

2회차: 스타듀 밸리 스타일로 변경

사용자 입력: 스타듀 밸리 스타일로 변경

스타듀 밸리 스타일로 변경

3회차: 기능 추가

사용자 입력: 기능 추가

기능 추가

결론

Claude Agent SDK를 프로덕션에 배포하려면 기존 클라우드 플랫폼이 제공하지 못하는 인프라가 필요합니다. Novita Sandbox는 Claude Agent SDK와 완벽하게 통합되는 프로덕션 준비 인프라를 제공하여 에이전트에 물리적 세계에서 작업하는 데 필요한 "손"을 부여합니다:

  • 기존 도구와의 원활한 통합을 위한 E2B 호환 클라우드 실행 환경
  • 리팩터링이 전혀 필요 없는 네이티브 Anthropic 호환 엔드포인트 – baseURL만 변경하면 됩니다.
  • 신뢰할 수 없는 코드 실행을 위한 안전한 컨테이너 격리
  • 사전 구성된 런타임이 제공되는 즉시 프로비저닝
  • 생성된 웹 애플리케이션을 위한 공용 URL 노출
  • 장기 실행 서비스를 위한 백그라운드 프로세스 관리

지금 상태 저장 AI 에이전트 구축을 시작하세요:

Novita AI 는 개발자에게 사용하기 쉬운 API와 AI 애플리케이션 구축 및 확장을 위한 저렴하고 안정적인 GPU 인프라를 제공하는 선도적인 AI 클라우드 플랫폼입니다.