총평: 출시 전 게임치고 완성도가 상당히 높다(가챠·미션·스토어·OTA·다국어 인프라까지 이미 구축). 다만 ①팀 규모 대비 과한 15개 언어 절반이 미번역 상태 ②6800줄 단일파일 구조 ③실제 사용자 손에 들어가기 전 마지막 검증(Play Console·iOS)이 전부 남아있음이 가장 큰 리스크다.
강점(Strengths)
✅ 완성도 높은 BM 인프라
- 실제 IAP 3종(광고제거·피기뱅크·캐릭터개별) + 신규 스타터팩까지 코드 레벨로 완비, Play Console 상품 등록만 남음
- 가챠·미션·업적·데일리선물·스토어까지 리텐션 루프가 이미 다 맞물려 있음(이번 세션에 7일 스트릭·위시리스트 배너 추가로 한층 강화)
✅ 결정론적 파이프라인 원칙
- CLAUDE.md에 명시된 "산출물 손대지 말고 스펙+스크립트로 재생성" 원칙이 실제로 아이콘·폰트·스프라이트 전반에 일관되게 적용됨 — 이후 유지보수 비용을 크게 낮춤
✅ 배포 파이프라인(이번 세션 신규 구축)
- 버전 스탬핑·OTA 번들·배포·검증·스모크테스트까지 전 과정 스크립트화 — 이제 "배포했는데 실제로 설치 안 됨" 클래스의 사고가 구조적으로 차단됨
✅ 일관된 아트 톤
- 테두리·베벨 없는 원칙(no-outline-art-rule)이 전 화면에 지켜짐, 귀여운 픽셀아트가 설정·미션·스토어까지 전부 같은 결로 이어짐
약점(Weaknesses) — 심각도순
① 15개 언어 중 상당수가 사실상 미완성. t(key) 함수가 I18N[lang][key]가 없으면 자동으로 영어로 폴백하는 구조라 화면이 안 깨지긴 하지만, 이번 세션에 새로 추가한 미션·스토어·설정 카테고리 라벨 등은 영어·한국어 두 언어에만 채워 넣었다. 즉 나머지 13개 언어 사용자는 이런 신규 문구를 전부 영어로 보게 된다. 15개 언어를 "지원"한다고 마케팅하기 전에 실제 커버리지 감사가 필요하다.
② game.js 단일 파일 ~6,800줄, 빌드 스텝·테스트 스위트 없음. 이번 세션 초반 PowerShell 인코딩 사고로 이 파일 전체가 손상됐을 때 복구가 극히 어려웠던 게 그 위험성의 실제 증거다(다행히 배포된 OTA 번들에서 복원 가능했지만, 그 백업이 없었다면 심각했을 것). 팀이 1인이라 지금은 버틸 만하지만, 공동작업자가 늘거나 파일이 더 커지면 이 구조 자체가 병목이 된다.
③ 성/시간/이동 등 온보딩 마찰. 신규 유저는 캐릭터 0개, 게임 규칙 설명 없이 바로 홈 화면(빈 하늘)에 던져진다. 튜토리얼·첫 승리 유도·초회 가챠 유도가 전무하다(리텐션 보고서에서 상세히 다룸).
④ 경제 밸런스 미검증. 골드 획득원(승리·미션·데일리선물·스타터팩)은 여러 개인데 골드 소모처(가챠·스토어)가 상대적으로 단순 — 장기 플레이 시 골드가 쌓이기만 하고 안 써질 위험(재화 인플레이션)을 밸런스 테스트로 검증한 흔적이 코드에 없음.
기회(Opportunities)
- 이미 만들어진 결정론 파이프라인 위에 계절 장식/캐릭터를 낮은 비용으로 계속 추가 가능(경쟁작 벤치마크 보고서 참고)
- 15개 언어 인프라 자체는 이미 갖춰져 있어, 번역만 채우면 글로벌 출시 확장 비용이 낮음
- Play Games Services(리더보드·업적·클라우드세이브) 코드가 이미 완성돼 있어 Play Console 설정만 하면 즉시 활성화 가능
위협/리스크(Threats)
| 리스크 | 근거 | 심각도 |
| 플랫폼 준비도 격차 | iOS는 Mac 필수+Swift 플러그인 미비(진동 등 일부 기능 iOS 미지원) — 안드로이드만 우선 출시 전제로 설계된 흔적 | 중간 |
| Play Console/스토어 등록 전 상태 | IAP enabled:false, EU 광고 동의(UMP) 미연결, 리더보드/업적 미설정 — 전부 "코드는 준비됐으나 계정 설정이 안 된" 상태 | 중간 출시 직전 반드시 처리 필요 |
| 단일 개발자 의존 | 전 파이프라인이 결정론적이라 유지보수는 쉽지만, 신규 기능 판단·아트 방향·BM 튜닝이 전부 한 사람(+Claude) 판단에 의존 — 외부 검증(플레이테스터·QA) 부재 | 높음 |
부록 — 근거 코드 위치
- i18n 폴백:
function t(key) { const d = I18N[settings.lang] || I18N.en; return d[key] != null ? d[key] : (I18N.en[key] != null ? I18N.en[key] : key); }
- IAP 비활성 상태:
www/billing-config.js enabled: false
- 결정론 파이프라인 표: 프로젝트 루트
CLAUDE.md "파이프라인 인벤토리" 표
Ssoly Town · Magpies Studio · 내부 의사결정 문서 · noindex