# 04-2: 데이터를 구하고, 버린다

> 승인(PASS) · 반려 23차(승인 후 소폭 개정) 개정(2026-09-04). 공통 조항 `assets/contracts/COMMON.md`(화면 지시 조작 태그 필수 개정·§0.16-a notes 전수 재대조·§0.18 후속 차시 제목만 개정 포함), 계약 `assets/contracts/04-2.md`(시연 사전 16열·중복 절 225그룹/24.8%·삽질 2장면 2.5분·소분류 이름 「가발 소매업」·「입시·교과학원」·인허가 근거 개정 포함), 반려 지시 `assets/contracts/04-2-rev1.md~rev23.md`(누적 R1~R10·S1~S6·T1~T10·U1~U6·V1·V2·W1~W4·X1~X3·Y1~Y3·Z1~Z5·AA1·AA2·AB1~AB3·AC1·AC2·AD1~AD3·AF1~AF3·AG1~AG5·AH1·AH2·AI1·AI2·AJ1·AJ2·AK1~AK4·AL1·AL2·AM1·AM2·AN1·AN2·AO1~AO5), 소재 `assets/market.md`, 데이터 `assets/data/daejeon/README.md`(「정제 실측」 절), 시연 원본 `assets/data/daejeon/shops_2026-06_full.csv`.

## 기본 정보
| 항목 | 내용 |
|---|---|
| 시간 | 25~30분 (발화 5,000~7,500자 + 시연 조작 시간 합산, §0.4) |
| 유형 | 시연 |
| 카테고리 | 04 AI 데이터 분석 |
| 선수 차시 | 04-1 |
| 상태 | rev23(승인) |

## 학습 목표
- 정제의 다섯 검사(결측·이상치·중복·타입/단위·논리 모순)로 데이터를 점검할 수 있다
- 데이터 사전(열 이름·뜻·타입·단위·허용값)을 작성할 수 있다
- 버릴 규칙을 세우고 버린 행 수를 기록해 남이 재현할 수 있게 만들 수 있다

## 구성
| 구간 | 분 | 활동 | 목적 |
|---|---|---|---|
| 도입 | 2 | 완성된 데이터 사전 한 장 + 버린 행 기록 화면 먼저 보여주기 | 오늘의 결과물을 먼저 확인 |
| 이론 | 6 | 정제와 데이터 사전 — 다섯 검사, 다른 예 = 0원 주문을 평균으로 채우는 경우 | 어디서든 쓰는 일반형을 대전 없이 심는다 |
| 시연 | 15(+조작) | 대전 상가업소정보 원본(80,704행×39열)을 연다 → 데이터 사전(검사용 16열) → 다섯 검사 실측 → 버릴 규칙 셋·버린 행 기록 → 13열로 줄이기, 삽질 2장면 2.5분(rev14 개정), 함정 장면, 전공 구간 | 대전 소재에 실측 숫자로 적용, 계약 순서(rev9) 그대로 |
| 정리 | 2 | 한 줄 + 다음 차시 갈고리 + 검정 질문 자막 | 연결 |

합계 25~30분(rev23 개정, COMMON §0.1 — 4박자 선언 2·6·15·2=25, 시연 상한 18.2 고정 없이 총량 25~30에서 역산). 시연 구간의 무발화 조작 시간은 화면 지시에 단가표 유형(파일열기20·열고르기30·검사실행30·AI응답대기30·표작성20·화면전환8, 초)으로 표기한다(§0.4 rev3 개정).

## 연결
- **이전**: 04-1 — 좋은 질문의 조건과 이번 5편 내내 답할 질문 고르기
- **다음**: 4-3 「무엇으로 나눌 것인가 — 비교의 기준」

---

## 상세 전개

### 도입 (2분)

**[화면: 완성된 데이터 사전 한 장 — 열 이름·뜻·타입·단위·허용값 표. 그 옆에 버린 행 기록 — 규칙별 건수. 둘 다 화면에 떠 있다(재구성 — 촬영 시 실제 완성본 화면으로 교체). · 조작: 화면전환]**

(축자)
> "오늘은 이 화면 두 장을 만드는 과정을 봅니다 — 왼쪽은 데이터 사전, 오른쪽은 버린 행 기록입니다."

