포로그 icon LIVE

포로그 PawLog

산책부터 배변·식사까지 매일 한 번의 기록이, 반려견의 건강 이상을 가장 먼저 알아채는 앱. 날씨 기반 산책 적합도와 룰 기반 건강 조기경보가 핵심. A daily-care app for dogs — walks, meals, potty, health — where one quick log surfaces early warning signs. Weather-based walk fit + a rule-based health engine are the core.

영상 Video

스크린샷 Screenshots

오늘 산책 적합도 홈 오늘 산책 적합도 홈 GPS 산책 기록 GPS 산책 기록 산책 일지·달력 산책 일지·달력 매일 건강 기록 매일 건강 기록 예방접종 D-day 일정 예방접종 D-day 일정 체중·주간 건강 리포트 체중·주간 건강 리포트 펫플레이스 지도 펫플레이스 지도

주요 기능 Key Features

🐕

산책 엔진 Walk Engine

기상청·에어코리아 데이터를 직접 받아 오늘·내일·이번 주말 산책 적합도를 기기에서 계산. GPS 트래커로 경로·거리·시간 기록. Pulls KMA weather + AirKorea data on-device to score today/tomorrow/weekend walk fit, with a GPS tracker for route, distance, and time.

🌤

특별 날씨 알림 Weather Alerts

폭염·한파·미세먼지·강풍·호우·자외선·황사 등 위험 시그널을 아침 푸시로 미리 알림. 산책 결정에 직결. Morning push for heat, cold, fine dust, wind, rain, UV, and yellow dust — anything that should change today's walk plan.

💊

건강 조기경보 Early Warning

데일리 건강 로그(식사·배변·기분·증상)를 룰 기반 엔진이 분석. 진단이 아닌 "관찰 도우미"로 이상 신호를 조기에 표시. A rule-based engine watches the daily log (meal · potty · mood · symptoms) and surfaces anomalies early — an observer, not a diagnosis.

📍

펫플레이스 지도PHASE 2 Pet PlacesPHASE 2

공공 API 11종에서 수집한 23,000+ 반려동물 동반 시설을 네이버 지도 위에서 카테고리·반경으로 검색. 23,000+ pet-friendly venues collected from 11 public APIs, browsable on Naver Maps by category and radius.

📅

다견 프로필 + 일정 Multi-pet + Schedule

강아지마다 별도 프로필로 산책·건강·배변·식사 분리 기록. 예방접종·미용·검진 같은 일정도 함께 관리. A separate profile per dog; logs and schedules (vaccines, grooming, checkups) live alongside the daily entries.

🔔

오프라인 우선 Offline-first

로그·산책·계산은 모두 Room + 기기 내 처리. 서버는 공공 API 키 제공·백업 용도라 인터넷이 불안정해도 기본 동작 보장. Logs, walks, and scoring all run on Room + on-device math. The server only hands out API keys and stores backups, so a flaky connection still works.

기술 스택 Tech Stack

왜 이 스택? Why this stack? 1인 개발자 + 광고 수익 모델이라 운영 비용을 0에 가깝게 묶는 게 1순위. 무거운 계산은 모두 기기에서, 서버는 키 제공만 하는 윈도우 N100에 FastAPI로 가볍게. 펫플레이스 23,000건 캐시만 MariaDB에 모았고, NAS DS214play는 저장·백업 전용입니다. AI 진단은 의도적으로 배제하고 룰 기반 + "관찰 도우미" 포지셔닝으로 시작. As a solo dev on an ad-revenue model, running cost has to stay near zero. Heavy work runs on-device; the server is just a thin FastAPI on a Windows N100 box that hands out API keys. Only the 23k pet-places cache lives in MariaDB, and the DS214play NAS is storage/backup only. AI diagnosis is intentionally off the table — rule-based "observer" framing is the launch posture.

아키텍처 Architecture

┌──────────── Android App (Java · offline-first) ─────────────┐
│                                                             │
│   GPS · FusedLocation  ──▶  Walk Engine (on-device)         │
│   KMA Weather API ─────┐                                    │
│   AirKorea API ────────┼──▶  Walk-Fit Score (today/tomorrow │
│   Kakao reverse-geo ───┘                       /weekend)    │
│                                                             │
│   Daily Health Log  ──▶  Rule-based Engine  ──▶  Alerts     │
│                                                             │
│   Naver Map SDK  ◀──  /api/v1/places (radius · category)    │
│                                                             │
│   Room (local)  ◀──  walks · logs · pets · schedules        │
│   WorkManager   ──▶  morning push (weather + D-day)         │
└─────────────────┬──────────────────────┬────────────────────┘
                  │                      │
                  ▼ (keys only)          ▼ (Phase 2 places)
        ┌──── Windows N100 ────────────────────────────┐
        │   FastAPI                                    │
        │    GET /api/v1/config/api-key                │
        │    GET /api/v1/places  (radius · category)   │
        │   SQLAlchemy → MariaDB `places` (23,227)     │
        │   collect_places.py (TourAPI + odcloud + …)  │
        └──────────────────────────────────────────────┘
                                            │
                                            ▼ (storage/backup only)
                                  Synology DS214play (NAS)

