WarmWake (온음)
시끄러운 알람음 대신, 전날 밤 내가 녹음해 둔 음성 메시지로 아침을 깨우는 알람 앱입니다. Flutter 앱 하나로 App Store와 Google Play에 출시해 운영하고 있습니다.
한눈에 보기
| 항목 | 내용 |
|---|---|
| 출시 | 1.0.0 (2026년 1월) · 최신 2.1.2 (2026-09-10) |
| 출시 채널 | App Store · Google Play |
| 기술 스택 | Flutter · Riverpod · Freezed · Hive · Firebase · Sentry · 알람 엔진은 별도 Flutter 플러그인(warm_alarm)으로 분리 |
| 수익 모델 | 음성 메시지로 깨우는 핵심 기능과 알람 신뢰성은 무료 · 평생 이용권 WarmWake Plus (일회성 인앱 결제) · 광고 없음 |
| 사용자 | Google Analytics 기준 활성 사용자 46명 · 새 사용자 38명 (2026-09-28 확인) |
프로젝트 이야기
프로젝트를 어떻게 시작하게 되었나요?
여러 알람 앱이 다양한 알람음을 제공하지만, 사용자가 진짜 원하는 알람음은 제공하지 못한다고 생각했습니다. 유명한 알람 앱들은 스푼이나 유튜브의 유명 크리에이터 목소리로 만든 알람음은 제공하지만, 내가 아끼는 사람의 목소리로 깨워 주는 알람 앱은 없었습니다. 그리고 잠들기 전에, 내일 일어나자마자 해야 할 일을 저 자신에게 일러 주고 싶었습니다.
그래서 전날 밤 녹음한 음성 메시지를 다음 날 아침 알람음으로 재생하는 앱을 만들었습니다. 어제의 내가 오늘의 나를 깨우는 구조입니다.
진행하며 만난 가장 큰 문제는 무엇이었으며, 어떻게 해결했나요?
가장 큰 문제는 앱이 완전히 종료된 상태에서도 녹음한 목소리로 깨우는 것이었습니다. iOS는 종료된 앱이 직접 소리를 재생하도록 허용하지 않기 때문에, 1.1.0부터 로컬 알림을 대비책으로 한 겹씩 쌓아 왔습니다. 앱이 소리를 내지 못하면 알림이 대신 울리게 했고, 그 알림을 30초 간격으로 최대 5분까지 반복하게 했고, 예약한 알림이 모두 실패하면 즉시 알림을 한 번 더 보내게 했습니다. 2.0.0에서는 알람을 끈 뒤 정말 일어났는지 확인하고, 응답이 없으면 다시 울리는 기상 확인 기능을 더했습니다.
그래도 알림으로는 넘을 수 없는 한계가 남았습니다. 로컬 알림은 무음 스위치가 켜져 있으면 울리지 않고, 알림을 눌러 앱이 열리기 전까지는 녹음을 재생할 수 없었습니다.
iOS 26의 AlarmKit이 답이 될 수 있었지만, 개발자 포럼에는 "사용자 지정 알람음은 30초를 넘지 못하고 반복되지 않는다"는 보고가 있었습니다. 이 보고를 그대로 믿는 대신, 실기기(iOS 26.6.1)에서 44.4초짜리 소리를 AlarmKit으로 예약해 측정했습니다. 소리는 끝까지 재생된 뒤 처음부터 반복되었고, 앱을 앱 전환기에서 쓸어 올려 종료한 뒤에도 계속 울렸습니다. 그 보고는 1년 전 베타 버전을 기준으로 작성된 것이었습니다.
AlarmKit은 앱 안의 임의 파일이 아니라 시스템이 읽을 수 있는 위치의 소리만 재생합니다.
그래서 녹음과 선택한 알람음을 합친 오디오를 Library/Sounds에 미리 준비해 두고, 더 이상 쓰지 않는 파일은 알람 상태가 바뀔 때 정리하도록 알람 플러그인을 고쳤습니다.
그 결과 2.1.2부터는 iOS 26 이상에서 권한을 허용한 경우, 앱이 종료되고 화면이 잠긴 상태에서도 녹음 전체가 알람음과 함께 재생됩니다.
지금 사용자는 얼마나 되나요?
Google Analytics 기준으로 활성 사용자는 46명, 새 사용자는 38명입니다(2026-09-28 확인).