앱인토스 게임 만들기, 두 번째 앱 제작기입니다. 이번엔 보상 예산 0원으로 리텐션 장치를 만들었습니다. 배지 19종과 캐릭터 60종입니다.
돈 대신 “못 받은 것이 보이는 화면"을 썼습니다.
만든 앱은 하루 한 판 물가 퀴즈 「오늘의 물가 감각」입니다. 정답은 농산물유통정보 KAMIS의 전국 평균 소매가입니다. 이 글은 퀴즈 기능이 아니라 사람을 다시 오게 하는 구조와, 그걸 하루 만에 만든 과정만 다룹니다. 콘솔 등록 전이라 심사 이야기는 다음 글입니다.
보상 예산이 0원이면 리텐션은 받은 것이 아니라, 못 받은 것이 보이는 화면에서 나옵니다.

계산기는 한 번 쓰면 끝이라 게임으로 바꿨습니다
첫 앱은 교통비 환급 계산기였습니다. 답을 한 번 보면 다시 열 이유가 없는 앱입니다.
앱인토스의 수익은 광고 노출에 비례합니다. 그러니 매일 열게 만드는 형식이 필요했고, 하루 한 판만 풀 수 있는 퀴즈를 골랐습니다. 워들 방식입니다.
문제는 서버가 매일 내려주고 앱은 그리는 틀 4개만 가집니다. 가격 맞히기, 둘 중 비싼 것, 지난주보다 올랐나 내렸나, 이번 주 가장 많이 오른 것입니다.
심사가 끝난 뒤에는 앱 파일을 바꾸기 어렵기 때문에, 문제·난이도·기능 스위치는 전부 서버에서 조정하도록 층을 갈랐습니다.
그런데 퀴즈 자체는 평범합니다. 재미와 리텐션은 결국 디자인과 장치가 전부였습니다. 뒤에서 그 장치를 어떻게 바꿨는지 적겠습니다.
스탬프 카드를 만들었다가 하루 만에 숨겼습니다
처음 만든 장치는 출석 스탬프 10칸이었습니다. 3번째·7번째·10번째 칸에 보상을 두고, 누적 점수와 출석을 섞어 랭킹을 매기는 구조였습니다.
문제는 보상이었습니다. 토스 포인트를 주려면 사업자 정산 등록이 먼저고, 그 전까지 줄 수 있는 것은 점수뿐이었습니다. 점수는 보상으로 약합니다.
참고한 것은 카카오 T의 배지 화면입니다. 12칸 중 4칸이 회색 자물쇠였는데, 그 빈칸이 채우고 싶게 만듭니다. 수집욕은 받은 배지가 아니라 못 받은 배지에서 나옵니다.
그래서 스탬프는 코드와 서버에 그대로 두고 화면에서만 숨겼습니다. 나중에 이벤트 때 되살릴 생각입니다. 그 자리에 배지 19종을 넣었습니다.
배지 설계에서 지킨 것은 셋입니다. 잠긴 배지도 조건과 진행도(예: 7/10)를 보여주고, 첫 주에 3~4개는 반드시 열리게 하고, 랭킹 점수와는 분리했습니다.
분리한 이유는 게임 등급분류 때문입니다. 확률이나 추첨 요소가 없어야 사행성 문제를 피할 수 있어, 조건은 전부 정해진 규칙으로만 뒀습니다.

배지는 시작 3종, 꾸준함 4종, 실력 3종, 품목 4종, 순위 2종, 시즌 3종입니다. 시즌 배지 중 하나는 추석 주간에만 열려서, 출시 직후의 첫 리텐션 훅으로 쓸 계획입니다.

앱인토스 게임 만들기에서 로그인 없이 이름을 주는 법
앱인토스는 자체 로그인 화면을 금지하고 익명 키만 줍니다. 그래서 순위표에 “이름 없는 친구"가 뜨는 빈자리가 있었습니다.
요즘 앱들이 자동으로 붙여주는 닉네임 방식을 빌렸습니다. 수식어 60개와 캐릭터 60종, 번호 1~99를 조합하면 이름이 356,400개 나옵니다.
이름은 익명 키를 해시해 서버가 정합니다. 그래서 기기를 바꿔도 같은 사람은 같은 캐릭터입니다. “눈썰미 좋은 고구마 42”, “저울 위의 대파 96” 같은 식입니다.
다시 뽑기는 하루 1회로 제한했고, 직접 입력은 열지 않았습니다. 입력을 열면 금칙어 필터와 검수 부담이 같이 따라오기 때문입니다.

캐릭터 60종을 반나절에 그렸습니다
그림은 제미나이 이미지 생성으로 12종씩 시트 5장을 만들었습니다. 한 대화에서 이어 그려서 1930년대 러버호스 화풍이 유지됐습니다. 이 블로그 마스코트 쿠쿠박사와 같은 계열입니다.
함정이 하나 있었습니다. 12개를 요청해도 매번 16개를 그려 시트마다 중복이 4개씩 섞였습니다. 그림을 자동으로 잘라낸 뒤 60종은 사람이 하나씩 대조해 채웠습니다.
결과물은 256픽셀 WebP 60장, 합쳐서 410KB입니다. 파일만 폴더에 넣으면 코드를 고치지 않고도 아바타가 그림으로 바뀌는 구조로 만들어 두었습니다.

배포 첫 9분 동안 서버가 500을 냈습니다
테스트 7,117건과 부팅 검사, 로컬 DB 실검증을 전부 통과하고 배포했는데 DB를 읽는 주소 4개가 500을 냈습니다.
원인은 새 테이블의 정의를 앱의 등록 목록 두 곳에 넣지 않은 것이었습니다. 로컬 검증기는 자체 설정으로 돌아서 이 누락을 가려버렸습니다.
핫픽스까지 9분이 걸렸고 그 사이 사용자는 0명이었습니다. 이후 등록 누락을 기계로 잡는 테스트를 하나 추가했습니다.
여기부터는 제 해석입니다. 같은 경고가 제 작업 기록에 이미 적혀 있었는데 못 봤습니다. 경고 문장은 사람을 지키지 못하고, 테스트는 지킵니다.
정리 — 다섯 줄
- 배지 19종은 잠긴 것도 조건과 진행도를 보여주고, 첫 주에 3~4개가 열립니다.
- 캐릭터 60종 × 수식어 60개 × 번호 99 = 이름 356,400개, 로그인은 없습니다.
- 그림 60장은 시트 5장에서 잘라냈고 WebP 410KB입니다.
- 배포 뒤 9분간 500이 났고 핫픽스 후 회귀 테스트로 봉인했습니다.
- 스탬프 카드는 삭제하지 않고 숨겼습니다. 이벤트 때 되살립니다.
저는 앱인토스 게임 만들기의 핵심이 퀴즈가 아니라 “내일 또 열 이유"라는 걸 이번에 배웠습니다.
다음 글은 KAMIS 인증키가 승인되면 문제 세트를 자동으로 만드는 파이프라인과, 콘솔 등록·심사 이야기입니다.
이어서 볼 글
https://blog.naver.com/devarchi33/224401501673
이 글은 2026년 9월 6일 기준 제작 과정 기록입니다. 앱은 아직 앱인토스 심사 전이며 화면과 수치는 바뀔 수 있습니다. 투자 권유가 아닙니다.
변경 가능성 · 2026년 9월 6일 기준 두 번째 앱 제작기(배지·캐릭터·배포)이며, 앱 화면과 수치는 심사 과정에서 바뀔 수 있습니다.