아내를 위해 만든 앱 성장기

앱 성장기 시리즈 — 아내를 위해 만든 단식 앱 케톤의 격주 회고.

앱 성장기 시리즈 이전 글

제가 매일 아침 켜는 화면이 이겁니다.

06-metabase-dashboard

Metabase라는 오픈소스 데이터 시각화 도구입니다. SQL로 뽑은 결과를 차트와 대시보드로 모아주는 도구인데, 무료고 Docker 한 줄로 띄울 수 있어서 1인 개발자한테도 부담이 없습니다. 여기에 DAU, WAU, MAU, 일별 신규 설치 카드를 몇 장 만들어놓고 출근 인사 대신 한 번씩 봅니다. 두 달 전 출시했는데, 절대 숫자는 여전히 작습니다. 그래도 추세는 정직하게 위쪽이라서 보는 맛이 있습니다.

벤치마크를 잠깐 옆에 놓고 보면 좀 신기합니다. Adjust의 2025년 Health & Fitness 카테고리 리포트 기준으로 단식·다이어트 앱 D1 리텐션 평균이 25~30%, D7 리텐션이 10~15%라고 나옵니다. [출처: Adjust Mobile App Trends 2025] 케톤은 W18 cohort 기준으로 D1 60.5%, 한 번이라도 첫 주에 다시 방문한 비율(W1)이 70%입니다. 카테고리 평균의 거의 두 배입니다. 추세선이 카테고리 평균 위쪽에서 우상향 중인 상태. 인디 개발자한테는 꽤 든든한 그림입니다.

01-w14-w18-trend

오늘 글의 진짜 주제는 사실 이 차트가 아닙니다. 헛다리 두 번 짚은 이야기입니다. 데이터를 잘 볼 줄 모르는 인디 개발자가 AI한테 너무 의지하다가 두 번 헛짚었습니다. 그런데 둘 다 결과적으로는 앱에 도움이 됐다는 게 함정입니다. 추천하지는 않습니다만. ^^;;

헛다리 1 — AI를 너무 믿었습니다

저는 SQL을 다룰 일이 많지 않아 익숙하지 않습니다. 데이터 분석을 제대로 공부한 적도 없습니다. 그래서 매일 BigQuery에 들어갈 쿼리를 ChatGPT나 Claude한테 부탁하곤 했습니다. “어제부터 7일간 D1, D7 리텐션 뽑아줘”, “v1.3.0 이후 신규 가입 카운트 해줘” 같은 식이었습니다. 결과 한 번 돌려보고 숫자가 그럴듯해 보이면 그대로 markdown 표에 박아넣었습니다. 다음 날도, 그 다음 날도 똑같은 쿼리를 복붙으로 돌렸습니다.

그러다 사고가 두 번 났습니다.

사고 A — D7이 한 자릿수로 무너진 줄 알았는데

W16 cohort(4월 13~19일 설치자)의 D7 리텐션이 4.8%로 잡혔습니다. 21명 중에 한 명만 일주일을 버텼다는 그림이었습니다. 그 전 주는 30%대였는데 갑자기 5분의 1로 내려앉은 겁니다. 식은땀이 났습니다.

02-d7-correction

5월 1일에 같은 cohort를 다시 뽑아봤더니 D7이 23.8%였습니다. 5배 차이. 측정창이 다 닫히지도 않았는데 도래 안 한 사람들을 0으로 잡아서 평균을 짓눌렀던 겁니다. 비유하자면 점심 영업이 한창인 12시 정각에 “오늘 점심 매출 0원입니다” 보고서 쓴 셈입니다. 분모는 21명인데 분자가 측정 가능한 사람은 3명뿐인 상태로 나누기를 해버린 겁니다.

거기다 측정 정의도 너무 좁았습니다. 정확히 설치 후 7일째 그 하루에만 방문해야 D7로 카운트되는 쿼리였는데, 단식앱 사용자는 매일 들어오기보단 격일~주 2~3회로 들어오는 분들이 더 많습니다. D7에 한해 ±1일을 허용해서(설치 후 6~8일 사이에 한 번이라도 방문하면 D7로 카운트) 측정하는 쪽이 단식앱 특성에 맞습니다. ±1 허용은 D7에만 둡니다. D1이나 D3까지 같이 넓히면 측정창이 D2 같은 날을 양쪽에서 잡아 중복 카운트가 나거든요. 좁은 정의 그대로 두면 자연스럽게 잡혔을 사람들이 0으로 빠지는 겁니다.

