콘텐츠로 이동

On Pocket News — 내 주머니 속 정책 뉴스를 만든 이유와 과정

왜 만들었나

정부와 지자체는 매일 엄청난 양의 정책을 내놓습니다. 출산장려금, 청년 월세 지원, 장애인 활동 지원, 노인 일자리, 소상공인 지원금…. 문제는 정작 받아야 할 사람이 그런 정책이 있는지 모른다는 것입니다.

정보가 없어서가 아닙니다. 너무 많고, 흩어져 있고, 읽기 어려워서입니다.

  • 복지로, 정책브리핑, 시청·구청·군청 게시판에 각각 따로 올라옵니다
  • 제목만 봐서는 내가 대상인지 알 수 없습니다
  • 본문은 "~하오니 참고하시기 바랍니다" 같은 공문 투라 끝까지 읽기 어렵습니다
  • 서울 금천구에 사는 사람에게 부산 기장군 소식은 필요 없습니다

그래서 방향을 반대로 잡았습니다. 사람이 정책을 찾으러 가는 대신, 정책이 그 사람을 찾아가게 하자.

"내 주머니 속 정책 뉴스" 정부·지자체가 쏟아내는 정책 정보를, 시민이 직접 찾지 않아도 자신의 상황(지역, 가족, 관심사)에 맞는 것만 골라서, 읽기 쉽게 전달한다.

이 한 문장이 프로젝트의 헌법 제1조입니다.

서비스 주소: pocket.wonslab.dev


무엇을 하는 서비스인가

1. 내 상황을 알려주면

가입할 때 사는 곳, 나이대, 결혼 여부, 자녀(성별·학령), 주거 형태, 수입원, 관심 토픽을 입력합니다. 원하면 '내 상황'(저소득·한부모·구직·장애·임신 등)도 고를 수 있습니다. 모두 선택 사항이고, 많이 입력할수록 추천이 정확해집니다.

회원가입 화면 — 실제 서비스 화면(테스트 계정)

2. 나에게 맞는 정책만 골라 줍니다

추천 엔진이 회원 프로필과 각 기사의 태그를 비교해 점수를 매깁니다.

  • 지역: 우리 시·군·구 > 우리 시·도 > 전국 순으로 가중치
  • 생애 단계: 자녀 학령, 나이대
  • 대상: 내 상황과 기사 대상이 맞는지 (예: 한부모 가구 대상 지원)
  • 관심 토픽: 주거, 취업, 육아, 교육…
  • 마감 임박: 신청 기한이 가까울수록 위로
  • 다양성: 같은 주제만 몰리지 않게 섞기

마감이 다가오는 지원 사업을 D-7, D-1에 메일로 알려주는 기능도 만들어 두었습니다. 수신에 동의한 회원에게만 보내며, 메일 발송 설정을 마치면 켤 예정입니다.

3. 읽기 쉽게 다듬어서

공공기관 글을 그대로 보여주지 않습니다. 한 건씩 감수하며 다음처럼 다듬습니다.

  • 상투어 제거: "알려드립니다", "부탁드립니다", 문두의 "또한·한편" 같은 공문 투 표현
  • 구조화: 핵심내용 / 신청대상 / 신청방법 / 문의
  • 사실은 그대로: 금액·날짜·기관명은 원문에서 한 글자도 바꾸지 않습니다. 원문과 편집본은 항상 따로 보관합니다

어떻게 만들었나

구조

구성 기술 역할
API Spring Boot 3 + Kotlin 회원·추천·콘텐츠·작업 배분
수집 에이전트 Python + FastAPI 공공기관 게시판·공공 API 수집 (내 PC에서 실행)
웹 React + Vite + TypeScript 사용자 화면 + 관리자 화면
저장소 Firestore 운영 DB
호스팅 Cloud Run + Firebase Hosting 최소 인스턴스 0, 최대 1

데이터는 복지로 공공 API(지자체·중앙부처 복지 서비스)와 정책브리핑을 중심으로 모으고, 시청·구청·군청 게시판으로 넓혀 가는 중입니다.

지킨 원칙 세 가지

① AI는 도구이지 제품이 아니다

추천·매칭·알림은 전부 규칙 기반입니다. 서버는 LLM API를 자동으로 호출하지 않습니다. 기사 감수와 사이트 분석만 사람이 AI(Claude Code)와 함께 한 건씩 처리합니다. 2026-10-20부터는 매일 정해진 시각에 Claude Code가 같은 감수 절차를 한 건씩 자동으로 실행하고, 판단이 서지 않는 건은 남겨 두며, 처리 요약을 받아 사람이 사후 확인합니다.