(요점) 두 화면을 잠깐 짚는다. 데이터 사전은 열마다 이름과 뜻, 타입, 단위, 허용값이 채워진 표라는 것, 버린 행 기록은 규칙 이름과 그 규칙에 걸린 건수가 나열된 표라는 것만 확인시키고 넘어간다. 39개 열 중에 무엇을 남기고 몇 행을 왜 버릴지는 지금부터 만들어 간다는 것으로, 이미 다 됐다고 말하지 않는다.

(축자)
> "이번 차시에서 정하는 것은 무엇을 세고 무엇을 버릴지입니다."

(요점) 지난 차시에서 고른 질문은 앞으로 다섯 편 내내 붙들고 갈 질문이다. 그 질문에 답할 데이터를 오늘 처음 연다. 받은 표를 바로 세면 안 되는 이유, 세기 전에 반드시 걸러야 하는 이유를 오늘 두 화면으로 확인한다는 것을 짚고 이론으로 넘어간다.

### 이론 (6분)

(요점, 도입) 04-1에서 좋은 질문을 골랐다. 질문이 정해지면 다음은 데이터인데, 데이터는 받은 그대로 쓸 수 없다는 것부터 짚는다. 실무에서 받는 표는 빈칸이 있고, 같은 뜻인데 다른 이름으로 적혀 있고, 같은 행이 두 번 들어 있다. 이걸 걸러내는 과정을 정제라고 부른다.

(축자)
> "규칙 없이 눈으로 골라내면 결과는 나오지만, 남이 다시 만들 수 없습니다."

(축자, 핵심 정의)
> "정제는 다섯 가지를 봅니다. 결측 — 빈칸이 있는가. 이상치 — 말이 안 되는 값이 있는가. 중복 — 같은 행이 두 번 들어 있는가. 타입과 단위 — 숫자여야 할 열에 문자가 섞여 있거나, 단위가 열마다 다른가. 논리 모순 — 두 열을 같이 보면 앞뒤가 안 맞는가."

(요점) 다섯 검사를 하나씩 짧게 풀어준다. 결측은 빈칸 자체가 아니라 빈칸이 왜 생겼는지를 묻는 것이라는 점, 이상치는 값이 크거나 작아서가 아니라 그 열의 정의에서 벗어나서 문제라는 점, 중복은 완전히 같은 행뿐 아니라 키 값만 같아도 걸린다는 점, 타입·단위는 숫자 열에 문자가 섞여 있거나 어떤 행은 다른 단위로 적힌 경우라는 점, 논리 모순은 한 열만 보면 멀쩡한데 다른 열과 맞춰 보면 틀린 경우라는 점을 짚는다.

(요점, 중복 검사 예) 다른 분야에서 하나 더 든다. 어느 설문 응답 표에 같은 사람이 이름과 이메일만 바꿔서 두 번 응답한 행이 섞여 있으면, 행 전체를 비교해서는 중복이 안 잡힌다. 응답자를 식별하는 열 하나를 키로 정하고 그 키가 같은 행을 찾아야 잡힌다. 중복을 잡는 기준은 표 전체 일치가 아니라 무엇을 키로 볼 것인가에 달려 있다는 것을 짚는다.

(요점, 이상치 검사 예) 이상치도 하나 더 짚는다. 어느 배달 서비스의 배달 시간 열에 마이너스 값이 찍혀 있다면, 이건 큰 값도 작은 값도 아니라 그 열의 정의 자체를 어긴 값이다. 시간은 음수가 될 수 없다는 정의를 먼저 세워 두지 않으면, 이 값이 이상치인지조차 판단할 수 없다는 것을 강조한다.

(축자, 다른 예)
> "0원 주문을 평균으로 채우면 취소 주문이 매출이 됩니다."

(요점) 이 문장을 풀어 설명한다. 어느 판매 기록에 취소된 주문은 금액이 0원으로 남는다. 이걸 결측으로 착각해서 평균값으로 채워 넣으면, 취소된 주문이 갑자기 평균 금액의 매출로 둔갑한다. 0과 빈칸은 서로 다른 사건이라는 것 — 0은 일어났는데 값이 0이라는 뜻이고, 빈칸은 값을 모른다는 뜻이다 — 이 둘을 같은 방식으로 처리하면 없던 사실이 생긴다는 것을 강조한다.

(축자, 지정)
> "0과 빈칸은 다른 뜻입니다."

(요점) 정제가 끝나면 다음이 데이터 사전이라는 것으로 넘어간다. 데이터 사전은 표에 있는 열마다 이름, 뜻, 타입, 단위, 허용값을 적어 둔 문서다. 정제 규칙을 정한 사람과 그 데이터를 나중에 쓰는 사람이 다른 경우가 있기 때문에 필요하다. 사전이 없으면 다음 사람이 같은 결측·이상치 판단을 처음부터 다시 해야 한다.

