← 전체 사례
2026자체 제품

Opportunity OS — 검색이 아니라 추천으로 여는 정부지원사업

FlutterPythonFirebase FunctionsClaude APIPlaywright

맥락

정부지원사업 공고는 사이트마다 흩어져 있고, 대부분의 대표는 자기가 지원 가능한 공고가 뭔지 모릅니다. 검색이 아니라 먼저 찾아서 알려주는 쪽이 맞다고 봤습니다.

문제

이런 종류의 개인 프로젝트는 대부분 '기능은 다 있는데 아무도 안 쓰는 상태'로 끝납니다. 그걸 막는 것이 기술적 과제보다 어려웠습니다.

내린 결정

API 키를 앱에 넣지 않았다

AI 사업계획서 생성은 Firebase Cloud Function이 서버에서 Claude API를 호출합니다. 키는 서버 시크릿에만 존재하고 앱 번들에는 들어가지 않습니다. 앱은 익명 인증을 거쳐 함수를 호출합니다.

백엔드를 나중에 갈아끼울 수 있게 인터페이스로 잘랐다

앱은 `AiBackend` 인터페이스에만 의존합니다. Firebase Functions에서 NestJS 정식 서버로 옮길 때 구현체 하나만 교체하면 되고, 화면 코드는 건드리지 않습니다.

완성 대신 승격 조건을 먼저 썼다

각 단계마다 다음 단계로 넘어갈 조건을 문서에 박아 두었습니다. v1→v2는 '내가 2주 실제로 쓰고 공고 1건 이상 실제 지원', v2→v3은 '지인 대표 3명이 돈 내겠다고 반응'. 조건을 못 넘기면 그 단계는 만들지 않습니다.

상세 수집은 캐시해서 재실행 비용을 없앴다

상위 공고의 지원자격·지원내용·선정절차를 구조화 추출해 본문 키워드까지 점수에 반영하고, 결과를 `detail_cache.json`에 캐시해 재실행 시 재사용합니다.

내가 맡은 범위

  • 제품 기획
  • 수집기 개발
  • 앱 개발
  • 서버리스 백엔드
  • 로드맵 설계

실제 산출물

  • Flutter 앱 (Web · Android · iOS 단일 코드베이스)
  • 수집기 watcher.py — 기업마당 공고 수집·점수화
  • SPEC.md — 단계별 승격 조건이 명시된 로드맵

솔직하게 — 아직 못 한 것

현재 v0 단계입니다. 아직 유료 사용자는 없고, 승격 조건상 그게 검증되기 전에는 v3 상용화를 시작하지 않습니다. 이 판단이 이 프로젝트에서 제가 한 가장 중요한 결정입니다.

이런 일이 필요하시면

지금 막힌 지점을 그대로 적어 보내주세요. 제가 할 수 있는 일과 없는 일을 먼저 구분해 답장드립니다.

다른 사례