이틀 연속 미기록이 생기지 않게 만들면 구독은 유지된다 30% → 38%
이탈하는 유저에게는 공통된 패턴이 있었다. 가입하고 21일 안에 식사 기록이 이틀 연속 비는 것. 이 패턴을 기준으로 알림을 언제 보낼지, 어떻게 기록하게 할지, 기록 이후에 어떤 응답을 할지를 고민하고 개선했다.
결제한 유저 10명 중 7명이 90일을 넘기지 못했다
다이어트는 보통 혼자 힘겹게 이어가다 그만두면서 무너진다. 그래서 Wevery는 AI 코치와 함께하는 다이어트를 지향했고, 홈을 대시보드가 아니라 AI 코치와의 대화창으로 만들었다. 사진을 올리면 코치가 칼로리와 영양소를 분해해 알려주고, 다음에 뭘 먹으면 좋을지도 제안한다.
서비스 운영 6개월쯤 됐을 때, 유료 유저 10명 중 7명이 90일을 넘기지 못하는 상황이 이어졌다. 신규 가입은 계속 들어오고 있었으니 문제는 붙잡는 쪽이었다.

문제를 해결할 세 개의 가설을 골랐다
유저 인터뷰와 해지시 보여지는 설문, 유저 데이터를 들여다보고 팀에서 가설 3가지를 골랐다. 각각 어떤 결과가 나오면 버릴지 먼저 정하고 확인했다. 둘은 데이터를 보고 접었고, 하나는 만들어봐야 알 수 있었다.
가격을 낮추면 구독을 유지할 것이다
- 검증
- 해지 설문 사유를 분석하고, 해지 화면에 도달한 유저를 반으로 나눠 한쪽에만 할인을 제안해 유지율을 비교했다. 경쟁 앱 가격대도 조사했다.
- 결과
- 가격은 해지 사유 3위(12%), 1위는 ‘꾸준히 못 써서’(41%). 40% 할인 실험에서도 유지율 차이는 거의 없었다(16% 대 14%). 우리 가격도 경쟁 앱 범위 안이었다.
- 한계
- 표본 302명이라 10%p 이상 차이만 감지할 수 있다. 가격 효과가 없다고 단정하기는 어렵고, 해지 결심 이후의 할인이라 그 전 영향은 확인하지 못했다.
- 결정
- 가격 인하와 할인 확대는 보류했다. 가격은 되돌리기 어려운 만큼 더 확실한 근거가 필요했다.
| # | 해지 사유 (코딩) | 건수 | 비중 | |
|---|---|---|---|---|
| 1 | 꾸준히 쓰지 못해서 | 95 | 41% | |
| 2 | 효과를 못 느껴서 | 44 | 19% | |
| 3 | 가격이 부담돼서 | 28 | 12% | |
| 4 | 기록이 번거로워서 | 25 | 11% | |
| 5 | 인식이 부정확해서 | 21 | 9% | |
| 6 | 기타 | 18 | 8% | |
| 합계 | 231 | 100% |
음식 사진 인식 정확도를 높이면 구독을 유지할 것이다
- 검증
- 인식 결과를 고치거나 지운 유저와 그렇지 않은 유저의 90일 유지율을 첫 21일 기준으로 비교했다.
- 결과
- 29% 대 31%로 차이가 거의 없었다. 오류는 불만 1위였지만 유지율엔 영향이 없었다. 가장 불편한 문제와 떠나게 만드는 문제는 달랐다.
미기록이 쌓이지 않게 하면 구독을 유지할 것이다
- 근거
- 해지 설문 1위 사유가 ‘꾸준히 쓰지 못해서’(41%)였고, 인터뷰에서도 유저들은 먹은 뒤에야 기록을 떠올려 놓치는 패턴을 반복해 말했다.
- 검증
- 미기록을 줄일 수 있는 기능을 만들어 제공하고, 유지율이 따라 오르는지 본다. 개선 전후 구독 유지율을 비교했다.
‘미기록’을 어떻게 정의할까
가설 3을 검증하려면 기준부터 정해야 했다. 며칠을 놓쳐야 미기록으로 볼 것인지, 그 미기록이 며칠 안에 발생한 것을 유효하게 볼지, 성공을 어떻게 정의할지.
며칠 연속으로 기록하지 않으면 돌아오지 않는가
연속 미기록 일수별로 그 뒤 일주일 안에 한 번이라도 돌아와서 다시 기록을 시작한 비율을 계산했다. 여기서 ‘돌아왔다’는 기록을 다시 시작했다는 뜻이고, 구독을 유지했는지와는 다르다.
측정 · 3개월간 가입자에게서 발생한 2일 연속 미기록 1,240건 · 복귀는 미기록 뒤 7일 안에 1건 이상 기록한 경우
연속 미기록을 측정하는 기간은 유료 전환 후 21일까지로 정했다
갱신일(33일 = 30일 구독 + 3일 보너스)을 넘기면 이미 해지한 유저까지 이탈 사례로 잘못 잡히고, 너무 가까우면 대응할 시간이 없다. 21일로 정하면 갱신까지 12일의 대응 시간이 생기고, 이탈자 80%의 첫 미기록도 이 안에서 나왔다.
모두에게 21일을 똑같이 적용한 이유도 있다. 90일 전체로 측정하면 오래 쓴 유저일수록 미기록을 겪을 기회가 많아, 잘 유지한 유저가 오히려 미기록 집단에 섞인다. 21일로 고정하면 이 왜곡이 사라진다.
21일은 대응할 시간을 남기는 선에서 가장 늦은 지점이다. 더 당기면 잡히는 미기록이 줄고, 더 미루면 해지의 결심이 섞인다.
90일을 기준으로 보면 패턴이 보인다
두 기준을 적용해 확인했다. 첫 21일 안에 1일, 2일, 3일 이상 연속으로 미기록한 세 집단으로 나누고, 각 집단에서 50명을 뽑아 90일치 기록을 비교했다.
한 줄이 한 명의 90일, 점선은 21일 경계다. 1일 이하 집단만 끝까지 파랑이 이어지고, 이틀을 넘기면 더 길어져도 결과가 비슷했다. 그래서 목표를 ‘이틀째를 만들지 않는 것’으로 정했다.
측정 · 3개월간 가입자 412명을 첫 21일의 최대 연속 미기록 일수로 나눔(1일 이하 255명 · 2일 89명 · 3일 이상 68명) · 각 집단 50명 무작위 추출 · 사진·텍스트·건너뜀 어느 것도 없는 날을 미기록으로 판정
성공을 어떻게 정의할까
대조군 없이 진행한 실험이라, 기대할 수 있는 최댓값을 미리 계산해 성공 기준으로 삼았다. 원래 미기록 없는 유저는 40%가 남고, 미기록한 유저는 14%만 남는다. 개입의 역할은 유저를 14% 그룹에서 40% 그룹으로 옮기는 것이다. 목표만큼 옮겨지면 전체 유지율은 30%에서 35%로, 최대 +5%p까지 오른다. 이 근처면 성공, 그대로면 탈락, 크게 넘으면 다른 요인이 섞인 것으로 봤다.
팀이 매주 보는 지표를 ‘하루 기록 건수’에서 ‘첫 21일 안에 이틀 연속 미기록한 유저 비율’로 바꿨다. 목표도 ‘더 많이 기록하기’에서 ‘이틀 연속 비우지 않기’로 바뀌었다.
왜 기록하지 않을까
기록할 마음은 있다. 다만 떠오르는 시점이 식사가 끝난 뒤라, 찍을 대상이 이미 사라졌다.
회식, 이동 중, 사진이 어색한 자리. 입력이 사진뿐이라 이런 날은 통째로 빈다.
인식 오류, 서버 오류, 거른 끼니. 안 되는 날을 빈 날로 두면 다음 날도 이어지지 않는다.
기록하게 만들려면 이렇게 해보자
미기록이 생긴 뒤가 아니라 생기기 전에 개입한다.
식사 전 · 알림
추정한 식사 시각 직전에 촬영을 유도한다
입력 문턱을 낮춰, 대화 한 줄이면 기록이 되게 한다.
식사 중·후 · 대화 입력
사진 · 텍스트 · 건너뜀 세 경로를 모두 기록으로 처리한다
기록을 통해 심리적 보상과 목표 의식을 갖게 한다.
기록 직후 · 응답
해석한 식사 정보와 영양소 목표치를 즉시 보여준다
알림을 언제, 어떤 말로, 얼마나 보낼지 다시 설계했다
기존 알림은 모든 유저에게 하루 세 번, 같은 시각에 “오늘 식사를 기록하세요”라고 갔다. 대부분 식사가 끝난 뒤 도착했고, 유저는 기억을 더듬어 입력했다. 그 기록으로 만든 조언도 부정확해졌다.
“먹고 나서 찍으려고 했는데, 먹다 보면 까먹어요.”
이탈자 8명 · 유지자 6명 인터뷰 · 해지 설문 응답자와 인앱 요청으로 모집
기록할 마음이 없는 게 아니라 떠올리는 순간이 이미 늦은 것이다. 그렇다면 알림을 식사 직전으로 옮기는 것만으로 같은 횟수에서 기록이 늘 것을 기대했다.
식사 시각 추정은 온보딩 답변으로 시작해, 기록이 쌓이면 최근 2주 기록 시각의 중앙값 15분 전으로 맞춘다. 주중과 주말은 따로 계산한다.
조건부 발송을 받은 날은 셋 중 하나꼴로 당일 기록이 복구됐고, 알림 해제율은 늘지 않았다.
같은 상황, 다른 메시지
기존에는 어떤 상황이든 같은 문장이 갔다. 개선 후에는 시점과 상황에 따라 코치의 말이 달라진다.
하루 세 번, 누구에게나 언제나 같은 문장.
Log today's meals.
식사 직전 · 촬영 유도
Kyungjae, take one photo before you eat. You can sort it out later.
식사 시간 · 질문형
Kyungjae, what did you have for lunch?
기록이 없을 때 · 조건부
How was dinner? If you skipped it, tell me that too.
추정 식사 시각(온보딩 답변 + 최근 2주 기록 시각 중앙값 15분 전) 기준 30분 내 기록한 비율도 31%에서 58%로 올랐다.
측정 · 발송 약 32,000건 기준 · 개선 전후 각 4주 · 일 발송 3회로 동일 고정
더 자주 보내는 대신, 반응을 기록해서 더 정확하게 보냈다
알림을 늘리면 하나하나의 무게가 가벼워져 결국 꺼버리게 되고, 알림으로 만든 습관은 알림과 함께 사라진다. 그래서 목표를 '알림에 반응하게'가 아니라 '알림 없이도 되게'로 잡았다.
알림을 보낼 때마다 발송·열람 시각, 기록까지 걸린 시간, 문구, 응답을 남겨 유저별로 다르게 보냈다.
타이밍을 바꾼 뒤에도 낮았던 응답률과 남아있던 해제 문제가, 반응 데이터 기반 개인화로 4주 뒤 얼마나 나아졌는지 봤다.
세 번째 지표를 처음부터 측정하지 않은 것이 이 프로젝트의 가장 큰 허점이다. 알림으로 만든 습관은 알림을 끄면 사라지는데, 그걸 확인할 숫자가 없다.
기록의 문턱을 낮추다
미기록의 상당수가 ‘사진을 못 찍는 날’이라고 보고, 사진 외에 다른 입력 경로를 열면 그런 날에도 기록이 남을 거라 가정했다.
홈이 대화창인 걸 이용해서 AI 코치가 묻고 유저는 간단하게 답하면 되도록 했다.
코치가 물어도 답할 길은 빈 입력창뿐이었다. 사진을 찍거나 타이핑을 시작해야 했다.