(요점, 사전 예시 한 줄) 사전 한 줄이 어떻게 생겼는지 다른 분야로 보여준다. "가입일" 열이라면 뜻은 회원이 서비스에 처음 가입한 날짜, 타입은 날짜, 단위는 없음, 허용값은 서비스 개설일 이후부터 오늘까지라고 적는다. 이 한 줄만 있으면 나중에 서비스 개설일보다 앞선 가입일이 나왔을 때 사람이 매번 판단하지 않아도 바로 이상치로 잡을 수 있다는 것을 짚고 시연으로 넘어간다.

### 시연 (15분 + 조작)

**[화면: 대전 상가업소정보 원본 표가 열려 있다. 2026-06 시점, 80,704행 39열(재구성 — 촬영 시 실제 실행 화면으로 교체). · 조작: 파일열기]**

(요점) 04-1에서 고른 질문에 답하려면 대전 상가업소정보 원본부터 열어야 한다. 2026년 6월 시점, 80,704행 39열이라는 규모를 화면에서 확인시킨다.

**[화면: 데이터 사전 16행이 채워진다 — 열 이름 | 뜻 | 타입 | 단위 | 허용값(재구성 — 촬영 시 실제 실행 화면으로 교체). · 조작: 표작성]**

(요점) 검사에 쓸 열 16개를 먼저 사전에 적는다 — 13개는 그대로, 지점명·동정보·호정보 세 개는 「검사 후 삭제 후보」다. 열을 미리 줄이면 이 셋을 검사할 수 없다. 시군구명은 문자열, 허용값은 대전 다섯 개 구. 경도·위도는 실수, 단위는 도(度)다.

(축자)
> "허용값은 데이터에서 뽑지 않습니다. 열의 정의에서 옵니다."

(요점) 허용값을 데이터의 최솟값·최댓값으로 채우면, 그 검사는 아무것도 걸러내지 못한다. 그래서 대전시 행정경계가 정의다. 대전의 수리적 위치를 기준으로 근사 외접 사각형을 잡으면 경도 127.24에서 127.56, 위도 36.18에서 36.51이다.

**[화면: 다섯 검사가 하나씩 실행되며 결과 숫자가 뜬다(재구성 — 촬영 시 실제 실행 화면으로 교체). · 조작: 검사실행]**

(요점, 결측) 결측 검사부터 실행한다. 표준산업분류명 빈칸이 22건 나온다 — 이건 진짜 결측이다, 있어야 할 값이 비어 있다. 그런데 지점명 빈칸은 69,924건, 전체의 86.6퍼센트다. 이건 결측이 아니다.

(축자)
> "빈칸이 86.6퍼센트라고 해서 이 열을 버리면 안 됩니다. 지점명이 비어 있다는 건 지점이 없다는 뜻이지, 모른다는 뜻이 아닙니다."

(요점) 22건과 69,924건, 두 빈칸이 왜 다른지가 방금 이론에서 배운 "0과 빈칸은 다른 뜻입니다"의 실물이라는 것을 짚는다. 표준산업분류명은 있어야 하는데 없어서 결측이고, 지점명은 없는 게 정상이라 값이다.

(요점, 중복) 중복 검사로 넘어간다. 상가업소번호로 보면 중복은 0건, 이 번호는 전부 고유하다. 상호명과 지번주소만 합쳐서 보면 그룹 907개, 탐지 1,862행이다. 그중 225그룹, 24.8퍼센트는 소분류가 다르다 — 정육점과 소고기 구이/찜, 가발 소매업과 입시·교과학원이 한 자리에 있다. "두 번 들어간 것"이라 부르면 넷 중 하나가 거짓이 된다.

**[화면: 그룹 하나를 연다 — 농부애한우 | 유성구 죽동 599-2 → 소고기 구이/찜 · 정육점(재구성 — 촬영 시 실제 실행 화면으로 교체). · 조작: 화면전환]**

(요점) 이 그룹도 마찬가지다 — 소분류가 다르니 같은 가게는 아니다.

(축자)
> "무엇이 같은 가게인지 먼저 적지 않으면, 중복의 개수는 정해지지 않습니다."

