zone 상권 데이터 — 왜 공공데이터를 쓰나 (출처·이유·한계)¶
요약
"서면 A-14"의 재료인 상권 범위 사각형 30~50개는 계산 불가한 지역 지식인데, 소진공이 전국 상권 경계를 이미 그려서 무료 개방(이용허락범위 제한 없음) → 자동 변환 + 사람 검수로 며칠 작도가 1~2시간으로 줄었다. 이유 3개: ①리소스(초안 233건 즉시) ②라이선스(카카오는 범위 정보가 없고 저장 즉시 약관 위반 — 공공데이터가 저장 가능한 유일한 선택지) ③근거(자의적 "내 느낌" 대신 국가 실측 경계에서 출발). 단 전부 자동은 아니다 — 2026-07-31 현재 후보 29곳 = 공공데이터 17 + 수동 작도 12(연남·가로수길 등)의 하이브리드, validate-zones.py PASS.
이 노트로 답할 수 있는 질문¶
- zone 상권 범위 데이터의 출처는 정확히 어디인가? (데이터셋 3종)
- 왜 카카오 로컬 API 대신 공공데이터를 쓰나?
- 공공데이터를 DB에 저장·가공해도 되는 라이선스 근거는?
- 공공데이터만으로 안 되는 지역은 어디고 어떻게 채웠나?
- 데이터 기준 시점과 재수집 주기는?
1. 무엇에 쓰는 데이터인가¶
격자를 눌렀을 때 행정동 이름("부산진구 부전동") 대신 "서면 A-14" 통칭 이름표를 보여주는 기능 (MSG-234/259)의 재료. 기능 코드는 완성돼 있고, 없는 것은 "서면·홍대·강남이 어디부터 어디까지"라는 범위 데이터뿐 — 전체 구조는 zone 표시명 데이터 파이프라인 해설 참조.
2. 쓰는 공공데이터 3종 (전부 공공데이터포털 · 소진공)¶
| 데이터셋 | 기준 시점 | 규모 | 역할 |
|---|---|---|---|
| 주요상권현황 CSV | 2024-01 | 전국 1,227상권 | 1차 소스 — 경계 꼭짓점이 위경도 원본이라 좌표계 문제 없음 |
| 소상공인365 회식상권 SHP | 2025-08 | 904상권 | 1차에 없는 상권명만 보충 (서울·부산 기준 실제 보충 0건) |
| 상가정보(부산) CSV | — | — | 광안리·해운대가 위 둘 다 없어서 점포 밀집도로 해변 상권 2곳을 만드는 갭필용 |
3. 왜 공공데이터인가 — 이유 3개¶
- 리소스: 며칠 → 1~2시간. "누가 며칠 그리나"로 기능 전체가 보류됐는데, 자동 변환이 초안 233건을 즉시 생성 — 사람 몫이 "그리기"에서 "고르고 이름 붙이기"로 바뀜
- 라이선스: 저장 가능한 유일한 선택지. 카카오 로컬은 ①상권 "범위" 정보 자체가 없고(지점 좌표만) ②응답을 DB에 저장하는 순간 약관 위반(ADR 장소 검색 카카오 로컬 프록시 — 데브톡 150397). 상권 범위는 DB 저장이 필수라 원천 불가. 소진공 데이터는 이용허락범위 제한 없음 — 저장·가공 자유
- 근거: "내 느낌"이 아니라 공공 실측. 국가가 실측한 상권 경계에서 출발했다는 근거가 검수 판단 기준이 되고 발표·문서 설득력도 생김
기각 대안: 순수 수동 작도(며칠+자의적) · 카카오 API(위 ②) · AI 좌표 생성(환각) · 행정동 이름 버티기 (디자인 확정 표기 미달) — 결정 상세는 MSG-234 상권 작도 결정 공공데이터 검수.
4. 한계 — 공공데이터만으로는 안 된다 (하이브리드)¶
- 유명 통칭 ≠ 상가 밀집. '주요상권' 선정이 상가 밀집 기준이라 사람들이 부르는 유명지가 빠짐 —
연남·가로수길·대학로·샤로수길·여의도·망원·노량진·문래·성신여대·동래·경성대부경대·사직 12곳은 수동 작도
(2026-07-31, 근거는 각 항목
_basis에 기록). 해변(광안리·해운대)도 점포 밀집 파생으로 별도 생성 - 이름이 잘게 쪼개져 있음 — "서면역7번 출구" 단위. "서면"으로 합치는 통명화는 사람 몫
- 기준 시점 과거 — 2024-01/2025-08이라 신흥 상권 미반영. 연 1회 재수집이면 충분
- 결론: 공공데이터는 "전부 자동"이 아니라 대부분 자동 + 소수 수동의 출발점. 29곳 중 17곳을 공짜로 얻었고, 수동 12곳도 공공데이터 사각형 사이에 끼워 넣는 방식이라 기준이 명확했다
5. 현재 상태 (2026-07-31)¶
BE 레포 scripts/zones-draft/: convert-zones.py(초안 233건) → build-candidate.py(큐레이션·합집합·
경계조정 + zones-manual.json 수동 12곳 병합 → 후보 29건) → validate-zones.py(캡·겹침·키중복,
PASS). 잔여: 팀 검수(geojson.io) → 확정본 src/main/resources/seed/zones.json 주입 → 시딩.