갤러리의 최근 사진과 ‘텍스트로 쓰기’, ‘걸렀어요’ 버튼을 먼저 내민다. 한 번 누르면 답이 된다.

측정 · 개선 후 6주 · 활성 유저 386명 기준
진입점을 앱 밖으로 꺼냈다
앱을 열고 대화창까지 가는 것도 단계라, iOS 잠금화면에 카메라로 바로 이어지는 위젯을 두고, 추정한 식사 시간대에는 잠금화면과 Dynamic Island에 동시에 걸리는 라이브 액티비티를 띄워, 앱을 열지 않거나 알림을 지나쳐도 배달 앱의 배달 상태 자리에 “드시는 중이면 한 장”이 계속 눈에 남게 했다.


틀린 순간에 나가지 않도록 고치는 길을 뒀다
인식 결과를 고치거나 지운 세션의 43%가 5분 안에 앱을 닫았고, 그런 날의 다음 날 기록률은 정상 인식 날(71%)보다 19%p 낮은 52%였다. 문제는 오류 자체가 아니라, 오류를 보고 멈춰버리는 것이었다.
그래서 식사 상세에 ‘수정’ 기능을 넣었다. “브로콜리 아니고 시금치예요”처럼 한 줄만 쓰면 코치가 다시 계산해준다. 삭제 버튼보다 수정 버튼을 먼저 보이게 해서, 틀려도 나가지 않고 고쳐서 계속하게 했다.