이 두 함정이 곱해져서 4.8%라는 비관 수치가 만들어졌습니다.

사고 B — 함께 탭 합류가 9일 연속 0건이라며

같은 시기에 사고가 하나 더 있었습니다. 4월 23일에 함께 탭(v1.3.0)을 출시하고 나서, 매일 보던 일간 리포트에 신규 합류 0건이 9일 연속으로 박혔습니다. 누적 9명에서 정체. 신규 설치는 매일 들어오는데 함께 탭 합류만 0이라는 게 좀 이상하긴 했지만, “기능이 망가졌다” 쪽으로 진단이 자연스럽게 굳어졌습니다.

9일째 되던 날 무심코 함께 탭을 켜봤다가 잠깐 멈칫했습니다. 라이브 활동 배너에 새로 들어온 분들이 멀쩡하게 떠 있었습니다. 카드에 붙은 누적 단식 횟수 뱃지가 0회로 표시되고 있었는데, 처음 들어온 사람의 단식 횟수가 0인 건 자연스러운 그림이었습니다. 즉 앱 화면에는 신규 합류자가 매일 들어오고 있었던 겁니다. 일간 리포트는 9일째 합류 0건이라는데 앱 화면은 사람들이 들어오는 중. 이 모순을 보고서야 데이터 쪽이 이상하다는 걸 인정했습니다.

옆에서 보던 아내도 한마디 거들었습니다. “신규 유저가 들어오는데 합류가 0이라는 게 말이 되는 거 아니야?”

03-community-zero-mismatch

원인은 황당하게 단순했습니다. Kotlin 데이터 클래스 필드명은 isFirstTime(camelCase), Firebase Analytics로 발화되는 키는 is_first_time(snake_case)이었는데, 제 SQL은 isFirstTime으로 조회하고 있었습니다. 항상 NULL이 나올 수밖에 없는 구조였고, 그래서 9일 내내 0건으로 잡혔습니다.

is_first_time으로 다시 조회해봤더니 9일 누적 합류자가 59명이었습니다. 신규 설치자가 거의 전원 함께 탭에 합류하고 있었습니다. "마비"가 아니라 “오히려 잘 굴러가고 있는데 내 눈에만 안 보이던” 상태였습니다.

두 사고가 같이 가르쳐준 것

저는 사실 데이터 보는게 그다지 익숙하지 않았던 앱 개발자 입니다. AI한테 SQL 받고, 결과 한 번 보고, 매일 같은 쿼리를 복붙으로 돌리는 워크플로우를 SKILL로 만들어 한 달 넘게 사용하고 있었습니다. 그 과정 어디에도 “내가 묻는 질문이 정의상 맞는지”, “내가 쓰는 키가 코드의 진짜 키랑 같은지” 검증할 단계가 없었습니다. 한 번 잘못 만든 SQL이 매일 그대로 복제되는 구조였습니다.

AI가 거짓말한 게 아니라, 제가 잘못된 질문을 던지고 잘못된 답을 그대로 받아 적었을 뿐입니다. 검증은 사람이 해야 하는 건데, 그 사람이 데이터를 잘 볼 줄 모르면 검증 자체가 안 일어납니다.

그래서 Metabase를 띄웠습니다

Metabase 도입은 "SQL 직접 짜는 게 실패해서 도망간 것"이 아닙니다. 더 잘 보려고 갈아탄 겁니다.

Docker 를 이용하면 docker compose 파일 하나와, BigQuery 서비스 계정 JSON 하나로 Metabase를 간단히 올릴 수 있습니다. 그리고 Metabase에 쿼리를 저장하면 처음 보셨던 스크린샷 처럼 결과를 그대로 차트로 볼 수 있습니다. 이걸 바탕으로 앱에서 보고 있는 주요 데이터 카드를 18개 정도 만들었습니다. DAU/WAU/MAU 추이, 코호트 리텐션, 기능 채택률, 단식 퍼널, 채널 분석 같은 것들입니다.

