Skip to main content

Production Deployment

> ⚠️ Note: This document contains legacy production readiness information (Phase 1-3 only). > > For v1.0 production deployment, see: > - DEPLOYMENT_GUIDE_v1.0.md - Complete deployment guide ⭐ > - RELEASE_NOTES_v1.0.md - v1.0 release notes ⭐ > - docs-site/docs/production.md - Production guide with all 11 phases > - DOCUMENTATION_INDEX.md - Complete documentation index


개요 (Legacy - Phase 1-3)

완료일: 2025-10-27 상태: ⚠️ OUTDATED - See v1.0 guides above

v1.0 Status:

  • ✅ All 11 Phases Complete
  • ✅ 147 tests (98.1% pass rate)
  • ✅ Security hardening (5-layer defense)
  • ✅ Package management (npm, pip)
  • ✅ Production ready with comprehensive deployment guide

완료된 Phase 요약 (Legacy)

Phase 1: JSON-RPC + WebSocket ✅

  • JSON-RPC 2.0 프로토콜 구현
  • WebSocket 양방향 통신
  • 실시간 스트리밍 실행

Phase 2: Custom Command Interface ✅

  • 7가지 Command 타입 시스템
  • Shell 우회 Docker API 직접 호출
  • 20% 성능 개선 (예상)

Phase 3: Session Management ✅

  • Stateful 컨테이너 재사용
  • 파일시스템 상태 유지
  • 자동 세션 정리 (IdleTimeout, MaxLifetime)

통합 테스트 ✅

  • SessionManagerTests (10개)
  • SessionJsonRpcTests (7개)
  • End-to-end 검증 완료

API 통합 ✅

  • Session 핸들러 등록
  • Dependency Injection 설정
  • Background Cleanup Worker

Note: Phases 4-11 were completed after this document. See RELEASE_NOTES_v1.0.md for complete v1.0 information.


아키텍처 개요

전체 스택

┌─────────────────────────────────────────┐
│ WebSocket Client │
│ (JSON-RPC 2.0) │
└──────────────┬──────────────────────────┘


┌─────────────────────────────────────────┐
│ CodeBeaker API │
│ (ASP.NET Core 8 + WebSocket) │
│ │
│ ┌──────────────────────────────────┐ │
│ │ JSON-RPC Router │ │
│ │ - session.create │ │
│ │ - session.execute │ │
│ │ - session.list │ │
│ │ - session.close │ │
│ │ - execution.run (legacy) │ │
│ └──────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────┐ │
│ │ Session Manager │ │
│ │ - Container pooling │ │
│ │ - Filesystem persistence │ │
│ │ - Auto cleanup (30min idle) │ │
│ └──────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────┐ │
│ │ Command Executor │ │
│ │ - Docker API direct calls │ │
│ │ - WriteFile, ReadFile, etc. │ │
│ └──────────────────────────────────┘ │
└──────────────┬──────────────────────────┘


┌─────────────────────────────────────────┐
│ Docker Engine │
│ - codebeaker-python:latest │
│ - codebeaker-nodejs:latest │
│ - codebeaker-golang:latest │
│ - codebeaker-dotnet:latest │
└─────────────────────────────────────────┘

API 엔드포인트

WebSocket Endpoint

ws://localhost:5000/ws/jsonrpc

JSON-RPC Methods

1. session.create

세션 생성 및 컨테이너 시작

Request:

{
"jsonrpc": "2.0",
"id": 1,
"method": "session.create",
"params": {
"language": "python",
"idleTimeoutMinutes": 30,
"maxLifetimeMinutes": 120,
"memoryLimitMB": 512
}
}

Response:

{
"jsonrpc": "2.0",
"id": 1,
"result": {
"sessionId": "abc123def456",
"containerId": "xyz789",
"language": "python",
"createdAt": "2025-10-27T12:00:00Z",
"state": "Active",
"config": {
"idleTimeoutMinutes": 30,
"maxLifetimeMinutes": 120
}
}
}

