실기기(에뮬레이터) 스크린샷과 game.js/index.html 코드를 직접 확인해 만든 현재 상태 기준 진단. 기준: 쉬움·직관성, 그리고 그것이 리텐션·IAP로 이어지는가 · 2026-07-11
총평: 콘텐츠 밀도(미션 10+·설정 16개·기록 11개 지표·스토어 6개 섹션)는 인상적일 만큼 갖춰져 있다. 문제는 그 밀도를 다듬는 위계(hierarchy)가 부족하다는 점 — 화면마다 "똑같은 무게의 항목이 쭉 나열된 벽"이 반복되고, 정작 가장 중요한 순간(승리 직후)엔 핵심 버튼이 5개 다른 버튼 사이에 묻힌다. 그리고 배포된 실제 빌드에 개발자 치트 패널이 그대로 노출돼 있는 치명적 문제를 발견했다 — 이건 보고서 작성 중 스크린샷을 찍다가 실제로 확인한 사실이다.
🚨 최우선 — 지금 당장 고쳐야 할 것
CRITICAL개발자 갓모드 패널이 실배포 빌드에 그대로 노출됨
홈/플레이 화면 좌하단에 항상 떠 있는 🛠 아이콘을 눌러보니, 실기기에 설치된 현재 배포 버전 그대로 즉시 승리·게임오버 강제·아무 캐릭터나 직접 소환·전체 컬렉션 즉시 해제·+500골드 치트·전체 데이터 초기화까지 되는 전체 개발자 메뉴가 나왔다. 코드를 보면 원인이 명확하다:
const DEV = true; — 바로 위 주석에 "배포할 때 DEV = false 로 바꾸면 오프라인 PWA 캐시가 켜집니다"라고 직접 쓰여 있다. 즉 배포 직전 수동으로 바꿔야 하는 플래그를 깜빡한 것으로 보인다.
경제 파괴: 아무나 골드 무한 획득·전체 캐릭터 즉시 해제가 가능해, 가챠·스토어 IAP의 존재 이유(수집 욕구·희소성) 자체가 무너진다. 실제로 이번 진단 중 이 패널로 골드를 얻고 전체 화면을 둘러봤다.
안정성 위험: "초기화" 버튼 하나로 유저 스스로 전체 저장 데이터를 실수로 날릴 수 있다.
업계 전례: 2023년 Marvel's Spider-Man 2에서도 디버그 메뉴가 실수로 노출돼 논란이 됐던 사례가 있다 — 대형 스튜디오도 반복하는 실수이지만, 발견 즉시 고쳐야 하는 클래스의 버그라는 뜻이기도 하다.
권장 조치: 배포 전 DEV를 빌드 환경변수나 bump-version.ps1/make-ota-bundle.ps1 파이프라인에서 자동으로 false로 고정하는 검증 스텝 추가(사람이 매번 기억하지 않아도 되게) — 지금 막 만든 배포 검증 스크립트에 이 체크를 얹는 게 가장 안전하다.
HIGH마을 주민이 앱을 재시작할 때마다 전부 사라짐
홈 화면 스크린샷을 보면 마을(성·집 앞)에 걸어다니는 주민이 한 명도 없다. 코드를 보니 이유가 있었다 — 캐릭터는 owned(보유 목록)에 저장되지만, 마을에 실제로 "등장"한 주민(villagers 배열)은 어디에도 저장되지 않는다. 주민은 오직 세트 완성 순간의 가챠 연출로만 등장하고, 앱을 껐다 켜면 보유 캐릭터가 50개든 5개든 상관없이 마을은 매번 빈 마을로 시작한다.
"쏠리타운"이라는 이름과 정체성이 마을에 캐릭터들이 살아있다는 느낌에서 나오는데, 정작 그 느낌을 줄 수 있는 유일한 순간(앱을 여는 매 순간)에 화면이 비어 있다.
신규 유저는 원래도 캐릭터가 적어 마을이 휑한 게 당연하지만, 오래 플레이한 유저조차 앱을 열 때마다 매번 휑한 마을을 다시 본다는 게 핵심 문제 — 신규만이 아니라 전체 세션의 첫 화면 품질에 영향을 준다.
권장 조치: 앱 로드 시 owned 목록에서 몇 마리(예: 최대 6~8마리, 마을 정원 제한과 동일하게)를 뽑아 addVillagerDirect로 자동 스폰하는 로직을 boot 시퀀스에 추가. 코드에 이미 "마을 최대 8" 제한이 있으니 그 안에서 재활용만 하면 된다.
① 잘하고 있는 것
가챠 리빌 — 2버튼컬렉션 진행률스토어 — 시간제한 특가
가챠 리빌 화면이 이 앱에서 가장 잘 만든 화면이다 — 어두운 배경 위 스포트라이트+색종이 연출로 흥분감을 만들고, 버튼은 "다시 뽑기(100G)"·"OK" 딱 2개뿐. 다른 화면들이 이 화면의 절제된 버튼 구조를 벤치마크할 만하다.
컬렉션 진행률("2/12 세트", "5/51 캐릭터")이 화면 상단에 항상 보여 장기 목표가 명확하다.
"Hot Stuff" 시간제한 할인(카운트다운+취소선 가격)은 표준적이면서 효과적인 긴급성 장치.
유료 결제 옆에 항상 "광고 보고 무료로" 옵션을 나란히 배치 — 무과금 유저 배려와 광고 수익 둘 다 챙기는 F2P 정석 구조.
일관된 픽셀아트 톤이 15개 화면 전체에서 깨지지 않는다(설정 아이콘·캐릭터·재화 아이콘 전부 같은 팔레트·같은 굵기).
미션(일일 3개)과 마일스톤(장기 누적)을 분리해 "오늘 할 일"과 "장기 목표"를 구조적으로 나눈 설계 자체는 검증된 패턴.
② 리텐션에 직접 영향 — 승리 화면 CTA 과부하
현재 승리 화면 — 버튼 6개
실측: 승리 직후 화면에 위에서부터 ①오늘의 미션 보상 받기 ②광고보고 +20골드 ③무료선물 ④경품뽑기 ⑤Play Again ⑥Keep Watching ⑦공유 순서로 버튼 7개(탭 가능한 영역)가 세로로 쌓여 있다. 정작 핵심 순환 고리인 "Play Again"은 5번째에 있다.
근거: CTA를 여러 개 늘어놓지 않고 하나의 주(primary) 액션으로 좁히면 전환율이 최대 266%까지 오른다는 UX 리서치가 있다 — 반대로 지금처럼 비슷한 무게의 버튼이 여러 개면 "결정 피로(analysis paralysis)"로 이어져 사용자가 그냥 앱을 벗어나는 경우가 늘어난다.
제안: "Play Again"을 시각적으로 가장 크고 위에(1순위), 나머지(광고 보상들)는 톤 다운된 보조 버튼으로 묶어 접거나("더 받기 ▾" 아코디언), 최소한 1개만 강조색으로 남기고 나머지는 무채색 아웃라인 처리해 위계를 분리할 것을 권장.
"Free Gift"와 "Win a Prize!" 두 버튼이 이름만으로는 뭐가 다른지 구분이 안 된다 — 사용자 입장에서 둘 다 "공짜"처럼 읽혀 어느 걸 눌러야 할지 애매하다.
③ 리텐션에 직접 영향 — 정보 밀도는 높은데 위계가 없는 화면들
화면
실측
문제
제안
설정
3열×6행, 16개 타일이 전부 동일 크기
자주 쓰는 것(언어·오디오)과 거의 안 쓰는 것(크레딧·커뮤니티·개인정보)이 시각적으로 구분 안 됨
상단에 "자주 쓰는 설정" 3~4개만 크게, 나머지는 접히는 "더보기" 섹션으로 분리
기록
도넛차트 2개 + 동일한 스타일의 통계 행 11개 이상 연속 스크롤
"Wins Without Undo"·"Min Moves (Win)"처럼 하드코어 유저용 지표까지 전부 같은 비중으로 노출 — 귀엽고 캐주얼한 게임 톤과 안 맞는 스프레드시트 느낌
상위 3~4개(승률·최고점수·연승)만 카드로 강조, 나머지는 "상세 기록 보기" 뒤로
미션
완료 전 목표는 보상(+N골드)이 안 보이고, 완료된 것만 보상이 보임
플레이어가 "이걸 깨면 뭘 주는지" 미리 알 수 없어 목표 우선순위를 못 정함
진행 중 미션도 항상 "+N🪙" 아이콘을 목표 텍스트 옆에 상시 노출
④ IAP/수익화에 영향 — 스토어 화면 세부 문제
Featured Characters 헤더 위치
버그 확인: "Special Characters" 섹션 안의 3종 캐릭터(₩1,200 각각) 카드 아래에 "Featured Characters"라는 섹션 제목이 붙어있는데, 실제 화면에서는 제목이 상품 3개보다 아래에 렌더링된다. index.html을 보면 원인이 명확하다 — .store-feat-row(상품 목록)가 .store-sec-feat(제목) 요소보다 DOM 순서상 먼저 온다. 스토어의 다른 모든 섹션(Hot Stuff·Special Characters·Missions)은 제목이 먼저 오는데 이 섹션만 반대다.
제목 없이 갑자기 캐릭터 카드 3개가 먼저 나타나면, 사용자가 "이게 무슨 상품인지" 맥락 없이 마주치게 되고 — IAP 구매 결정에 필요한 최소한의 신뢰감(무슨 섹션인지 명확함)이 줄어든다. 코드 한 줄(두 div 순서 교체) 수준의 쉬운 수정.
"Prize Machine"(100G)·"Daily Gift" 두 카드에는 설명 문구가 아예 없다(바로 위 "Piggy Bank"·"Remove Ads"는 설명이 있음) — 뭘 주는지 모르는 상태에서 탭하게 되는데, 이게 "미스터리라서 기대되는" 방향인지 "설명이 빠진 미완성"인지 애매하다. 의도적 미스터리라면 최소한 아이콘 애니메이션이나 "?" 배지로 의도를 표시할 것을 권장.
⑤ 컬렉션 화면 — 가챠 미스터리 약화
컬렉션 화면에서 미보유 캐릭터도 이름이 이미 다 보인다("Breadog", "Cat", "Spider", "Duck Family"…). 대부분의 성공한 가챠 게임(원신 등)은 미공개 항목을 실루엣+물음표로 가리는데, 이 게임은 흑백 실루엣은 쓰지만 이름은 공개해버려서 "이게 뭘까?" 하는 궁금증의 절반이 이미 해소된 상태다. 이름을 가리는 게 정답은 아니지만(오히려 수집 목표를 명확히 하는 효과도 있음), 의도한 선택인지 확인이 필요 — 신비감을 원한다면 이름도 "???"로 가리는 걸 고려.
⑥ 쉬운데 효과 큰 수정 (Quick Win)
항목
문제
수정
노력
설정 > "Detail Items"
실제 기능은 "점수/시간/이동 표시 여부" 토글인데, i18n 라벨이 "Detail Items"(EN)/"세부항목"(KO)로 나가 있어 기능을 전혀 설명 못 함. index.html 원본 텍스트는 정확히 "Score/Time/Moves"인데 i18n이 이걸 덮어씀
i18n 키 detailItems의 값을 "Score/Time/Moves"·"점수·시간·이동"으로 교체(15개 언어)
1시간 이내
스토어 "Featured Characters" 헤더
섹션 제목이 콘텐츠 아래에 위치(DOM 순서 문제)
index.html에서 .store-sec-feat div를 .store-feat-row 위로 이동
조사 방법: 에뮬레이터(WebView, Chrome DevTools Protocol)로 현재 배포 빌드를 직접 조작해 홈·플레이·설정·컬렉션·미션·스토어·기록·승리·가챠리빌·갓모드 화면 스크린샷 확보 → www/game.js·index.html 코드 대조로 각 관찰의 원인(코드 위치)까지 확인. 외부 UX 리서치는 웹서치로 교차검증.
Ssoly Town · Magpies Studio · 내부 의사결정 문서 · noindex