(요점) 사전에 먼저 적는다 — 같은 가게는 상호·지번주소·소분류가 같은 행이다. 이 키로 다시 세면 그룹 686, 탐지 1,411, 제거 725다. 상호+지번주소만 쓴 955는 키를 바꾸면 이렇게 달라진다는 비교로만 남긴다.

**[화면: 경도·위도 열이 숫자 검사를 통과한다 — 걸린 값 0건(재구성 — 촬영 시 실제 실행 화면으로 교체). · 조작: 검사실행]**

(축자, 타입/단위)
> "경도·위도에 문자가 섞였는지 검사했습니다 — 걸린 값 0건. 이 파일은 39열 중 33열을 따옴표로 감싸고, 경도·위도를 포함한 숫자 6열만 따옴표 없이 적어 두었습니다. 더러운 원천에서는 여기서 걸립니다."

(요점, 이상치) 이상치 검사도 위에서 정한 허용값을 쓴다 — 대전 밖으로 나가는 행은 0건이다. 걸리는 게 없어도 결과는 기록한다.

**[화면: 시군구명과 지번주소를 나란히 놓고 비교한다 — 불일치 0건(재구성 — 촬영 시 실제 실행 화면으로 교체). · 조작: 검사실행]**

(요점, 논리 모순) 논리 모순 검사도 실행한다. 시군구명과 지번주소의 구 이름이 다른 행을 세면 0건이다.

(축자)
> "검사했는데 아무것도 안 걸려도, 검사했다는 사실은 기록합니다."

**[화면: 동정보·호정보 두 열이 전부 빈칸으로 표시된다(재구성 — 촬영 시 실제 실행 화면으로 교체). · 조작: 검사실행]**

(요점, 결측·열 단위) 동정보와 호정보 두 열은 100퍼센트 빈칸이다. 이건 이상치가 아니라 결측이다 — 정의를 벗어난 게 아니라 값이 아예 없어서다. 행이 아니라 열 전체가 비어 있는 열 단위 결측이라, 버릴 때도 열 자체를 버린다.

**[화면: 버릴 규칙 세 줄이 하나씩 뜬다(재구성 — 촬영 시 실제 실행 화면으로 교체). · 조작: 표작성]**

(요점) 다섯 검사 결과를 놓고 버릴 규칙 셋을 정한다 — 표준산업분류명 결측, 상호·지번주소·소분류가 같으면 앞을 남기고 뒤를 버리는 중복, 동정보·호정보 열. 숫자는 기록 표에 남긴다.

**[화면: 버린 행 기록 표 — 규칙 이름 | 키 | 탐지 | 제거 | 비율. 표 아래 한 줄: 「39열 중 23열 제외, 목록은 notes.md」(재구성 — 촬영 시 실제 실행 화면으로 교체). · 조작: 표작성]**

(요점) 다섯 칸(규칙·키·탐지·제거·비율)으로 표를 남긴다. 표준산업분류명 결측은 22행. 중복은 키가 상호·지번주소·소분류, "같으면 앞 행을 남기고 뒤 행을 버린다"는 규칙으로 탐지 1,411행, 제거 725행이다. 동정보·호정보는 비율 칸에 「열 삭제」라고 적는다 — 행 삭제 비율과 섞지 않는다. 22행과 725행을 더하면 747행, 전체의 0.93퍼센트다. 규칙과 건수를 남기면 다음 시점에도 그대로 적용할 수 있다.

**[화면: 16개 열 중 3개가 빠지고 13개로 좁혀진다(재구성 — 촬영 시 실제 실행 화면으로 교체). · 조작: 열고르기]**

(요점) 검사와 버릴 규칙이 끝났으니 이제 13개로 줄인다. 상가업소번호·상호명·상권업종대분류명·상권업종중분류명·상권업종소분류명·표준산업분류명·시군구명·행정동명·법정동명·지번주소·도로명주소·경도·위도. 지점명·동정보·호정보는 검사에만 쓰고 남기지 않는다.

(축자)
> "질문에 쓰지 않는 열은 사전에 올리지 않고 걷어냅니다 — 39열 중 23열. 걷어낸 열 이름은 기록에 남깁니다."

(요점, 삽질 2.5분) 실제로 겪은 두 가지 장면을 순서대로 보여준다.

**[화면: 삽질 1 — 업종 분류표 "무인" 검색 0건 → 상호명 검색으로 전환(재구성 — 촬영 시 실제 화면으로 교체). · 조작: 화면전환]**

