0) 한눈에 보기 (MVP 목표)
- 목표: 자연어(음성→텍스트)로 주문을 받아 → 표준 주문 JSON(프로토콜 v0) 생성 → 대화형 재질문 루프로 모호성 해소 → 키오스크 시뮬레이터로 접수·상태 전파.
- 가치: 복잡 옵션을 자연어로 단순화, 고령층/외국인 접근성, 연동 가능한 최소 프로토콜 제시.
- 스택(제안)
- 프론트: Next.js(React), Web Speech API(브라우저 STT) 또는 iPad 받아쓰기
- 서버: FastAPI(Python) 또는 Fastify(Node)
- 세션/캐시: Redis(선택) / 파일·SQLite(최소)
- LLM: 상용 API(JSON/함수호출) → (선택) Ollama 7B/8B 로컬 시험
- 배포: 로컬/EC2 단일 인스턴스(nginx 리버스 프록시)
1) 아키텍처 & 리포지토리 구조
1-1. 컴포넌트
- Client(App): STT 입력, 보완질문/확인 UI, 최종 제출
- Order API: 메뉴/별칭 제공, 자연어 파싱, 상태머신/세션, 검증, 시뮬레이터로 포워딩
- Kiosk Simulator: 주문 수신→ACK→IN_PREP→READY 전이, 콜백(or 폴링)
1-2. 리포 구조(모노레포 권장)
kiosk-mvp/
apps/
client/ # Next.js (웹/iPad 시연)
kiosk-sim/ # 키오스크 시뮬레이터(React)
server/ # FastAPI or Fastify
packages/
shared-schemas/ # 프로토콜 JSON 스키마/TS 타입
prompts/ # LLM 프롬프트/질문 템플릿/별칭 사전
data/
menu.json # 도메인: 카페(1개 매장부터)
aliases.json # "아아/연하게/샷 추가" 정규화 룰
orders.samples.jsonl # 로컬 ‘골든’ 테스트 세트
infra/
docker/compose.yml # 선택
2) 주문 프로토콜 v0 (최소 사양)
2-1. 필드 요약
protocol, version, idempotency_key
store{store_id, terminal_id}
customer{channel, locale}