즉각적인 피드백과 눈에 보이는 목표로 습관을 설계했다
기록은 그 자체로 즐거운 행동이 아니라서 습관이 되기 어렵다. 기존에는 기록을 보내도 바로 오는 반응이 없었고, 그 기록이 목표에 반영되는 것도 그 자리에서 보이지 않았다. 응답을 이 두 가지 기준으로 다시 만들었다.
기록하면 코치가 바로 답한다
사진을 보내면 코치가 바로 답한다. 음식 이름과 칼로리, 영양소를 정리해 보여주고, 건강하게 먹은 날에는 칭찬을 아끼지 않는다. 이 즉각적인 반응이 ‘관리받고 있다’는 느낌을 만들고, 다음 기록의 이유가 된다.
카드에서는 칼로리를 가장 크게 뒀다. 원래는 순탄수가 가장 컸지만, 한 끼를 보고 바로 판단하는 값은 칼로리였다. 채팅 카드와 상세 화면 모두 같은 기준으로 통일했다.

목표는 항상 눈에 보이게
목표 잔여치 “4.7kg 남음”은 어느 화면에서든 볼 수 있게 했다. 영양소 게이지는 한 줄 칩으로 접어 대화창 상단에 항상 띄우고, 탭하면 펼쳐진다. 접으면 자리를 거의 차지하지 않으면서 목표를 상기시킬 수 있다.
기록하는 즉시 칩과 잔여치가 갱신된다. 방금 한 기록이 목표를 얼마나 움직였는지 바로 보여야 기록이 목표와 연결된 행동으로 느껴진다. 표기는 먹은 양이 아니라 남은 양이다.

