TigerDocu 개발기 · 1/3

TigerDocu 개발기 ① 게임보다 먼저 '심사 통과'를 목표로 잡았다

8분 분량조회 –

TigerDocu 는 N×N 격자에 호랑이를 놓는 논리 퍼즐이다. 규칙은 셋뿐이다.

  • 가로줄 하나에 호랑이 한 마리
  • 세로줄 하나에 호랑이 한 마리
  • 같은 색 영역 하나에 호랑이 한 마리 — 그리고 호랑이끼리는 대각선으로도 붙지 않는다

숫자도 계산도 없다. 니코리의 Star Battle 계열이고, LinkedIn 의 Queens 와 같은 규칙이다. 2026년 8월 28일에 첫 커밋을 했고, 10월 2일에 Google Play 에 나왔고, 11월 1일에 145개국으로 넓혔다.

TigerDocu호랑이 배치 논리 퍼즐 · 무료 · Android
Google Play 에서 받기

이 연재는 그 두 달 동안 무엇을 고민했는지에 대한 기록이다. 1편은 왜 이걸 만들었고 어떤 선을 그었나, 2편은 퍼즐을 어떻게 만드나, 3편은 Google Play 에 어떻게 냈나 다.

목적이 게임이 아니었다

2023년 11월 13일 이후에 만든 Google Play 개인 개발자 계정은 앱을 프로덕션(누구나 받을 수 있는 상태)에 올리기 전에 조건이 하나 붙는다.

비공개 테스트에 테스터 12명 이상이 14일 연속 참여해야 한다.

(처음엔 20명이었는데 2024년 12월에 12명으로 줄었다.) 이걸 넘기 전에는 아무리 잘 만든 앱도 내놓을 수 없다. 그래서 TigerDocu 의 첫 번째 목적은 “재미있는 게임” 이 아니라 “이 계정의 프로덕션 액세스를 얻는 것” 이었다.

목적이 이러니 결정 기준의 순서도 달라졌다.

  1. 심사에서 반려될 위험이 가장 적을 것
  2. 14일 동안 테스터가 계속 켤 이유가 있을 것
  3. 빨리 완성할 것

“시장 1위” 는 목록에 없었다. 전략도 단순했다. 부족한 버전이라도 먼저 올려서 14일 시계를 돌리고, 게임은 그 기간에 다듬는다. 실제로 첫 커밋 다음 날인 8월 29일에 1.0 을 비공개 테스트 검토에 넣었다.

왜 Star Battle 계열이었나

후보 장르를 놓고 따져 본 이유는 네 가지였다.

  • 장르 자체는 누구의 것도 아니다. 니코리 계열의 공개 장르라 규칙을 쓰는 데 법적인 문제가 없다. 앱이 저작권 문제로 내려가면 목적 자체가 무너지니 이게 1순위였다.
  • 수요가 이미 검증돼 있다. 같은 장르 1위 앱은 다운로드가 1,000만을 넘는다.
  • 개인 개발자가 같은 장르로 통과한 사례가 있다. 다운로드 1천, 스크린샷 4장짜리 앱도 스토어에 올라 있었다.
  • 3D 엔진이 필요 없다. 격자와 버튼뿐이라 웹 기술(React)로 충분하다.

대신 금지선을 정했다. 경쟁 앱의 이름, 캐릭터 그림, 레벨 배치, 스토어 문구는 가져오지 않는다. 구현도 보지 않고 처음부터 짠다.

경쟁 앱에서 찾은 빈틈 네 개

Play 한국 스토어에서 같은 장르 앱 세 개를 깔아 보고 리뷰를 읽었다. 재미있는 건 세 앱의 스토어 규칙 설명이 글자 하나까지 같았다는 점이다. 다른 건 껍데기(고양이냐 동물원이냐)뿐이었다. 리뷰에서 반복되는 불만은 이랬다.

빈틈 리뷰에서 본 말 TigerDocu 의 답
메모·가정 기능이 없다 “스크린샷 찍어서 따로 그려가며 풀어야 해요” (별 5개 리뷰) 가정 모드 — 틀려도 하트가 안 깎이는 연필 모드
난이도 곡선이 없다 “1340레벨인데 패턴이 비슷비슷” 솔버가 사람이 쓰는 기법 단계로 난이도를 잰다
광고가 많다 “광고 제거 상품도 없음” 처음엔 광고 0 (뒤에서 번복한다)
한국어가 어색하다 설명문에 중국어 “仔细” 가 섞여 있음 한국어로 직접 쓴다

