RummiArena
프로젝트 종료 보고서
루미큐브 기반 멀티 LLM 전략 실험 플랫폼
프로젝트 기간: 2026-03-08 ~ 2026-05-10 (63일)
팀 구성: 에이전트 13명 | 커밋 750+ | 테스트 2,462건
작성: HUMAN (프로젝트 오너) | 2026-05-10
목 차
RummiArena — LLM 전략 실험 플랫폼 | 프로젝트 종료 보고서 2026-05-10
1
프로젝트 개요 및 팀 구성
2
시스템 아키텍처 및 기술 스택
3
개발 여정 — Sprint 1~7 + 핫픽스
4
AI 대전 실험 결과 (LLM 비교)
5
UI 아키텍처 — pendingStore SSOT
6
게임룰 SSOT — 77개 룰 체계
7
품질 · 보안 · CI/CD
8
운영 환경 및 동시접속 분석
9
기술 부채 및 향후 과제
10
프로젝트 최종 성과 및 마무리
프로젝트 개요
RummiArena — 루미큐브 기반 멀티 LLM 전략 실험 플랫폼
RummiArena — LLM 전략 실험 플랫폼 | 프로젝트 종료 보고서 2026-05-10
목적
• 루미큐브 게임 환경에서
• GPT, Claude, DeepSeek,
• Ollama(LLaMA) 등 다양한
• LLM의 전략 능력을
• 비교·실험하는 플랫폼
범위
• Human + AI 혼합 2~4인
• 실시간 멀티플레이 대전
• 웹 기반 게임 UI + 관리자
• K8s 기반 운영 환경
• 63일 / Sprint 7 + 핫픽스
성과
• 커밋 750+ | 문서 110+
• 테스트 2,462건 통과
• AI 최고 place rate 33.3%
• LLaMA 로컬 모델 25.6%
• CI/CD 17/17 ALL GREEN
팀 구성 — 에이전트 13명
RummiArena — LLM 전략 실험 플랫폼 | 프로젝트 종료 보고서 2026-05-10
HUMAN
프로젝트 오너
pm
프로젝트 매니저
architect
시스템 설계
go-dev
게임서버 (Go)
node-dev
AI 어댑터 (NestJS)
frontend-dev
프론트엔드 (Next.js)
frontend-dev-opus
프론트 페어코딩
devops
K8s/CI/CD
qa
테스트 품질관리
security
보안 엔지니어
ai-engineer
LLM 프롬프트
game-analyst
게임룰 SSOT
designer
UI/UX 설계
시스템 아키텍처
5개 서비스 + Redis + PostgreSQL — Kubernetes 운영
RummiArena — LLM 전략 실험 플랫폼 | 프로젝트 종료 보고서 2026-05-10
👤 사용자�(Browser)
👤 관리자�(Browser)
Frontend�(Next.js)
Admin Panel�(Next.js)
Game Server
Go / gin�gorilla/ws�GORM�Game Engine
AI Adapter
NestJS�TypeScript�Rate Limit
Ollama�LLaMA 3B
(로컬 LLM)
Redis 7�(게임 상태)
PostgreSQL 16�(영속 데이터)
Istio�Service Mesh
ArgoCD�(GitOps)
K8s (Docker Desktop) | Namespace: rummikub | 7개 서비스 Running | Helm 차트 5개
1. LLM 신뢰 금지
LLM 응답은 반드시 Game
Engine이 유효성 검증.
Invalid → 재시도 3회
→ 강제 드로우
4. GitOps
GitHub(SSOT) →
GitLab(mirror) →
ArgoCD → K8s 배포.
2. AI Adapter 분리
모든 LLM은 동일한
MoveRequest/Response
인터페이스로 통신.
모델 교체 가능.
3. Stateless 서버
게임 상태 = Redis.
Pod 재시작에도 게임
상태 유지.
GPT-5-mini�(OpenAI)
DeepSeek�V4-Pro
Claude�Sonnet 4
기술 스택
Frontend · Backend · AI · Infra · Quality
RummiArena — LLM 전략 실험 플랫폼 | 프로젝트 종료 보고서 2026-05-10
Frontend
• Next.js (React 18)
• TailwindCSS
• dnd-kit (드래그앤드롭)
• Framer Motion (애니메이션)
• next-auth (Google OAuth)
Backend
• Go / gin + gorilla/ws
• GORM (PostgreSQL)
• NestJS / TypeScript
• Redis 7 (Pub/Sub)
• JWT 인증 미들웨어
AI / LLM
• OpenAI gpt-5-mini
• Claude Sonnet 4 (thinking)
• DeepSeek V4-Pro (thinking)
• Ollama qwen2.5:3b (로컬)
• 프롬프트 v1~v9 진화
Infra / CI
• Docker Desktop K8s
• Helm 3 + ArgoCD
• GitLab CI (17 stages)
• Istio Service Mesh
• Trivy + SonarQube
개발 여정 — 63일 스프린트 타임라인
RummiArena — LLM 전략 실험 플랫폼 | 프로젝트 종료 보고서 2026-05-10
S1
기반 구축
03-08
~03-24
S2
AI 캐릭터
03-25
~04-04
S3
OAuth/WS
04-05
~04-14
S4
보안 P0
04-15
~04-22
S5
Rate Limit
04-23
~04-30
S6
재배치 UI
05-01
~05-07
S7
마라톤
04-25
~05-04
HF
핫픽스
05-01
~05-10
750+ 커밋
110+ 문서
2,462 테스트
CI/CD 17/17
LLM 4종 실험
Sprint 1~4 — 기반 구축부터 보안 강화까지
RummiArena — LLM 전략 실험 플랫폼 | 프로젝트 종료 보고서 2026-05-10
Sprint 1 (03-08~03-24) 기반 구축
• Game Engine 핵심 (그룹/런 검증, 초기 용융, 조커)
• REST API + WebSocket 구현
• K8s 5개 서비스 첫 배포 (Helm)
• JWT fail-fast, CVE 7건 수정
Sprint 2 (03-25~04-04) AI 캐릭터 + ELO
• AI 캐릭터 6종 × 3난이도 설계
• Turn Orchestrator + ELO 랭킹 시스템
• 관리자 대시보드 + 연습 모드
• 첫 LLM 프롬프트 v1 실험
Sprint 3 (04-05~04-14) OAuth + WS 재연결
• Google OAuth 2.0 K8s 통합
• WebSocket 재연결 + Redis Session
• Redis Timer 기반 턴 타임아웃
• Istio Service Mesh 도입 (game-server + ai-adapter)
Sprint 4 (04-15~04-22) 보안 P0 + DeepSeek
• 보안 5건: SQL injection, XSS, Admin API 인증
• WebSocket 인증 검증, dev-login 차단
• DeepSeek V4-Pro 통합 (23.1% place rate)
• 비용 한도: 일일 $20 / 시간당 $5
Sprint 5~7 + 핫픽스 — 고도화·마라톤·실측 완료
RummiArena — LLM 전략 실험 플랫폼 | 프로젝트 종료 보고서 2026-05-10
Sprint 5 (04-23~04-30) Rate Limit + CI
• Rate Limiting: REST Sliding Window / WS Fixed Window
• CI/CD 17/17 ALL GREEN 달성
• DeepSeek N=3 실험: 23.1% 확정
• 플레이테스트 88.6% 통과
Sprint 6 (05-01~05-07) 재배치 UI
• dnd-kit 드래그앤드롭 도입
• 재배치 4유형 UI 구현 (손→보드, 보드→보드 등)
• Agent Teams 13명 체제 본격화
• 핫픽스 4건 처리
Sprint 7 (04-25~05-04) 마라톤 마감
• pendingStore SSOT 아키텍처 (38개 파일, 13개 필드 제거)
• 게임룰 SSOT 71→77개 룰 확정
• SEC-A/B/C 완료 (govulncheck 25→0건)
• Phase D: 8.5 Story Point × 1.5시간 달성
핫픽스 세션 (05-01~05-10) 실측 완료
• BUG-CONFIRM-001: confirmBusy 영구 잠금 수정
• LLaMA v8(15.8%) → v9(25.6%) place rate 달성
• V-22 단독 승리 룰, 로비 ELO API 연동
• Jest 659 / AI Adapter 637 PASS 최종 확인
AI 대전 실험 결과 — LLM 4종 비교
place rate = 턴당 실제 타일 배치 성공 비율
RummiArena — LLM 전략 실험 플랫폼 | 프로젝트 종료 보고서 2026-05-10
33.3%
GPT�gpt-5-mini
v2 프롬프트�$0.10/1M
31.9%
DeepSeek�V4-Pro
thinking 모드�$0.039/게임
25.6%
Ollama�LLaMA 3B
로컬 CPU�무료
20.0%
Claude�Sonnet 4
thinking 모드�$1.11/게임
핵심 발견: Thinking 모드가 필수 — V4-Flash(비thinking) 0% vs V4-Pro(thinking) 31.9%
비용 대비 성능: DeepSeek $0.039/게임 vs Claude $1.11/게임 (28배 차이, 성능 비슷) | LLaMA 로컬 무료 25.6%
■ 실험 조건
N=3 self-play
(게임 3회 평균)
■ 평가 지표
• place rate:
턴당 배치 성공률
• fallback:
엔진 거부 후
강제 드로우
■ GPT v2 고정 이유
v4 프롬프트 실험 결과
reasoning_tokens
-25% 감소(Cohen d
=-1.46). 내부 RLHF가
외부 지시를 무시.
■ LLaMA 목표
v10에서 30%+ 도전
(ERR_NO_RACK_TILE
수정 시 가능 전망)
루미큐브
사전 계산 전략 알고리즘
LLaMA(Ollama) 프롬프트 진화 — v6→v9
3B 파라미터 CPU 추론 모델에게 루미큐브를 가르친 8주
RummiArena — LLM 전략 실험 플랫폼 | 프로젝트 종료 보고서 2026-05-10
v6
단순 질의
0%
모델이 단 한 번도�타일을 배치 안 함
v7
배치 판단 추가
~5%
낮은 성공률�개선 방향 탐색 중
v8
사전 계산 전략
15.8%
가능한 조합 목록화�→ 선택 방식 도입
v9
ERR 방어+조커
25.6%
ERR_NO_RACK_TILE 방어�+ 조커 지원 개선
v8 → v9 핵심 변화 (+9.8%p 향상)
• ERR_NO_RACK_TILE 방어: AI가 손패에 없는 타일을 제안할 때 즉시 감지·필터링
• 조커 지원 개선: 조커(JK1/JK2) 포함 조합 제안 능력 향상
• 결과: G1=25.6%(10/39), G2=28.2%(11/39), G3=23.1%(9/39)
— 평균 25.6%
• 25초 평균 응답 시간 (CPU 추론, 무료 로컬 실행)
"모델이 이해 못 하는게 아니라 내가 제대로
물어보지 못한 것" 이 믿음이 v7, v8, v9를 만들었다.
■ v10 GO 조건
• ERR_NO_RACK_TILE 완전 수정
• G1 T73 오류 제거 시 28%+ 가능
• 조커 확장 지원
■ 하드웨어
LG Gram 15Z90R
i7-1360P / RAM 16GB
WSL2 + Docker Desktop
qwen2.5:3b (3B param)
CPU only 추론
UI 아키텍처 — pendingStore SSOT
Sprint 7 핵심 설계: 38개 파일 영향, 13개 deprecated 필드 제거
RummiArena — LLM 전략 실험 플랫폼 | 프로젝트 종료 보고서 2026-05-10
L4 통신 계층
WebSocket / REST API�서버 ↔ 클라이언트 동기화
L3 도메인 로직
useTurnActions / canConfirmTurn�순수 함수 — 게임 규칙 적용
L2 pendingStore
단일 SSOT — 보드/손패 draft 상태�handleDragEnd 9개 분기 통합
L1 순수 UI
React 컴포넌트 — 상태 구독�표시만, 로직 없음
38개 파일 수정
13개 필드 제거
9개 분기 통합
단일 SSOT
■ 이전 아키텍처 문제
• gameStore + pending Store 두 곳에 상태 분산
• 동일 데이터 13개 필드 중복 관리
• drag 이벤트 처리 로직 컴포넌트에 혼재
■ pendingStore 개선
• draft 단일 SSOT로 보드+손패 상태 통합
• handleDragEnd 9개 분기를 한 곳에서 처리
• useTurnActions가 pendingStore 기반
순수 함수로 재설계
■ 핵심 원칙
"상태는 한 곳에서만 관리한다"
= pendingStore.draft
게임룰 SSOT — 77개 룰 체계
55-game-rules-enumeration.md 단일 기준점 — 코드 · 테스트 · UX가 같은 문서를 봄
RummiArena — LLM 전략 실험 플랫폼 | 프로젝트 종료 보고서 2026-05-10
V- 유효성 검증
22개
그룹/런 조건, 초기 용융�30점, 조커 규칙, V-22�단독 승리 룰 등
UR- UI 룰
40개
드래그앤드롭 행동 36개�피드백 색상 규칙�타이머 16개 지점
D- 드로우/패널티
9개
Human=3장, AI=1장�패널티 B안 확정�타임아웃 강제 드로우
INV-무효화
6개
잘못된 배치 무효�ERR_NO_RACK_TILE�재시도 최대 3회
활성 룰
77개
결번 룰
1개 (UR-39 폐기)
행동 매트릭스
21개 행동
상태 머신
12개 상태
UX 매핑
43-rule-ux-sync-ssot
게임룰 SSOT가 없으면 구현이 사양을 추월한다. 77개 룰은 코드와 문서가 같은 언어로 말하게 하는 장치다.
타임아웃 체인 — 10개 지점 SSOT
부등식 계약: script_ws > gs_ctx > http_client > istio_vs > adapter > llm_vendor
RummiArena — LLM 전략 실험 플랫폼 | 프로젝트 종료 보고서 2026-05-10
script_ws
1070s
E2E 테스트�스크립트
gs_ctx
1060s
Game Server�Context
http_client
1060s
HTTP 클라이언트�(Go)
istio_vs
1010s
Istio�VirtualService
adapter
1000s
AI Adapter�내부 한도
llm_vendor
~900s
LLM API�(모델별 상이)
1070 > 1060 > 1060 > 1010 > 1000 > ~900 → 정상 응답이 fallback으로 오분류되지 않음
2026-04-16 사고: 타임아웃 체인 부등식 위반
• 원인: adapter 내부 한도(700s) < istio_vs(1010s) — 계약 위반
• 증상: LLM이 정상 응답을 반환했지만 adapter가 먼저 타임아웃 → fallback으로 오분류
• 조치: adapter 1000s로 상향, 타임아웃 레지스트리 문서(41번) SSOT 확립
• 교훈: 한 값을 바꿀 때 반드시 10개 지점 전수 체크 (41번 문서 §3+§5)
SSOT: docs/02-design/41-timeout-chain-breakdown.md |
ConfigMap: AI_ADAPTER_TIMEOUT_SEC=1000
품질 지표 — 테스트 2,462건 최종 현황
RummiArena — LLM 전략 실험 플랫폼 | 프로젝트 종료 보고서 2026-05-10
Frontend�Jest
659
PASS
Go 단위�테스트
770
PASS
AI Adapter�(NestJS)
637
PASS
E2E�(Playwright)
396
PASS
총계: 2,462 PASS / 0 FAIL — 63일 전체 기간 FAIL 0건 유지
CI/CD 파이프라인
• GitLab CI 17 stages — ALL GREEN (Pipeline #113+)
• Trivy: Critical/High CVE = 0건 유지
• SonarQube: 3개 프로젝트 Quality Gate PASS
• Kaniko 빌드 → ArgoCD GitOps 자동 배포
• K8s 7개 서비스 Running (rummikub ns)
보안 성과
• SEC-A: Go 1.25.9 + go-redis v9.7.3 (vuln 25→0)
• SEC-B: Rate Limiting 강화
• SEC-C: 인증/인가 완전 분리 (OAuth=identity only)
• JWT fail-fast, dev-login 차단
• Critical/High CVE 63일 내내 0건
K8s 운영 환경 — 현재 배포 상태
namespace: rummikub | 7개 서비스 Running
RummiArena — LLM 전략 실험 플랫폼 | 프로젝트 종료 보고서 2026-05-10
frontend
rummikub-frontend:lobby-fix-e7222d0
Next.js 게임 UI
RUN
game-server
rummiarena/game-server:day5-8dc0999
Go 게임 엔진 + WS
RUN
ai-adapter
rummiarena/ai-adapter:v9-ollama-place-8631831
NestJS LLM 연동
RUN
ollama
ollama/ollama:latest (qwen2.5:3b PVC)
로컬 LLM
RUN
postgres
postgres:16
영속 데이터 DB
RUN
redis
redis:7-alpine
게임 상태 캐시
RUN
admin
rummiarena/admin:latest
관리자 대시보드
RUN
ConfigMap: AI_ADAPTER_TIMEOUT_SEC=1000 | GAME_MAX_TURNS_LIMIT=200 | Istio VS ai-adapter timeout=1010s
동시접속 분석 — 100~200명 시나리오
단일 노드(LG Gram) 기준 현실적 한계와 클라우드 확장 방안
RummiArena — LLM 전략 실험 플랫폼 | 프로젝트 종료 보고서 2026-05-10
A
Human Only
200명 가능
• game-server replicas=3
• 방당 2~4명 × 50~100방
• Redis/Postgres 충분
• CPU 병목 없음
B
API LLM 혼합
10게임 동시
• DeepSeek/GPT 100초 블로킹
• 비용 제약: ~$0.4/게임
• 10게임 × 4턴 = 동시 처리
• 40 LLM 호출/시
C
Ollama 로컬
2~3게임 한계
• CPU 단일 스레드 추론
• qwen2.5:3b 25초/턴
• 동시 처리 불가 (큐잉)
• GPU 있으면 10x 향상
D
클라우드(GKE)
$180~280/월
• 3× game-server pods
• GPU node (Ollama)
• 100~200명 안정 지원
• 예상 비용 $180~280/월
기술 부채 — 미해결 항목 및 향후 과제
프로젝트 종료 시점 식별된 부채 — 다음 버전 착수 시 우선 처리
RummiArena — LLM 전략 실험 플랫폼 | 프로젝트 종료 보고서 2026-05-10
HIGH
SEC-DEBT-001
next-auth v4→v5 이주 미완
frontend-dev
HIGH
SEC-DEBT-003
WebSocket 인증 토큰 갱신 미구현�(만료된 토큰 사용 가능성)
go-dev
MED
SEC-DEBT-004
Admin API Rate Limiting 미적용
node-dev
MED
SEC-DEBT-005
Refresh Token Rotation 미구현
go-dev
LOW
P3-3
DndContext GameRoom 이전 미완
frontend-dev
FUTURE
v10 Ollama
ERR_NO_RACK_TILE 수정 → 30%+ 목표
ai-engineer
식별된 부채는 반드시 타임라인과 처리 계획이 있어야 한다 — '나중에'는 없다
프로젝트 최종 성과 — 63일의 결산
RummiArena — LLM 전략 실험 플랫폼 | 프로젝트 종료 보고서 2026-05-10
750+
커밋
110+
문서
2,462
테스트 PASS
77
게임룰 SSOT
33.3%
AI 최고 배치율
17/17
CI/CD 스테이지
이 프로젝트가 증명한 것
• 13명의 에이전트가 63일 동안 단일 프로젝트를 완성할 수 있다
• 3B 파라미터 로컬 LLM도 프롬프트 엔지니어링으로 25.6% 배치율을 달성할 수 있다
• 아키텍처 설계가 선행될 때 Phase D처럼 8.5 Story Point를 1.5시간에 처리할 수 있다
RummiArena 프로젝트 종료
2026-03-08 ~ 2026-05-10 (63일)
13명의 에이전트가 함께 달렸습니다.�archinect의 설계력, go-dev의 안정성, frontend-dev의 실행력,�qa의 의심, ai-engineer의 끈기, 그리고 모든 팀원의 헌신이�750+ 커밋과 2,462 테스트를 만들었습니다.
"계획은 실행 시작 전까지만 유효하다"
"Merge Gate는 속도를 늦추지 않는다"
"데일리 로그와 세션 로그가 기억을 대체한다"
— pm 최종 회고 中 — RummiArena 2026-05-10
【별첨】
RummiArena 운영 이관 계획
Operations Handover Plan
현재 운영 환경 현황 · 이관 절차 · 장애 대응 · 스케일링 방안
A-1 현재 운영 환경 아키텍처
A-2 K8s 서비스 구조도
A-3 GitOps 배포 파이프라인
A-4 서비스 시작 순서 (의존성)
A-5 시크릿 관리 구조
A-6 일상 운영 절차
A-7 장애 대응 플로우
A-8 장애 유형별 대응 (1/2)
A-9 장애 유형별 대응 (2/2)
A-10 배포 절차 (GitOps/수동/롤백)
A-11 스케일링 전략
A-12 클라우드 이관 아키텍처 (GKE)
A-13 이관 전 체크리스트
A-14 이관 후 검증 절차
A-1 현재 운영 환경 아키텍처
Windows 11 + WSL2 + Docker Desktop K8s (단일 노드)
【별첨】RummiArena 운영 이관 계획 | 2026-05-10
별 첨
Windows 11 Host (LG Gram 15Z90R · i7-1360P · RAM 16GB · SSD)
WSL2 (Ubuntu 22.04 · 메모리 10GB)
Docker Desktop K8s | namespace: rummikub
사용자�Browser
관리자�Browser
Traefik�Ingress
:30000�:30001�:30080
Frontend�Next.js :3000
Admin�Next.js :3001
Game Server
Go / gin�gorilla/ws�:8080
AI Adapter
NestJS�:3001
OpenAI�GPT-5-mini
DeepSeek�V4-Pro
Claude�Sonnet 4
Ollama (K8s Pod)�qwen2.5:3b CPU
Redis 7�게임 상태 · 세션�:6379
PostgreSQL 16�영속 데이터 (ELO 등)�:5432
Istio Sidecar�game-server�ai-adapter
ArgoCD�GitOps�:8080
NodePort: 30000(FE) · 30001(Admin) · 30080(GS) · 30081(AI) · 30432(PG) | Helm 차트 5개
A-2 K8s 서비스 구조도
namespace: rummikub | Deployment · Service · PVC · ConfigMap · Secret
【별첨】RummiArena 운영 이관 계획 | 2026-05-10
별 첨
Deployment
Service (NodePort)
Volume/Secret
이미지 태그
frontend
ClusterIP :3000�NodePort 30000
Secret: nextauth�google-oauth
lobby-fix-e7222d0
admin
ClusterIP :3001�NodePort 30001
Secret: nextauth�google-oauth
latest
game-server
ClusterIP :8080�NodePort 30080
ConfigMap: main�Secret: db, llm
day5-8dc0999
ai-adapter
ClusterIP :3001�NodePort 30081
ConfigMap: main�Secret: llm-api
v9-ollama-place-8631831
postgres
ClusterIP :5432�NodePort 30432
PVC: 5Gi�Secret: db-secret
postgres:16-alpine
redis
ClusterIP :6379�(내부 전용)
PVC: 1Gi�(선택)
redis:7-alpine
ollama
ClusterIP :11434�(내부 전용)
PVC: 10Gi�(모델 파일)
ollama/ollama:latest
ConfigMap: AI_ADAPTER_TIMEOUT_SEC=1000 GAME_MAX_TURNS_LIMIT=200 OLLAMA_PROMPT_VARIANT=v9-ollama-place USE_V2_PROMPT=true
A-3 GitOps 배포 파이프라인
코드 변경 → GitHub(SSOT) → GitLab(Mirror) → CI 17단계 → ArgoCD → K8s
【별첨】RummiArena 운영 이관 계획 | 2026-05-10
별 첨
개발자
GitHub (SSOT)
GitLab CI
(17 Stages)
ArgoCD
K8s Cluster
git push�origin main
GitHub�SSO Pull
GitLab Mirror�(자동 동기화)
lint�test
build�(Kaniko)
scan�Trivy+SQ
deploy�Helm
verify�E2E
ArgoCD�(Helm sync)
K8s Deployments → 롤링 업데이트 → 헬스체크 통과 → 완료
■ CI 17단계 요약
1. Static Analysis (lint)
2. Unit Test (Go/Jest)
3. Integration Test
4. Build (Kaniko)
5. Trivy 보안 스캔
6. SonarQube 품질
7. Helm template 검증
8. K8s 배포
9~17. E2E, 성능, 알림
■ GitOps 원칙
• GitHub = 단일 SSOT
• GitLab = CI 실행 미러
• ArgoCD = 배포 게이트
• 수동 kubectl apply
= 금지 (긴급 시 예외)
■ 롤백
kubectl rollout undo
deployment/{svc}
-n rummikub
【별첨】RummiArena 운영 이관 계획 | 2026-05-10
A-4 서비스 시작 순서 — 의존성 다이어그램
DB → Cache → LLM → Backend → Frontend 순서 준수 (역순 종료)
【별첨】RummiArena 운영 이관 계획 | 2026-05-10
별 첨
1
PostgreSQL�(DB 레이어)
:5432
helm install postgres�대기 30초 + wait pod ready
2
Redis�(캐시 레이어)
:6379
helm install redis�wait pod ready
3
Ollama�(로컬 LLM)
:11434
helm install ollama�대기 60초 + 모델 pull
4
Game Server�(백엔드)
:8080
helm install game-server�AutoMigrate DB
5
AI Adapter�(LLM 브릿지)
:3001
helm install ai-adapter�LLM 키 확인
6
Frontend�(웹 UI)
:3000
helm install frontend�브라우저 접속 가능
7
Admin�(관리 UI)
:3001
helm install admin�관리자 접속 가능
의존성 관계도
PostgreSQL
Redis
Ollama
Game Server
AI Adapter
Frontend
Admin
A-5 시크릿 관리 구조
5개 K8s Secret — 이관 시 반드시 백업 후 신규 환경에 재등록
【별첨】RummiArena 운영 이관 계획 | 2026-05-10
별 첨
google-oauth-secret
• GOOGLE_CLIENT_ID
• GOOGLE_CLIENT_SECRET
발급처
Google Cloud Console�→ APIs & Services�→ OAuth 2.0 Client IDs
이관 주의사항
• console.cloud.google.com
• 새 환경 redirect URI 등록 필요
• http://localhost:30000/api/auth/callback/google
nextauth-secret
• NEXTAUTH_SECRET
• NEXTAUTH_URL
발급처
openssl rand -base64 32�→ 랜덤 생성 사용
이관 주의사항
• 각 환경마다 새로 생성
• NEXTAUTH_URL = 실제 접속 URL
• 예: http://localhost:30000
llm-api-keys
• OPENAI_API_KEY
• ANTHROPIC_API_KEY
• DEEPSEEK_API_KEY
발급처
각 플랫폼에서 발급�(선택: 최소 1개 필수)
이관 주의사항
• OpenAI: platform.openai.com
• Anthropic: console.anthropic.com
• DeepSeek: platform.deepseek.com
db-secret
• POSTGRES_PASSWORD
발급처
직접 설정�(복잡한 패스워드 권장)
이관 주의사항
• 이관 후 DB 비밀번호 동일 유지
• 또는 dump+restore 후 재설정
• PVC 이관 시 동일 값 사용
kakao-secret
• KAKAO_REST_API_KEY
발급처
카카오 개발자 센터�(선택 — 알림 기능용)
이관 주의사항
• 없어도 시스템 동작
• 카카오톡 알림만 비활성화
• developers.kakao.com
백업: kubectl get secret {이름} -n rummikub -o yaml > backup-{이름}.yaml ⚠️ 평문 저장 — 보안 주의
A-6 일상 운영 절차
일일 점검 5항목 · 주간 유지보수 · API 비용 모니터링
【별첨】RummiArena 운영 이관 계획 | 2026-05-10
별 첨
매일 점검 (Daily Check)
1
전체 Pod 상태
kubectl get pods -n rummikub
2
에러 로그 확인
kubectl logs deployment/game-server --since=1h | grep error
3
AI Adapter 타임아웃
kubectl logs deployment/ai-adapter --since=1h | grep timeout
4
Redis 메모리
redis-cli INFO memory | grep used_memory_human
5
API 비용 현황
curl localhost:30080/admin/stats/ai
주간 유지보수 (Weekly)
✓ PostgreSQL 백업 (pg_dump)
✓ 30일 이상 완료된 게임 삭제
✓ Docker 이미지 정리 (prune)
✓ Trivy 보안 스캔 결과 확인
✓ LLM API 잔액 확인
✓ K8s 이벤트 로그 검토
API 비용 모니터링 구조
AI Adapter�비용 집계
일일 한도�$20
사용자 한도�$5/시간
초과 시�요청 차단
모델별 비용: DeepSeek $0.039/게임 | OpenAI GPT-5-mini 가변 | Claude Sonnet 4 $1.11/게임 | Ollama 무료
�Admin API: GET /admin/stats/ai → today_cost_usd / daily_limit_usd / model_breakdown
A-7 장애 대응 플로우차트
장애 감지 → 원인 분류 → 유형별 대응 → 복구 확인 → 사후 기록
【별첨】RummiArena 운영 이관 계획 | 2026-05-10
별 첨
장애 감지
Pod 상태 확인�kubectl get pods -n rummikub
Pod�Running?
Running
로그 분석�(에러 패턴 확인)
Not Ready
kubectl rollout restart�deployment/{svc}
서비스�종류?
frontend
game-server
ai-adapter
DB/Redis
→ A-8 슬라이드 참조
→ A-8 슬라이드 참조
→ A-8 슬라이드 참조
→ A-9 슬라이드 참조
복구 확인: curl :30080/health�+ kubectl get pods
사후 기록: work_logs/incidents/
A-8 장애 유형별 대응 (1/2)
frontend 접속 불가 · game-server 오류 · ai-adapter 응답 없음
【별첨】RummiArena 운영 이관 계획 | 2026-05-10
별 첨
1. frontend 접속 불가 (http://localhost:30000)
증상:
• 브라우저 ERR_CONNECTION_REFUSED
• 흰 화면 또는 로딩 무한 대기
대응 순서:
1. kubectl get pod -n rummikub -l app=frontend
2. kubectl logs -n rummikub deployment/frontend --tail=50
3. kubectl describe pod -n rummikub -l app=frontend
4. kubectl rollout restart deployment/frontend -n rummikub
5. kubectl rollout status deployment/frontend -n rummikub # 완료 대기
⚠ NEXTAUTH_URL이 실제 접속 URL과 다르면 OAuth 로그인 실패 발생
2. game-server API 실패 / WebSocket 연결 불가
증상:
• API 호출 시 502/503 응답
• WebSocket onclose 즉시 발생
대응 순서:
1. kubectl describe deployment game-server -n rummikub
2. kubectl exec -n rummikub deployment/game-server -- env | grep -E 'DB_|REDIS_'
3. kubectl exec -n rummikub deployment/game-server -- curl localhost:8080/health
4. kubectl rollout restart deployment/game-server -n rummikub
5. kubectl logs -n rummikub deployment/game-server --since=5m | grep -i error
⚠ DB 연결 실패 시 game-server 재시작 전 postgres/redis 상태 먼저 확인
3. ai-adapter 응답 없음 (AI 차례 멈춤)
증상:
• AI 차례에서 1000초 대기 후 강제 드로우
• timeout 로그 반복
대응 순서:
1. kubectl logs -n rummikub deployment/ai-adapter --tail=100 | grep -E 'error|timeout|INVALID'
2. kubectl get secret llm-api-keys -n rummikub -o jsonpath='{.data.OPENAI_API_KEY}' | base64 -d
3. kubectl exec -n rummikub deployment/ollama -- ollama list # Ollama 모델 확인
4. kubectl rollout restart deployment/ai-adapter -n rummikub
5. # LLM API 키 만료 시: kubectl apply 로 시크릿 재등록 후 재시작
⚠ Ollama가 응답 없으면 ollama 재시작 → qwen2.5:3b pull 재실행 필요
A-9 장애 유형별 대응 (2/2)
PostgreSQL 연결 실패 · Redis 장애 · 전체 시스템 재시작 순서
【별첨】RummiArena 운영 이관 계획 | 2026-05-10
별 첨
4. PostgreSQL 연결 실패 (로그인 불가 · 방 목록 오류)
대응 순서:
1. kubectl get pod -n rummikub -l app=postgres
2. kubectl exec -n rummikub deployment/postgres -- psql -U rummikub -c 'SELECT 1;'
3. kubectl get pvc -n rummikub # PVC 마운트 상태 확인
4. kubectl rollout restart deployment/postgres -n rummikub # PVC 보호로 데이터 유지
⚠ PVC 삭제하면 DB 데이터 전체 손실. 재시작만으로 복구 안 되면 백업 복원 절차 진행
5. Redis 장애 (게임 상태 손실 · 타이머 오작동)
대응 순서:
1. kubectl exec -n rummikub deployment/redis -- redis-cli PING # PONG 확인
2. kubectl exec -n rummikub deployment/redis -- redis-cli DBSIZE # 키 수 확인
3. kubectl rollout restart deployment/redis -n rummikub
4. # 주의: 재시작 시 진행 중인 게임 상태 손실. 사용자에게 사전 공지 필요
⚠ Redis 재시작 시 현재 진행 중인 게임은 모두 중단됨. 영속 데이터(DB)는 영향 없음
6. 전체 시스템 재시작 순서 (의존성 순서 준수)
postgres�(30초 대기)
redis�(5초 대기)
ollama�(5초 대기)
game-server�(5초)
ai-adapter�(5초)
frontend�admin
kubectl rollout restart deployment/{이름} -n rummikub → 각 단계 완료 후 다음 진행
최종 확인: kubectl get pods -n rummikub → 모든 Pod STATUS=Running, READY=1/1
A-10 배포 절차 — GitOps · 수동 · 롤백
정상: GitOps(권장) | 긴급: 수동 Helm | 문제: kubectl rollout undo
【별첨】RummiArena 운영 이관 계획 | 2026-05-10
별 첨
GitOps 배포 (정상 경로)
1. git push origin main
2. GitLab CI 17단계 자동 실행
(lint → build → scan → deploy → verify)
3. CI 통과 시 ArgoCD 자동 Sync
4. K8s Rolling Update 실행
5. 헬스체크 통과 → 배포 완료
확인: kubectl get application -n argocd
또는 ArgoCD UI: http://localhost:30087
권장 경로. 테스트 검증 후 배포
수동 Helm 배포 (긴급 시)
# values.yaml 이미지 태그 수정 후:
helm upgrade {svc} helm/charts/{svc} \
-n rummikub \
--set image.tag=새태그
# 배포 진행 확인
kubectl rollout status \
deployment/{svc} -n rummikub
※ CI/CD 우회 — 보안 스캔 미실행
CI 없이 직접 배포. 긴급 패치 시만 사용
롤백 (문제 발생 시)
# 직전 버전으로 즉시 롤백
kubectl rollout undo \
deployment/{svc} -n rummikub
# 히스토리 확인 후 특정 버전 롤백
kubectl rollout history \
deployment/{svc} -n rummikub
kubectl rollout undo \
deployment/{svc} --to-revision=3
배포 후 문제 즉시 발견 시. ArgoCD sync 일시 정지 필요
A-11 스케일링 전략 — 현재 vs 확장
동시접속 100~200명 달성을 위한 단계적 확장 방안
【별첨】RummiArena 운영 이관 계획 | 2026-05-10
별 첨
현재 (단일 노드 · 즉시 가능)
game-server
×1 replica
ai-adapter
×1 replica
frontend
×1 replica
postgres
×1 (단일)
redis
×1 (단일)
ollama
CPU (25s/턴)
확장
목표 (100~200명 지원)
game-server
×3 replica (stateless 수평확장)
ai-adapter
×2 replica (동시 커넥션 2배)
frontend
×2 replica (부하 분산)
postgres
×1 (충분) / Cloud SQL 옵션
redis
×1 (충분) / Redis Cluster 옵션
ollama
GPU 노드 (3s/턴 · 10배 처리)
즉시 적용 가능한 명령어 (추가 노드 없이)
Step 1
game-server 3배 확장 (즉시 가능 — stateless)
kubectl scale deployment game-server -n rummikub --replicas=3
Step 2
ai-adapter 2배 확장
kubectl scale deployment ai-adapter -n rummikub --replicas=2
Step 3
Ollama CPU 리소스 상향
helm upgrade ollama helm/charts/ollama -n rummikub --set resources.limits.cpu=8
A-12 클라우드 이관 아키텍처 — GKE 기준
단일 노드 Docker Desktop K8s → Google Kubernetes Engine (월 $180~280)
【별첨】RummiArena 운영 이관 계획 | 2026-05-10
별 첨
현재: Docker Desktop K8s
단일 노드 (LG Gram 노트북)
frontend ×1
admin ×1
game-server ×1
ai-adapter ×1
postgres ×1
redis ×1
ollama (CPU) ×1
이관�(GKE)
목표: GKE Autopilot
General Node Pool (n2-std-4 × 2~5)
frontend ×2
admin ×1
game-server ×3
ai-adapter ×2
GPU Node Pool (n1-std-4 + NVIDIA T4)
ollama ×1 (GPU 추론 · 3s/턴)
공유 인프라
postgres ×1�(Cloud SQL 옵션)
redis ×1�(Memorystore 옵션)
주요 변경: NodePort → LoadBalancer | StorageClass: standard → standard-rwo | 도메인+HTTPS 설정 필요 | 월 $180~280
A-13 이관 전 체크리스트
인계 전 반드시 완료해야 하는 항목 — 체크 후 서명
별 첨
데이터 백업
☑
완료
PostgreSQL pg_dump 백업 실행 완료
☑
완료
백업 파일 크기 확인 (0B 아님)
☑
완료
Redis 진행 중 게임 없음 확인 (KEYS game:*)
☑
완료
백업 파일 외부 저장소 업로드
시크릿 이관
☑
완료
google-oauth-secret YAML 추출
☑
완료
nextauth-secret YAML 추출
☑
완료
llm-api-keys YAML 추출
☑
완료
db-secret YAML 추출
☑
완료
백업 파일 암호화 보관 (평문 주의)
이미지 확보
☑
완료
DockerHub rummiarena/* 이미지 접근 확인
☑
완료
로컬 이미지 tar 추출 또는 DockerHub push
☑
완료
GitLab CI 재빌드 가능 여부 확인
문서 인수인계
☑
완료
운영자 매뉴얼 전달 (06-operations/10번)
☑
완료
사용자 매뉴얼 전달 (06-operations/11번)
☑
완료
운영환경 구성 가이드 전달 (12번)
☑
완료
시크릿 값 별도 보안 채널 전달
신규 환경 검증
☐
신규
kubectl get nodes → Ready 확인
☐
신규
7개 서비스 모두 Running 확인
☐
신규
curl :30080/health → ok 응답
☐
신규
브라우저 게임 접속 + AI 대전 1회 테스트
【별첨】RummiArena 운영 이관 계획 | 2026-05-10
A-14 이관 후 검증 절차
신규 환경에서 서비스 정상 동작 최종 확인 — 7단계 검증
【별첨】RummiArena 운영 이관 계획 | 2026-05-10
별 첨
1
전체 Pod 상태 확인
kubectl get pods -n rummikub
→ 모든 Pod STATUS=Running, READY=1/1
2
게임 서버 헬스체크
curl http://localhost:30080/health
→ {"status":"ok","redis":"connected","db":"connected"}
3
AI Adapter 헬스체크
curl http://localhost:30081/health
→ {"status":"UP"}
4
브라우저 게임 접속
http://localhost:30000 접속 → Google OAuth 로그인
→ 로그인 성공 · 로비 화면 표시 · ELO 순위 로드
5
방 생성 + AI 대전 테스트
방 생성 → DeepSeek AI 추가 → 게임 시작 → 5턴 진행
→ AI가 정상 배치 · 타이머 동작 · 점수 갱신
6
보안 스캔
GitLab CI 파이프라인 실행 → Trivy 스캔
→ Critical/High CVE = 0건
7
DB 백업 테스트
kubectl exec deployment/postgres -- pg_dump -U rummikub rummikub | wc -l
→ 0보다 큰 숫자 → 백업 가능
검증 명령어 / 절차
기대 결과 (PASS 기준)
7단계 모두 PASS → 이관 완료 선언 | FAIL 항목 발생 시 A-8/A-9 장애 대응 절차 참조