도구가 바뀐다고 위 두 사고가 자동으로 안 났을까요? 그건 아닙니다. 다만 카드를 만드는 시점에 “이 쿼리가 진짜로 코드 발화 키랑 일치하나”, **“측정창이 다 닫혔나”**를 한 번은 확인하게 됩니다. 매일 똑같은 쿼리를 매일 새로 칠 때보다 검증 빈도가 훨씬 올라갑니다. SQL은 git으로 관리하고 각 쿼리와 결과로 나온 항목들이 무엇을 의미하고 어떻게 정의되어 있는지도 설명에 남깁니다.

도입 과정 자체가 점검의 시간이었습니다. 카드 18장을 만들면서 옛날 쿼리들을 한 번씩 다시 들여다봤고, D7 측정창 문제 외에도 작은 버그를 몇 개 더 잡았습니다. 그리고 차트로 보면 이상치가 더 빨리 눈에 띈다는 것도 만들어보고 알았습니다. 표로 보던 시절엔 4.8%와 23.8%가 그냥 다른 두 숫자였는데, 차트로 그려놓으니까 푹 꺼지는 점이 시각적으로 비명을 지릅니다.

헛다리 2 — 잘못된 신호로 옳은 결정을 한 셈입니다

여기서부터가 좀 웃긴 구간입니다.

위에서 D7이 4.8%로 무너진 줄 알았다고 말씀드렸습니다. 그게 측정 오류였다는 건 5월 1일에야 알았습니다. 그 사이 2~3주 동안 저는 **“D7이 한 자릿수다”**라는 잘못된 전제 위에서 대응을 두 개 굴리고 있었습니다. 그런데 그 대응이 둘 다 결과적으로 앱에 좋은 일을 하고 갔습니다.

헛다리 A → 22개 언어 번역 점검 → 5성 리뷰

D7이 무너졌다고 본 시점에 가설을 세웠습니다. “해외 유저 비중이 갑자기 71%까지 올라갔는데, 내가 한국어 말고는 한 글자도 못 읽잖아? 번역 품질 때문에 첫날에 다 빠지는 거 아닐까?” 이 가설로 22개 언어를 전수 점검하기 시작했습니다.

근거였던 4.8%는 가짜였습니다. 그런데 점검하다가 진짜 문제를 찾았습니다. 러시아어 번역에서 "단식"으로 옮긴 단어가 정교회 사순절 쪽 종교 금식 어감과 섞여 있었습니다. 건강 앱을 깔았는데 “사순절 시작” 같은 문구를 읽게 되는 상황이었습니다. v1.1.1에서 이걸 고쳐서 배포했고, 며칠 뒤 러시아 유저에게 처음으로 별 다섯 개짜리 리뷰를 받았습니다. 답글도 번역기로 한국어를 러시아어로 돌려서 적었습니다. 인디 개발자한테 첫 5성 리뷰가 주는 동력은 꽤 큽니다.

잘못된 신호로 시작한 작업이 진짜 문제를 잡았습니다. 운이 좋았습니다.

헛다리 B → 함께 탭 → D1·D3·D7 모두 큰 폭 상승

같은 D7 4.8%를 보고 또 다른 가설도 굴리고 있었습니다. “사람들이 첫 주에 빠지는 건 단식이 외로워서 아닐까?” 그래서 4월 23일에 v1.3.0으로 함께 탭을 출시했습니다. 익명 닉네임으로 지금 단식 중인 사람들이 보이고, 프리셋 이모지 응원을 하루 한 번 보낼 수 있는 얇은 커뮤니티입니다. 설계 과정은 따로 한 편으로 풀어놨습니다 → 단식 앱에 커뮤니티를 붙이기로 했습니다

베이스라인이라고 봤던 4.8%는 가짜였습니다. 진짜 D7은 30%대였습니다. 위기가 아니었는데 위기 대응을 했더니 그 대응이 정말 좋았습니다. install_version 기준으로 같은 정의로 비교했더니:

05-community-tab-effect

D1, D3, D7이 모두 두 자릿수 %p씩 같은 방향으로 올랐습니다. 표본은 작긴 합니다(v1.2.0 30명 vs v1.3.x 17명). 그래도 세 지표가 같이 흔들리는 건 단발 노이즈로 보기 어렵습니다. 단발이면 보통 한 지표만 튑니다.

