단식 앱에 커뮤니티를 붙이기로 했습니다

커뮤니티는 작아 보일수록 의미가 무거워집니다.

단식 앱에 커뮤니티가 필요한가요?

올해 초 케톤(Ketone)이라는 간헐적 단식 앱을 출시하고 나서, 한참을 이 질문 앞에서 망설였습니다. 인스타그램도 아니고 운동 앱도 아닌데 도대체 뭘 위한 커뮤니티지 싶었거든요.

그래도 결국 붙였습니다. 4월 23일 v1.3.0으로 함께 탭이 처음 들어갔고 오늘로 8일째입니다. 결과부터 짧게 짚으면, 이 결정 하나로 D1·D3·D7 리텐션이 같은 방향으로 두 자릿수 %p씩 움직였습니다 — D1 +18pp, D3 +28pp, D7 +24pp(1.7배). 1인 개발자한테는 가장 큰 한 방이었어요.

오늘 글은 출시 회고가 아니라 설계기입니다. 그 결과를 만든 설계 내내 한 가지 질문이 끈질기게 따라다녔거든요.

무엇을 뺄 것인가.

02-community-tab-screenshot

D7 리텐션, 그리고 함께라는 단어

3월~4월 동안 D7 리텐션이 한 자리수 근처에서 움직였습니다. D1은 25%에서 46%까지 3주 연속 올랐는데, 그렇게 잡은 사람들이 일주일을 못 버티고 있었습니다.

지난 회고에서 짚었듯이 단식은 솔직히 외로운 일입니다. 저녁 식사 자리에서 혼자 물만 마셔보면 무슨 얘긴지 바로 오실 거예요. 케톤은 그 위에 한 겹을 더 깔아둔 앱이었습니다. 데이터가 클라우드도 안 가고, 다른 사람도 없고, 정말 깔끔하게 혼자 쓰는 앱.

이게 장점이라고 생각하면서 만들었는데, D7 숫자를 보면서 동시에 약점이라는 걸 인정하게 됐습니다. "혼자 가면 빨리 가지만, 함께 가면 멀리 간다"는 말이 있잖아요. D1은 잡혔는데 D7이 무너지는 그림이 딱 그거였습니다. 빨리는 가는데, 멀리는 못 가고 있었거든요.

무엇을 뺄 것인가 — 다섯 개의 결정

기능을 추가할 때는 보통 "뭘 넣을까"부터 적는데, 이번엔 반대였습니다.

01-thin-design-concept

1. 자유 메시지 → 프리셋 이모지 다섯 개

시안은 텍스트 입력창 + 보내기 버튼으로 짜놨다가 30분 만에 다 지웠습니다. 자유 텍스트가 들어오는 순간 욕설 필터, 다국어 욕설, 신고, 차단까지 풀어야 할 문제가 두 배가 됩니다. 1인 개발자한테는 부업 두 개를 더 받는 일이거든요. 게다가 한 줄 정성 들여 보내면 받는 쪽도 그만큼 답해야 할 부담이 생겨서 결국 카톡이 됩니다.

그래서 응원은 다섯 가지 이모지로 좁혔습니다. 박수, 근육, 불, 하트, 반짝. 탭 한 번이면 끝, 받는 쪽도 “아, 한 명이 박수를 쳤구나” 정도로 가볍게 받습니다. 모더레이션 비용도 0입니다.

2. 프로필 / 팔로우 → 없음

프로필도 뺐고 팔로우도 뺐습니다. 이게 빠지면 거의 SNS가 아닌 게 되는데, 그게 정확히 의도한 모습이었습니다. "지금 같이 단식 중이다"라는 사실 하나면 충분하거든요.

프로필을 만드는 순간 “어떤 사람을 응원할지 고르는” 행위가 끼어들고, 그건 빠르게 외모/나이/성별 같은 신호로 옮겨갑니다. 팔로우가 생기면 응원 답례, 맞팔, 결국 점수표가 생기고요. 작은 SNS가 망가지는 가장 흔한 경로입니다.

3. 닉네임과 아바타 → 카드 뽑기

누군가는 식별이 돼야 하니까 닉네임과 아바타는 필요한데, 둘 다 빈 칸으로 두면 시작하기도 전에 사람들이 멈춥니다. “뭐라고 짓지?” + “어떤 이모지로 하지?” 두 입력 부담이 한꺼번에 걸리거든요.

