← 작업
Case 02 · 2024년부터 현재
220회 넘는 커밋, 매주 릴리스, 양대 스토어
가족용 식재료 관리 앱. 라벨이나 영수증을 찍으면 유통기한·성분·알레르기 정보가 공유 목록에 들어갑니다. 2024년부터 양대 스토어에 있고 거의 매주 릴리스합니다.


결과
- 220+출시 후 커밋
- 1–2주간 릴리스
- 2스토어, iOS와 Android
- 2024운영 시작
맡은 일
- React Native(Expo) 앱
- React와 Vite로 만든 관리자 대시보드
- VM 한 대 위의 Fastify API
- MariaDB와 오프라인용 SQLite 미러
- CLOVA OCR과 ML Kit 스캔
- 크래시 리포트·광고·구독
개요
식품 라벨이나 영수증에 카메라를 대면 OCR이 글자를 읽고, 언어 모델이 상품명·분류·성분을 정리한 뒤, 유통기한 알림과 함께 가족 목록에 들어갑니다. 목록은 가족 구성원 모두의 폰에 동기화됩니다.
앱, 관리자, 서버, 릴리스까지 전부 제가 혼자 만들고 운영합니다. 2024년 출시 이후 저장소 커밋은 220회를 넘었고, App Store와 Google Play에 주 1~2회 배포합니다.
제품과 고객사 이름은 NDA에 따라 비공개입니다. 표시된 스택, 구조, 숫자는 사실입니다.
스택
- React Native (Expo)
- Fastify
- MariaDB
- SQLite
- CLOVA OCR
- ML Kit
- Firebase
- Sentry
- AdMob
- RevenueCat
- Oracle Cloud
구조
Client
- React Native (Expo)
- Admin (React + Vite)
API
- Fastify
Data
- MariaDB
- SQLite (offline)
Integrations
- CLOVA OCR · ML Kit
- Firebase · Sentry
- AdMob · RevenueCat
중요했던 결정
- 01
OCR 먼저, 모델은 그다음
CLOVA OCR이 원문을 뽑고 Claude는 이름과 분류만 정리합니다. 읽는 단계에서 모델을 빼니 결과가 예측 가능해지고 비용도 줄었습니다.
- 02
오프라인이 기본
모든 쓰기는 폰의 SQLite에 먼저 저장되고 백그라운드에서 동기화됩니다. 지하 마트에서 스캔해도 됩니다.
- 03
광고와 구독을 한 흐름으로
무료 가구는 AdMob을 보고 유료 가구는 RevenueCat을 거칩니다. 환불과 복원은 서버에서 처리해서 둘이 어긋나지 않습니다.
- 04
거의 매주 릴리스
EAS 빌드, 자동 생성 체인지로그, 릴리스마다 붙는 Crashlytics가 혼자서도 지속 가능한 주기를 만듭니다.
