AI와 함께 공개명부를 전수로 긁어 정책 사각지대 찾기

공모사업 계획서에서 제일 약한 문장은 “소비처가 부족합니다” 같은 것이다. 심사위원은 그 말을 수백 번 읽었다. 이길 수 있는 문장은 하나뿐이다. “이 면에는 생필품을 살 수 있는 가게가 한 곳입니다. 세어 봤습니다.”

그런데 그 숫자는 대개 아무도 갖고 있지 않다. 통계청에도 없고 군청에도 표로는 없다. 다만 지자체가 이미 웹에 공개해 둔 목록 안에 흩어져 있을 뿐이다.

이 글은 완도군 농어촌기본소득 공모 전략을 짜면서 쓴 방법을 정리한 것이다. 두 가지다. 공개 명부를 전수로 긁어 원데이터를 직접 만드는 것, 그리고 규정은 언론 기사가 아니라 지침 원문으로 확인하는 것. 둘째 것 때문에 결론이 한 번 뒤집혔다.


1. 왜 전수로 긁는가

완도군 홈페이지에는 「완도사랑상품권 가맹점 조회」 페이지가 있다. 190면짜리 목록이다. 사람이 눈으로 볼 수 있는 형태가 아니고, 그래서 아무도 보지 않는다.

여기에 한 건당 이런 정보가 들어 있다.

상호 | 주소 | 전화 | 소재 읍·면 | 업종

소재 읍·면이 붙어 있다는 게 결정적이다. 이게 있으면 읍·면별로 세어 볼 수 있다. 2,853건을 모두 받아서 세었더니 이런 게 나왔다.

구분인구 비중가맹점 비중1천명당 가맹점
완도읍37.4%58.7%98.2
면 9개45.0%26.8%37.2

인구의 45%가 사는 면 지역에 가게는 27%뿐이다. 이 한 줄이 전략 전체의 출발점이 됐다. 더 좁히면 이렇게 된다.

면 지역 전체에 일반 생필품점(마트·슈퍼·상회)은 38곳이다. 여기로 연 370억 원이 흘러야 한다. 한 곳당 9.7억 원. 생일면(739명)은 그 가게가 ‘선자상회’ 한 곳이다.

“부족하다”가 아니라 “한 곳이다”라고 쓸 수 있게 되는 것. 그게 전수 수집의 값이다.


2. 긁을 때 걸리는 것들

기본 UA는 막힌다

지자체 홈페이지 상당수가 도구 접근을 차단한다. curl 기본값으로 받으면 이렇게 나온다.

<H1>Request Blocked</H1>

브라우저 User-Agent 헤더를 붙이면 통과한다. AI에게 “브라우저 UA로 다시 받아 줘”라고 하면 된다.

페이지네이션은 대개 단순하다

sub.cs?m=623&currentPageNo=2 처럼 쿼리 파라미터 하나다. 빈 결과가 나올 때까지 돌리면 끝난다. 190면에 2,853건, 몇 분이면 받는다.

★ 업종 필드는 믿으면 안 된다

이게 가장 중요한 함정이다. 완도 가맹점의 업종 칸은 자유기재였고, 38종의 표기가 난립해 있었다.

소매업(1,101) / 도소매업(15) / 도소매(4) / 소매(1) / 도매및소매업(1)
도,소매업(1) / 소매,소매업(1) / 소매업농업교육서비스업(1) / (공란 1건)

그래서 분류는 업종 칸이 아니라 상호명 매칭으로 해야 한다. “슈퍼”, “마트”, “상회” 같은 말로 거른다.

그런데 여기서 또 한 번 걸린다. 이마트24가 “마트” 패턴에 걸린다. 편의점인데 일반 마트로 세어진다. 편의점은 월 5만 원 한도가 걸린 업종이라 성격이 완전히 다르다. 편의점 브랜드와 농협·수협 계열을 먼저 빼낸 다음 세어야 맞는 숫자가 나온다. 처음 센 값과 제대로 센 값이 면별로 2~3배 차이가 났다.

난립 자체가 발견이다

업종 칸이 엉망이라는 사실은 버릴 게 아니다. 그대로 진단이 된다.

기본소득은 “주유소·편의점 합산 월 5만 원” 같은 한도를 결제 시점에 판정해야 한다. 그런데 업종코드가 이 상태면 시스템이 판정할 수가 없다. 따라서 가맹점 DB 표준화가 모든 기술 과제의 선행 조건이다.

“정비하겠습니다”가 아니라 “정비했습니다”를 쓸 수 있는 항목이 하나 생긴 것이다.

명부를 훑다 보면 카드가 튀어나온다