앱은 단방향 의존(Presentation → Domain → Data)이고, 서버가 죽어도 마지막 API 키 캐시값으로 기본 기능이 동작합니다. 펫플레이스만 서버 캐시(거의 안 변하는 무거운 데이터), 날씨·대기는 서버를 거치지 않고 앱이 직접 호출합니다. App layers flow one way (Presentation → Domain → Data). If the server is down, cached API keys keep the core working. Only pet-places live in the server cache (heavy, rarely-changing); weather/air go app-direct so location accuracy and cost both stay good.

결정과 트레이드오프 Challenges & Decisions

문제Problem

유료 AI 진단 앱(TTcare/Lifet 등)이 이미 자리잡고 있어 정면 경쟁은 1인 개발자에게 자살행위. AI 학습·운영 비용도 감당 불가. Premium AI-diagnosis apps (TTcare/Lifet) already own that lane — head-on competition is a non-starter for a solo dev, and AI ops costs would crush the budget.

접근Approach

진단이 아닌 "관찰 도우미" 포지셔닝으로 룰 기반 건강 엔진을 채택. 매일 여는 산책 엔진을 토대로 깔고 그 위에 조기경보를 얹는 구조로 DAU·리텐션 분리. Reframe as an "observer," not a diagnosis. The walk engine becomes the daily-open foundation, and the rule-based health engine sits on top as the retention layer — DAU and retention solved by different features.

결과Result

운영 비용 ₩0 시작 가능. 면책 라인이 분명해 의료 리스크도 회피. Zero ops cost at launch, and the legal/medical risk surface stays small because the framing is honest.

문제Problem

서버 자원이 약함 — 윈도우 N100(8GB)이 주, NAS DS214play(1GB · Docker 불가)는 거의 연산 못 함. 그런데 날씨·대기 데이터는 위치별로 다르고 사용자마다 다름. Server budget is thin — a Windows N100 (8 GB) as primary and a DS214play NAS (1 GB, no Docker) for backup. Meanwhile weather/air data is per-user and per-location.

접근Approach

"무거운 건 기기에서, 가벼운 건 서버에서" 원칙. 날씨·대기·적합도 계산은 앱에서 직접, 서버는 키 제공과 펫플레이스 캐시만. NAS는 저장·백업 전용. "Heavy work on-device, light work on the server." App calls weather/air directly and scores on-device; the server only hands out keys and serves the pet-places cache. NAS does storage/backup only.

결과Result

서버 부하 거의 0. 오프라인 내성도 자연스럽게 따라옴(서버 다운 시 마지막 키 캐시로 기본 동작). Server load is effectively zero, and offline-tolerance comes for free — a server outage falls back to the cached API key.

문제Problem

펫플레이스에서 정말 필요한 속성(운동장 평수·바닥재·안전스펙)은 어떤 공공 API에도 없고, 자영업 시설이라 정리된 데이터도 없음. The fields that actually matter for pet places (yard size, flooring, safety specs) aren't in any public API, and most venues are mom-and-pop with no curated dataset.

접근Approach

1차로 공공 API 11종 23,227건을 베이스로 수집해두고(이미 완료), 깊은 속성은 유저 모인 뒤 제보 구조로 채우기. C(펫플레이스)는 Phase 2로 후순위. Seed with 23,227 venues from 11 public APIs (done), then fill the deep attributes via user submissions once a user base exists. C (pet-places) is intentionally pushed to Phase 2.

결과Result

콜드스타트를 우회. 사용자 기여 데이터 자체가 장기 진입장벽이 됨. Cold start is sidestepped, and the user-contributed depth itself becomes the long-term moat.

현재 상태 Status

LIVE Google Play 출시 · Phase 1 완료 · 펫플레이스 23,227건 Live on Google Play · Phase 1 complete · 23,227 pet-places

다음: 사용자 피드백 수집, 유저 제보 기반 펫플레이스 깊이 채우기(Phase 2), 건강 엔진 고도화. Next: Gather user feedback, build pet-places depth from submissions (Phase 2), refine health engine.

← 포트폴리오로 돌아가기 ← Back to Portfolio