첫째, 업종 분류표에 "무인"이라는 이름의 코드가 아예 없었던 경우다. 소분류 이름을 전부 뒤져도 없어서, 상호명에서 "무인"이 들어간 이름을 대신 찾았다. 서울 탐침 291건 중 20건 표본에서 4건이 오탐이었다 — "무인양품"처럼 브랜드 이름이 우연히 겹친 경우다. 텍스트 검색만으로는 안 되고 눈으로 걸러야 한다는 것을 이때 배웠다. 대전에서는 61건 전수를 같은 기준(무인 매장이 아닌데 글자만 겹침)으로 보니 3건이 오탐, 정제 규칙(중복 1행)까지 적용하면 57건이 남는다.

**[화면: 삽질 2 — CSV 다운로드 배지 → 실제로 열린 제공거부 통보서 PDF(재구성 — 촬영 시 실제 화면으로 교체). · 조작: 화면전환]**

둘째, 대전 청년통계라는 이름의 파일에 CSV로 받을 수 있다고 표시돼 있었는데, 눌러 보니 CSV가 아니라 공공데이터 제공거부결정 통보서 PDF 두 쪽이 내려왔다. 목록·상세 화면 어디에도 제공 거부라는 사실이 적혀 있지 않았다 — 실제로 눌러 봐야만 알 수 있었다. 화면 표시를 믿지 않고 확인하기 전까지는 확정되지 않는다는 것을 이 장면이 보여준다.

두 장면 모두 화면 그대로만 보여주고, 그때마다 정제 다섯 검사로 돌아가 다시 확인했다.

**[화면: AI 에이전트 채팅창. "결측치 처리해 줘"라고 입력하는 장면(재구성 — 촬영 시 실제 실행 화면으로 교체). 응답이 코드블록 텍스트로 뜬다. · 조작: AI응답대기]**

(요점, 함정) 방금 만든 표를 놓고 에이전트에게 "결측치 처리해 줘"라고만 시킨다. 에이전트는 지점명 69,924건의 빈칸을 전부 "본점"으로 채우거나, 표준산업분류명 22건을 최빈값 "한식 일반 음식점업" 7,900건으로 채운다.

```
(재구성 — AI 출력 예시)
지점명 결측 69,924건을 "본점"으로 대체했습니다.
표준산업분류명 결측 22건을 최빈값 "한식 일반 음식점업"으로 대체했습니다.
```

(축자)
> "없던 지점이 6만 9천 개 넘게 생기고, 없던 분류가 스물두 곳에 생깁니다."

(요점) 방금 이론에서 다룬 "0과 빈칸은 다른 뜻입니다"가 실제로 부서지는 장면이다. 에이전트가 틀린 게 아니라 지시가 부족했다 — 빈칸이 무엇을 의미하는지는 사람이 먼저 판단해서 알려줘야 한다.

**[화면: 음식 대분류 소분류 중 카페와 빵/도넛 두 항목이 나란히 뜬다(재구성 — 촬영 시 실제 실행 화면으로 교체). · 조작: 화면전환]**

(요점, 전공이 드러나는 곳) 업종 소분류에서 인물의 전공이 나온다. 음식 대분류 23,850건 중 백반/한정식 5,111·돼지고기 구이/찜 1,708·김밥/만두/분식 1,409·치킨 1,211, 카페 3,836·빵/도넛 881건이다. 카페는 비알코올, 빵/도넛은 기타 간이로 분류표에서 다른 칸에 있다. 그런데 동네에서는 빵집이 커피를 팔고 카페가 빵을 판다. 인물은 이 둘을 묶지 않는데, 이유는 분류표가 갈라놔서가 아니다.

(축자)
> "이 둘을 한 줄로 묶으면 안 됩니다. 인허가가 다르고, 망하는 이유가 다릅니다."

(요점) 갈리는 것은 분류표가 아니라 인허가다 — 카페는 휴게음식점영업, 빵/도넛은 제과점영업으로 신고가 다르다. 원가 구조도, 문을 닫는 이유도 다르다고 본다. 분류표는 다른 중분류에 넣어 놨을 뿐 이유까지 말해 주지 않는다 — 식품영양학과 졸업생만 그 이유를 곧장 안다.

### 정리 (2분)

**[화면: 데이터 사전과 버린 행 기록, 도입에서 봤던 두 화면이 완성된 채로 다시 뜬다(재구성 — 촬영 시 실제 완성본 화면으로 교체). · 조작: 화면전환]**