그래서 둘을 묶어서 카드 한 장 뽑는 형태로 만들었습니다. 처음 들어오면 카드가 한 장 뒤집히면서 등급(Common/Uncommon/Rare/Epic) + 동물 이모지 + [형용사] + [동물] + [2자리 숫자] 닉네임이 한 번에 공개됩니다. “느긋한곰27” 같은 식이에요. 마음에 안 들면 다시 뽑고, 마음에 들면 그대로 시작합니다. 솔직히 Bulbasaur보다는 Charizard 같은 닉네임을 뽑고 싶잖아요.

첫 4일 데이터를 보니 닉네임 다시 뽑기 146회, 아바타 다시 뽑기 149회. 거의 1:1로 같이 흔들렸습니다. 둘 다 마음에 들 때까지 사람들이 굴려본다는 신호입니다. 이름 짓는 부담을 가챠 한 번으로 바꾸니까 오히려 즐겁게 합니다.

06-gacha

4. 응원 빈도 → 하루 1회

같은 사람한테 보낼 수 있는 응원도 하루 1회로 막았습니다. 무제한이면 결국 한두 명한테 박수가 100번씩 박히고, "버튼을 더 누르려는 게임"이 됩니다. 그 순간 이 앱은 단식 앱이 아니라 박수 앱이 됩니다. 100번째 박수는 첫 번째 박수보다 가볍거든요. 보낸 응원은 다음 날 자정에 리셋됩니다.

5. 노출 시간 → 단식 중에만

함께 탭의 리스트에는 "지금 단식 중인 사람"만 뜹니다. 단식이 끝나면 1시간 동안 “방금 완료” 상태로 남아있다가 사라집니다. 그러니까 이 앱의 커뮤니티는 24시간 굴러가는 게 아닙니다. 단식 시작 버튼을 누르는 순간 켜지고, 끝내는 순간 꺼지는 구조입니다.

03-decision-tree

다섯 결정이 결국 같은 방향을 가리키고 있습니다. 앱이 시끄러워지지 않게 하는 것. 응원이라는 행위 자체는 따뜻한 건데, 너무 활발해지면 단식이라는 조용한 행위를 가리거든요.

부드러운 안전장치 — 킬스위치 두 개

다 끝내고도 출시 직전이 되니까 잠이 잘 안 왔습니다. 아무리 작게 만들었어도 단식 앱에 SNS 비스무리한 걸 붙이는 거잖아요. 그래서 Remote Config 플래그 두 개를 박아뒀습니다.

  • community_tab_visible — 함께 탭 자체를 보일지 말지
  • community_cheer_enabled — 응원 기능을 켤지 말지

응원 쪽에서 사고가 터지면 둘째 플래그만 끄고, 그것도 안 되겠다 싶으면 첫째 플래그로 탭 자체를 숨깁니다. Firebase 콘솔 토글 한 번이면 분 단위로 전 세계에서 사라지거든요. 30초 안에 되돌릴 수 있다는 안전망이 있어야 출시 버튼이 눌리더라고요.

빈 피드 걱정, 그리고 함께 단식 중인 분들을 처음 봤을 때

설계 막바지에 가장 큰 걱정 하나가 남아있었습니다. 빈 피드. 처음 들어왔는데 아무도 단식 중이 아니면 "이 앱 망했네"로 끝나거든요.

처음에는 가짜 시드 유저라도 만들어야 하나 싶었는데, BigQuery로 실데이터를 봤더니 시간대별 동시 단식자가 평균 17명, 가장 한산한 저녁 5시에도 14명이었습니다. 옵트인 절반으로 잡아도 항상 9~13명은 떠 있을 숫자였어요. 가짜는 안 만들어도 됐습니다.

출시하고 함께 탭을 처음 열어봤을 때가 솔직히 좀 뭉클했습니다. 야무진고래42, 차분한여우17, 조용한판다38, 날쌘코끼리21. 각자 다른 시간대에 단식을 시작한 분들이 한 화면에 같이 떠 있었어요. 누군지는 모르지만 같은 일을 하고 있다는 것만으로 화면이 따뜻하게 느껴졌습니다. 위에서 길게 적은 "뺄 것들의 목록"이 결국 이 한 장면을 위한 것이었구나 싶더라고요.

