🐍 Online 2P Snake — AI가 오케스트레이션한 실시간 멀티플레이 게임
이 문서는 특정 제품을 소개하는 글이 아니라, 실제로 동작하는 중간 규모 프로젝트를 AI 에이전트 오케스트레이션과 MWD 방식으로 개발한 과정을 기록한 케이스 스터디다. 아키텍처, 레이어 격리, 도구 체계, 자동화 프롬프트를 따라가며 이 방식이 실제 코드베이스에서 어떻게 작동하는지 보여준다. 게임(실시간 온라인 2인 스네이크)은 그 방법론을 드러내는 소재일 뿐이다.
브라우저에서 바로 즐기는 권위 서버 기반 실시간 온라인 2인 스네이크. 단순 게임을 넘어, AI 에이전트가 설계–구현–테스트–배포까지 스스로 오케스트레이션해 만든 20개 독립 저장소(MWD) 시스템이다. 최근 AI 상대(DL-AI) 트랙을 추가해, AI가 개발 과정뿐 아니라 제품 안(플레이 상대)에도 들어갔다.
- ▶ 플레이 (설치 불필요): https://snake.microwiseai.com
- 모드: 1P · 2P-로컬(키보드 1개) · 2P-온라인(권위 서버 · 매치메이킹 · 리더보드) · vs AI(규칙기반 난이도 + 심층강화학습 브레인 — AI 상대)
- 스택: TypeScript · Vite(PWA/Canvas) · Cloudflare Workers·Durable Objects·D1 · Firebase Auth · TensorFlow.js(DQN)
이 hub는 무엇인가
이 프로젝트는 모노레포가 아니라 MWD(Microwise Development) — 기능이 20개의 독립 GitLab 저장소(핵심·온라인 인프라 + 🤖 AI 상대 트랙)로 분리돼 있다. 이 hub 사이트는 전체를 한눈에 파악할 수 있도록:
- 20개 저장소의 소스를 한곳에 모아두고,
- 동시에 각 GitLab 원본 URL을 전부 명시하며(저장소 지도 참고),
- "어떻게 개발했나"(AI 오케스트레이션 + MWD) 를 문서로 설명한다.
왜 분리했나? → 레이어 격리를 publish 경계로 강제하기 위해서다. 그 결과가 각 저장소의 독립 커밋 히스토리에 감사 가능한 증거로 남아 있다(레이어 격리 증거 참고).
게임 방법
| 항목 | 내용 |
|---|---|
| 목표 | 먹이를 먹어 뱀을 키우고, 상대를 벽·몸 충돌로 유도 |
| 성장 | 먹이 섭취 → 1칸 성장 + 새 먹이 랜덤 생성 |
| 승패 | 머리가 벽/자기 몸/상대 몸 충돌 → 패배, 동시 충돌 → 무승부 |
| 조작 | P1(Green) W A S D · P2(Blue) ↑ ↓ ← → (온라인은 각자 자기 뱀) · 180° 즉시 회전 방지 |
| 설정 | 800×600 · 그리드 20px · 초기 길이 3 · tick 150ms |
어떻게 개발했나 — AI 오케스트레이션 × MWD
핵심 차별점: AI가 코드 자동완성 보조가 아니라, 프로젝트 전체를 스스로 운영했다.
TDA (Top-Down Agent) 오케스트레이션
- 매니저 세션
snake-mgr가 설계·태스크 분해·배포 판단을 맡고, 워커 세션들에 실제 구현을 위임. - 세션 간 메시징으로 태스크 전달·검증. 커밋 작성 주체도 AI 매니저 → 커밋 히스토리 자체가 AI 개발의 증거.
- 개발 규모: 총 40개 세션(매니저
snake-mgr1 + 워커 세션 39, 역할별 분화: core·engine·web·signaling·net·leaderboard·quickmatch·e2e·infra·deploy 등) · 20개 저장소 · 개발 시대 4개(E1 로컬 게임 2026-03 → E2 권위 서버 온라인 재구축 2026-06 → E3 2~4P 확장 2026-07 → E4 🤖 AI 상대(DL-AI) 트랙 2026-08), 상세는 레이어 격리 증거 · AI 상대. (세션·커밋 실측은 E1–E3 코어 빌드 기준 40세션·126커밋.)
MWD (Microwise Development)
- 설계-우선:
architecture/를 별도 저장소·SSOT로 두고 도메인/프로토콜 문서를 먼저 확정 후 구현. - 각 패키지 = 독립 저장소, 루트
.git없음, gitdot 네이밍(snake-game-2p.core…), glpkg 증분 배포(core 0.1.0→0.3.0 등),git-nested로 전체 감독. - DDD:
core는 프레임워크 독립 순수 도메인. 플러그블 네트코드:netcode-core계약 +raw/interpolated전략 교체.
유저 개입 최소 — 도구·프롬프트가 자동으로 MWD를 유도
"MWD로 해줘"라고 매번 지시하지 않는다. 세션 부팅 시 AI가 컨벤션 → 인프라 킷을 자동 해석해, repo 분리·gitdot·publish 경계·nested 관리 규약을 이미 로드한 상태로 개발한다.
- 자체 도구: glpkg(패키지 배포/설치/저장소 생성) · git-nested(중첩 repo 스캔) · cscan(커밋 히스토리) · mwd-deps(의존/영향도) · pkgfind(패키지 검색) · TDA 세션 도구(isesh·imessenger·smon·ilogsession).
- 프롬프트 킷(skit):
conventions→infra→project-structure·glpkg-package·git-nested·pkg-finder. - 상세: MWD 도구 & AI 자동화 프롬프트
AI 도구 & 프롬프트
- 사용 AI 도구: Claude Code (Anthropic Claude) 기반 TDA(매니저+워커) + 자체 MWD 도구 체계.
- 🛠️ AI 개발도구 데모 영상: TDA 세션 도구(isesh·imessenger·smon·ilogsession)를 실제로 운영하는 모습 — https://youtu.be/xO7QLipJWug (임베드는 MWD 도구 & AI 자동화 프롬프트 문서 참고).
- 주요 프롬프트/지시: 단발 프롬프트가 아니라 자동 주입되는 규약 킷 — 원문 발췌 및 전체는 MWD 도구 & AI 자동화 프롬프트 문서 참고.
- 대표 지시 예: "Each package = separate repo (required)", "Use gitdot syntax", "If git is not clean, make a conventional commit first, then glpkg publish".
외부 에셋 / 오픈소스 & 라이선스
- 프레임워크/런타임: Vite, TypeScript, Cloudflare Workers/Durable Objects/D1(wrangler), Firebase Auth SDK.
- 아트/사운드: 대부분 코드 렌더(Canvas) — 외부 이미지/사운드 최소.
- 패키지별 상세 의존성·라이선스는 각 저장소
package.json참조.
로컬 실행 / 재현
- 플레이는 설치 불필요: https://snake.microwiseai.com
- 소스 빌드(패키지별):
npm install && npm run build(web은npm run dev로 Vite 개발 서버). 백엔드는 Cloudflarewrangler로 배포. 상세는 각 저장소 README.
본 사이트는 Online 2P Snake 프로젝트의 통합 기술 문서 hub이며, 개발 전 과정은 AI 에이전트(snake-mgr)가 수행했습니다.