"오늘도 완공: 디지털 디톡스 도우미"은 여섯 번째 프로젝트였던 "심나불레오" 웹사이트의 초기 개발이 끝난 뒤 시작했습니다. 당시 "심나불레오"는 광고 수익화 심사를 진행하고 있었고, 저는 그 결과를 기다리는 동안 다음 프로젝트 아이디어를 고민하고 있었습니다.
이전 프로젝트들에서는 앱 출시, 웹사이트 개발, 인앱 결제, 광고 수익화 등을 시도했지만 뚜렷한 매출 검증까지 이어지지는 못했습니다. 그래서 이번에는 무료 앱이 아니라 유료 앱을 직접 출시하고, 광고를 집행했을 때 실제 구매가 발생하는지 확인해보고자 했습니다.
프로젝트의 주제는 디지털 디톡스로 정했습니다. 디지털 디톡스는 스마트폰, 컴퓨터, 소셜 미디어 같은 디지털 기기 사용을 의도적으로 줄이는 실천을 의미합니다 [Wikipedia - Digital detox]. "오늘도 완공: 디지털 디톡스 도우미"은 사용을 강제로 차단하는 앱이 아니라, 사용자가 도전 형식으로 집중 시간과 수면 시간을 지키도록 돕는 보조 도구로 기획했습니다.
이 방향은 개인적인 필요에서도 출발했습니다. 다섯 번째 프로젝트였던 "어둠의 던전을 밝혀라"가 예상보다 많은 시간을 소모하면서 생활 루틴이 무너졌고, 다시 건강한 생활로 돌아가기 위한 도구가 필요하다고 느꼈습니다. 처음에는 휴대폰 사용 시간을 줄이고 걸음 수를 늘리도록 돕는 앱을 생각했습니다. 하지만 기기 전체 스크린 타임 측정과 걸음 수 측정은 권한, 백그라운드 실행, 플랫폼 정책 검토가 필요해 단기간에 안정적으로 구현하기 어렵다고 판단했습니다. 그래서 기능 범위를 조정해 집중 타이머와 수면 기능을 중심으로 앱을 구성했습니다.
이 프로젝트를 선택한 이유는 다음과 같습니다.
목표
이유
유료 앱 출시와 구매 전환 검증
유료 앱으로써 실제 결제로 이어지는지 확인하기 위해
디지털 디톡스 기능 구현
휴대폰 사용 감소, 집중 시간 유지, 수면 습관 개선이라는 개인적인 문제를 앱 기능으로 풀어보기 위해
Claude Code 기반 바이브코딩
Claude Code의 subagent를 활용해 모바일 앱 개발 속도와 작업 흐름을 개선할 수 있는지 확인하기 위해
배경과 목표
핵심 기능
AI 세상 소식
"심나불레오" 웹사이트의 AI 기반 콘텐츠를 앱 안에서 간략히 보여주고, 자세히 보기 버튼을 통해 원문으로 이동하는 기능
응원 문구 따라 쓰기
응원 문구 데이터를 활용해 사용자가 짧은 문구를 따라 쓰도록 만든 기능
집중 타이머
사용자가 집중 시간을 설정하고 타이머를 끝까지 완료하면 마일리지를 지급하는 기능
수면 기능
사용자가 정한 수면 시간 동안 휴대폰 사용 여부를 감지하고, 수면 음악을 제공해 수면 습관 형성을 돕는 기능
마일리지 획득
획득한 마일리지를 사용해 캐릭터를 수집하도록 구성하여 반복 사용과 동기부여 기능
캐릭터 수집
획득한 마일리지를 사용해 캐릭터를 수집하도록 구성하여 반복 사용과 동기부여 기능
퀘스트
일일·주간 퀘스트를 제공해 사용자가 앱의 주요 기능을 꾸준히 사용하도록 유도하는 기능
통계
기능 사용 및 완료 데이터를 저장하고, 기록을 확인할 수 있도록 제공하는 기능
개발 과정
개발 목표 설정
"오늘도 완공: 디지털 디톡스 도우미"의 개발 목표는 단순히 디지털 디톡스 기능을 구현하는 것이 아니었습니다. 이번 프로젝트에서는 유료 앱을 실제로 출시하고, 광고를 집행했을 때 구매 전환이 발생하는지를 검증하는 것이 핵심 목표였습니다.
이를 위해 앱의 기능은 "사용자가 휴대폰을 덜 사용하도록 돕는 행동"에 집중했습니다. 처음에는 기기 전체 스크린 타임 측정과 걸음 수 측정을 주요 기능으로 고려했지만, 권한과 백그라운드 실행 문제가 있어 단기간에 안정적으로 구현하기 어렵다고 판단했습니다. 그래서 사용자가 앱 안에서 직접 실행하고 완료 여부를 확인할 수 있는 집중 타이머와 수면 기능을 중심으로 방향을 조정했습니다.
또한 이전 프로젝트의 자산을 활용하는 것도 목표로 삼았습니다. "심나불레오" 웹사이트의 AI 콘텐츠를 앱 안에서 보여주고, 응원 문구 데이터를 따라 쓰기 기능에 연결해 기존 프로젝트를 새 앱의 기능으로 확장했습니다.
개발 방식에서는 Claude Code를 활용한 Flutter 앱 개발을 실험했습니다. 특히 Claude Code의 subagent를 활용해 기능 단위로 구현을 나누고, 모바일 앱 개발 속도와 작업 흐름을 개선할 수 있는지 확인하고자 했습니다.
오늘도 완공: 디지털 디톡스 도우미 구상
시스템 아키텍처
"오늘도 완공: 디지털 디톡스 도우미"은 디지털 디톡스 기능을 중심으로 구성한 모바일 앱입니다. 사용자는 앱 안에서 행동을 시작하고, 앱은 완료 여부를 판단합니다. 완료 결과는 마일리지, 캐릭터 수집, 퀘스트, 통계에 반영됩니다.
앱의 핵심 흐름은 기능 사용과 보상입니다. 사용자가 AI 세상 소식 확인, 응원 문구 따라 쓰기, 집중 타이머, 수면 기능을 실행하면 앱은 각 기능의 완료 상태를 저장합니다. 이후 완료 결과를 바탕으로 마일리지를 지급하고, 사용 기록을 퀘스트와 통계에 연결합니다.
구성 요소
역할
AI 세상 소식
"심나불레오" 웹사이트의 AI 기반 콘텐츠를 앱 안에서 요약 형태로 보여주고, 자세히 보기 버튼을 통해 원문으로 이동
응원 문구 따라 쓰기
응원 문구 데이터를 불러와 사용자가 짧은 문구를 직접 따라 쓰도록 제공
집중 타이머
사용자가 설정한 집중 시간을 타이머로 제공하고, 완료 여부를 판단해 보상 흐름으로 연결
수면 기능
사용자가 설정한 수면 시간을 기준으로 수면 도전을 시작하고, 수면 중 휴대폰 사용 여부와 성공 조건을 관리
수면 음악
수면 기능 시작 후 사용자가 지정한 시간 동안 음악을 재생하고 자동 종료
휴대폰 사용 감지
수면 중 화면 터치나 가속도 센서의 큰 변화를 감지해 휴대폰 사용 여부를 판단
수면 성공 판정
수면 진행 구간에 따라 실패, 부분 성공, 성공을 처리
마일리지 처리
세상 소식 보기, 응원 문구 쓰기, 집중 타이머, 수면 기능 완료 결과를 마일리지 지급으로 연결
캐릭터 수집
누적된 마일리지를 사용해 캐릭터를 수집하고, 반복 사용을 위한 보상 요소로 제공
퀘스트 관리
일일·주간 퀘스트를 초기화하고, 기능 사용 결과를 퀘스트 진행 상태에 반영
통계 관리
기능 사용 횟수, 집중 시간, 수면 기록, 마일리지 획득량 같은 데이터를 저장하고 사용자에게 제공
다국어 리소스
지원 언어별 앱 문구를 관리
시스템 아키텍처 구성도
핵심 구현 흐름
구현 흐름
권한 제약과 기능 전환
초기 기획에서는 휴대폰 사용 시간 측정과 걸음 수 측정을 핵심 기능으로 생각했습니다. 휴대폰을 덜 사용할수록 보상을 주고, 더 많이 걸을수록 보상을 주는 구조였습니다.
걸음 수 측정도 단순하지 않았습니다. Health Connect는 걸음 수와 수면 같은 건강 데이터를 다룰 수 있고, 관련 데이터 타입과 권한 흐름을 제공합니다 [Android Developers - Background Execution Limits]. 하지만 이 방식은 플랫폼에 기록된 건강 데이터를 읽는 구조에 가깝습니다. 제가 처음 기획한 것처럼 걸음 수를 앱 안에서 즉시 보상으로 연결하려면 실시간성 측면에서 맞지 않는 부분이 있었습니다.
센서 기반으로 걸음 수를 직접 측정하는 방식도 검토했습니다. 하지만 이 방식은 앱이 계속 동작해야 하고, 백그라운드 실행 문제를 함께 고려해야 했습니다. Android는 백그라운드 서비스와 실행에 제한을 두고 있기 때문에, 지속 측정 구조를 안정적으로 만들기 어렵다고 판단했습니다. [Apple Developer - Device Activity]
그래서 자동 측정 중심의 기능을 줄였습니다. 대신 사용자가 앱 안에서 직접 실행하고 완료 여부를 확인할 수 있는 기능으로 방향을 바꿨습니다. 휴대폰 사용 시간 측정은 집중 타이머와 수면 중 휴대폰 사용 감지로 대체했습니다. 걸음 수 측정은 수면 습관 개선과 디지털 디톡스 기능으로 전환했습니다.
이 결정으로 앱의 기능은 변경되었지만, 짧은 시간 안에 완성할 수 있는 수준으로 범위를 조정할 수 있었습니다. 단순히 기능을 포기한 것이 아니라, 플랫폼 제약 안에서 구현 가능한 범위를 다시 정리한 과정이었습니다.
기능 재구성과 기존 프로젝트 자산 재활용
오늘도 완공은 디지털 디톡스라는 하나의 주제를 중심으로 구성했지만, 일부 기능은 이전 프로젝트의 결과물을 재활용해 개발했습니다. 완전히 새로운 데이터를 다시 만들기보다, 이미 제작한 콘텐츠와 데이터를 앱의 목적에 맞게 다시 연결하는 방식으로 기능을 구성했습니다.
먼저 AI 세상 수다 기능에는 여섯 번째 프로젝트였던 "심나불레오"의 데이터를 활용했습니다. 앱 안에서는 "심나불레오"에 출력되는 콘텐츠 일부를 간략하게 보여줍니다. 사용자가 더 자세한 내용을 보고 싶을 경우, 자세히 보기를 통해 "심나불레오"웹사이트로 이동하도록 설계했습니다. 이를 통해 오늘도 완공은 독립적인 디지털 디톡스 앱이면서 동시에 기존 웹 프로젝트로 사용자를 유입시키는 연결 지점 역할도 할 수 있었습니다.
응원 문구 따라 쓰기 기능에는 첫 번째 프로젝트였던 "CheerUp Mini"의 응원 문구 데이터를 재활용했습니다. 사용자는 앱 안에서 응원 문구를 보고 따라 쓰며 짧은 활동을 수행할 수 있습니다. 이 기능은 휴대폰 사용을 강제로 차단하는 방식이 아니라, 사용자가 짧은 문구를 따라 쓰면서 감정적으로 환기하고 앱 안에서 가벼운 행동을 수행하도록 만든 보조 기능입니다.
[왼쪽 이미지]: AI 세상 수다 기능에 대한 화면, [오른쪽 이미지]: 응원 문구 따라 쓰기 기능에 대한 화면
집중 타이머와 마일리지 보상 구조
기능 범위를 기기 전체 사용 시간 측정에서 사용자가 직접 시작하는 집중 세션 관리로 조정했습니다. 사용자는 앱 안에서 집중 시간을 설정하고, 타이머가 끝날 때까지 세션을 완료하면 마일리지를 받을 수 있도록 만들었습니다.
이 구조는 플랫폼 권한 문제를 피하면서도 디지털 디톡스라는 앱의 핵심 목적을 유지하기 위한 대체 설계였습니다. 사용자의 전체 휴대폰 사용 시간을 자동으로 추적하지는 못하지만, 사용자가 스스로 집중 시간을 선언하고 완료하는 행동을 통해 휴대폰 사용을 줄이는 방향으로 기능을 구성했습니다.
마일리지는 집중 세션 완료에 대한 즉각적인 보상으로 사용했습니다. 단순히 타이머를 제공하는 데서 끝나지 않고, 완료 결과가 마일리지와 캐릭터 수집으로 이어지도록 만들어 앱을 반복해서 사용할 수 있는 동기를 제공하고자 했습니다.
집중 타이머 기능에 대한 화면
수면 기능의 도전 규칙 설계
수면 기능은 단순한 수면 기록이나 알람 기능이 아니라, 사용자가 정한 수면 시간 동안 휴대폰을 사용하지 않도록 돕는 수면 도전 기능으로 설계했습니다. 사용자가 수면 도전을 시작한 뒤, 도전 시간 동안 휴대폰 사용이 감지되지 않으면 성공으로 처리하는 구조입니다.
휴대폰 사용 여부는 수면 기능이 동작하는 동안 화면 터치가 발생하거나, 가속도 센서 값이 순간적으로 크게 변하는 경우를 기준으로 판단했습니다. 다만 수면 시작 직후에는 사용자가 휴대폰을 침대 옆이나 책상 위에 내려놓는 과정에서 움직임이 발생할 수 있기 때문에, 시작 후 5분 동안은 휴대폰 배치 시간으로 보고 사용 감지를 제외했습니다.
또한 수면 초반의 실수 가능성을 고려해 수면 시작 후 30분까지는 휴대폰 사용이 감지되어도 재시도가 가능하도록 했습니다. 이후부터는 수면 도전 시간의 진행 정도에 따라 실패, 부분 성공, 늦잠 실패를 나누어 판정했습니다.
구간
판정 기준
수면 시작 후 5분
휴대폰 배치 시간으로 보고 사용 감지 제외
수면 시작 후 30분까지
휴대폰 사용 감지 시 재시도 가능
수면 시작 30분 이후 ~ 수면 도전 시간의 절반 전
휴대폰 사용 감지 시 실패
수면 도전 시간의 절반 ~ 수면 종료 30분 전
휴대폰 사용 감지 시 부분 성공
수면 종료 30분 이후에도 사용 감지 없음
정한 시간에 일어나지 못한 것으로 보고 늦잠 실패
이 판정 구조는 수면 기능을 단순히 "오래 자면 성공"으로 처리하지 않기 위한 설계입니다. 오늘도 완공의 수면 기능은 많이 자는 것 자체가 아니라, 사용자가 정한 수면 시간을 지키는 것을 목표로 합니다. 따라서 수면 시간 중간에 휴대폰을 사용하면 실패 또는 부분 성공으로 처리하고, 종료 시간이 지난 뒤에도 사용 감지가 없으면 늦잠 실패로 판단했습니다.
수면 기능에는 수면 음악 기능도 함께 포함했습니다. 사용자가 수면 도전을 시작하면 일정 시간 동안 수면 음악이 재생되고, 지정한 시간이 지나면 자동 종료되도록 했습니다. 이 기능은 수면 도전 초반에 사용자가 잠들기 쉬운 환경을 만드는 보조 기능으로 구성했습니다.
수면 기능에 대한 화면
로컬 통계 저장과 사용자 기록 관리
오늘도 완공은 사용자의 주요 활동 데이터를 로컬 저장소에 저장하고, 이를 바탕으로 통계를 보여주는 구조를 포함했습니다. 저장 대상은 AI 세상 수다, 응원 문구 따라 쓰기, 집중 타이머, 수면 기능, 마일리지 획득 등 앱 안에서 발생하는 주요 사용 기록입니다.
데이터 저장에는 SQLite를 사용했습니다. 이 프로젝트는 로그인, 서버 동기화, 인앱 결제처럼 복잡한 서버 연동을 포함하지 않았기 때문에, 사용자의 활동 기록을 기기 내부에 저장하는 방식이 프로젝트 규모와 개발 목적에 더 적합했습니다.
통계 기능은 사용자가 자신의 디지털 디톡스 활동을 확인할 수 있도록 하기 위한 기능입니다. 사용자는 집중 타이머 사용, 수면 도전 수행, 마일리지 획득 등 자신의 기록을 확인할 수 있고, 이 기록은 앱을 반복해서 사용할 근거로 연결됩니다.
통계 화면
캐릭터 획득과 최소 보상 설계
오늘도 완공에는 마일리지를 모아 캐릭터를 획득하는 기능을 포함했습니다. 사용자는 집중 타이머나 수면 기능 등을 수행해 마일리지를 얻고, 일정 이상 마일리지가 모이면 캐릭터 뽑기를 할 수 있습니다.
캐릭터에는 특별한 기능을 넣지 않았습니다. 능력치 상승, 기능 해금, 추가 혜택처럼 앱 사용 방식에 직접 영향을 주는 요소는 제외하고, 캐릭터 도감과 수집 용도로만 제공했습니다. 이는 디지털 디톡스 앱의 핵심이 캐릭터 시스템이 아니라 집중과 수면 도전이었기 때문입니다.
캐릭터 수집은 디지털 디톡스 도전에 대한 최소한의 보상 장치로 설계했습니다. 사용자가 집중 시간을 완료하거나 수면 도전을 수행하면 마일리지가 쌓이고, 그 결과로 캐릭터를 하나씩 모을 수 있습니다. 이를 통해 부담스러운 자기관리 기능에 작은 성취감을 붙이고자 했습니다.
다만 캐릭터 수집은 앱 내부의 반복 사용을 돕는 보조 요소에 가깝습니다. 유료 앱 구매를 설득할 만큼의 핵심 가치로 보기는 어렵고, 실제 프로젝트 성과에서도 마일리지와 캐릭터 보상만으로 구매 전환을 만들기에는 한계가 있었습니다. 이 점은 오늘도 완공이 기술적으로는 출시까지 완료했지만, 비즈니스적으로는 실패한 이유 중 하나로 볼 수 있습니다.
[왼쪽 이미지]: 캐릭터 화면, [오른쪽 이미지]: 캐릭터 도감 화면
유료 앱 출시와 광고 실험
"오늘도 완공: 디지털 디톡스 도우미"은 기능 구현 후 1달러 유료 앱으로 출시했습니다. 목표는 단순히 스토어에 등록하는 것이 아니라, 광고로 유입된 사용자가 실제 구매까지 이어지는지 확인하는 것이었습니다.
광고 채널은 Google Ads와 Apple Ads를 사용했습니다. Google Ads 앱 캠페인은 Google Search, Google Play, YouTube, Display Network 등 여러 지면에 앱을 노출할 수 있고, 설치나 인앱 구매 같은 전환 목표에 맞춰 최적화할 수 있습니다 [Google Ads Help - About App campaigns]. Apple Ads는 App Store 검색 결과와 제품 페이지 등에서 앱을 노출할 수 있으며, 검색 결과 광고는 사용자의 검색어라는 직접적인 의도 신호를 기반으로 매칭됩니다 [Apple Ads - Ads on the App Store].
하지만 결과는 기대와 달랐습니다. 이전 무료 앱 광고에서는 다운로드 수를 비교적 빠르게 만들 수 있었지만, 유료 앱에서는 같은 방식이 통하지 않았습니다. Google Ads에 약 70만 원을 지출했지만, 기대한 수준의 구매 전환은 발생하지 않았습니다.
관련 글에서는 Freemium 전환율이 일반적으로 2~5% 수준에 머문다는 자료를 인용합니다. 또한 무료 사용자를 유료 사용자로 전환할 때 ' 페니갭(Penny Gap)'이라는 심리적 장벽이 발생한다고 설명합니다. 이 개념은 Josh Kopelman이 제시한 것으로, 무료와 아주 낮은 가격의 유료 사이에 존재하는 간격을 의미합니다. 무료로 사용하던 것에 1펜스를 내게 만드는 일이, 이미 100파운드를 내는 사용자에게 10파운드를 더 내게 하는 것보다 어렵다는 설명입니다. [GoSquared Blog - Freemium conversion issues? Why you need to address the penny gap]
결과적으로 "오늘도 완공: 디지털 디톡스 도우미"은 기술적으로 출시까지 완료했지만, 광고 기반 유료 판매 검증에서는 실패했습니다. 이 실험을 통해 광고는 노출과 클릭을 만들 수 있지만, 구매 이유까지 대신 만들어주지는 못했습니다.
[왼쪽 이미지]: 구글의 플레이 스토어에 출시된 모습, [오른쪽 이미지]: 애플의 앱스토어에 출시된 모습
성과
유료 앱으로써 실제 결제가 발생하여 유의미한 수익 발생
실패
다운로드 수 1,000회 돌파
실패
Claude Code의 subagent 기능을 활용한 바이브 코딩으로 앱 개발
성공
성과
"오늘도 완공: 디지털 디톡스 도우미"는 기술적으로는 목표한 범위까지 완성한 프로젝트였습니다. Flutter로 Android와 iOS 앱을 구현했고, Google Play Store와 Apple App Store에 실제 유료 앱으로 출시했습니다.
하지만 비즈니스 결과는 기대에 미치지 못했습니다. Google Ads와 Apple Ads를 활용해 유료 구매 전환을 검증했지만, 광고비 대비 의미 있는 구매 전환은 만들지 못했습니다. 특히 Google Ads에 약 70만 원을 지출했음에도 기대한 수준의 판매가 발생하지 않았습니다.
결과적으로 "오늘도 완공: 디지털 디톡스 도우미"은 기술적으로는 출시까지 완료한 프로젝트였지만, 유료 앱 판매 검증에서는 실패한 프로젝트였습니다. 다만 이 실패를 통해 무료 다운로드와 유료 구매는 완전히 다른 문제라는 점을 분명하게 확인할 수 있었습니다.
프로젝트를 통해 얻은 학습
첫째, 무료 다운로드 수는 유료 구매 가능성을 증명하지 않는다는 점을 배웠습니다. 이전 무료 앱 광고에서는 다운로드 수를 비교적 빠르게 만들 수 있었습니다. 하지만 유료 앱에서는 같은 방식이 통하지 않았습니다. 사용자는 무료 앱은 쉽게 설치할 수 있지만, 1달러라도 결제가 필요한 순간에는 필요성과 신뢰를 다시 판단했습니다.
둘째, 광고는 구매 이유를 대신 만들어주지 않는다는 점을 배웠습니다. Google Ads와 Apple Ads는 스토어 유입과 클릭을 만들 수 있었습니다. 하지만 유입된 사용자가 실제로 돈을 내고 설치할 만큼의 이유는 앱 자체가 만들어야 했습니다. 광고 성과를 보기 전에 제품의 가치 제안이 충분히 명확해야 했습니다.
셋째, 제품을 출시하는 능력과 시장에서 판매되는 능력은 다르다는 점을 배웠습니다. 이번 프로젝트에서는 Flutter 앱을 만들고, 양대 스토어에 출시하고, 광고까지 집행했습니다. 그러나 출시 완료가 곧 시장 검증을 의미하지는 않았습니다. 사용자가 돈을 낼 만큼 강한 문제를 해결하고 있는지 먼저 검증해야 했습니다.