- [Part 1] 방치된 뽀모도로 앱의 환골탈태 — 왜 'Lo-Fi 작업실'과 'Focus-to-Earn(주간 복권)'인가? (현재 글)
- [Part 2] 수익화와 공정성의 줄타기 — AdMob 보상형 광고와 해커·매크로를 막는 4중 방어 아키텍처
- [Part 3] "합성음은 가짜 같다" — Google 공식 현장 녹음 음원 도입과 다중 채널 백색소음 믹서 엔진 제작기
- [Part 4] iOS 26 JIT 메모리 보호 크래시 돌파와 Apple Watch Series 10 원형 UI & 아이콘 제작기
- [Part 5] 화면이 꺼져도, 앱을 강제 종료해도 멈추지 않는 타이머 — Android Doze·iOS 무음 루프와 워치 양방향 실시간 동기화 정복기
1년 전 스토어에 출시한 뒤 방치되어 있던 So Simple Pomodoro v1.0을 코드베이스 바닥부터 완전히 재설계하여, 스마트폰(Android·iOS)과 스마트워치(Apple Watch·Galaxy Watch) 4대 OS에서 유기적으로 동작하는 v2.0 'Lo-Fi Focus Studio & Focus-to-Earn' 플랫폼으로 환골탈태시켰습니다. 본 1편에서는 왜 평범한 뽀모도로 앱들이 유저의 선택을 받지 못하는지 냉정하게 진단하고, 감성적 공간 경험(Lo-Fi 다크 스튜디오)과 행동경제학 보상 루프(1일 최대 3장 주간 복권)를 결합한 프로덕트 엔지니어링 과정을 공유합니다.
1. 프롤로그: 1년 전 만든 뽀모도로 앱을 다시 열어보다
개발자라면 누구나 한 번쯤 "작고 심플한 유틸리티 앱을 만들어 스토어에 출시해 보자"는 다짐으로 사이드 프로젝트를 시작하곤 합니다. 저에게 So Simple Pomodoro가 바로 그런 프로젝트였습니다. 안드로이드와 iOS, 그리고 스마트워치 연동을 목표로 야심 차게 v1.0을 배포했지만, 솔직히 고백하자면 이후 약 1년 동안 이 앱은 업데이트가 멈춘 채 방치되어 있었습니다.
오랜만에 개발 환경을 다시 세팅하고 스마트폰과 워치에서 v1.0 앱을 실행해 보았을 때, 개발자가 아닌 한 명의 냉정한 사용자로서 마주한 현실은 꽤 뼈아팠습니다.
- 시각적 피로도와 매력 부재: 눈이 시릴 정도로 하얀 순백색 배경(
#FFFFFF) 한가운데에25:00숫자 하나와 시작/초기화 버튼만 덩그러니 놓여 있었습니다. 독서실이나 야간 코딩 환경에서 켜두기에는 눈이 너무 피로했고, 디자인적 감흥이 전혀 없었습니다. - 백그라운드 생존 실패: 타이머를 켜고 스마트폰 화면을 잠그면(Lock Screen), OS의 배터리 절전 정책에 의해 카운트다운이 멈추거나 알람이 제때 울리지 않는 치명적인 신뢰성 문제가 있었습니다.
- 재방문 동기(Retention)의 부재: 25분을 꼬박 집중해도 아무런 성취감이나 보상이 주어지지 않았습니다. "스마트폰 기본 시계 앱의 타이머 대신 굳이 이 앱을 매일 켜야 할 이유가 무엇인가?"라는 질문에 답할 수 없었습니다.
"단순히 시간을 재는 시계(Clock)를 만들지 말자. 책상 위에 항상 켜두고 싶은 감성적인 작업 공간(Lo-Fi Studio)이자, 오늘도 25분을 버텨낼 확실한 동기 부여 장치(Focus-to-Earn)를 만들자!"
2. 첫 번째 혁신 축: 'Lo-Fi Focus Studio' 다크 UI/UX 아키텍처
전 세계 수많은 개발자, 수험생, 크리에이터들이 집중할 때 유튜브에서 'Lofi Hip Hop Radio - Beats to Relax/Study to' 채널을 틀어놓습니다. 왜일까요? 따뜻한 스탠드 조명 아래에서 빗소리를 들으며 무언가에 몰입하는 '아늑한 새벽 작업실의 분위기'가 심리적 안정감과 몰입(Flow)을 유도하기 때문입니다.
그래서 v2.0의 디자인 시스템을 "Lo-Fi Focus Studio(로파이 집중 작업실)"라는 명확한 테마로 정의하고, 눈부신 흰색 테마를 전면 폐기했습니다.
| 디자인 토큰 | HEX 코드 | 역할 및 심리적·시각적 의도 |
|---|---|---|
| Background Surface | #121318 / #1C1E26 |
OLED 디스플레이에서 야간 눈부심을 원천 차단하고 배터리 소모를 줄이는 딥 차콜(Deep Charcoal) 스튜디오 배경 |
| Focus Accent | #F59E0B (Warm Amber) |
집중 세션 중 아날로그 진공관 앰프의 웜톤 황금빛 램프가 켜진 듯한 몰입감 부여 |
| Break Accent | #10B981 (Soft Emerald) |
휴식 세션 전환 즉시 녹색 식물·숲을 연상시키는 에메랄드 톤으로 뇌의 시각적 긴장 이완 |
| Typography | Tabular Figures |
매초 숫자가 바뀔 때 미세한 좌우 흔들림(Jitter)조차 발생하지 않도록 고정폭 숫자 렌더링 적용 |
나아가 단일 화면에 모든 기능을 우겨넣던 구조를 버리고, 하단 네비게이션 바 기반의 4-Tab 공간 아키텍처로 앱을 재편했습니다.
실제 Flutter 다크 스튜디오 테마 구현 코드
실제 프로덕션 엔트리포인트(lib/main.dart)에서는 Material 3 다크 스키마 위에 스튜디오 전용 컬러 토큰과 고정폭 타이포그래피를 결합하여 일관된 작업실 무드를 렌더링합니다.
// lib/main.dart — Lo-Fi Focus Studio 테마 정의 발췌
class StudioColors {
static const Color bgDeep = Color(0xFF121318);
static const Color cardSurface = Color(0xFF1C1E26);
static const Color cardElevated = Color(0xFF252834);
static const Color focusAmber = Color(0xFFF59E0B);
static const Color breakEmerald = Color(0xFF10B981);
static const Color textPrimary = Color(0xFFF3F4F6);
static const Color textSecondary = Color(0xFF9CA3AF);
}
ThemeData buildStudioTheme() {
return ThemeData(
useMaterial3: true,
brightness: Brightness.dark,
scaffoldBackgroundColor: StudioColors.bgDeep,
colorScheme: const ColorScheme.dark(
surface: StudioColors.cardSurface,
primary: StudioColors.focusAmber,
secondary: StudioColors.breakEmerald,
),
fontFamily: 'Pretendard',
);
}
3. 두 번째 혁신 축: 'Focus-to-Earn(주간 복권)'과 행동경제학
앱의 껍데기가 아무리 아름다워도, 매일 책상 앞에 앉아 25분 타이머를 누르게 만드는 힘은 보상 루프(Reward Loop)에서 나옵니다. 기획 단계에서 가장 깊이 고민한 질문은 "어떻게 해야 광고 수익으로 앱 운영비를 충당하면서도, 사용자에게 진짜 설레는 보상을 줄 수 있을까?"였습니다.
왜 '확정 1원 적립'이 아니라 '주간 복권(Lucky Draw)'인가?
만보기 앱처럼 25분 집중할 때마다 1~2포인트를 확정 지급하는 방식을 먼저 검토했습니다. 하지만 개인 개발자 입장에서 전 유저에게 확정 현금성 포인트를 지급하면 재무적 리스크가 통제 불가능해지고, 사용자 입장에서도 "25분 힘들게 공부했는데 고작 2원?"이라는 허탈감 때문에 동기 부여 효과가 급격히 떨어집니다.
행동경제학의 전망 이론(Prospect Theory)에 따르면, 인간은 '확실한 10원'보다 '매주 일요일 발표되는 스타벅스 기프티콘·기프트카드 당첨 기회(응모권)'에서 훨씬 더 큰 도파민과 기대감을 느낍니다. 이에 착안하여 설계한 것이 Weekly Focus Lottery(주간 집중 럭키 드로우)입니다.
| 정책 항목 | 설계 수치 | 행동경제학 및 시스템 엔지니어링 근거 |
|---|---|---|
| 최소 집중 인정 시간 | 20분 이상 |
1분짜리 꼼수 세션을 방지하고, 실제 몰입(Deep Work)이 일어나는 최소 임계 시간 보장 |
| 일일 집중 티켓 한도 | 최대 3장 / 1일 |
25분 × 3세션 = 하루 75분 집중 루틴 형성. 무한 파밍 매크로 차단 및 번아웃 방지 |
| 고유 티켓 코드 발급 | #A7F92C (6자리 Hex) |
세션 종료 즉시 실물 복권 같은 골드 티켓 다이얼로그가 팝업되어 즉각적인 성취감 제공 |
| 주간 추첨 주기 | 매주 일요일 23:59 |
1주일 단위로 응모 풀을 리셋하여 매주 월요일 누구나 공정한 출발선에서 다시 시작 |
"하루 딱 3번만 집중하면 오늘의 미션 완료!"
일일 집중 티켓 상한선을 3장으로 제한한 것은 신의 한 수였습니다. 만약 무제한으로 티켓을 줬다면 스마트폰을 하루 종일 켜두는 매크로 유저가 당첨 확률을 독식했을 것입니다. 반면 하루 3장(약 75분 집중)으로 상한선을 두자, 일반 사용자들에게는 "오늘도 딱 3세션만 채워서 티켓 3장 다 받아야지!"라는 명확하고 달성 가능한 일일 퀘스트(Daily Quest)가 만들어졌습니다.
4. 다음 이야기 예고: 수익화와 어뷰징 방어 아키텍처
이렇게 매력적인 보상 시스템을 도입하자 곧바로 두 가지 날카로운 엔지니어링 과제가 떠올랐습니다.
- "집중을 도와주는 앱에 광고를 넣으면 사용자가 짜증 나지 않을까?"
- "타이머를 강제로 빨리 감거나 네트워크 패킷을 위조해서 티켓을 무한 생성하는 해커는 어떻게 막을 것인가?"
이어지는 [Part 2: 수익화와 공정성의 줄타기 — AdMob 보상형 광고와 해커·매크로를 막는 4중 방어 아키텍처]에서는 집중 흐름을 단 1초도 방해하지 않는 옵트인(Opt-in) 보상형 광고 설계와, 클라이언트부터 Supabase PostgreSQL SECURITY DEFINER RPC까지 이어지는 4중 철벽 방어 코드를 상세히 해부합니다.