잘못된 데이터로 옳은 결정을 한 셈입니다

번역 점검도, 함께 탭도, 둘 다 잘못된 신호로 시작했지만 끝에 가서 좋은 결과를 만들었습니다. 이게 좀 웃깁니다. "데이터를 정확히 보는 게 중요하다"는 글을 쓰고 있는데 그 글의 두 챕터가 "잘못 본 데이터로 옳은 결정을 했다"로 끝납니다.

물론 운이 좋았던 겁니다. 헛다리가 매번 좋은 자리로 떨어지지는 않습니다. 운이 안 좋았으면 엉뚱한 가설로 두세 주를 그냥 태웠을 거고, 그 시간에 D1 onboarding 같은 진짜 우선순위를 놓쳤을지도 모릅니다. 그래서 Metabase로 갈아탄 것입니다. 다음번엔 운에 기대지 않고 정확한 신호 위에서 결정을 하고 싶었습니다.

추천하지는 않습니다. 그냥 처음부터 데이터를 잘 보는 쪽이 좋습니다.

마치며 — 추세는 좋지만 절대 숫자는 작습니다

추세가 우상향이고, 리텐션이 카테고리 평균 위쪽에 있는 건 사실입니다. 다만 절대 숫자는 여전히 작습니다. WAU 두 자릿수, 신규 설치 일주일에 수십 명 단위. 카페에 앉아서 주변을 둘러보면 손가락으로 셀 수 있는 수준입니다. 좋은 리텐션이 좋아 보이는 건 모수가 작아서 그렇기도 합니다. 작은 모수에서 좋은 게 큰 모수에서도 좋을 거라는 보장은 없습니다.

그래서 다음 2주는 두 가지를 봅니다.

하나는 유입 채널입니다. 지금까지 신규 설치의 89%가 Play Store 오가닉입니다. 검색 알고리즘 한 곳에 의존하는 게 좀 위태로워서 다른 채널을 만들어볼 생각입니다. 그 첫 신호가 며칠 전에 한 명 잡혔습니다. UTM이 naver_blog/dev-story로 찍힌 분이 한 명 들어오셨습니다. 이 시리즈 글을 읽고 케톤을 깔아주신 분이라는 뜻입니다. N=1이고 통계적 의미는 0이지만, 콘텐츠가 사람을 데려올 수 있다는 첫 데이터 포인트였습니다. 이 분이 일주일 뒤에도 다시 들어오시는지는 다음 에피에서 그대로 들고 오겠습니다.

다른 하나는 지속성입니다. 유입 채널이 늘어나 신규가 두 배 세 배가 됐을 때, 지금의 D1 60%, W1 70%가 그대로 유지될지. 작은 모수에서 만들어진 리텐션 패턴이 더 큰 모수에서도 깨지지 않는지를 봐야 합니다. 안 깨지면 PMF에 가까워진 것이고, 깨지면 지금 보이는 좋은 숫자가 초기 얼리어답터들이 만든 착시일 수 있습니다. 어느 쪽이든 다음 격주에 솔직하게 들고 오겠습니다.

오늘 글 끝까지 읽어주셔서 감사합니다. 다음 에피는 2주 뒤입니다. 숫자가 좋아도 나빠도 그대로 올립니다. 간헐적 단식 기록을 조용히 남기고 싶으신 분, 그리고 인디 개발기에 호기심이 동하신 분은 플레이스토어에서 "케톤"을 검색해보세요. 다음에 뵙겠습니다.

👉 케톤 — Play Store에서 보기

아내를 위해 만든 앱 성장기

앱 성장기 시리즈 — 아내를 위해 만든 단식 앱 케톤의 격주 회고.

앱 성장기 시리즈 이전 글

에피 0에서 "다음 3개월 뒤에 다시 오겠다"고 써놓고 2주 만에 돌아왔습니다. 3개월은 너무 길더라고요. 그 사이에 까먹은 얘기가 쌓이고, 숫자 안 좋을 땐 조용히 넘어가고 싶은 마음도 생기고요. 그래서 시리즈 포맷을 격주로 바꿨습니다. 2주마다 숫자를 꺼내놓고 이야기하는 쪽이 저한테도 더 솔직해지는 것 같아서요.