2. session.execute

세션에서 명령 실행

Request:

{
"jsonrpc": "2.0",
"id": 2,
"method": "session.execute",
"params": {
"sessionId": "abc123def456",
"command": {
"type": "write_file",
"path": "/workspace/hello.py",
"content": "print('Hello, World!')",
"mode": "Create"
}
}
}

Response:

{
"jsonrpc": "2.0",
"id": 2,
"result": {
"success": true,
"result": {
"path": "/workspace/hello.py",
"bytes": 22
},
"error": null,
"durationMs": 45
}
}

3. session.list

활성 세션 목록 조회

Request:

{
"jsonrpc": "2.0",
"id": 3,
"method": "session.list",
"params": {}
}

Response:

{
"jsonrpc": "2.0",
"id": 3,
"result": {
"count": 2,
"sessions": [
{
"sessionId": "abc123",
"containerId": "xyz789",
"language": "python",
"createdAt": "2025-10-27T12:00:00Z",
"lastActivity": "2025-10-27T12:15:30Z",
"state": "Idle",
"executionCount": 5,
"idleMinutes": 2.5,
"lifetimeMinutes": 15.5
}
]
}
}

4. session.close

세션 종료 및 컨테이너 정리

Request:

{
"jsonrpc": "2.0",
"id": 4,
"method": "session.close",
"params": {
"sessionId": "abc123def456"
}
}

Response:

{
"jsonrpc": "2.0",
"id": 4,
"result": {
"sessionId": "abc123def456",
"closed": true
}
}

사용 예제

Python 코드 실행 (세션 기반)

const ws = new WebSocket('ws://localhost:5000/ws/jsonrpc');

// 1. 세션 생성
ws.send(JSON.stringify({
jsonrpc: '2.0',
id: 1,
method: 'session.create',
params: { language: 'python' }
}));

// 응답: { sessionId: 'abc123' }

// 2. 파일 작성
ws.send(JSON.stringify({
jsonrpc: '2.0',
id: 2,
method: 'session.execute',
params: {
sessionId: 'abc123',
command: {
type: 'write_file',
path: '/workspace/script.py',
content: 'x = 10\nprint(x * 2)'
}
}
}));

// 3. Python 실행
ws.send(JSON.stringify({
jsonrpc: '2.0',
id: 3,
method: 'session.execute',
params: {
sessionId: 'abc123',
command: {
type: 'execute_shell',
commandName: 'python3',
args: ['/workspace/script.py']
}
}
}));

// 응답: { result: { stdout: '20\n' } }

// 4. 세션 종료
ws.send(JSON.stringify({
jsonrpc: '2.0',
id: 4,
method: 'session.close',
params: { sessionId: 'abc123' }
}));

배포 가이드

1. Docker Compose 배포

docker-compose.yml:

version: '3.8'

services:
codebeaker-api:
build:
context: .
dockerfile: src/CodeBeaker.API/Dockerfile
ports:
- "5000:5000"
- "5001:5001"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- ASPNETCORE_ENVIRONMENT=Production
- ASPNETCORE_URLS=http://+:5000;https://+:5001
restart: unless-stopped
networks:
- codebeaker-network

networks:
codebeaker-network:
driver: bridge

2. 환경 변수

# 필수
ASPNETCORE_ENVIRONMENT=Production
ASPNETCORE_URLS=http://+:5000

# 선택
Queue__Path=/app/data/queue
Storage__Path=/app/data/storage

3. 시작 명령어

# 개발 환경
dotnet run --project src/CodeBeaker.API

# 프로덕션
dotnet publish -c Release -o out
cd out
dotnet CodeBeaker.API.dll

성능 특성

세션 기반 실행

  • 컨테이너 재사용: 생성 오버헤드 제거
  • 파일시스템 유지: 반복 작업 시 속도 향상
  • 메모리 효율: 컨테이너 풀링

