프로젝트 목록
대표 프로젝트FeaturedPublic DataPWALive APIV2 Local Pipeline
Project Detail

Shelter Signal

보호 종료가 가까운 구조동물 공고를 어떻게 먼저 확인하게 할 것인가?

공공 구조동물 공고를 최신순 목록이 아니라 보호 종료일·공고 상태·사진·연락처·지역 신호에 따른
우선 검토 흐름으로 재구성한 모바일 우선 PWA입니다.

Decision Moment

질문이 바뀐 순간

이 프로젝트가 단순 분석에서 의사결정 구조로 넘어간 핵심 장면입니다.

Original Question사용자가 구조동물 공고를 어떻게 조회하게 할 것인가?
Reframed Question보호 종료가 가까운 구조동물 공고를 어떻게 먼저 확인하게 할 것인가?
Key Evidence
보호 종료일, 공고 상태, 사진·연락처 여부, 지역 신호를 조합한 Rescue Window Score
Final Deliverable
Neon-backed /api/notices, static·mock fallback, /api/shelters, Vite React PWA
What this proves
공공데이터 조회 문제를 우선순위 판단 문제로 재정의하고, 해석 가능한 신호를 모바일 검토 흐름으로 연결할 수 있음
Evidence Snapshot

근거 스냅샷

숫자가 있는 프로젝트는 검증 지표를 먼저, 데이터가 부족한 프로젝트는 확인 가능한 산출물 중심으로 정리했습니다.

데이터 수집공공 API 응답, 로컬 PostgreSQL 모델, Neon operational read path 기준 검증
데이터 구조Neon operational records, 정적 JSON export, mock fallback, API response normalization 구성
우선순위 신호보호 종료일, 공고 상태, 사진·연락처 여부, 지역 신호를 조합한 Rescue Window Score와 검토 라벨
배포 방식공고 목록은 Neon-backed /api/notices를 우선 사용하고 실패 시 static JSON과 mock 데이터로 fallback
V2 로컬 자동화 검증별도 V2 브랜치에서 PostgreSQL alert candidates, n8n dry-run bridge, Mailpit local SMTP capture를 one-command smoke test로 검증
화면 범위우선순위 신호를 Golden Time, Notice Filters, Region Explorer, Detail Sheet에 연결
Problem / Context

문제와 맥락

주요 도메인
공공데이터
역할
데이터 파이프라인 설계 / 서버리스 API 연결 / PWA 구현
기간
2026
형태
개인 프로젝트
Context

구조동물 공고는 보호 종료일, 공고 상태, 사진·연락처 여부, 지역 정보가 흩어져 있어 보호 종료가 가까운 공고를 먼저 확인하기 어렵습니다. 이 프로젝트는 공고 조회가 아니라 오늘의 검토 순서를 정하는 문제에 초점을 맞췄습니다.

Problem

구조동물 공고를 최신순으로 나열하면 보호 종료가 가까운 공고와 추가 확인이 필요한 공고를 한눈에 구분하기 어렵습니다.

Why it mattered

사용자는 전체 공고를 반복해서 조회하기보다 오늘 먼저 확인할 공고와 그 판단 근거를 빠르게 파악할 필요가 있기 때문입니다.

Data & Method

데이터와 접근

데이터
  • data.go.kr 구조동물 공고 API 응답
  • Neon PostgreSQL operational records
  • 정적 JSON / mock fallback
접근
  • 공고에서 보호 종료일, 공고 상태, 사진·연락처 여부, 지역 신호를 추출·정규화
  • 신호를 조합해 Rescue Window Score를 계산하고 긴급 확인·종료 임박·검토 필요 라벨로 분류
  • 결과를 Neon-backed `/api/notices`와 Golden Time·Notice Filters·Region Explorer·Detail Sheet에 연결
  • `/api/notices` 장애 또는 빈 응답 시 static JSON과 mock 데이터로 fallback
  • `/api/shelters`에서 공고 기반 보호소·연락처 맥락을 추출하고 dedupe
지표 / 기준
  • 보호 종료일까지 남은 일수
  • 공고 진행 상태
  • 사진·보호소 연락처·특이사항 신호
  • notice-derived shelter/contact count
  • V2 local smoke test: dry-run, HTML export, Mailpit SMTP capture and inbox verification PASS
Output

결과물

공공 구조동물 공고에서 우선순위 신호를 추출해 Rescue Window Score와 검토 라벨로 정리하고, Golden Time·Notice Filters·Region Explorer·Detail Sheet에 연결했습니다. 배포 앱은 Neon-backed `/api/notices`를 우선 사용하고 static JSON과 mock 데이터로 fallback하며, `/api/shelters`는 공고에서 확인 가능한 보호소 연락 맥락을 요약합니다.

Rescue Window Score우선순위 검토 라벨notice-derived 보호소 연락 요약모바일 우선 PWA
Key Insight

핵심 포인트

  • 공공데이터 조회를 보호 종료가 가까운 공고부터 확인하는 우선순위 판단 문제로 재정의
  • 공고 수준 데이터를 해석 가능한 Rescue Window Score와 검토 라벨로 변환
  • 우선순위 신호를 검토 화면, API read path, fallback 구조, 모바일 PWA 전달까지 연결
Limits / Notes

한계와 검토 메모

검증 범위와 추가로 확인해야 할 조건을 숨기지 않고 함께 남겼습니다.

  • 현재 배포 범위는 포트폴리오용 PWA 프로토타입이며 실제 운영 보호소 서비스가 아닙니다.
  • 사용자 계정과 인증은 구현 범위에 포함하지 않았습니다.
  • 저장 공고의 영구 보관은 구현하지 않았으며 화면에는 placeholder만 있습니다.
  • 배포 앱에는 push·email·SMS 알림이 포함되지 않습니다. V2 n8n/Mailpit 흐름은 별도 브랜치의 로컬 자동화 검증입니다.
  • `/api/shelters`는 전체 공식 보호소 디렉터리가 아니라 구조동물 공고에 포함된 보호소·연락처 정보의 notice-derived summary입니다.
  • Rescue Window Score는 공식 위험 점수나 입양 결과 예측 모델이 아니라 내부 우선순위 탐색 신호입니다.
  • 배포된 `/api/notices`는 Neon operational DB를 우선 읽지만, 현재 hosted 데이터는 로컬 검증용 mock/export 20건을 기반으로 합니다.
  • `/api/notices`가 실패하거나 빈 응답을 반환하면 `app/public/data/*.json` 정적 JSON과 앱 내부 mock 데이터로 fallback합니다.
  • API key와 운영용 비밀값은 저장소와 배포 문서에 포함하지 않았습니다.
Links

확인 가능한 산출물

Live Demo에서는 Neon-backed `/api/notices` operational read path와 static/mock fallback, `/api/shelters`의 notice-derived 보호소 연락 맥락을 확인할 수 있습니다. DB URL과 API key는 브라우저에 노출하지 않습니다.

Case Studies

연결된 문제 해결 방식