# 놀루트립(festmap) 저작권·이용허락 원장 — 2026-08-30

> #943 정정(2026-09-27): 아래 §3은 당시 배선 기록이다. 현재 출처 표시는 source_dataset_id의 정확한 유형별로 구분한다. source_dataset_id 존재만으로 소상공인으로 분류하지 않는다. 공개 사본은 site/docs/COPYRIGHT_LEDGER_20260830.md이며 tools/sync_public_ledger.py로 원본과 바이트 동일하게 동기화한다.
> - data.go.kr:15012005:날짜 = 소상공인 상권정보.
> - tripmate_national_날짜 = 경유 태그이며 원 기관명이 아니다. 원본 source=sosang(25,080건)은 소상공인시장진흥공단 상권정보(TripMate 경유), source=lodge(6,102건)는 원 제공기관 미확인으로 표시한다. 신규 병합은 source_origin을 보존하며 기존 샤드만 contentid의 sosang_/lodge_ 접두로 분기한다. 원천별 이용허락을 이 태그로 확정하지 않는다.
> - our_manual_날짜 = 놀루트립 운영자 직접 등록 숙소 정보.
> - 태그 없는 숫자 contentid의 관광지/문화시설/레포츠/축제 = 현재 TourAPI 빌드 자료. 그 외 식별 불가는 출처 확인 필요로 표시한다.

- 작성: worker(claude, WORKER_TODO 티켓 TICKET_NOLTRIP_HOMEPAGE_START_20260830 §3-B).
- 근거: `round/PLAN_NOLTRIP_L5_1_GUNSAN_MERGE_20260825.md` §3-1(상권 데이터 13개 필수값),
  `festmap/README.md`(SVG·TourAPI 내부 기록), `mapping/svg/LICENSE_statgarten-maps.txt`(원문),
  data.go.kr 공식 페이지 직접 조회(2026-08-30), festmap 로컬 파일 직접 열람.
- 목적: `GAP_NOLTRIP_KSK_20260825.md` §4 "저작권·이용허락" 행(순서1, 난이도 상)이 지적한
  "사용자 화면에는 출처·저작권·공공누리 표시가 없고 자산별 권리 대장이 없다"는 격차를 해소하는
  첫 원장이다. 코드 배선(무편집 원칙상 이번 라운드에서는 안 함)과 무관하게 문서만으로 먼저
  확정한다.
- 무편집 확인: festmap 기존 파일(site/·collector/·data/) 어느 것도 이 문서 작성 과정에서
  수정하지 않았다. 읽기만 했다.

## 1. 자산별 원장 표