처음부터 이랬던 건 아닙니다. 초기에는 Gemini로 자동 분류를 했고, 감수도 스크립트로 일괄 처리한 적이 있었습니다. 그 결과 384건이 편집본=원문, 태그 없음 상태로 "감수 완료" 처리됐고, 그중 280건 정도는 메뉴 페이지나 로그인 안내 같은 쓰레기였습니다. 그대로 사용자에게 노출됐습니다. 그 뒤로 일괄 처리를 금지하고, 비용과 품질 모두를 위해 자동 AI 호출 경로를 걷어냈습니다.

② 쓰레기를 안 만드는 게 치우는 것보다 싸다

수집 입구에서 막습니다.

  • 사이트마다 상세 글 URL 패턴을 분석해 두고, 패턴에 맞는 URL만 수집합니다
  • 메뉴·사이트맵·기관 소개 페이지는 URL 패턴으로 차단합니다
  • 본문이 300자 미만이면 버립니다
  • 같은 글은 URL·제목·본문 해시로 걸러내고, 감수에서 지운 글은 다시 들어오지 못하게 기록을 남깁니다

③ 혼자서도 유지할 수 있게

1인 프로젝트라 운영 비용과 운영 부담을 함께 줄이는 쪽으로 설계했습니다.

  • 수집은 내 PC가, 클라우드는 서비스만. 외부 사이트 호출은 로컬 에이전트가 하고, 클라우드는 API 응답만 합니다
  • 배포 이미지는 최근 3회분만 남기고 자동 삭제합니다
  • 배포는 오직 git push → CI로만 합니다. 로컬에서 직접 배포했다가 개발용 API 주소가 운영에 올라간 사고 이후 정한 규칙입니다

지금까지 한 일

시기 작업
2026-03 수집 품질 개선 (인코딩 자동 감지, 짧은 본문 폐기)
2026-04 감수 일괄 처리 금지 규칙, 에이전트 페어링 인증, Gemini 자동 호출 전면 제거(감수·사이트 분석을 사람+AI 1건씩 처리하는 방식으로 전환), 공공 API URL 화이트리스트, 복지로 지자체 복지 서비스 공공 API 연동
2026-05 기관 레벨링(전국 / 광역·기초 지자체 / 비대상)
2026-10 초 복지로 중앙부처 복지 서비스 수집 추가, 감수 대기 254건을 한 건씩 정리
2026-10 추천 품질 개선: 회원 프로필과 기사 태그의 어휘를 통일하고 '내 상황' 입력 추가. 가상 회원 테스트 기준 적합도 14% → 62%
2026-10 수집일 표시, 외부 서비스용 경량 피드 API (다른 사이드 프로젝트와 연동)
2026-10-10 개인정보보호법 대응(만 14세·민감정보 별도 동의·이름/전화번호 암호화·내 정보·탈퇴 즉시 파기), 이메일 인증, 전국 시·군·구 코드표, 중복 기사 필터, 수집 로컬 이관 → 개편기
2026-10-19 전용 도메인 pocket.wonslab.dev 연결

내 정보 화면 — 실제 서비스 화면(테스트 계정)

내 정보 화면에서 언제든 정보를 조회·수정하고, 탈퇴하면 즉시 삭제됩니다.

AI와 함께 만든다는 것

이 프로젝트는 Claude Code와 함께 만들고 있습니다. 해 보며 알게 된 건, AI에게 맡기려면 규칙을 문서로 남겨야 한다는 점입니다.

  • CONSTITUTION.md: 프로젝트 헌법. 존재 이유와 절대 원칙
  • CLAUDE.md: 작업 규칙. 배포 금지, 테스트 후 커밋, 백로그 우선, 명세 동기화
  • AI_REVIEW_GUIDE.md: 감수 기준. 무엇을 지우고 어떻게 다듬는지

세션이 바뀌어도, PC가 바뀌어도 같은 기준으로 일하게 하려면 사람 머릿속에 있던 기준을 꺼내 적어야 했습니다. 사고가 날 때마다 그 이력과 금지 규칙을 문서에 추가했고, 그게 쌓여 지금의 운영 방식이 됐습니다.

그리고 "테스트 통과"를 완료로 보지 않고, 실제 화면을 확인한 증적까지를 완료로 정했습니다. 최근에는 화면 증적을 만들다가 "알림 수신에 동의하지 않았는데 알림이 켜져 있는" 버그를 찾았습니다. 단위 테스트는 모두 통과한 상태였습니다.


앞으로

  • 지역 확대: 시청·구청·군청 게시판을 한 곳씩 분석해 수집 재개
  • 필터 강화: 법인·단체 대상 사업처럼 개인이 신청할 수 없는 정책은 수집 단계에서 제외
  • 장기 비전: 공공 정책을 넘어 주요 기업 소식·IR 자료까지 넓혀, 내 상황에 맞는 경제·투자 정보도 한 곳에서 받아 보는 서비스

작은 서비스지만, 받아야 할 지원을 몰라서 놓치는 사람이 한 명이라도 줄어들면 좋겠습니다.