예상 성능

단일 실행 (Stateless):
- Container create: ~200ms
- Code execution: 100-500ms
- Container cleanup: ~100ms
- Total: ~400-800ms

세션 실행 (Stateful):
- First execution: ~400ms (create session)
- Subsequent: ~100-200ms (컨테이너 재사용)
- Improvement: 50-75% faster

보안 고려사항

구현됨

  • ✅ 컨테이너 격리 (네트워크: none)
  • ✅ 메모리 제한 (기본: 512MB)
  • ✅ 실행 시간 제한
  • ✅ 자동 세션 정리

권장 추가 사항

  • Rate limiting (요청 제한)
  • API 인증 (JWT, API Key)
  • 네트워크 정책 강화
  • 파일시스템 쿼터
  • 감사 로그

모니터링 & 관리

Health Check

curl http://localhost:5000/health

세션 모니터링

# WebSocket으로 session.list 호출
wscat -c ws://localhost:5000/ws/jsonrpc
> {"jsonrpc":"2.0","id":1,"method":"session.list","params":{}}

로그

  • ASP.NET Core 기본 로깅
  • Serilog 통합 (Console, File)

다음 단계 (선택)

Phase 4: Multi-Channel Architecture

  • Control/Data/Status 채널 분리
  • 대용량 파일 전송 최적화
  • 실시간 알림 강화

고급 기능

  • 세션 스냅샷 (checkpoint/restore)
  • 세션 복제 (fork)
  • 컨테이너 풀 사전 생성 (warm pool)
  • 메트릭 수집 (Prometheus)
  • 분산 추적 (OpenTelemetry)

프로덕션 강화

  • Kubernetes 배포
  • 수평 확장 (multi-instance)
  • Redis 세션 스토리지
  • 로드 밸런싱

프로젝트 통계

코드 통계

Phase 1 (JSON-RPC + WebSocket):  ~800 lines
Phase 2 (Custom Commands): ~1,060 lines
Phase 3 (Session Management): ~676 lines
Integration Tests: ~550 lines
Total: ~3,086 lines

파일 구조

src/
├── CodeBeaker.API/ (API 서버)
├── CodeBeaker.Commands/ (Command 시스템)
├── CodeBeaker.Core/ (핵심 로직)
│ ├── Docker/
│ ├── Sessions/
│ └── Interfaces/
├── CodeBeaker.JsonRpc/ (JSON-RPC 라우터)
├── CodeBeaker.Runtimes/ (언어별 런타임)
└── CodeBeaker.Worker/ (백그라운드 워커)

tests/
├── CodeBeaker.Core.Tests/
├── CodeBeaker.Runtimes.Tests/
└── CodeBeaker.Integration.Tests/

docs/
├── PHASE1_COMPLETE.md
├── PHASE2_COMPLETE.md
├── PHASE3_COMPLETE.md
├── INTEGRATION_TESTS_COMPLETE.md
└── PRODUCTION_READY.md (이 문서)

요약

✅ 프로덕션 준비 완료 항목

영역상태설명
JSON-RPC APIWebSocket + JSON-RPC 2.0
Session ManagementStateful 컨테이너 재사용
Command System7가지 명령 타입
Auto CleanupBackground worker
Integration Tests17개 테스트
API Integration모든 핸들러 등록
Build Status0 warnings, 0 errors
Documentation완전한 API 문서

핵심 기능

  1. 세션 기반 실행: 컨테이너 재사용으로 50-75% 성능 향상
  2. 파일시스템 유지: 멀티턴 대화 지원
  3. 자동 정리: IdleTimeout (30분), MaxLifetime (120분)
  4. 4개 언어 지원: Python, JavaScript, Go, C#
  5. 실시간 통신: WebSocket JSON-RPC

CodeBeaker 프로덕션 준비 완료! 🎉

배포 가능한 상태입니다!