1 of 35

RummiArena

프로젝트 종료 보고서

루미큐브 기반 멀티 LLM 전략 실험 플랫폼

프로젝트 기간: 2026-03-08 ~ 2026-05-10 (63일)

팀 구성: 에이전트 13명 | 커밋 750+ | 테스트 2,462건

작성: HUMAN (프로젝트 오너) | 2026-05-10

2 of 35

목 차

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

프로젝트 최종 성과 및 마무리

3 of 35

프로젝트 개요

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

4 of 35

팀 구성 — 에이전트 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 of 35

시스템 아키텍처

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

6 of 35

기술 스택

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

7 of 35

개발 여정 — 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종 실험

8 of 35

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

9 of 35

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 최종 확인

10 of 35

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

수정 시 가능 전망)

루미큐브

사전 계산 전략 알고리즘

11 of 35

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 추론

12 of 35

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

13 of 35

게임룰 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개 룰은 코드와 문서가 같은 언어로 말하게 하는 장치다.

14 of 35

타임아웃 체인 — 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

15 of 35

품질 지표 — 테스트 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건

16 of 35

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

17 of 35

동시접속 분석 — 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/월

18 of 35

기술 부채 — 미해결 항목 및 향후 과제

프로젝트 종료 시점 식별된 부채 — 다음 버전 착수 시 우선 처리

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

식별된 부채는 반드시 타임라인과 처리 계획이 있어야 한다 — '나중에'는 없다

19 of 35

프로젝트 최종 성과 — 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시간에 처리할 수 있다

20 of 35

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

21 of 35

【별첨】

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 이관 후 검증 절차

22 of 35

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개

23 of 35

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

24 of 35

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

25 of 35

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

26 of 35

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 ⚠️ 평문 저장 — 보안 주의

27 of 35

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

28 of 35

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/

29 of 35

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 재실행 필요

30 of 35

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

31 of 35

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 일시 정지 필요

32 of 35

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

33 of 35

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

34 of 35

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

35 of 35

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 장애 대응 절차 참조