오늘 꺼내는 숫자는 좀 섞여 있어요. 좋은 숫자, 나쁜 숫자, 그리고 재밌는 숫자가 한 장에 같이 있습니다. WAU가 2배가 됐고, 유입 국가가 9개국으로 넓어졌고, 러시아 유저에게 처음으로 별 다섯 개짜리 리뷰를 받았어요. 동시에 D7 잔존은 계단처럼 뚝 떨어졌고, 앱을 떠받치는 유저 수는 여전히 한 손으로 셀 수 있는 수준입니다. 오늘 글은 그 섞여 있는 상태에 대한 얘기입니다.

이번 2주의 숫자

먼저 3주치 추이부터 공개합니다. 에피 0을 쓰던 주(W14)가 왼쪽 끝이에요.

지표 W14 (에피 0) W15 W16
WAU 22 35 (+59%) 47 (+34%)
신규 설치 13 20 21
단식 완료자 (유니크) 3 8 9
단식 완료 (이벤트) 8 13 17
주간 리텐션 59% 74%

01-wau-3week-trend

WAU가 22에서 47로 두 배 조금 넘게 올랐습니다. 주간 리텐션도 59%에서 74%로 올랐고요. 여기까지만 보면 기분이 꽤 좋은 2주였어요. 밤에 대시보드를 켜고 이 표만 보면 “잘 돼가고 있네” 싶었습니다.

근데 숫자가 재밌는 건 여기부터예요. 같은 2주 동안 유저 구성 자체가 뒤집혔거든요.

지표 W14 W15 W16
해외 유저 비율 31% 55% 71%
유입 국가 수 3개 6개 9개

3주 전에는 열에 일곱이 한국 유저였어요. 지금은 반대로 뒤집혔습니다. 열에 일곱이 한국 바깥에서 들어온 분들이에요. 그것도 마케팅비 0원으로요. 국가 리스트를 훑어보다가 저도 좀 놀랐는데, 이번 주에 유입이 잡힌 나라가 한국, 러시아, 조지아, 독일, 헝가리, 일본, 벨라루스, 미국, 루마니아 이렇게 아홉 곳이더라고요. 3주 전에 한국 중심으로 돌아가던 작은 앱이 지금은 유럽 중동부 어딘가에서도 켜지고 있는 거예요.

체중 기록 쪽도 조용히 움직이고 있었어요. 체중을 기록한 유니크 유저가 9명에서 15명으로 67% 늘었고, 단식 시작할 때 체중을 같이 입력하는 fasting_start_weight 이벤트 채택이 2건에서 9건으로 네 배 반 정도 뛰었습니다. 모수가 작으니까 퍼센트가 과장되긴 하는데, 그래도 "타이머만 켜는 앱"에서 "몸 상태까지 남기는 앱"으로 조금씩 이동하고 있다는 신호로 읽혔어요.

배운 것 — 3주 동안 해외 유저가 한국 유저를 따라잡았고, D7이 그 대가로 내려앉았습니다

좋은 숫자가 붙어 있는 동안 제일 오래 들여다본 건 나쁜 숫자였습니다. 세 가지 신호가 있었어요.

신호 1 — D7 잔존이 계단처럼 내려앉았고, 범인이 누군지 감이 잡혔습니다

새로 들어온 분들이 일주일 뒤에도 남아있냐를 보는 D7 잔존이 3주 연속 빠지고 있었습니다. 그것도 부드럽게가 아니라 계단처럼요.

  • W14 cohort (13명): D7 잔존 38.5%
  • W15 cohort (20명): D7 잔존 30.0%
  • W16 cohort (21명): D7 잔존 4.8%

02-d7-3week-bars

21명 중에 D7까지 도달한 분이 딱 한 분이에요. -8.5%p, -25.2%p. 저도 이 숫자를 처음 봤을 때 눈을 한 번 비볐어요. 오타인가 싶어서 쿼리를 다시 돌렸거든요. 근데 맞았습니다.

WAU는 늘고 D7은 무너지는 게 한 장에 같이 있는 상태인데, 풀어서 말하면 이렇게 됩니다. WAU가 늘어난 건 새 유저가 계속 쌓여서가 아니라 기존에 쓰던 분들이 열심히 쓰고 있어서였어요. 새로 들어온 분들은 거의 다 일주일 안에 사라지는 중이었고요.

