IIS 전체 서비스에서 게임 생성, 수정, 검수, 퍼블리시를 처리하는 FastAPI 백엔드입니다.
- 공개 포털:
https://iis-arcade-portal.jeonsavvy.workers.dev/ - 이 저장소 자체는 공개 프론트엔드를 배포하지 않는 백엔드 런타임입니다. 실제 Core Engine base URL은 운영 비밀/인프라 설정에서 관리하고 README에 노출하지 않습니다.
운영 smoke check는 포털 BFF → Core Engine API, /healthz, /api/v1/health, 세션 생성/조회, 승인된 퍼블리시 경로를 staging 또는 승인된 운영 창에서 확인합니다.
- 세션 기반 게임 제작 API 제공
- 프롬프트 실행과 비동기 run 상태 관리
- 이슈 제기, 수정안 생성, 수정 반영 흐름 관리
- 퍼블리시 승인과 공개 메타데이터 기록
iis-games-archive저장소 GitOps 동기화- 런타임 health와 세션 스키마 일치 여부 검증
python3.11 -m venv .venv311
source .venv311/bin/activate
pip install -r requirements-dev.txt
cp .env.example .env
./scripts/run_api.sh기본 확인 경로:
GET /healthzGET /api/v1/healthGET /api/v1/sessions
- 포털이 세션을 생성합니다.
- 사용자가 프롬프트를 보내면 run이 큐잉되고 상태가 기록됩니다.
- 코드 생성, 비주얼 검수, 플레이 테스트 결과가 세션 이벤트와 대화 기록에 남습니다.
- 사용자는 이슈를 등록하고 수정안을 검토한 뒤 반영할 수 있습니다.
- 퍼블리시 승인 후 HTML, 공개 메타데이터, 썸네일, 아카이브 저장소가 함께 갱신됩니다.
- 세션은 생성 시
user_id를 함께 기록합니다. creator는 본인 세션만 조회/복원/수정할 수 있습니다.master_admin는 전체 세션을 조회하고 운영실에서 관리할 수 있습니다.- 포털은 Core Engine 세션 읽기/쓰기 요청에 actor header를 함께 전달합니다.
이 저장소에서 AI는 단순 문장 생성기가 아니라, 세션 기반 제작 흐름의 핵심 처리 계층입니다.
- GDD, 분석 계약, 계획 계약, 디자인 계약처럼 구조화된 결과 를 만들어야 합니다.
- 실제 게임 HTML과 퍼블리시용 텍스트처럼 자유 형식 결과 도 함께 다뤄야 합니다.
- 실행 중 특정 모델 경로가 흔들릴 때를 대비해 preview / pro / flash 경로를 순차 fallback 하도록 구성했습니다.
즉, Vertex는 한 번의 응답을 받기 위한 선택이 아니라, 구조화된 생성 + 텍스트 생성 + 세션 운영 fallback 을 한 흐름으로 맞추기 위한 구성입니다.
GET /healthzGET /api/v1/health
POST /api/v1/sessionsGET /api/v1/sessionsGET /api/v1/sessions/{session_id}DELETE /api/v1/sessions/{session_id}POST /api/v1/sessions/{session_id}/cancelGET /api/v1/sessions/{session_id}/conversationGET /api/v1/sessions/{session_id}/eventsPOST /api/v1/sessions/{session_id}/plan-draftPOST /api/v1/sessions/{session_id}/promptGET /api/v1/sessions/{session_id}/runs/{run_id}POST /api/v1/sessions/{session_id}/runs/{run_id}/cancel
POST /api/v1/sessions/{session_id}/issuesGET /api/v1/sessions/{session_id}/issues/latestPOST /api/v1/sessions/{session_id}/issues/{issue_id}/propose-fixPOST /api/v1/sessions/{session_id}/issues/{issue_id}/apply-fix
POST /api/v1/sessions/{session_id}/approve-publishPOST /api/v1/sessions/{session_id}/publishGET /api/v1/sessions/{session_id}/publish-thumbnail-candidatesDELETE /api/v1/games/{game_id}
전체 샘플은 .env.example 에 있습니다.
| 변수 | 설명 |
|---|---|
APP_ENV |
production 여부를 결정합니다. |
INTERNAL_API_TOKEN |
포털이 호출하는 내부 Bearer 토큰입니다. |
SUPABASE_URL / SUPABASE_SERVICE_ROLE_KEY |
세션, 메타데이터, 스토리지 접근에 사용합니다. |
SUPABASE_STORAGE_BUCKET |
퍼블리시 결과를 올리는 버킷입니다. |
PUBLIC_GAMES_BASE_URL |
공개 산출물 URL fallback 기준입니다. |
PUBLIC_PORTAL_BASE_URL |
퍼블리시 후 플레이 URL을 만들 때 사용합니다. |
VERTEX_PROJECT_ID / VERTEX_LOCATION |
Vertex 호출 기본 설정입니다. |
GEMINI_PRO_MODEL / GEMINI_FLASH_MODEL |
생성 작업 모델 이름입니다. |
GITHUB_TOKEN / GITHUB_ARCHIVE_REPO |
아카이브 저장소 커밋에 사용합니다. |
TELEGRAM_BOT_TOKEN / TELEGRAM_ALLOWED_CHAT_IDS |
출시 알림 전송에 사용합니다. |
PLAYWRIGHT_REQUIRED |
퍼블리시 전 런타임 검증 강제 여부입니다. |
HTTP_TIMEOUT_SECONDS / HTTP_MAX_RETRIES |
외부 호출 정책입니다. |
- 세션, 공개 메타데이터, 스토리지는 Supabase 를 사용합니다.
- 공개 포털은 Cloudflare Workers에서 제공되고, 이 저장소는 그 뒤에서 동작하는 백엔드 런타임을 담당합니다.
- 백엔드 배포는 AWS EC2 기반 원격 서버 에 SSH로 배포하는 흐름을 사용합니다.
- 퍼블리시된 공개 정적 결과물은 직접 이 저장소에 남기지 않고
iis-games-archive와 공개 스토리지 경로로 분리합니다.
현재 운영 경로 기준 주요 파일:
- 기본 스키마:
supabase/schema.sql - 세션 전환 기준 스키마:
supabase/session_first_big_bang.sql - 세션 협업/용량/퍼블리시 업그레이드:
supabase/session_async_collab_upgrade.sqlsupabase/session_capacity_upgrade.sqlsupabase/session_publish_copy_upgrade.sqlsupabase/app_role_creator_upgrade.sql
- 공개 카탈로그/자산/로그 보조 스키마:
supabase/public_catalog_upgrade.sqlsupabase/asset_registry.sqlsupabase/log_retention.sql
보존 중인 이력성 파일:
supabase/modular_gen_core.sqlsupabase/pipeline_v2_breaking.sqlsupabase/pipeline_v2_repair.sql
이 세 파일은 현재 기본 부트스트랩 경로에는 포함하지 않지만, 과거 운영 이력 추적과 복구 근거를 위해 저장소에 유지합니다.
ruff check app tests
mypy
python -m compileall -q app tests
PYTHONPATH=. pytest -q -s- CI:
.github/workflows/backend-ci.yml - 배포:
.github/workflows/deploy-backend.yml - 원격 배포 스크립트:
scripts/deploy_remote.sh - systemd 템플릿:
deploy/systemd/iis-core-api.service.tmpl - 운영 문서:
docs/ubuntu-arm-server-runbook.mddocs/scaffold-v3-migration.mddocs/telegram-operations.md
이 저장소는 포털 화면을 직접 배포하지 않습니다. 백엔드 API, 세션 처리, 퍼블리시 경로, 외부 연동이 이 저장소의 실제 배포 대상입니다.
- 비밀값은
.env에만 두고 커밋하지 않습니다. - 퍼블리시 결과물은 이 저장소에 직접 저장하지 않고
iis-games-archive로 보냅니다. - 포털이 사용하는 내부 API 계약은 유지하되, 운영 전용 자격증명은 코드에 넣지 않습니다.
MIT