기록하면 바로 답이 오고, 목표가 움직이고, 잘한 날엔 칭찬도 온다. 유저는 혼자 기록만 쌓는 게 아니라 매번 반응을 받는다. 습관이 된 이유는 정교한 분석이 아니라 이 반응이었다.
체중 관리 앱에서 기록 유도는 압박으로 작동할 수 있다
먹기 전에 울리는 알림, 끊기지 않게 미는 구조, 끼니마다 매기는 점수. 누군가에게는 도움이지만 누군가에게는 압박이다. 그래서 네 가지 가드레일을 만들었다.
스트릭은 “며칠 연속 기록 중”을 세어 보여주고 하루라도 놓치면 0으로 되돌리는 장치다. 습관 앱의 표준이고 효과도 검증돼 있다. 그래도 선택하지 않았다. “끊기면 안 돼”라는 부담을 유저에게 떠넘겨 부정적인 감정을 남길 수 있는 방식이라서다.
“점심 걸렀어요”는 경고 없이 보통의 답으로 받는다. 코치는 지적하는 대신 간헐적 단식 중인지 묻거나, 바빴던 하루를 위로한다.
AI 코치는 우리가 설계하지 않은 방향으로 흘러가기도 했다. 그래서 지적하지 않도록 프롬프트를 잡고, 사실을 짚고 목표를 상기시킨 뒤 다음 행동을 제안하는 순서로 답하게 했다.
체험이 끝난 화면, 구독이 끊긴 화면에서 다시 시작할 수 있다고만 응원했다. 동의를 받아 기록 데이터를 일정 기간 더 보관했고, 돌아오면 쌓아둔 기록에서 이어갈 수 있도록 했다.