그럼 왜 빠지는가, 가설이 하나 떠올랐습니다. 위에서 말한 해외 유저 비율 뒤집힘이랑 이게 연결되거든요. 유입 국적이 넓어지는 속도랑 D7이 무너지는 속도가 거의 맞물려 있었어요. 특히 러시아어(ru-ru) 설정 유저들이 D1에서 나란히 이탈하는 패턴이 보였습니다. 같은 주간에 한국어, 일본어 설정 유저들은 그렇게까지 깔끔하게 빠지진 않았거든요. 유독 러시아어만 도장을 찍듯이요.

거기서 가설이 하나 더 나왔습니다. “번역 품질이 엉망인 거 아닐까?” 라는 쪽으로요. 케톤은 22개 언어를 지원하고 있는데, 솔직히 한국어 말고는 제가 한 글자도 못 읽거든요. 기계 번역에 많이 기대고 있었어요. 해외 유저가 적을 땐 이게 표면에 안 드러났는데, 3주 만에 해외 비중이 71%가 되니까 바로 올라온 거예요.

그래서 20개 언어를 전수로 다시 봤습니다. 러시아어에서 나온 게 꽤 재밌었는데, "단식"으로 번역한 단어가 정교회 사순절 쪽 종교 금식 어감이랑 섞여 있었어요. 건강 앱을 깔았더니 “사순절 시작” 같은 문구를 읽게 되는 상황이었던 거예요. 이 작업 과정은 따로 한 편으로 풀어놨습니다.

관련 글

4월 15일에 v1.1.1로 번역을 대폭 수정해서 배포했어요. 이 가설이 맞다면 W17 이후 D7 숫자가 다시 올라와야 합니다. 아직 모릅니다. 다음 에피에서 확인될 거예요. 틀렸으면 틀렸다고 그때 올리겠습니다.

신호 2 — 파워유저 세 분이 지표의 반 이상을 떠받치고 있어요

그래서 W16에 일어난 단식 완료 이벤트 17건을 누가 일으켰는지를 개별 ID로 뜯어봤습니다. 에피 0에서 7일 연속 OMAD 돌리던 파워유저 한 분 얘기를 했었죠. OMAD는 "One Meal A Day"의 줄임말인데요, 말 그대로 하루에 한 끼만 먹고 나머지 시간은 전부 단식으로 채우는 패턴입니다. 간헐적 단식 중에서도 꽤 빡빡한 축이에요. 지금은 그런 분이 세 명이에요. 각각 주 3회씩 단식을 완료하고 계십니다.

03-power-user-distortion

세 분이 W16 완료 이벤트의 절반 이상을 만들고 있어요. 단식 완료자가 3명에서 9명으로 늘었다고 위에서 썼는데, 이번 주에 "처음으로 단식을 완료한 신규 유저"는 한 명뿐입니다. 나머지 증가분은 전부 기존 파워유저들이 쌓아준 숫자였어요.

그런데 이 세 분을 하나씩 따로 놓고 보면 되게 재밌어요. 한 분은 단식도 하고 다이어리도 매일 쓰고 체중도 기록하는 올라운더 타입이시고, 또 한 분은 오직 단식 타이머만 씁니다. 다이어리는 한 번도 안 열어보셨어요. 마지막 한 분은 이번 주에 막 합류하신 분인데 첫 주부터 주 3회 페이스를 찍으셨어요. 같은 앱을 이렇게 다르게 쓰고 계신다는 건, 리텐션 경로가 꼭 하나가 아니어도 된다는 뜻이기도 합니다. 단식만 꽂혀도 남고, 전체 기록에 꽂혀도 남는다는 거예요.

그런데 좋은 쪽을 다 적고 나서도 남는 불안이 있어요. 세 분 중에 한 분이 다음 주에 바쁘시거나 마음이 식어서 일주일 쉬시면, 제 지표 전체가 -40% 찍힐 수 있다는 거예요. 에피 0에서 "유저 한 명 한 명의 행동을 볼 수 있다"고 썼는데, 그 말을 뒤집으면 "한 명이 빠져도 숫자가 흔들린다"는 뜻이 되거든요. 작은 앱의 장점과 단점이 여기서 맞붙어 있습니다.

