iCodeHub API v1

모니터링 시스템 등 외부 서비스에서 iCodeHub 기능을 호출하는 REST API

Base URL: /api/v1 Auth: X-API-Key 헤더 (선택적) Content-Type: application/json
인증 방식: 환경변수 API_V1_REQUIRE_AUTH=true 설정 시 X-API-Key: <key> 헤더가 필요합니다. 기본값(false)은 내부망에서 인증 없이 사용 가능합니다.
공통 응답 포맷: 성공 시 {"status":"ok","data":{...}}, 실패 시 {"status":"error","message":"..."}
System 2개 엔드포인트
GET /api/v1/health 전체 시스템 헬스 (DB, Redis, 배치컨테이너, Docker)

전체 시스템 헬스 (DB, Redis, 배치컨테이너, Docker)

curl 예시
curl -X GET "http://localhost:5000/api/v1/health"
Response 예시
{ "status": "ok", "overall": "ok", "data": { "db": {"connected": true}, "redis": {"connected": true, "message": "연결됨"}, "batch_container": {"connected": true, "message": "실행 중"}, "docker": {"available": true} } }
GET /api/v1/status 대시보드 KPI 통계 (프로젝트, 배치, Docker, SSL 요약)

대시보드 KPI 통계 (프로젝트, 배치, Docker, SSL 요약)

curl 예시
curl -X GET "http://localhost:5000/api/v1/status"
Response 예시
{ "status": "ok", "data": { "projects": {"total": 5, "active": 4}, "batch": {"total_jobs": 12, "active_jobs": 8, "running_now": 1, "errors_today": 0}, "docker": {"total_services": 11, "running": 10, "stopped": 1}, "ssl": {"total_certs": 3, "expiring_soon": 1, "expired": 0}, "svn": {"total_repos": 3} } }
Projects 5개 엔드포인트
GET /api/v1/projects 프로젝트 목록

프로젝트 목록

curl 예시
curl -X GET "http://localhost:5000/api/v1/projects"
Response 예시
{ "status": "ok", "data": [ { "id": 1, "project_name": "eyecdhub", "svn_url": "svn://192.168.0.52:15090/eyecdhub", "status": "active", "last_synced_at": "2026-02-28 10:30:00" } ] }
GET /api/v1/projects/<id> 프로젝트 상세

프로젝트 상세

curl 예시
curl -X GET "http://localhost:5000/api/v1/projects/<id>"
Response 예시
{ "status": "ok", "data": { "id": 1, "project_name": "eyecdhub", "description": "프로젝트 설명", "svn_url": "svn://...", "status": "active" } }
GET /api/v1/projects/<id>/svn/info SVN 저장소 정보 조회

SVN 저장소 정보 조회

curl 예시
curl -X GET "http://localhost:5000/api/v1/projects/<id>/svn/info"
Response 예시
{ "status": "ok", "revision": 42, "last_author": "eyecd", "last_date": "2026-02-28T10:00:00Z" }
GET /api/v1/projects/<id>/svn/log SVN 커밋 로그 (limit 파라미터 지원)

SVN 커밋 로그 (limit 파라미터 지원)

Query Parameters
이름타입기본값설명
limit int 30 최대 조회 개수
curl 예시
curl -X GET "http://localhost:5000/api/v1/projects/<id>/svn/log"
Response 예시
{ "status": "ok", "commits": [ {"revision": 42, "author": "eyecd", "message": "...", "date": "2026-02-28"} ] }
POST /api/v1/projects/<id>/svn/sync SVN 동기화 트리거

SVN 동기화 트리거

curl 예시
curl -X POST "http://localhost:5000/api/v1/projects/<id>/svn/sync"
Response 예시
{"status": "ok", "message": "동기화 완료"}
Batch 11개 엔드포인트
GET /api/v1/batch/health 배치 컨테이너 + Redis 상태

배치 컨테이너 + Redis 상태