집계만 하고 끝내지 말고 이름을 눈으로 훑어보라고 AI에게 시키면 좋다. 완도에서는 둘이 나왔다.

  • ‘노화농협 경제사업장’이 가맹점으로 등록돼 있었다. 농협 하나로마트는 매출 기준 때문에 대부분 가맹이 안 되는데, 경제사업 부문만 분리하면 등록된다는 걸 같은 군 안에서 이미 증명하고 있었다.
  • 생일면에 ‘생일금곡마을협동조합’과 ‘카페 단하루(생일청년협동조합)‘이 이미 가맹점이었다. 가게가 가장 없는 면에서 협동조합이 이미 돌아가고 있었다. 협동조합 전략이 “새로운 실험”에서 “검증된 사례의 확장”으로 바뀌었다.

둘 다 의뢰인도 모르던 것이었다.


3. ★ 지침은 반드시 원문으로 — 결론이 뒤집힌 이야기

여기서 크게 틀렸다. 기록해 둘 만한 실수다.

하나로마트가 왜 사용처가 아닌지 알아보려고 검색을 했고, 여러 기사가 이렇게 요약하고 있었다.

행안부는 2025년 6월 운영지침을 고쳐, 마트나 슈퍼, 편의점 가맹점이 없는 면 지역의 농협 하나로마트는 매출 30억 원을 넘어도 가맹점으로 등록할 수 있게 했다.

이걸 그대로 믿고 이렇게 썼다.

“완도 9개 면은 모두 마트·슈퍼 또는 편의점이 최소 1곳 이상 있어 요건을 충족하지 못한다. 따라서 예외조항 적용 대상이 아니다.”

의뢰인이 “행안부 가맹규정이 변경되었다”고 알려 줬다. 그래서 지침 원문 PDF를 직접 받았다. 행정안전부 업무안내 페이지에 파일이 걸려 있었다. 원문은 이랬다.

➍ 마트·슈퍼·편의점 유형에 포함되는 가맹점이 없거나, 유사업종 가맹점이 있더라도 ⓐ접근성이 매우 낮거나, ⓑ판매품목·규모·업종형태 등 고려 시 종합소매업으로 보기 어려운 ‘면’ 지역 內 농협 하나로마트

※ ⓐ 접근성 : 유사업종 가맹점이 도서·산간 지역에 있어 일상적 접근이 어렵거나… ※ ⓑ 판매품목·규모 : 매장 규모가 소규모(33㎡ 이하), 생필품 또는 신선식품을 구입하기 어려운 경우, 종합소매업으로 등록되지 않은 경우, **간이과세자(연매출 1억 400만 미만)**인 경우 등

“없는”이 아니라 “없거나, 있더라도”였다. 그리고 접근성 예시에 “도서·산간”이 명시돼 있었다. 완도 9개 면은 전부 섬이다. 적용 불가가 아니라 정면으로 해당한다. 결론이 “제도가 막고 있다”에서 **“신청만 하면 된다”**로 뒤집혔다.

게다가 원문에는 예외가 하나가 아니라 다섯 갈래였고, 기사에 나온 건 그중 넷째 하나였다. 첫째 조항은 이랬다.

➊ 정책적 필요에 따른 현금성 지원 등을 상품권으로 대체하여 지급하는 경우 (예시 : 농민수당·아동수당, 고향사랑기부금 답례품 등 정책발행 상품권)

농어촌기본소득이 정확히 이것이다. 기사만 봤으면 영영 못 찾았을 조항이다.

그래서 규칙

  1. 규정 기반 전략을 쓸 때는 소관부처에서 지침 원문 파일을 받는다. 행안부는 FileDown.do?atchFileId=... 형태로 PDF를 건다. 응답 헤더의 Content-Disposition에 실제 파일명이 들어 있어 판본(2025.9 등)까지 확인된다.
  2. 원칙 조항이 아니라 예외 조항 목록 전체를 본다. 우리 사업 자체가 해당하는 조항이 숨어 있을 수 있다.
  3. 기사는 요건을 좁혀서 요약한다. “없는”과 “없거나 있더라도”의 차이가 전략 하나를 죽이고 살린다.
  4. 원문을 읽으면 의뢰 범위 밖 정비 항목이 딸려 나온다. 완도의 경우 구매한도가 지침 상한(월 200만 원)의 3분의 1인 70만 원에 묶여 있었다. 그대로 “운영 역량” 서술 재료가 된다.

4. 정리하면

단계할 일걸리는 것
1지자체 공개 목록 페이지를 찾는다읍·면 필드가 있는지 먼저 확인
2브라우저 UA로 전수 수집기본 UA는 차단됨
3상호명 매칭으로 분류업종 칸은 자유기재라 못 씀. 편의점·농협 계열 먼저 제외
4인구와 결합해 밀도·1곳당 금액 산출”부족”이 아니라 “한 곳”으로
5명부 이름을 눈으로 훑기선례·자산이 튀어나온다
6지침 원문 PDF 확보기사 요약 믿지 말 것
7예외 조항 전체를 우리 사업에 대조우리가 해당하는 조항이 있을 수 있다

AI에게 시키면 15는 한 시간 안에 끝난다. 67이 진짜 일이고, 여기서 전략이 갈린다.

숫자를 직접 만들면 주장이 사실이 되고, 원문을 직접 읽으면 사실이 기회가 된다.