| 자산 | 출처·제공기관 | 이용허락범위 | 비용 | 화면 표시 문구(안) | 표시 위치(안) | 철회·만료 절차 | 확인 시각·근거 |
|---|---|---|---|---|---|---|---|
| TourAPI 관광지·문화시설·레포츠·축제 데이터 | 한국관광공사(KTO), 공공데이터포털 "한국관광공사_국문 관광정보 서비스_GW" `https://www.data.go.kr/data/15101578/openapi.do` | "이용허락범위 제한 없음"(데이터 상세 페이지 원문 문구) | 무료 | "이 페이지의 관광정보는 한국관광공사 TourAPI(공공데이터포털)를 통해 제공됩니다." | 장소 상세 화면(`site/place.html`) 출처 줄 + 향후 index.html 카드 하단(승인 후) | 공식 API 스펙·이용허락범위가 변경되면 데이터 재수집 전 원장부터 갱신. 서비스키는 `intelligence-hub/.env`가 정본이며 이 원장은 키 값을 담지 않는다 | 2026-08-30, WebFetch로 data.go.kr 상세페이지 직접 조회(license="이용허락범위 제한 없음", 제공기관=한국관광공사, 비용=무료) + WebSearch 교차확인(동일 URL·"저작권 제한 없이 자유롭게 사용 가능" 문구 확인). confidence: High |
| 소상공인시장진흥공단 상권정보(군산 음식·카페 4,922행) | 소상공인시장진흥공단, `https://www.data.go.kr/data/15012005/openapi.do`, dataset ID `data.go.kr:15012005:2026-07-06` | "이용허락범위 제한 없음" | 무료 | "이 상권 정보는 소상공인시장진흥공단 상권정보(공공데이터포털)를 기반으로 합니다(수집일 2026-07-06)." | 장소 상세 화면(`site/place.html`) 출처 줄 — `category`가 음식·카페이고 `source_dataset_id` 필드가 있는 레코드에 한정 표시(실제 배선 확인 완료, 아래 §3 참조) | 원 데이터셋의 이용허락범위가 바뀌거나 폐업·정정 통지가 오면 `site/data/provenance/sosang_gunsan_food_cafe_20260706.json` 원장부터 갱신 후 재배선 | `round/PLAN_NOLTRIP_L5_1_GUNSAN_MERGE_20260825.md` §3(2026-08-25 확정) 그대로 인용, 오늘(08-30) 재해석 없음. confidence: High |
| TripMate 경유 소상공인 음식·카페 25,080행 | 원본 source=sosang, contentid=sosang_*. 제공기관: 소상공인시장진흥공단 상권정보. TripMate는 경유 프로젝트 | 이 묶음의 원 수집 버전·개별 이용허락은 추가 확인 필요; 군산 4,922행의 계약을 자동 적용하지 않음 | 미확인 | 소상공인시장진흥공단 상권정보 · TripMate 경유 병합 | 상세 출처 줄 | 원천/권리 정정 확인 후 재병합 | 2026-09-27 원본 tripmate_places.jsonl과 현재 채택 ID 25,080개 source 전수 대조; 943 R2 source-origin-audit.json |
| TripMate 경유 숙박 6,102행 | 원본 source=lodge, contentid=lodge_*. 원 제공기관은 미확인 | 미확인 — 공공데이터 또는 자유 이용으로 단정하지 않음 | 미확인 | 출처 확인 필요 · TripMate 경유 숙박 자료 · 원 제공기관 미확인 | 상세 출처 줄 | 원 제공기관·이용조건 확보 후 원장부터 갱신 | 2026-09-27 원본과 현재 채택 ID 6,102개 source 전수 대조; lodge라는 내부 분류만 확인 |
| 지도 SVG(시도 17·시군구 250 경계) | statgarten/maps(GitHub), Copyright (c) 2022 StatGarten, MIT License | MIT(자유 사용·수정·배포·상업적 이용 허용, 저작권 고지·라이선스 문 포함 조건) | 무료 | "지도 데이터는 statgarten/maps(MIT License)를 사용합니다." | 앱 정보·크레딧 화면(현재 미존재 — 신설 시 표시 위치, 최소한 이 원장 링크로 대체 가능) | MIT 조건상 별도 철회 절차 없음(영구 허용) — 원본 저장소가 라이선스를 변경해도 이미 배포·복제된 버전에는 소급 적용되지 않음(일반 MIT 관행) | `mapping/svg/LICENSE_statgarten-maps.txt` 전문 직접 열람(2026-08-30) + `festmap/README.md:16` 기록과 일치. confidence: High |
| 마스코트 "놀루" 이미지(`site/assets/mascot/nollu_*.png`, PNG 11종) | ★미확정 — 아래 §2 참조 | ★미확정 | ★미확정(자체 제작으로 추정 시 해당 없음) | (미확정 — §2 결론 전에는 화면 표시 문구 확정 불가) | (미확정) | (미확정) | 2026-08-30 직접 조사, confidence: Low~Medium(§2) |
| ★2026-08-31 추가 — TourAPI 이미지 자산(`firstimage` 필드, 18,283건, 전량 `tong.visitkorea.or.kr` 호스팅) | 한국관광공사(KTO), 위 TourAPI 데이터 행과 동일 데이터셋(`data.go.kr/data/15101578`)의 첨부 이미지 URL | "이용허락범위 제한 없음"(데이터 자체와 동일 라이선스 조건 — 이미지가 별도 데이터셋으로 분리돼 있지 않고 같은 응답 필드에 포함됨) | 무료 | "장소 사진은 한국관광공사 TourAPI가 제공하는 이미지(tong.visitkorea.or.kr)입니다." | 장소 상세 화면(`site/place.html`) 대표 이미지 하단(향후 추가 권고 — 이번 라운드는 원장 등재까지만) | TourAPI 이미지 URL이 만료·404되면 화면에서 자동으로 플레이스홀더(🎪)로 대체되도록 이미 배선돼 있음(`place.js`의 `img.addEventListener("error", ...)`, 08-30 구현) — 별도 철회 절차 불요, 원천 만료를 그대로 반영 | 2026-08-31, `site/data/sido/*.json` 24,741행 전수 스캔 직접 실측(firstimage 18,283건·전부 tong.visitkorea.or.kr 도메인 확인, homepage 18건과 함께 재검산 — GAP_NOLTRIP_KSK_20260825 08-25 수치와 정확히 일치, 군산 상권 병합분은 firstimage 전량 공란이라 총량 불변 확인). confidence: High |
| ★2026-08-31 추가 — TourAPI 축제 홈페이지 외부링크(`homepage` 필드, 18건) | 각 축제·행사 주관 기관의 공식 홈페이지(TourAPI 응답 필드로 제공됨 — 예: 보령머드축제→mudfestival.or.kr, 부산바다축제→festivalbusan.com 등) | 해당 없음(우리 저작물이 아니라 TourAPI가 중개하는 제3자 공식 사이트로의 단순 링크) | 무료 | "홈페이지 ↗ (외부 사이트로 이동합니다)" | 장소 상세 화면(`site/place.html`) 홈페이지 링크(이미 `target=_blank rel="noopener noreferrer"`로 배선됨, 08-30 구현) | 링크가 깨지면(사이트 폐쇄 등) TourAPI 원본 데이터가 갱신될 때까지 우리 쪽에서 개별 수정하지 않음(원천 데이터 그대로 노출이 원칙 — 데이터 결함을 숨기지 않는 UX와 동일 원칙) | 2026-08-31, 18건 전수 직접 열람(도메인 목록 확인 — 전부 축제 주관처 공식 사이트로 보이며 스팸·악성 도메인 패턴 없음). confidence: Medium(18건 전수 도메인명은 확인했으나 실제 사이트 콘텐츠까지 방문 검증하지는 않음) |