curl 예시
curl -X GET "http://localhost:5000/api/v1/batch/health"
Response 예시
{ "status": "ok", "data": { "redis": {"connected": true}, "batch_container": {"connected": true}, "jobs": {"total": 12, "active": 8}, "scripts": {"total": 5, "active": 5} } }
GET /api/v1/batch/scripts 스크립트 목록 (category 필터 가능)

스크립트 목록 (category 필터 가능)

Query Parameters
이름타입기본값설명
category string - system|web|media|custom
curl 예시
curl -X GET "http://localhost:5000/api/v1/batch/scripts"
Response 예시
{ "status": "ok", "data": [ { "id": 1, "script_name": "my_script", "display_name": "내 스크립트", "category": "custom", "version": 3 } ] }
POST /api/v1/batch/scripts 스크립트 등록 (파일시스템 배포까지 수행)

스크립트 등록 (파일시스템 배포까지 수행)

curl 예시
curl -X POST "http://localhost:5000/api/v1/batch/scripts" \ -H "Content-Type: application/json" \ -d '{ "script_name": "my_script", "display_name": "내 스크립트", "category": "custom", "code": "def run():\n ...'
Request Body
{ "script_name": "my_script", "display_name": "내 스크립트", "category": "custom", "code": "def run():\n print('Hello')", "requirements": "requests>=2.28", "entry_function": "run" }
Response 예시
{ "status": "ok", "data": {"id": 1, "message": "내 스크립트 등록 완료"} }
GET /api/v1/batch/scripts/<id> 스크립트 상세 (코드 포함)

스크립트 상세 (코드 포함)

curl 예시
curl -X GET "http://localhost:5000/api/v1/batch/scripts/<id>"
Response 예시
{ "status": "ok", "data": { "id": 1, "script_name": "my_script", "code": "def run():\n ...", "version": 3 } }
DELETE /api/v1/batch/scripts/<id> 스크립트 삭제 (soft delete)

스크립트 삭제 (soft delete)

curl 예시
curl -X DELETE "http://localhost:5000/api/v1/batch/scripts/<id>"
Response 예시
{"status": "ok", "data": {"message": "my_script 삭제 완료"}}
GET /api/v1/batch/jobs 배치 작업 목록

배치 작업 목록

curl 예시
curl -X GET "http://localhost:5000/api/v1/batch/jobs"
Response 예시
{ "status": "ok", "data": [ { "id": 1, "job_name": "데이터 백업", "schedule_type": "1hour", "is_active": true, "run_count": 24, "error_count": 0 } ] }
POST /api/v1/batch/jobs 배치 작업 등록

배치 작업 등록

curl 예시
curl -X POST "http://localhost:5000/api/v1/batch/jobs" \ -H "Content-Type: application/json" \ -d '{ "job_name": "데이터 백업", "job_type": "system", "schedule_type": "1hour", "execution_mode": "script", ...'
Request Body
{ "job_name": "데이터 백업", "job_type": "system", "schedule_type": "1hour", "execution_mode": "script", "script_id": 1, "timeout_seconds": 300, "is_active": true }
Response 예시
{"status": "ok", "data": {"id": 1, "message": "데이터 백업 등록 완료"}}
GET /api/v1/batch/jobs/<id> 작업 상세 + 최근 실행 상태

작업 상세 + 최근 실행 상태

curl 예시
curl -X GET "http://localhost:5000/api/v1/batch/jobs/<id>"
Response 예시
{ "status": "ok", "data": { "id": 1, "job_name": "데이터 백업", "last_status": {"status": "success", "started_at": "2026-02-28 10:00:00"} } }
POST /api/v1/batch/jobs/<id>/run 즉시 실행 트리거 (배치 컨테이너에 요청)

즉시 실행 트리거 (배치 컨테이너에 요청)

curl 예시
curl -X POST "http://localhost:5000/api/v1/batch/jobs/<id>/run"
Response 예시
{"status": "ok", "data": {"message": "실행 요청 완료", "history_id": 42}}
GET /api/v1/batch/jobs/<id>/history 작업 실행 이력

작업 실행 이력

