앱 두 개를 서로 다른 수익모델로 낸 이유 — 광고냐 결제냐
앱 두 개(로컬 단식앱 vs 서버 있는 협업앱)를 광고 위주 / IAP 위주로 정반대로 낸 이유. 애드몹 수익=DAU×노출×eCPM이라 자주 여는 앱은 광고, 서버비 BEP가 있는 앱은 일회성 IAP. 결국 ‘앱의 구조가 수익모델을 정한다’는 기준.
앱 두 개(로컬 단식앱 vs 서버 있는 협업앱)를 광고 위주 / IAP 위주로 정반대로 낸 이유. 애드몹 수익=DAU×노출×eCPM이라 자주 여는 앱은 광고, 서버비 BEP가 있는 앱은 일회성 IAP. 결국 ‘앱의 구조가 수익모델을 정한다’는 기준.
앱에 구글·애플 소셜 로그인을 붙일 때, 소셜 토큰을 그대로 쓰지 않고 서버가 검증 후 내 JWT를 다시 발급하는 이유. 클라이언트 불신·인증 통일·토큰 수명 통제. 소셜 로그인은 신원확인까지, 세션은 내 JWT로 가져가는 패턴.
협업 앱의 진짜 적인 진입 장벽을, 바구니마다 붙는 ‘6자리 코드’ 하나로 없앤 온보딩 설계. 검색·수락·권한 단계를 제거하고 코드만 불러주면 합류. 6자리인 이유(입으로 전달 가능), 같은 코드 패턴을 친구초대 성장에 재사용한 방법.
가족 공유 장보기 앱의 실시간 협업을 WebSocket 없이 FCM 푸시로 구현한 이유와 구조. 변경→DB갱신→멤버에게 푸시→자동 새로고침. 오프라인 강함·인프라 단순·알림 채널 통합의 장점과, 느슨한 실시간에만 맞는 한계.
1인으로 앱 2개 + 블로그 5개를 하나의 상위 폴더로 관리하는 실제 구조. 컨테이너는 git repo가 아닌 인덱스로, 코드 자산은 각자 독립 repo로. README(위치)와 카탈로그(정체성) 2층 문서, 비밀은 커밋 제외·별도 백업.
Flutter 위젯 테스트 91개를 운영하며 얻은 것. 순수 도메인은 단위테스트·화면은 위젯테스트로 분리, 그리고 drift가 붙은 화면 테스트에서 스트림이 안 닫히는 함정을 pumpWidget(SizedBox())+pump로 정리하는 법.