가정 모드는 2편에서 다시 다룬다. 결과적으로 이 기능이 경쟁 앱과 가장 크게 갈리는 지점이 됐다.

스스로 건 제약

“반려 위험 최소화” 를 구체적인 규칙으로 바꾸니 이렇게 됐다.

하지 않는다 이유
인앱 결제 심사 항목이 늘어난다
로그인·회원가입 계정을 만들게 하면 계정 삭제 URL 을 요구받는다
닉네임·채팅·랭킹 사용자가 만든 콘텐츠(UGC)가 생기면 신고 기능이 의무가 된다
위치·카메라·저장소 권한 권한마다 왜 필요한지 소명해야 한다
게임 로직의 네트워크 통신 오프라인에서 완전히 돌아야 하고, 데이터 보안 양식도 단순해진다
13세 미만 대상 넣는 순간 가족 정책(Families) 심사를 받는다

적고 보니 이 제약 목록이 그대로 경쟁 앱과의 차별점이기도 했다. 조사한 앱 하나는 팬 사이트에서 “Privacy First” 를 내세우는데, 스토어의 데이터 보안 항목에는 위치·개인정보 수집과 제3자 공유가 적혀 있었다.

기술 스택: Capacitor 를 고른 이유

웹으로 만든 게임을 안드로이드 앱으로 감싸는 방법은 여러 가지다.

  • TWA(PWABuilder): 크롬 탭을 앱처럼 보이게 하는 방식이다. 웹사이트가 있어야 하고 오프라인에 약하다. “저품질 웹 래퍼” 로 반려된 사례도 있다.
  • Expo / React Native: 웹 프로젝트를 갈아엎어야 한다.
  • Capacitor: 웹 파일을 APK 안에 그대로 넣는다. 진짜 오프라인으로 돌고, 도메인도 호스팅도 필요 없다. → 이걸 골랐다.

에뮬레이터는 쓰지 않기로 했다. Play 의 내부 테스트 트랙에 올리면 몇 분 안에 내 폰에 깔린다. 그게 곧 실기기 테스트 환경이다.

“권한 0” 이라고 말할 수 있나

처음엔 “권한을 하나도 요청하지 않는 앱” 이라고 쓸 생각이었다. 그런데 빌드된 APK 의 매니페스트를 열어 보니 Capacitor 가 INTERNET 권한을 기본으로 넣고 있었다. 정리하면 이렇다.

  • INTERNET 은 normal 권한이라 사용자에게 팝업도 고지도 없다.
  • Play 의 데이터 보안 양식은 권한이 아니라 실제로 무엇을 수집·전송하는지를 묻는다.
  • 빼면 안 된다. Capacitor 는 로컬 파일을 내부 웹 서버처럼 서빙하기 때문에, 빼면 기기에서 흰 화면이 뜰 수 있다. 그리고 그건 실기기 없이는 확인할 방법이 없다.

그래서 문구를 “위험 권한 요청 없음” 으로 바꿨다. 사소해 보여도, 스토어 문구와 실제가 다르면 그것 자체가 정책 위반이 된다.

제약은 하나씩 풀렸다

솔직히 말하면 위의 제약은 끝까지 지켜지지 않았다. 무엇을 왜 풀었고 무엇을 끝까지 지켰는지가 이 프로젝트에서 가장 많이 고민한 부분이다.

광고 (8월 29일) — 그날 오전 커밋에는 광고를 넣지 않는 이유가 네 개 적혀 있다. 데이터 보안이 “수집 안 함” 으로 끝나지 않는다. Android 13 부터 광고 ID 권한(AD_ID)을 선언해야 한다. 오프라인이라는 차별점이 흐려진다. 테스터 12명으로는 수익이 어차피 0이다. 그래서 “자리만 비워 두고 프로덕션 액세스를 받은 뒤 켠다” 고 정했다. 그리고 몇 시간 뒤, 결정을 뒤집고 AdMob 배너를 넣었다. 대신 원칙 하나는 남겼다. 광고를 못 불러오는 건 정상 상황이다. 오프라인이면 광고 자리를 접고 게임은 그대로 돈다.

사용 통계 (9월 10일) — Firebase Analytics(GA4)를 넣었다. Play Console 은 설치·삭제·유지율까지만 보여 준다. 정말 알고 싶었던 건 사람들이 몇 차에서 그만두는가 였다. 개인을 식별하는 값은 보내지 않는다.

