정책·복지 크롤링 파이프라인
25개 공공기관 사이트와 서울 자치구 공지를 매일 자동 수집해 Claude AI로 분류·태깅하는 정책 모니터링 파이프라인입니다.
공공기관 25곳 + 서울 자치구 65개 게시판 자동 수집

문제
소상공인 지원기관, 복지관, 정책팀 담당자가 매일 25개 공공기관 사이트를 한 곳씩 직접 들어가 공지를 확인합니다. 모니터링에만 하루 1~2시간이 들고, 새 공지를 놓쳐 지원 마감일을 지나치는 일이 반복됩니다.
기관마다 카테고리·형식이 달라 취합·정리에 시간이 더 들고, 담당자가 자리를 비우면 모니터링이 아예 멈춥니다. 수집한 정보가 담당자 노트와 메일에 흩어져 팀 검색·공유도 어렵습니다.
접근
수집 대상이 25개 공공기관·서울 자치구 65개 게시판·네이버 블로그 27개로 다채널이라, 한 가지 방식으로는 안정성을 확보할 수 없었습니다. 공공 데이터 API가 있는 곳은 API로, 그렇지 않은 곳은 Crawlee + Playwright 기반 크롤러로, 네이버 블로그는 Apify Actor로 — 채널 특성에 맞는 수집 방식을 자동 선택하도록 레지스트리를 설계했습니다.
수집된 raw 데이터는 형식이 제각각이라 정규화가 핵심입니다. 정규화된 데이터에 Claude AI를 붙여 카테고리·태그를 자동 부여하고, Drizzle ORM + PostgreSQL에 체계적으로 저장해 검색·공유 가능한 자산으로 만듭니다.
해결
25개 공공기관 사이트를 매일 자동 순회하고, API와 크롤러를 상황에 맞게 혼합 사용해 수집 실패율을 최소화합니다. Claude AI가 수집된 정보를 자동 분류·태깅해 담당자가 원하는 카테고리로 정리하고, 결과를 PostgreSQL에 체계적으로 저장해 날짜·기관·카테고리별 검색이 즉시 가능합니다.
서울 25개 자치구 공지사항까지 포함해 전국과 서울을 이중으로 커버합니다.

기능
공공 데이터 API(data.go.kr REST), 서울시 OpenAPI, Crawlee 기반 HTTP 크롤러를 혼합 운영합니다. 채널 특성에 맞는 수집 방식을 자동 선택해 안정성을 높였습니다.
공공기관 네이버 블로그 27개를 Apify Actor를 통해 자동 수집합니다. API 토큰 기반 인증으로 안정적으로 운영됩니다.
수집된 정책·복지 정보를 Claude API로 자동 분류합니다. 카테고리·태그를 AI가 판단해 지정하므로 담당자가 일일이 분류할 필요가 없습니다.
기관마다 다른 형식의 데이터를 공통 구조로 정규화합니다. Drizzle ORM + PostgreSQL에 저장해 날짜·기관·카테고리별 검색이 가능합니다.
CLI 명령으로 특정 소스 또는 전체 소스를 선택적으로 수집할 수 있습니다. pino 로거로 진행 상황과 오류를 실시간 기록합니다.
소스별 요청 속도 제한(분당 30회)과 오류 발생 시 다음 소스로 즉시 넘어가는 정책으로 한 사이트의 장애가 전체 파이프라인을 멈추지 않습니다.
스택
- Crawlee 3.x + Playwright(stealth 적용) — 봇 감지 우회 안정 수집
- Claude API(Anthropic SDK) — 자동 분류·태깅 AI 엔진
- Apify Actor — 네이버 블로그 자동 수집 채널
- Drizzle ORM + PostgreSQL — 정규화된 데이터 저장
- TypeScript 6 + pino 로거
결과
누락 없는 일일 모니터링이 핵심 성과입니다 — 사람이 자리를 비워도 수집은 멈추지 않습니다.
수집·정규화·분류가 자동화되어 담당자가 정책 분석과 의사결정에 집중할 수 있게 됐습니다. 새 공공기관 소스를 추가할 때도 레지스트리에 한 줄 등록만 하면 됩니다.