VeganScan MVP 백엔드 서버 - 식당 메뉴 채식 등급 분석 서비스
- 🤖 AI 메뉴 분석: Gemini API를 통한 채식 등급 자동 판정
- 💾 메뉴 저장: 사용자별 메뉴 보관함 기능
- 🔐 게스트 인증: 별도 가입 없이 UUID 토큰 기반 세션
- 📊 DynamoDB 저장: Single-Table Design 기반 데이터 관리
- Runtime: Node.js
- Framework: Express.js
- Database: AWS DynamoDB
- AI: Google Gemini 1.5 Flash
- Auth: Cookie-based Guest Token
npm install.env.example 파일을 복사하여 .env 파일을 생성하고 필요한 값을 입력하세요.
cp .env.example .env필수 환경 변수:
# Server Configuration
PORT=8000
NODE_ENV=development
# CORS
FRONTEND_URL=http://localhost:3000
# DynamoDB Configuration
AWS_REGION=ap-northeast-2
TABLE_NAME=VeganScanData
# Gemini AI API Configuration
GEMINI_API_KEY=your_gemini_api_key_here- Google AI Studio에서 API 키 발급
.env파일의GEMINI_API_KEY에 입력
AWS CLI를 통해 자격 증명을 설정하거나, 환경 변수로 설정하세요.
aws configure# 개발 모드 (nodemon)
npm run dev
# 프로덕션 모드
npm start서버는 기본적으로 http://localhost:8000에서 실행됩니다.
POST /v1/auth/guest- 게스트 토큰 발급GET /v1/auth/check- 게스트 세션 확인
POST /v1/analysis- 식당 분석 및 저장
POST /v1/save_menu- 메뉴 저장GET /v1/save_menu- 저장된 메뉴 목록 조회 (식당별 그룹화)GET /v1/menus/:res_id/:menu_name- 메뉴 상세 정보 조회
[
{
"restaurant": {
"place_id": "1490005496",
"name": "보람 공릉 본점",
"address": "서울특별시 노원구 공릉로43길 18 1층 102호",
"category": "음식점>일식>일식당"
},
"menus": [
{
"menu_id": "1",
"name": "민물장어덮밥",
"price": "27000",
"description": "신선한 민물장어를 사용한 덮밥 요리",
"image_url": "https://example.com/image.jpg",
"analysis": {
"vegetarian_type": {
"category": "Normal",
"source": "AI",
"reasoning": "주재료인 민물장어가 포함되어 있어...",
"ingredients": ["민물장어", "밥", "파", "간장"],
"blockers": ["민물장어"],
"modifications_for_stricter": "..."
}
}
}
]
}
]- CompleteVegan: 동물성 재료 전혀 없음 (식물성만)
- Lacto: 유제품 포함, 달걀/고기/생선 불포함
- Ovo: 달걀 포함, 유제품/고기/생선 불포함
- Lacto/Ovo: 유제품과 달걀 포함, 고기/생선 불포함
- Pescatarian: 생선 포함, 고기 불포함
- Pollotarian: 닭고기 포함, 붉은 고기 불포함
- Normal: 모든 동물성 재료 포함
AI: Gemini API를 통한 자동 분석curating: 수동으로 검증된 큐레이팅 데이터
src/
├── app.js # Express 앱 설정
├── config/
│ └── dynamo.js # DynamoDB 클라이언트 설정
├── controllers/
│ ├── analysisController.js # 분석 컨트롤러
│ ├── authController.js # 인증 컨트롤러
│ └── storageController.js # 저장 컨트롤러
├── middlewares/
│ └── authMiddleware.js # 인증 미들웨어
├── routes/
│ ├── analysisRoutes.js # 분석 라우트
│ ├── authRoutes.js # 인증 라우트
│ ├── storageRoutes.js # 저장 라우트
│ └── index.js # 라우트 통합
└── services/
├── analysisService.js # AI 분석 서비스
├── authService.js # 인증 서비스
└── storageService.js # 저장 서비스
- 메뉴 분석하기 (AI 기반)
- 메뉴 저장/조회/삭제
- 게스트 인증
- 채식 등급 및 성분 분석
- 분석 신뢰도 및 출처 라벨링
- 지도 표시 기능 (
GET /v1/save_menu/map제거) - 좌표 데이터 처리 (latitude, longitude)
- 일반 로그인 기능
- backend_guide.md - 백엔드 수정 가이드
- DOCS_MVP.md - MVP 상세 명세
VeganScan Backend Team
ISC