## 2. ★티켓 문구 정정 — 마스코트는 "SVG·MIT"가 아니다(할루시네이션 방지 원칙에 따른 정직 보고)

이 티켓(TICKET_NOLTRIP_HOMEPAGE_START_20260830) §3-B 원문은 "README(마스코트 SVG MIT·TourAPI)"라고
적어 마스코트도 statgarten/maps와 같은 MIT SVG로 취급할 수 있다고 읽힌다. 오늘 직접 확인한 결과
이 문구는 두 가지를 섞은 것으로 보인다 — **정정이 필요하다**:

1. `festmap/README.md`가 명시하는 MIT 라이선스는 `mapping/svg/`의 **지도 경계 SVG**(statgarten/maps)
   에 대한 것이다(README.md:16 "statgarten/maps SVG 원본(MIT 라이선스...)"). README 어디에도
   마스코트(놀루) 이미지의 출처·라이선스를 기록한 문장이 없다(README.md 전문 직접 열람, 2026-08-30).
2. 마스코트 파일은 애초에 **SVG가 아니라 PNG**다(`site/assets/mascot/nollu_*.png`, 11개 포즈).
   statgarten/maps 저장소는 지도 SVG 저장소이며 마스코트 캐릭터를 포함하지 않는다.
3. `round/FESTMAP_P1_REPORT.md:14`가 마스코트 동작 세트를 두고 "입체 동작세트는 **이미지 생성**
   쿼터 리셋 후 `MASCOT_RUN` 상수 1곳만 교체하면 전환되는 구조"라고 적어, 이 캐릭터가 AI 이미지
   생성으로 만들어졌을 가능성을 시사한다. 다만 이 문장만으로 "자체 제작·저작권 귀속 확정"이라고
   단정하기에는 근거가 얇다(생성 도구·프롬프트·생성 주체 기록을 이번 조사에서 찾지 못했다) —
   `site/assets/mascot/`, `festmap/README.md`, `round/*.md` 전체를 검색했으나 별도 라이선스 파일이나
   출처 기록은 발견되지 않았다.

**결론**: 마스코트의 출처·권리는 이번 원장에서 "확정"이라고 쓰지 않는다. 자체(내부) 제작 이미지일
가능성이 높으나(제3자 소재를 가져다 쓴 흔적은 없음 — 외부 저장소·스톡 사이트 참조가 코드·문서
어디에도 없다), 확정하려면 실제 생성 경위(어느 도구·언제·누가)를 아는 사람(제이크 또는 원 작업자)의
확인이 필요하다. 화면에 "MIT" 같은 구체 라이선스 문구를 붙이는 것은 이 불확실성 위에서는 오히려
허위표시 위험이 있다 — 원장 확정 전까지는 화면에 라이선스 문구를 넣지 않는 것을 권고한다(§4).

## 3. 실측 배선 확인(place.html) — 출처 문구가 실제로 갈리는지 확인

`site/place.html`(이번 티켓 3-A 산출물)의 장소 상세 화면은 레코드에 `source_dataset_id` 필드가
있으면 상권 문구를, 없으면 TourAPI 문구를 표시하도록 배선했다. 헤드리스 렌더로 직접 확인했다:

- 군산 상권 레코드(contentid `MA010120220800045288`, category=음식) → 표시: "출처: 소상공인시장진흥공단
  상권정보 (수집: 2026-07-06) · 저작권·이용허락 원장 보기"
- TourAPI 레코드(contentid `1182422`, category=attraction, "진포시비공원") → 표시: "출처:
  TourAPI(한국관광공사 공공데이터) · 저작권·이용허락 원장 보기"

두 경로 모두 이 문서(`docs/COPYRIGHT_LEDGER_20260830.md`)로 링크된다(상대경로
`../docs/COPYRIGHT_LEDGER_20260830.md`, site/ 기준).