신호 3 — 9개국에서 설치가 들어온 주였고, 러시아 유저에게 첫 5성 리뷰를 받았습니다

마케팅 비용 0원짜리 앱이 3주 사이에 한국 중심에서 9개국으로 넓어진 건, 앉아서 보면 꽤 신기한 일이에요. 조지아랑 벨라루스에서 설치가 들어왔다는 걸 처음 봤을 때 지도를 펴서 두 나라 위치를 찾아봤습니다. 이런 나라에서 어떻게 케톤을 발견하셨는지는 저도 모릅니다. 그냥 플레이스토어 검색 알고리즘이 어느 날 이 앱을 저 동네까지 밀어준 거겠죠.

06-nine-countries-map

위에서 말한 v1.1.1 번역 업데이트가 4월 15일 저녁에 나갔는데요. 이틀 뒤인 4월 17일에 스토어에 리뷰가 하나 달렸어요. 별 다섯 개에, 제가 한 글자도 못 읽는 러시아어로 긴 문장이 적혀 있었습니다. 번역기로 돌려보니까 “쾌적하고 사용자 친화적인 인터페이스에 멋지고 무료이며 미니멀한 기능을 갖춘 훌륭한 앱을 만들어주셔서 감사합니다” 라는 뜻이더라고요.

v1.1.1 덕분이라고 증명할 방법은 없습니다. 타이밍이 우연일 수도 있어요. 다만 2주 전만 해도 러시아 유저들이 깔끔하게 D1에 빠지고 있었는데, 번역 고쳐서 배포하고 이틀 뒤에 러시아 유저한테서 첫 5성 리뷰가 온다는 게 말이 안 되게 극적이긴 했어요. 인디 개발자한테 리뷰 하나가 주는 동력은 이게 꽤 큽니다. 그 날 밤에 그 리뷰를 한 번 더 번역기로 돌려서 읽었어요. 답글도 번역기로 한국어를 러시아어로 돌려서 적었습니다. 러시아 유저분과 저의 첫 대화가 이렇게 양쪽 다 기계 번역으로 일어났어요.

지난 2주 동안 한 것 — 혼자 하는 앱에 "함께"를 조금 섞는 중입니다

세 가지 신호를 다 종합해보면, 결국 밑바닥에 깔린 문제는 첫 주에 앱을 다시 열 이유가 약하다는 거였어요. 파워유저들은 이미 그 이유를 찾은 분들이고, 신규 유저 대부분은 못 찾고 나가는 상황입니다. 그래서 이번 2주 동안 가장 공 들여 만든 게 커뮤니티 탭이에요. 아직 릴리즈 전이고, 다음 2주 안에 공개를 목표로 마무리 중입니다.

왜 커뮤니티냐면, 간헐적 단식이 솔직히 외로운 일이거든요. 저녁 8시에 가족들은 밥 먹고 있는데 나 혼자 물 마시면서 타이머 보고 있는 상황, 이거 한 번만 해보시면 무슨 얘기인지 바로 오실 거예요. 앱으로 숫자는 다 기록되는데 버티는 그 몇 시간이 너무 조용합니다. 그 조용함을 아주 살짝만 깨주는 뭔가가 있으면 내일 다시 타이머를 켜는 이유가 하나 생기지 않을까 싶었어요.

그래서 지금 준비 중인 건 이런 구조예요.

  • 단식 중일 때만 익명 닉네임([형용사][동물][2자리] 형태, 예: 조용한판다42)이 커뮤니티 탭에 잠깐 뜹니다
  • 다른 분이 지금 단식 중인 목록이 거기 보이고, 프리셋 이모지 응원을 하루 1회씩 보낼 수 있어요 (박수, 근육, 불 같은 것들)
  • 단식을 끝까지 완료하거나 지방 연소 단계에 진입하면 뽑기권이 생기고, 카드 뒤집기 애니메이션으로 작은 보상이 열립니다
  • opt-out 가능하고, Remote Config로 언제든 끌 수 있게 설계했습니다
05-community-tab-teaser

아직 릴리즈 전이라 최종 모습은 조금 바뀔 수 있는데, 지금 개발 중인 화면은 대충 이런 느낌입니다.