처음 본 D7 6%는 측정 한계였습니다

출시 직후 D7이 한 자리수까지 떨어진 것처럼 보여서 식은땀이 났습니다. 들여다보니 측정 시점이 너무 빨라서 D7 측정창이 다 안 끝난 상태였습니다. 4월 28일에 깐 사람을 5월 1일에 D7로 측정하니 당연히 0에 가깝게 나오는 구조였거든요. 베이스라인 정의도 좁아서 비교 자체가 비관 쪽으로 기울어 있었습니다.

출시 8일 — 같은 정의로 다시 비교한 D1·D3·D7

04-w17-numbers

install_version 기준으로 D7 측정창이 다 닫힌 cohort만 남겨서 비교한 표입니다.

v1.2.0 (베이스라인) v1.3.x (함께 탭) 차이
표본 30명 17명 / D7는 7명
D1 46.7% 64.7% +18.0pp
D3 36.7% 64.7% +28.0pp
D7 33.3% 57.1% +23.8pp (1.7배)

세 지표가 모두 두 자릿수 %p씩 같은 방향으로 움직였습니다. 인디 앱에서 D7이 1.7배 뛴다는 건 솔직히 평소에 잘 안 일어나는 일입니다. 표본이 17명·7명으로 작긴 한데 셋이 같이 흔들리는 건 단발 노이즈로 보기 어렵거든요. 단발이면 보통 한 지표만 튀니까요. 처음 봤던 한 자리수 비관은 거짓 알람이었습니다.

D7 표본 7명은 5월 3일에 +10명이 더 확정되면서 단단해질 예정입니다. +23.8pp가 그대로 갈지 줄어들지는 다음 격주 회고에 들고 오겠습니다.

라이브 활동 배너 — 정적인 화면을 깨주는 한 줄

05-live-banner

함께 탭은 "지금 단식 중이냐"라는 상태값 하나로 굴러갑니다. 그런데 단식이라는 행위 자체가 16시간, 24시간, 길면 72시간씩 가는 긴 호흡이라, 유저가 5분 만에 다시 들어와도 화면이 거의 똑같습니다. 정적인 화면이 반복되면 결국 안 들어오게 됩니다.

v1.4.0에서 함께 탭 위쪽에 얹은 라이브 활동 배너 한 줄이 그 정적인 느낌을 깨주는 장치입니다. "지금 단식 중"이라는 상태에서 멈추지 않고, 누가 어느 단계에 진입했는지가 실시간으로 흘러갑니다. 야무진고래42가 자가포식 단계에 들어왔고, 느긋한고양이55가 20시간 단식을 완주했고, 조용한판다38이 22일 연속 기록을 갱신했다는 식입니다. 단식의 호흡은 길어도 그 안에서 일어나는 작은 사건들은 분 단위로 생기거든요. 들어올 때마다 다른 한 줄이 흘러가니까 탭이 살아있는 느낌이 듭니다.

이 배너는 클릭률로 평가하지 않습니다. 응원 클릭을 늘리려고 만든 게 아니라, 함께 탭이 죽어있어 보이지 않게 만드는 게 임무였거든요. 아내한테 있는 버전과 없는 버전을 둘 다 보여줬더니 "없으면 죽어있는 느낌인데 있으니까 같이 있는 느낌이 든다"고 하더라고요. 그 한 줄 차이가 임무 성공의 기준입니다.

마치며

기능을 만들 때 보통은 "뭘 넣을까"를 고민하잖아요. 이번 함께 탭은 처음부터 끝까지 "뭘 뺄까"가 설계 회의의 90%를 차지했습니다. 뺄 때마다 "이거 진짜 빼도 되나"라는 작은 두려움이 따라붙었고, 그 위에 Remote Config 킬스위치 두 개를 받침대로 깔아두고서야 출시 버튼이 눌렸습니다. 다음 2주 회고에서 D7 표본이 두 배로 늘었을 때 +23.8pp가 어떻게 됐는지 들고 오겠습니다. 숫자가 안 좋아도 그대로 들고 옵니다.

👉 케톤 — Play Store에서 보기