Terminal Sandbox
격리된 샌드박스 환경에서 코드를 실행하고 명령을 수행할 수 있습니다. 각 채팅방마다 독립적인 샌드박스가 생성되며, 안전하게 코드를 테스트하고 데이터를 처리할 수 있습니다.
주요 기능
- Python, JavaScript, Go 코드 실행
- 쉘 명령어 실행
- 파일 생성 및 저장
- 결과 파일 다운로드
기본 정보
인증 방식
별도의 인증이 필요하지 않습니다.
지원 범위
Terminal Sandbox는 AI Hub 채팅에서만 사용할 수 있습니다. 3rd-party MCP 클라이언트에서는 지원되지 않습니다.
샌드박스 특징
작업 디렉토리
- 홈 디렉토리는
/workspace입니다. /workspace에 생성된 파일은 세션 동안 유지됩니다./workspace외부의 파일은 실행마다 초기화됩니다.
세션 관리
- 채팅방별로 독립적인 샌드박스가 생성됩니다.
- 10분 동안 요청이 없으면 샌드박스가 자동으로 초기화됩니다.
- 세션이 유지되는 동안 파일과 데이터는 보존됩니다.
지원하는 MCP 도구
execute_code
격리된 샌드박스 환경에서 코드를 실행합니다.
지원 언어:
- Python (3.12)
- JavaScript (Node.js 23.11)
- Go (1.24)
입력 파라미터:
code(필수): 실행할 코드language(필수): 프로그래밍 언어 (python,javascript,go)libraries(선택): 설치할 라이브러리 목록 (Python의 경우 pip, JavaScript의 경우 npm)timeout(선택): 실행 제한 시간 (초, 기본값: 30)
반환 정보:
- 실행 결과 (stdout)
- 에러 메시지 (stderr)
- 종료 코드
- 실행 시간
execute_command
격리된 샌드박스 환경에서 쉘 명령어를 실행합니다.
입력 파라미터:
command(필수): 실행할 쉘 명령어timeout(선택): 실행 제한 시간 (초, 기본값: 30)
반환 정보:
- 실행 결과 (stdout)
- 에러 메시지 (stderr)
- 종료 코드
- 실행 시간
upload_files
AI Hub 채팅에 업로드된 파일을 샌드박스의 /workspace/files 디렉토리로 가져옵니다.
입력 파라미터:
file_ids(필수): 업로드한 파일의 ID 목록
export_file
샌드박스에서 생성한 파일이나 디렉토리를 다운로드 가능한 URL로 내보냅니다.
입력 파라미터:
file_path(필수): 내보낼 파일 또는 디렉토리 경로 (예:/workspace/report.csv)
특징:
- 디렉토리는 자동으로 ZIP 파일로 압축됩니다.
- 반환된 URL은 마크다운 링크 형식으로 제공됩니다.
- URL 유효 기간은 10분입니다.
사용 예시
Python으로 데이터 분석
사용자 입력:
다음 제품 데이터를 pandas로 분석하고 CSV 파일로 저장해줘:
- Laptop: 가격 1200달러, 재고 15개
- Mouse: 가격 25달러, 재고 50개
- Keyboard: 가격 75달러, 재고 30개
- Monitor: 가격 350달러, 재고 20개
평균 가격과 총 재고 가치도 계산해줘.LLM이 execute_code 도구를 사용하여 다음과 유사한 코드를 생성하고 실행합니다:
import pandas as pd
# 데이터 생성
data = {
'Product': ['Laptop', 'Mouse', 'Keyboard', 'Monitor'],
'Price': [1200, 25, 75, 350],
'Stock': [15, 50, 30, 20]
}
df = pd.DataFrame(data)
# 분석 수행
print(f"평균 가격: ${df['Price'].mean():.2f}")
print(f"재고 가치: ${(df['Price'] * df['Stock']).sum():,}")
# CSV로 저장
df.to_csv('/workspace/products.csv', index=False)
print("\nCSV 파일이 생성되었습니다.")그 다음 export_file 도구로 생성된 CSV 파일을 다운로드 링크로 제공합니다.
JavaScript로 JSON 처리
사용자 입력:
다음 사용자 데이터에서 active가 true인 사용자만 필터링해서 JSON 파일로 저장해줘:
- Alice (ID: 1, active: true)
- Bob (ID: 2, active: false)
- Charlie (ID: 3, active: true)LLM이 execute_code 도구를 사용하여 다음과 유사한 코드를 생성하고 실행합니다:
const fs = require('fs');
// 사용자 데이터
const users = [
{ id: 1, name: 'Alice', active: true },
{ id: 2, name: 'Bob', active: false },
{ id: 3, name: 'Charlie', active: true }
];
// 활성 사용자만 필터링
const activeUsers = users.filter(user => user.active);
// 파일로 저장
fs.writeFileSync(
'/workspace/active_users.json',
JSON.stringify(activeUsers, null, 2)
);
console.log(`활성 사용자 ${activeUsers.length}명 저장 완료`);쉘 명령어로 텍스트 파일 분석
사용자 입력:
/workspace/server.log 파일을 만들고 다음 내용을 추가해줘:
2025-12-02 10:15:23 INFO Server started
2025-12-02 10:16:45 ERROR Database connection failed
2025-12-02 10:17:12 INFO Request processed
2025-12-02 10:18:33 ERROR Timeout exception
2025-12-02 10:19:01 INFO User logged in
그리고 ERROR가 포함된 라인만 추출해서 errors.txt로 저장해줘.LLM이 execute_command 도구를 사용하여 다음과 유사한 명령을 실행합니다:
# 로그 파일 생성
cat > /workspace/server.log << 'EOF'
2025-12-02 10:15:23 INFO Server started
2025-12-02 10:16:45 ERROR Database connection failed
2025-12-02 10:17:12 INFO Request processed
2025-12-02 10:18:33 ERROR Timeout exception
2025-12-02 10:19:01 INFO User logged in
EOF
# ERROR 포함 라인 추출
grep "ERROR" /workspace/server.log > /workspace/errors.txt
# 결과 확인
cat /workspace/errors.txt여러 언어 조합 사용
사용자 입력:
프로젝트 진행률을 계산해줘. 전체 1000건 중 850건이 완료됐어.
Python으로 데이터를 JSON으로 저장하고, Go로 완료율을 계산해서 리포트 파일로 만들어줘.LLM이 다음과 유사한 방식으로 단계별 실행을 진행합니다:
1단계: Python으로 데이터 저장
import json
data = {'total': 1000, 'completed': 850}
with open('/workspace/data.json', 'w') as f:
json.dump(data, f)
print(f"데이터 저장 완료: {data}")2단계: Go로 리포트 생성
package main
import (
"encoding/json"
"fmt"
"os"
)
func main() {
// JSON 파일 읽기
data, _ := os.ReadFile("/workspace/data.json")
var result map[string]int
json.Unmarshal(data, &result)
// 완료율 계산
percentage := float64(result["completed"]) / float64(result["total"]) * 100
report := fmt.Sprintf("프로젝트 진행률\n전체: %d건\n완료: %d건\n완료율: %.1f%%\n",
result["total"], result["completed"], percentage)
// 리포트 파일 저장
os.WriteFile("/workspace/report.txt", []byte(report), 0644)
fmt.Print(report)
}주의사항
보안
- 샌드박스는 격리된 환경이지만, 민감한 데이터 처리 시 주의하세요.
- API 키나 비밀번호를 코드에 직접 작성하지 마세요.
세션 관리
- 10분 동안 요청이 없으면 샌드박스가 초기화되어 모든 파일이 삭제됩니다.
- 중요한 결과물은
export_file도구로 다운로드하세요.
리소스 제한
- 샌드박스는 제한된 CPU와 메모리를 사용합니다.
- 대용량 데이터 처리나 장시간 실행되는 작업은 제한될 수 있습니다.
파일 저장 위치
- 반드시
/workspace디렉토리에 파일을 저장하세요. - 다른 위치의 파일은 실행 후 사라질 수 있습니다.
네트워크 제한
- 외부 네트워크 접근은 라이브러리 설치 목적으로만 제한적으로 허용됩니다.
- Python:
pypi.org,files.pythonhosted.org - JavaScript:
registry.npmjs.org,nodejs.org - Go:
proxy.golang.org,sum.golang.org,index.golang.org - API 호출, 웹 스크래핑 등 외부 서비스 접근은 불가능합니다.
라이브러리 설치
- Python: pandas, numpy, requests 등 일반적인 라이브러리 설치 가능
- 일부 시스템 의존성이 필요한 라이브러리는 설치되지 않을 수 있습니다. (예: matplotlib)
- JavaScript: npm 패키지 설치 가능하나 네이티브 모듈은 제한될 수 있음
Last updated on