프라이버시 걱정되실까봐 짧게 덧붙이면, 공개되는 정보는 무작위 생성된 익명 닉네임이랑 "지금 단식 중"이라는 상태뿐이에요. 프로필도 없고, 팔로우도 없고, 대화도 없습니다. 단식이 끝나면 닉네임도 목록에서 빠져요. 단식이라는 특정 순간에만 아주 얇게 연결되고, 끝나면 다시 조용해지는 구조입니다.

설계하면서 가장 오래 고민한 건 "얼마나 얇게 연결할 것인가"였어요. 응원을 자유 메시지로 받으면 금방 지저분해질 수 있고, 닉네임이 고정이면 익명성이 깨지고, 알림이 많으면 귀찮아지고요. 그래서 사전 정의된 이모지 3종, 하루 1회 제한, 단식 중에만 공개, 이 세 가지 제약을 기본값으로 뒀습니다. 아내가 시안을 먼저 보고 "이 정도면 안 거슬리겠다"고 하더라고요. 이 앱은 아내의 사용감이 기준이거든요.

이게 D7 잔존을 올려줄까요? 아직 모릅니다. 가설은 "첫 주에 한 번이라도 응원을 주고받은 분은 D7까지 살아남을 확률이 높을 것"이에요. 릴리즈 전이니까 당연히 숫자도 없고요. 다음 에피에서 실제 유저 반응으로 얘기할 수 있을지 봐야겠습니다.

커뮤니티 탭 옆으로 조용히 같이 들어간 것들도 몇 개 있어요. 하나씩 다 풀면 이 글이 너무 길어질 것 같아서 제목만 짧게 적어둘게요. 각각은 나중에 따로 글로 풀어볼 생각입니다.

  • "이야기 들려주세요" — 더보기 탭에 유저가 한 줄 피드백을 바로 보낼 수 있는 카드를 달았어요. 러시아어 사건에서 배운 게 "유저한테 직접 물어볼 줄 아는 앱을 만들어야 한다"였거든요. 그 창구를 드디어 열었습니다.
  • 단식 타이머 공유 넛지 — 타이머 화면을 이미지로 내보내는 기능은 원래 있었는데, 단식 중 적절한 시점에 “다른 분께도 보여드려 볼까요?” 하고 가볍게 유도하는 넛지를 얹었습니다. 바이럴 루프를 만들어보려는 작은 실험이에요.
  • 주간 인사이트 공유 힌트 — 기록 탭 주간 요약 쪽에도 비슷한 방향으로, 한 주치 단식 패턴을 공유할 수 있다는 걸 넌지시 알려주는 힌트를 넣었습니다.

다음 2주 목표

딱 두 개만 정했습니다.

첫째, 준비 중인 커뮤니티 탭을 실제로 릴리즈하고, 효과를 측정할 수 있는 상태로 내보내는 것. 지금은 "커뮤니티 탭을 본 유저"와 "안 본 유저"의 D7을 따로 뽑을 수 있는 이벤트가 아직 안 깔려 있어요. 이벤트 스키마를 같이 손봐서, 첫 주에 응원을 주고받은 유저의 D7 cohort를 따로 볼 수 있게 할 겁니다.

둘째, 단식 결과 화면에서 다음 날 다시 들어오고 싶어지는 작은 CTA 실험. 첫 단식을 끝낸 분한테 “내일 다시 오면 이게 보입니다” 같은 연결고리를 하나 만들어보려고 합니다.

다음 에피는 2주 뒤 이맘때입니다. 숫자가 나빠져도 올립니다. 에피 0 끝에서 "다음에는 더 나은 숫자로 오겠다"고 썼는데, 생각해보니 그 약속이 좀 이상했어요. 더 나은 숫자가 안 나오면 침묵하겠다는 뜻이 되거든요. 그래서 오늘부터는 약속을 바꿉니다. 나쁜 숫자도 같이 올립니다. 그게 Build in Public 맞는 것 같아요.

오늘 글 끝까지 읽어주셔서 감사합니다. 간헐적 단식 기록을 조용히 남기고 싶으신 분이 있다면, 플레이스토어에서 “케톤” 검색해보세요. 조만간 단식 중에 박수 한 번 받을 수 있는 업데이트도 준비하고 있습니다.

👉 케톤 — Play Store에서 보기