순위 (9월 10일) — “랭킹 없음” 을 조건부로 풀었다. 닉네임 없이 내 등수만 보여 주면 화면에 남이 쓴 글자가 하나도 뜨지 않는다. UGC 가 없으니 신고 기능 의무에 걸리지 않는다. 신원은 앱이 처음 실행될 때 만드는 무작위 문자열 하나뿐이고, 서버는 IP 를 저장하지 않는다.

보상형 광고 (10월 8일) — 힌트와 되돌리기를 “지갑” 에 담고, 지갑이 비면 광고를 한 편 보고 채우게 했다. 사용자가 직접 “광고 보기” 를 눌러야 뜨고, 끝까지 봐야 채워진다.

끝까지 지킨 것 — 결제, 로그인, 위험 권한, 닉네임·채팅, 그리고 게임 자체는 오프라인에서 완전히 돈다 는 원칙. 이 다섯 개를 지켰기 때문에 이후의 심사가 단순하게 끝났다.

이모지에서 직접 그린 호랑이로

처음 호랑이는 🐯 이모지였다. 금방 버렸다. 이유는 둘이다.

  • 안드로이드 기기마다 이모지 글꼴이 달라서, 같은 판이 폰마다 다르게 보인다.
  • 이모지는 이 앱만의 얼굴이 될 수 없다.

그래서 SVG 로 직접 그렸다. 기준은 아기 얼굴의 비율(큰 머리, 큰 눈, 작은 코)이었다. 처음 그린 건 볼 줄무늬가 눈썹처럼 보이고 코가 커서 울상이었다. 9월 7일에는 픽셀아트 생성 모델로 뽑은 그림을 참고해 다시 그렸다. 살짝 돌린 얼굴은 30px 칸 안에서 그냥 비뚤어져 보여서 정면으로 폈다. 9월 11일에는 승리 그림에서 머리만 잘라 칸·아이콘·파비콘을 통일했는데, 64px 남짓을 키운 거라 “못생겼다” 는 말을 들었다. 같은 날 오후에 처음부터 머리로 뽑은 그림으로 바꿨다.

차수 모드 화면 가정 모드, 다크 테마

이름도 정리했다. 홈 화면에는 “호랑이 영역”, 스토어에는 “TigerDocu” 로 갈라져 있던 것을 TigerDocu 하나로 맞췄다. 패키지명(com.handfirst.tigerdocu)은 한 번 정하면 영원히 못 바꾸니 첫날 확정했다.

지운 금지 조항 하나

초기 문서에는 “경쟁 앱의 색 팔레트를 가져오지 말 것” 이라는 금지선이 있었다. 다시 따져 보니 근거가 없었다. 색에는 저작권이 없다. 그리고 맞닿은 영역이 확실히 구별되는 배색 은 취향이 아니라 기능 요건이라, 잘 되는 답은 어차피 비슷해진다.

실제로 첫 팔레트는 열 가지 색의 밝기가 76~84% 로 거의 같았다. 가장 가까운 두 색의 거리를 재 보니 32 였다. 베이지와 살구는 사실상 같은 색이었다. 테스터 피드백으로 바꾼 1.1 판의 첫 번째 항목이 이거였고, 바꾼 뒤에는 가장 가까운 두 색의 거리가 83, 밝기 폭이 42%p 가 됐다. 금지선은 이유가 사라지면 지워야 한다. 그렇지 않으면 근거 없는 금지가 결정을 계속 비튼다.

AI 와 같이 만들었다

이 앱의 코드는 Claude 와 같이 썼다. 생성기와 솔버, 화면, 빌드 스크립트까지 대부분의 커밋에 공동 작성자로 Claude 가 올라 있다. Play Console 의 등록정보 입력, 스크린샷 업로드 같은 콘솔 작업도 브라우저 자동화로 Claude 가 했다. 사람이 한 건 무엇을 만들지, 어디까지 할지 를 정하는 일과 본인 확인뿐이었다. 어떻게 나눠서 일했는지는 기회가 되면 따로 쓰려고 한다.


다음 편에서는 이 앱의 심장인 퍼즐 생성기를 다룬다. 답이 하나뿐인 판을 어떻게 만드는지, 13×13 판 하나에 6분 넘게 걸리던 생성을 어떻게 몇 초로 줄였는지에 대한 이야기다.

댓글