우리는 다른 모든 앱이 실패해서 반려동물 약물 트래커를 만들었습니다
Source: Dev.to
지난 해 파트너와 저는 강아지를 입양했어요 🐶, 그리고 그와 함께 많은 사랑… 그리고 많은 책임이 찾아왔죠.
처음에는 구글 캘린더를 사용해 보았지만, 업무 회의, 생일, 그리고 반려동물 알림이 모두 뒤섞여 버렸어요.
여러 반려동물 관리 앱을 테스트해 본 결과—디자인이 과도한 것부터 알림 기능이 부족한 것까지 다양했는데—우리는 실제로 필요했던 도구를 직접 만들기로 했습니다.
ZooMinder: What It Does
- Multiple pets – 사진과 생년월일을 함께 추가합니다.
- Treatments & medications – 복용량, 빈도(매일, 매주, 사용자 지정 간격) 및 시간별 투여를 기록합니다.
- Vet appointments – 클리닉 정보, 수의사 이름, 전화번호, 주소를 한 곳에 저장합니다.
- Upcoming doses – 모든 반려동물의 다음 투여 일정을 명확히 표시합니다.
- History – 각 반려동물별 과거 투여 및 예약의 전체 타임라인을 제공합니다.
- Local notifications – 앱이 닫혀 있어도 작동하는 맞춤형 “짖는 소리” 알림을 제공합니다.
- Offline‑first – 인터넷 없이도 작동하며, 온라인이 되면 데이터가 클라우드와 동기화됩니다.
기술 스택
| 레이어 | 기술 |
|---|---|
| 프레임워크 | Flutter (Dart 3.10+) |
| 로컬 DB | SQLite via sqflite |
| 백엔드 & 인증 | Supabase |
| 알림 | flutter_local_notifications + 맞춤 사운드 |
| 네비게이션 | go_router |
| i18n | Flutter’s intl (English + Spanish) |
| 인앱 구매 | in_app_purchase |
| 동기화 | 맞춤형 오프라인‑우선 동기화 서비스 |
오프라인‑우선 동기화
앱은 모든 데이터를 먼저 SQLite에 로컬로 저장합니다. 각 레코드에는 synced 플래그가 포함됩니다. 기기가 연결을 복구하면 SyncService가 동기화되지 않은 레코드를 Supabase에 푸시하고 원격 변경 사항을 가져와 타임스탬프(updated_at)를 사용해 충돌을 해결합니다.
// Every model carries its sync state
class Treatment {
final bool synced;
final DateTime updatedAt;
// …
}
이 설계 덕분에 비행기 안, 시골 지역, 혹은 신호가 없는 어느 곳에서도 앱을 사용할 수 있어—반려동물 일정이 Wi‑Fi에 의존하지 않습니다.
알림
약물 및 약속에 대해 각각 맞춤형 사운드를 사용하는 전용 Android 알림 채널이 생성됩니다. 서비스는 치료당 최대 세 개의 다가오는 알림을 예약하고, 치료가 추가되거나 수정될 때마다 다시 계산합니다.
Lessons Learned
- Offline‑first은 가치가 있지만 고통스럽다 – 충돌 해결을 포함한 동기화 로직이 UI 전체보다 더 많은 시간을 차지했지만, UX 보상은 막대하다.
- 알림은 함정이다 – Android 권한 모델, 배터리 최적화, 시간대 처리가 단순한 오전 8시 일일 알림조차도 놀라울 정도로 복잡하게 만든다.
- 범위 확장은 현실이다 – “약물 추적”으로 시작한 것이 약속 관리, 복용 이력 타임라인, 동물병원 저장소, 프리미엄 구독, 다국어 지원으로 확대되었다. 기능에 “아니오”라고 말하는 법을 배우는 것이 필수적이다.
- 가족 프로젝트는 당신을 솔직하게 만든다 – 공동 개발자가 동시에 파트너이자 첫 번째 사용자일 때, 피드백은 즉각적이고 가혹하게 솔직하다. 😄
다음 단계 🚀
- Family plans – 가구 구성원 간에 반려동물을 공유하여 각자가 자신의 계정으로 약물 및 예약을 추적할 수 있습니다.
- Assign responsibilities – 작업을 위임합니다(예: 엄마는 아침 투여, 아빠는 저녁 투여) 각 사람이 자신의 역할을 알 수 있도록 합니다.
- Vet‑oriented tools – 수의사가 ZooMinder 내에서 치료 계획과 방문 요약을 직접 공유할 수 있는 기능으로, 반려동물 주인과의 소통을 향상시킵니다.
Availability
ZooMinder는 Google Play 스토어에서 이용할 수 있습니다. 반려동물을 키우면서 약물 복용 및 수의사 방문을 관리하는 데 어려움이 있다면, 한 번 사용해 보세요.
기여 및 피드백
여러분의 의견을 기다립니다. Flutter 개발자라면, 우리가 사용한 오프라인‑우선 패턴에 대해 자유롭게 이야기해 주세요.
버그를 발견했거나, 제안이 있거나, 베타 테스터가 되고 싶으신가요? dev.to에서 저에게 DM을 보내 주세요. 감사의 의미로 앱의 프리미엄 버전 전체 접근 권한을 드릴 수 있습니다.
![Dog picture placeholder]
#flutter #flutterdev #dart #mobiledev #android #sideproject #indiedev
Flutter, Supabase, 그리고 키보드 위에 쌓인 많은 개털로 제작되었습니다.
좋은 하루 보내세요! 👋🐾