[피드백 요청] 정부 오픈 API 9곳을 매일 모아 SQLite 카탈로그로 말아 배포하는 안드로이드 앱을 만들었습니다 (혜택캘린더)



1인으로 개발한 안드로이드 앱 '혜택캘린더' 피드백을 받고 싶어 글 남깁니다.
[무엇]
정부·공공기관이 공개한 오픈 API 9곳(보조금24·정부24, 복지로 중앙/지자체, 온통청년, 기업마당, K-Startup, 잡알리오, 큐넷, 월드잡플러스)에서 지원금·청년정책·채용·공모 정보를 매일 수집해, 내 조건(나이·지역·관심분야)에 맞는 것만 보여주고 북마크한 건 마감일을 캘린더에 올려 D-day 알림을 주는 앱입니다. 현재 1만 7천여 건.
[구조]
- 서버(Python)가 매일 05:00 KST에 9개 소스를 동기화해 PostgreSQL에 정규화해서 넣고, 05:30에 그걸 SQLite 한 덩어리로 말아 gzip(benefithub.db.gz)으로 배포합니다.
- 앱은 조회할 때마다 API를 때리지 않고 이 카탈로그를 통째로 받아 온디바이스로 읽습니다. 덕분에 회원가입·로그인이 없고, 목록/필터/검색이 전부 로컬이라 서버 부하도 트래픽도 거의 안 듭니다.
- 카탈로그를 못 받으면 isReady()=false 로 떨어뜨리고 스켈레톤 + 안내를 유지합니다.
[삽질한 것]
- 9개 기관이 주는 스키마가 전부 다릅니다. 같은 "신청기간"인데 어디는 YYYYMMDD 범위, 어디는 사업기간만, 어디는 사람이 쓴 자유 텍스트입니다.
- 보조금24는 신청기한이 비정형 텍스트라 날짜 파싱을 아예 포기하고 원문만 보관했습니다. 억지로 파싱해서 틀린 D-day를 띄우는 것보다 낫다고 판단했는데, 이게 맞는 선택인지 아직 고민입니다.
- 온통청년은 aplyYmd 가 비면 사업기간(bizPrd*)으로 폴백합니다.
- 보조금24는 등록일시 정렬이 보장되지 않습니다(2020년과 2025년 건이 뒤섞여 내려옴). 그래서 "최신부터 받다가 이미 본 것 나오면 중단" 하는 증분 수집이 불가능해서, 매일 전체 스캔을 돌리고 있습니다. 여기가 동기화 시간을 제일 많이 먹습니다.
[피드백 받고 싶은 점]
- 카탈로그 통째 배포 방식이 데이터가 더 커져도 버틸지 (지금은 받아들일 만한 크기입니다)
- 날짜를 못 뽑는 소스를 UI에서 어떻게 다루는 게 나을지 — 지금은 D-day 자리에 원문 텍스트를 그대로 보여주는데, 아예 캘린더에서 빼는 게 나을지
- 정렬 보장이 없는 API에서 증분 수집을 하신 경험이 있다면 방법이 궁금합니다
정부 기관이 만든 앱이 아니고 제휴도 없습니다. 공개된 공공데이터를 모아 보여주는 개인 프로젝트라, 최종 자격·신청 방법은 각 기관 공식 사이트에서 확인해야 한다고 앱 안에도 계속 안내하고 있습니다.
▶ https://play.google.com/store/apps/details?id=com.eltacrew.benefithub