## 4. 다음 단계(이번 라운드 범위 밖 — 축소 아님, 순서상 다음)

1. 마스코트 출처를 제이크 또는 원 제작자에게 직접 확인 — §2의 미확정을 확정으로 승격.
2. 확정 후 `site/place.html`·(승인 시) `index.html`에 마스코트 크레딧 문구 추가.
3. ★TourAPI·상권 데이터 문구를 `index.html`의 실제 카드 목록에도 노출 — 08-31 현재도 여전히
   미착수(의도적). index.html/app.js 실배선은 외부노출·비가역 성격이라 오늘(08-31)도 손대지
   않고 제이크 승인을 남겨둔다(08-31 master 지시 "index.html 실배선 등 외부노출·비가역은 미리
   하지 말고 승인 남겨라" 그대로 준수 — §3-A의 카드→상세 연결 1줄만 08-30에 별도 승인받아
   이미 배선됐고, 이 §4-3(출처 문구 자체의 index.html 노출)은 그것과 별개로 여전히 미승인).
4. ~~이미지 필드(firstimage) 원장 등재~~ → ★2026-08-31 완료(§1 표에 두 행 추가, 아래 §5 참조).
5. (신규, 08-31 발견) 이미지 URL 만료 시 화면 폴백은 이미 구현돼 있으나, TourAPI 원본이 이미지를
   완전히 삭제(URL 자체가 영구 404)했는지를 주기적으로 점검하는 배치는 없다 — 필요성 판단은
   범위 밖(다음 라운드 후보로만 기록).

## 5. ★2026-08-31 심화 이력 (로드맵 9/1~2 "순서1 마무리" 조기착수, master 지시)

- 배경: `round/PLAN_NOLTRIP_HOMEPAGE_20260829.md`(DECDAE5A) §4의 9/1~2 예정분 중 이 원장·
  `place.js`에 직접 해당하는 부분만 오늘 앞당겼다. index.html/app.js 실배선(외부노출·비가역)은
  §4-3에 명시한 대로 오늘도 하지 않았다 — TourAPI 수집 자동화·TripMate 전국 확대는 이 원장·
  place.js의 범위 밖이라 이번 심화에 포함하지 않았다(축소 아님, 다른 트랙).
- §1 표에 2행 추가(위 참조): TourAPI 이미지 자산(18,283건)·TourAPI 축제 홈페이지 외부링크(18건).
  두 수치 모두 08-31 오늘 `site/data/sido/*.json` 24,741행 전수 재스캔으로 직접 검산했다(GAP
  문서의 08-25 수치와 정확히 일치 — 08-25~08-31 사이 군산 상권 병합분 4,922건은 firstimage·
  homepage가 전량 공란이라 전체 카운트에 영향이 없음을 확인).
- `site/place.js`(장소 상세 화면)에 실제 데이터에 값이 있을 때만 표시되는 필드 3종을 추가했다
  (없는 값을 지어내지 않고, 있는 값은 숨기지 않는다는 §2·§3의 정직 원칙을 그대로 승계):
  ① 전화(`tel`) ② 축제 요금/주최/운영시간 등(`fee` 딕셔너리 — ★필드명이 GAP_NOLTRIP_KSK_20260825가
  적은 `fee_info`가 아니라 실제로는 `fee`임을 오늘 처음 확인, 정직 기재) ③ 데이터 신선도 고지
  (`archive_status`/`archive_note` — "2026년 8월 개최일 기록(신규 수집 창 미포함·취소·변경
  가능성)" 류 원본 고지문을 화면에 그대로 노출).
- `place.html`(id 없이 목록 모드로 진입 시)에 검증된 타 시도 바로가기 5개(전북 군산시·서울 중구·
  부산 중구·제주 제주시·경북 고령군)를 추가해, 어제(08-30)까지 사실상 군산 1개 지역에만 진입
  가능했던 것을 넓혔다 — 각 링크는 오늘 `data/sido/*.json`을 직접 열어 실존을 확인한 sido/sigungu
  조합만 사용했다(존재하지 않는 시군구로 링크하지 않는다).
- 검증(헤드리스 Playwright, 로컬 정적서버 — 검증 후 즉시 kill): 지역 바로가기 5개 전부 정상
  렌더+클릭 시 실제 이동(서울 중구 146건 확인)·fee/tel/archive_status 전부 있는 레코드(영양고추
  H.O.T 페스티벌, contentid 1073801)에서 신규 필드 5행 전부 정확히 렌더·이 필드들이 없는 일반
  레코드(진포시비공원, contentid 1182422)에서는 빈 박스 없이 정상 회귀(콘솔 에러 0). index.html·
  app.js·style.css·data/*는 08-31 오늘 mtime 무변경 확인(무접촉).