(축자, 지정)
> "버린 행을 기록하지 않으면 남이 재현할 수 없습니다."

(요점) 오늘 만든 두 장이 왜 남는지 정리한다. 데이터 사전은 다음 시점 데이터가 들어와도 같은 기준으로 다시 검사할 수 있게 해 주고, 버린 행 기록은 오늘 지운 행을 다른 사람이 똑같이 지울 수 있게 해 준다. 22행과 725행이라는 숫자 자체보다, 그 숫자가 나온 규칙을 남겼다는 것이 오늘의 핵심이라는 것을 한 번 더 짚는다.

(축자, 갈고리)
> "이제 셀 수 있습니다. 그런데 그냥 세면 서구가 이깁니다."

(요점) 다음 차시로 넘어가는 긴장을 짧게 건다. 오늘 정한 규칙대로 세면 자치구마다 숫자는 나오지만, 구마다 크기가 다르기 때문에 그냥 늘어놓고 비교하면 가장 큰 구가 항상 이기는 것처럼 보인다는 것만 던지고, 그 기준을 다음 차시에서 다룬다는 것으로 마무리한다.

[자막: 몇 행을 버렸고, 왜 버렸습니까? 그 규칙을 남이 그대로 적용할 수 있습니까?]

---

## 근거

이 편의 수치는 신규 웹 조사가 아니라 오케스트레이터가 실측한 `assets/data/daejeon/README.md` 「정제 실측」 절(원본 `assets/data/daejeon/shops_2026-06_full.csv`, 80,704행)에서 그대로 인용했다. 집필자가 직접 원본을 quote-aware CSV 파서(perl)로 재파싱해 대조 확인 — 표준산업분류명 결측 22건 · 상호+지번주소만의 중복 탐지 1,862행(907그룹) · **키를 상호+지번주소+소분류로 정의한 중복 탐지 1,411행(686그룹)·제거 725행**(반려 6차 W1, 907그룹 중 225그룹은 소분류가 달라 「같은 가게」가 아니었다) · 좌표 범위(경도 127.24~127.56·위도 36.18~36.51) 밖 0건 · 시군구명-지번주소 구 불일치(논리 모순) 0건, 전부 README와 일치(검증자 재확인 대상, 방법은 `notes.md`).

좌표 허용값 127.24~127.56 / 36.18~36.51(경도/위도)의 출처는 대전광역시청 「대전의 수리적 위치」(동단 동경 127°33'35.1438" · 서단 127°14'47.9555" · 남단 북위 36°10'59.1859" · 북단 36°30'0.8450", 십진도 변환 후 외접 사각형 근사): https://www.daejeon.go.kr/drh/DrhContentsHtmlView.do?menuSeq=2033 (확인일 2026-09-03)

삽질 2장면(rev14 개정, 계약 건 14 — 4장면·4분은 시연 상한과 충돌해 둘로 줄임)의 경위는 `author-a/probe/A/LOG.md`(무인 코드) · `author-b/probe-dj/2b/LOG.md`(청년통계, PK 15081597, 제공거부 통보서 PDF)에서 그대로 가져왔다. 「유동인구수→비율」(`author-c/probe-dj/3/data/seogu_flow.csv`)과 zip 파일명 CP949(`author-a/probe-dj/5/LOG.md`)는 04-3으로 넘긴다.

L181 「휴게음식점영업」·「제과점영업」의 출처는 식품위생법 시행령 제21조(영업의 종류) — 휴게음식점영업은 "주로 다류·아이스크림류 등을 조리·판매하거나 패스트푸드점·분식점 형태의 영업 등 음식류를 조리·판매하는 영업으로서 음주행위가 허용되지 아니하는 영업", 제과점영업은 "주로 빵, 떡, 과자 등을 제조·판매하는 영업으로서 음주행위가 허용되지 아니하는 영업"으로 정의한다: https://www.law.go.kr/법령/식품위생법시행령/제21조 (확인일 2026-09-04, 국가법령정보센터). 카페=휴게음식점영업·빵/도넛=제과점영업 배정은 이 정의와 시연 데이터(비알코올/기타 간이 중분류)를 근거로 한 매칭이고, 「원가 구조·폐업 이유가 다르다」는 저장소 데이터로 확인되지 않는 인물의 해석이라 script L181에서 "다르다고 본다"로 서술한다(§0.16 미확인 아님 — 데이터 주장이 아니라 의견으로 명시).