음식에 점수를 매기면 ‘좋은 음식’과 ‘나쁜 음식’이 생긴다. 대부분에게는 참고 정보지만, 섭식장애 이력이 있는 유저에게는 죄책감과 묶일 수 있다. 표현 강도는 낮췄지만, 음식마다 점수와 등급을 매긴다는 사실은 남았다. 이 구조가 그런 유저에게 어떻게 작동하는지는 확인하지 못했고, 점수를 끄는 옵션도 못 만들었다.
기록을 놓치지 않도록 만드니, 구독 유지율이 올랐다
아래 숫자는 개선 전에 가입한 412명과 개선 후에 가입한 386명을 비교한 것이다.
미기록이 쌓이지 않게 하면 구독을 유지할 것이다
- 기준
- 변화 없으면 탈락 · 상한선인 +5%p 근처면 채택 · 크게 넘으면 다른 요인
- 결과
- 미기록은 38%에서 21%로 줄었고 유지율은 30%에서 38%로 올랐다. +8%p는 상한선을 넘는다. 가설이 맞았다는 뜻인 동시에, 가설 밖의 몫이 3%p 섞였다는 뜻이다.
180일 유지율도 14%에서 19%로 같이 올랐다.
이번 가설 검증의 한계
개선 전 코호트는 기준점이지 대조군이 아니다. 대조군은 같은 시기에 무작위로 나뉘어 개입만 빼고 조건이 같아야 한다. 시간으로 나뉜 두 집단은 개입 말고도 모든 것이 함께 변했다.
가을에 시작한 유저와 봄에 시작한 유저를 비교했다. 다이어트는 1월과 7월의 마음가짐이 다른 카테고리다.
같은 기간 페이월이 바뀌어 전환율이 22%에서 28%로 올랐다. 전환 문턱이 낮아지면 유료 집단의 구성도 달라진다.
코호트 400명 규모에서 유지율 차이의 표본 오차는 ±3%p 안팎이다. 전체 +8%p는 우연으로 보기 어렵지만, 5%p와 3%p를 가르는 정밀도는 이 표본에 없다.
새 기능은 신기해서 한동안 열심히 쓰게 되고, 90일만 보면 그게 습관처럼 보일 수 있다. 신기함 때문이라면 180일에는 효과가 사라져야 하는데 그렇지 않았다. 반박 근거지만, 완전히 배제하긴 어렵다.
실험의 결과를 검증하려면 명확한 기준이 필요하다.
가설의 성공과 실패 기준을 먼저 정했다
가설마다 어떤 결과가 나오면 버릴지 먼저 정하고 데이터를 봤다. 덕분에 가격 가설을 빨리 접었고, 미리 계산해둔 상한 +5%p 덕분에 +8%p를 전부 이 실험의 성과로 보지 않을 수 있었다.
시각과 문구를 한 번에 바꿔서, 무엇이 통했는지 모른다
알림 기록 전환율은 9%에서 23%로 올랐지만, 시각적 변화 덕분인지 문구 덕분인지 정확한 판단을 할 수 없었다. 빨리 개선하려고 변수를 묶으면 결과는 얻어도 이유는 알 수 없게 된다.
다음 실험에서는 이 지표부터 측정하겠다
성공의 정의는 ‘알림 없이 스스로 여는 비율’이었는데 처음부터 재지 않았고, 나중에 재려니 비교할 과거 데이터가 없었다. 다음에 이런 실험을 한다면, 성공 지표를 정한 날부터 측정을 시작하겠다.
유지율에 좋은 것과 유저에게 좋은 것은 다르다
스트릭을 넣으면 유지율은 오르겠지만, 그 동력은 불안이다. 체중을 다루는 앱에서 그 불안은 음식과 자신에게 향한다. 그래서 넣지 않았다.



