1 왜 메뉴 코퍼스인가
우리 도감의 식재료 유니버스는 급식 정규화 기준 약 457종(도감 등재 181종)입니다. 하지만 부모가 입력하거나 식단표 OCR로 들어오는 건 "제육볶음·미역국·시금치나물" 같은 메뉴(음식)예요. 그래서 서비스의 심장은 메뉴 → 식재료 매핑입니다.
메뉴 코퍼스가 풍부할수록 → ① 매핑 정확도(신메뉴도 분해) ② 영양 신호등·점수 정확도 ③ "이 메뉴 자주 먹네요" 식 코칭·추천이 모두 좋아집니다.
⭐ 핵심 통찰: 음식은 조합이라 사실상 무한합니다. 목표는 "모든 음식을 수집"이 아니라 실사용 메뉴를 식재료로 잘 환원하는 것. 즉 수집량보다 매핑 품질 + 플라이휠이 본질입니다.
2 지금 가진 자산
- 레시피 DB ~4,400 — 편식키트
B_레시피DB(아동기 3,397 + 유아·영아). 음식 + 식재료 + 영양 + 알레르겐 - learned_menus 플라이휠 — 실사용 식단표 OCR로 들어온 신메뉴를 자동 학습(전역 사전). 신메뉴만 LLM, 다음부턴 결정론
- menuMapCore 결정론 사전 — 가공식품 베이스·1글자 표준명·복합메뉴 분해
- 4단 매핑 파이프라인 — learned → rule → scan → LLM(매핑 전략 문서)
3 메뉴를 어디서 얻나 (소스)
합법·고품질 우선. 공식 API가 크롤링보다 안전하고 깨끗합니다.
| 소스 | 내용 | 방식 | 안전성 |
|---|---|---|---|
| ⭐ NEIS 학교급식 OpenAPI (교육정보개방포털) | 전국 초중고 급식 메뉴를 학교·날짜별로. 메뉴(음식) 대량 | 공식 무료 API | 안전 |
| 공공데이터포털 (data.go.kr) | 표준식단·급식 식단 데이터셋 | 공식 API/다운로드 | 안전 |
| 어린이급식관리지원센터 | 영유아·어린이집 식단표 — 우리 타겟에 가장 정합 | 공개 자료 | 안전 |
| 농진청 식단/레시피 DB | 정부 표준 식단·레시피 | 공개 자료 | 안전 |
| 실사용 식단표 OCR | 부모가 올린 식단표 → learned_menus 자생 | 자체 수집 | 자체 |
| 레시피 사이트 (만개의레시피 등) | 방대한 음식·조리법 | 크롤링 | ToS 위험 |
⚠️ ToS(이용약관) 위험: 레시피 사이트는 약관에 "무단 크롤링·자동수집·상업적 재사용 금지"가 보통 명시 → IP 차단·경고·민사 리스크. 정부 공개 API(NEIS·공공데이터)만으로 급식 메뉴는 충분하므로 크롤링은 비권장.
4 처리 파이프라인
수집한 메뉴명을 식재료로 환원하고 플라이휠에 적재
① 수집
NEIS API·공공데이터로 메뉴명 대량 확보
→
② 정규화
표기 변형 정리(공백·괄호·브랜드 제거)
→
③ 분해
menuMapCore 결정론 + learned_menus로 식재료 추출
→
④ 보강
미매핑은 야간 LLM backfill(환각 차단)
→
⑤ 적재
learned_menus에 저장 → 다음부턴 결정론(플라이휠)
메뉴 등장 빈도도 집계 → 도감 식재료의 ⭐별처럼 "급식 단골 메뉴" 랭킹을 만들 수 있고, 신메뉴 우선순위·추천에 쓰입니다.
5 단계적 실행
Phase 1 — NEIS 급식 메뉴 대량 씨딩
NEIS OpenAPI로 전국 급식 메뉴를 당겨와 정규화 → learned_menus 선(先)적재. 신메뉴를 실사용 전에 미리 채워 매핑 커버리지를 끌어올림(M3 enrich보다 실속).
Phase 2 — 메뉴 빈도 랭킹
메뉴 등장 빈도 집계 → '급식 단골 메뉴' 산출. 도감 ⭐별(식재료 빈도)과 짝이 되는 메뉴 단위 빈도.
Phase 3 — 메뉴 기반 코칭·추천
"이 메뉴 자주 드시네요 → 빠진 식재료군은…", "또래가 잘 먹는 메뉴" 등 메뉴 단위 인사이트로 확장.
6 측정(KPI) · 리스크
- KPI: 메뉴→식재료 매핑 커버리지(%), 미매핑율, learned_menus 누적 성장, 신메뉴 결정론 전환율
- 리스크: ① 크롤링 ToS(→ 공식 API만) ② API 호출 한도(→ 배치·캐시) ③ 메뉴명 노이즈·변형(→ 정규화) ④ LLM 환각(→ '모르면 빈 배열' 가드·농진청 영양 매핑)
한 줄 요약: 음식을 다 모으려 하지 말고, NEIS 공식 API로 급식 메뉴를 대량 씨딩 → 우리 매핑 엔진으로 식재료(457 유니버스)로 환원 → learned_menus 플라이휠로 자생시킨다.