Query Parameters
이름타입기본값설명
limit int 20 최대 조회 개수
curl 예시
curl -X GET "http://localhost:5000/api/v1/batch/jobs/<id>/history"
Response 예시
{ "status": "ok", "data": [ { "id": 42, "status": "success", "started_at": "2026-02-28 10:00:00", "duration_ms": 1234 } ] }
GET /api/v1/batch/history 전체 실행 이력 (모든 작업)

전체 실행 이력 (모든 작업)

Query Parameters
이름타입기본값설명
limit int 50 최대 조회 개수
status string - success|fail|running|pending
curl 예시
curl -X GET "http://localhost:5000/api/v1/batch/history"
Response 예시
{ "status": "ok", "data": [ {"id": 42, "job_name": "데이터 백업", "status": "success", "duration_ms": 1234} ] }
Docker 2개 엔드포인트
GET /api/v1/docker/services DockerService DB 목록 + 최신 체크 로그 (CPU, 메모리)

DockerService DB 목록 + 최신 체크 로그 (CPU, 메모리)

curl 예시
curl -X GET "http://localhost:5000/api/v1/docker/services"
Response 예시
{ "status": "ok", "data": [ { "id": 1, "service_name": "nginx", "container_name": "eyecd-nginx", "status": "running", "latest_check": {"cpu_percent": 0.5, "memory_mb": 32.4} } ] }
GET /api/v1/docker/containers 라이브 컨테이너 목록 (Docker socket 직접 조회)

라이브 컨테이너 목록 (Docker socket 직접 조회)

Query Parameters
이름타입기본값설명
all bool true 중지된 컨테이너 포함 여부
curl 예시
curl -X GET "http://localhost:5000/api/v1/docker/containers"
Response 예시
{ "status": "ok", "data": [ {"id": "abc123", "name": "eyecd-nginx", "image": "nginx:latest", "status": "running"} ] }
SSL 1개 엔드포인트
GET /api/v1/ssl/certs SSL 인증서 만료 정보 (/etc/letsencrypt/live 조회)

SSL 인증서 만료 정보 (/etc/letsencrypt/live 조회)

curl 예시
curl -X GET "http://localhost:5000/api/v1/ssl/certs"
Response 예시
{ "status": "ok", "data": [ { "domain": "example.com", "valid": true, "expiry": "2026-06-01 00:00", "days_left": 93, "issuer": "Let's Encrypt" } ] }
SVN 2개 엔드포인트
GET /api/v1/svn/repos SVN 저장소 목록 (볼륨 스캔)

SVN 저장소 목록 (볼륨 스캔)

curl 예시
curl -X GET "http://localhost:5000/api/v1/svn/repos"
Response 예시
{ "status": "ok", "data": [ {"name": "eyecdhub", "svn_url": "svn://192.168.0.52:15090/eyecdhub"} ] }
GET /api/v1/svn/repos/<name> SVN 저장소 상세 (info + 최근 커밋 + 파일 목록)

SVN 저장소 상세 (info + 최근 커밋 + 파일 목록)

curl 예시
curl -X GET "http://localhost:5000/api/v1/svn/repos/<name>"
Response 예시
{ "status": "ok", "data": { "name": "eyecdhub", "info": {"revision": 42}, "commits": [...], "files": [...] } }
Claude 2개 엔드포인트
POST /api/v1/claude/execute Claude 프롬프트 실행

Claude 프롬프트 실행

curl 예시
curl -X POST "http://localhost:5000/api/v1/claude/execute" \ -H "Content-Type: application/json" \ -d '{ "prompt": "Python 코드 리뷰해줘", "project_id": 1}'
Request Body
{ "prompt": "Python 코드 리뷰해줘", "project_id": 1 }
Response 예시
{ "status": "ok", "data": { "log_id": 1, "output": "...", "status": "completed", "time": 1.5 } }
GET /api/v1/claude/history Claude 실행 이력

Claude 실행 이력

Query Parameters
이름타입기본값설명
limit int 20 최대 조회 개수
curl 예시
curl -X GET "http://localhost:5000/api/v1/claude/history"
Response 예시
{ "status": "ok", "data": [ {"id": 1, "prompt": "Python 코드 리뷰해줘", "status": "completed"} ] }