AI를 어린아이처럼 지게 만든 게임 개발기
Gemini AI를 활용한 어린이 추리 게임 'Save the Sun' 개발 배경 설명
AI 모델의 승리가 아닌, 인간 플레이어의 승리를 위한 난이도 조절 및 '패배' 유도 방식 소개
SvelteKit, TypeScript 기반의 아키텍처와 Cloud Run 배포, Google AI SDK 활용 내역 공유
음성 인터페이스 및 데이터 미저장 정책(Zero-Retention Policy) 적용으로 사용자 경험 강화
AI의 '패배'를 위한 의도적 난이도 조절
본 게임은 AI 모델(Gemini)이 승리하는 것이 아닌, 어린이 플레이어가 이길 수 있도록 의도적으로 난이도를 조절하는 데 중점을 둠. 이를 위해 gemini-3.5-flash 모델은 플레이어의 질문 해석(Oracle)에 사용하고, gemini-3.1-flash-lite 모델은 AI 상대(Sköll) 역할에 사용하여 사고 예산(Thinking Budget)을 낮춤.
모델 티어(Model Tier) 분리: Oracle은 복잡한 자연어 이해를 위해 고성능 모델을, Sköll은 페르소나 구현 및 쉬운 패배를 위해 저성능 모델을 사용함.
시스템 지침(System Instructions) 조정: Sköll의 프롬프트는 '금지 목록' 대신 '어린이의 행동'을 명시하여 긍정적 프레이밍(Positive Framing)으로 유도함.
결과적으로 AI는 최적화된 솔버(Solver)가 아닌, 인간적인 실수를 하는 상대처럼 작동하여 게임의 재미를 높임.
데이터 미저장 정책(Zero-Retention Policy)과 보안 아키텍처
이 게임은 데이터 미저장 정책(Zero-Retention Policy)을 철저히 준수하여 사용자 개인 정보를 수집하지 않음. 세션은 HTTPOnly 쿠키에 저장된 불투명한 UUID로 관리되며, 계정이나 영구적인 사용자 데이터는 일절 저장하지 않음.
비밀 정보(Secret)의 서버 측 엄격 관리: 게임의 핵심 비밀(정답)은 서버를 떠나지 않으며, 응답, 클라이언트 번들, 공개 보드 시드 어디에도 노출되지 않음.
Gemini API 키 보안: Gemini API 키는 서버 측 전용으로 Google Secret Manager에 안전하게 보관됨.
엔진(Engine)의 역할: 모든 게임 로직과 규칙 검증은 엔진이 담당하며, Gemini는 오직 플레이어의 입력을 해석하는 역할만 수행하여 데이터 격리 아키텍처(Data Isolation Architecture)를 강화함.
Gemini 기반의 자연어 이해 및 구조화 쿼리 변환
플레이어의 자유로운 자연어 질문을 게임 엔진이 이해할 수 있는 구조화된 쿼리(Structured Query)로 변환하는 것이 Oracle의 핵심 역할임. Gemini는 플레이어의 의도를 파악하여 단일 쿼리로 변환하거나, 이해할 수 없는 경우 명확한 거부 메시지를 반환함.
쿼리 해석 및 검증: Gemini가 생성한 쿼리는 `parseQuery` 함수를 통해 다시 한번 검증되며, 유효하지 않은 쿼리는 거부 처리됨.
평가 코퍼스(Evaluation Corpus) 활용: Gemini의 자연어 이해 능력을 평가하기 위해 고정된 질문 세트를 사용하여 정확도를 측정하고, 90% 분류 정확도 및 거부 시 비밀 정보 누출 제로를 목표로 함.
음성 입력 지원: 음성 인식 결과도 동일한 파이프라인을 거쳐 구조화된 쿼리로 변환되어, 음성 인터페이스가 게임 플레이를 방해하지 않도록 설계됨.
SvelteKit과 TypeScript 기반의 아키텍처 및 CI/CD
게임은 Svelte 5와 TypeScript를 사용하여 SvelteKit 프레임워크 위에서 구축되었으며, 단일 Cloud Run 서비스로 배포됨. @google/genai SDK를 통해 Gemini 모델과 연동함.
높은 테스트 커버리지: 30개 이상의 파일에 걸쳐 1,000개 이상의 테스트가 존재하며, 특히 엔진 로직(`engine.ts`, `queries.ts`)은 100% 라인 및 브랜치 커버리지를 강제함.
강화된 CI/CD 파이프라인: 모든 푸시마다 포맷, 린트, 타입 체크, 유닛 테스트, Playwright E2E 테스트, SonarQube, CodeQL 검사를 수행하며, 커버리지 기준 미달 시 빌드가 실패하도록 설정됨.
보안 및 무결성 검증: 비밀 정보 유출 시 CI가 실패하도록 테스트가 구성되어 있으며, Gemini API 키는 서버 측에서만 접근 가능함.
튜링 머신에서 영감을 받은 아키텍처와 게임 메커니즘
이 게임의 아키텍처는 앨런 튜링의 1939년 오라클 머신(Oracle Machine) 개념에서 영감을 받음. 결정론적 엔진이 가능한 모든 것을 처리하고, 해결할 수 없는 유일한 문제(인간의 모호한 문장 해석)에 대해서만 외부 블랙박스(Gemini Oracle)에 질의하는 방식임.
결정론적 엔진(Deterministic Engine): 게임의 모든 규칙, 상태, 비밀 정보를 소유하며 Gemini의 응답을 검증하고 게임 흐름을 제어함.
Gemini Oracle: 플레이어의 자연어 입력을 구조화된 쿼리로 변환하는 역할만 수행하며, 자체적으로 추론하거나 비밀 정보를 알지 못함.
알고리즘적 추리: 게임의 핵심 메커니즘은 24개의 후보 중 하나의 비밀을 찾는 코드 브레이킹(Code-breaking) 알고리즘이며, AI와 인간이 서로의 추리를 방해하며 경쟁하는 구조임.