Shoot for your health, NutrAI for your diet. 식단 기록의 번거로움을 줄이고, 개인 맞춤형 영양 관리를 더 쉽게 만드는 AI 식단 관리 서비스입니다.
NutrAI는 사용자가 매일 먹는 음식을 더 쉽게 기록하고, 기록된 식단을 바탕으로 영양 정보를 확인하며, 개인 건강 상태에 맞는 AI 피드백을 받을 수 있도록 돕는 서비스입니다.
- 식단 관리는 꾸준한 기록이 중요하지만, 음식명과 영양 정보를 직접 입력하는 과정이 번거롭습니다.
- 사용자는 칼로리뿐 아니라 탄수화물, 단백질, 지방, 당류, 나트륨 등 건강 상태에 영향을 주는 정보를 함께 확인해야 합니다.
- 당뇨, 고혈압, 알레르기처럼 식단 제약이 있는 사용자는 일반적인 추천보다 개인화된 안내가 필요합니다.
- 사진 기반 음식 인식과 수동 입력을 함께 제공해 식단 기록 진입 장벽을 낮춥니다.
- 한국 식품 영양 데이터와 앱 내 기록을 연결해 사용자가 섭취량을 빠르게 확인할 수 있게 합니다.
- RAG 기반 AI 챗봇으로 사용자 프로필과 식단 기록을 반영한 맞춤형 영양 조언을 제공합니다.
Team Moonshot
| 이름 | 직책 | 역할 | 담당 업무 |
|---|---|---|---|
| 김영서 | 팀장 | App / PM | Flutter 앱 개발, UI/UX 설계, 전체 일정 관리 |
| 김서현 | 팀원 | BackEnd | FastAPI 서버 구축, DB 설계, API 명세서 작성 |
| 신동하 | 팀원 | AI / Data | YOLOv11 모델 학습, 영양 DB 전처리, RAG 엔진 최적화 |
| 이호연 | 팀원 | BackEnd | FastAPI 서버 구축, DB 설계, API 명세서 작성 |
| 최영수 | 팀원 | AI / Data | YOLOv11 모델 학습, 영양 DB 전처리, RAG 엔진 최적화 |
- 사용자의 이름, 성별, 나이, 키, 몸무게 등 기본 정보를 등록합니다.
- 건강 목표와 개인 상태를 바탕으로 이후 추천과 챗봇 응답에 활용합니다.
- 앱 실행 시 기존 사용자 정보가 있으면 메인 화면으로, 없으면 온보딩 화면으로 이동합니다.
- 아침, 점심, 저녁, 간식, 야식 단위로 식단을 기록합니다.
- 음식명, 칼로리, 탄수화물, 단백질, 지방 등 주요 영양 정보를 관리합니다.
- 로컬 SQLite 저장소를 통해 앱 내 기록을 유지합니다.
- 이미지 기반 음식 탐지를 위한 YOLOv11 연동 구조를 제공합니다.
- 서버의 음식/영양 API를 통해 음식 데이터와 영양 정보를 조회합니다.
- 추후 모델 성능과 데이터셋 확장에 따라 자동 기록 정확도를 높일 수 있습니다.
- 사용자 프로필과 식단 기록을 기반으로 추천 파이프라인을 실행합니다.
- 알레르기 및 건강 상태를 고려해 주의가 필요한 음식을 안내합니다.
- 추천 결과는 앱 화면과 서버 API 양쪽에서 검증 가능한 형태로 제공합니다.
- FastAPI 서버와 RAG 엔진을 연결해 영양 상담형 챗봇을 제공합니다.
- LangChain, Ollama, ChromaDB 기반으로 영양 데이터 검색과 답변 생성을 수행합니다.
- 앱에서는 채팅 화면을 통해 사용자가 자연어로 질문할 수 있습니다.
graph TD
User["사용자"] --> App["Flutter App"]
App --> LocalDB["SQLite Local DB"]
App --> Server["FastAPI Server"]
Server --> API["API Routers"]
API --> Services["Domain Services"]
Services --> Store["Memory/SQLite Store"]
Services --> Nutrition["Nutrition Data"]
Services --> Detect["YOLOv11 Detection"]
Services --> RAG["RAG Engine"]
RAG --> Chroma["ChromaDB"]
RAG --> Ollama["Ollama LLM"]
- Flutter
- Dart
- Provider
- sqflite
- http
- image_picker
- Python 3.11 권장
- FastAPI
- Uvicorn
- Pydantic
- httpx
- YOLOv11
- LangChain
- LangChain Ollama
- ChromaDB
- Pandas
- 한국 식품 영양 데이터
- Git / GitHub
- Figma
- Android Emulator
git clone https://github.com/nisdh2916/NutrAI.git
cd NutrAIWindows PowerShell 기준:
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r server/requirements.txt
python -m uvicorn server.main:app --host 0.0.0.0 --port 8000 --reload서버 상태 확인:
curl http://127.0.0.1:8000/health정상 응답 예시:
{
"status": "ok",
"version": "0.1.0"
}앱이 Android 에뮬레이터에서 로컬 백엔드에 접근하려면 포트 리버스가 필요합니다.
adb reverse tcp:8000 tcp:8000프로젝트 루트의 start.bat을 실행하면 백엔드 실행과 adb reverse를 한 번에 처리할 수 있습니다.
cd app
flutter pub get
flutter run연결된 디바이스 확인:
flutter devices백엔드 테스트:
python -m pytest server/testsFlutter 정적 분석 및 테스트:
cd app
flutter analyze
flutter test서버는 server/main.py에서 다음 라우터를 등록합니다.
| 영역 | 설명 |
|---|---|
/health |
서버 상태 확인 |
/detect |
음식 이미지 탐지 |
/nutrition |
영양 정보 조회 |
/meals |
식단 기록 관리 |
/chat |
AI 채팅 |
/food |
음식 추가 및 검색 |
/recommend |
맞춤 추천 |
/profile |
사용자 프로필 |
상세 요청/응답 구조는 server/api/schemas.py와 각 server/api/routes_*.py 파일을 기준으로 확인합니다.
NutrAI/
├── app/ # Flutter 앱
│ ├── android/ # Android 설정
│ ├── ios/ # iOS 설정
│ ├── lib/
│ │ ├── database/ # 로컬 SQLite 헬퍼
│ │ ├── models/ # 앱 데이터 모델
│ │ ├── providers/ # 앱 상태 관리
│ │ ├── repositories/ # 데이터 접근 계층
│ │ ├── screens/ # 주요 화면
│ │ ├── services/ # 서버 통신 서비스
│ │ ├── theme/ # 앱 테마
│ │ └── utils/ # 알레르기 검사, 채팅 파서 등
│ └── pubspec.yaml
├── server/ # FastAPI 백엔드
│ ├── api/ # API 라우터와 스키마
│ ├── db/ # 메모리/SQLite 저장소
│ ├── scripts/ # 스모크 테스트 및 검증 스크립트
│ ├── services/ # 탐지, 식단, 영양, 추천 서비스
│ ├── tests/ # 백엔드 테스트
│ ├── main.py # FastAPI 앱 진입점
│ └── requirements.txt
├── ai/ # AI 및 RAG 로직
│ ├── models/ # 모델 파일 위치
│ ├── rag_engine/ # RAG 파이프라인과 영양 데이터
│ └── scripts/ # 데이터 구축/추가 스크립트
├── data/ # 영양 DB 및 데이터셋
├── docs/ # 설계, 진행 상황, 트러블슈팅 문서
├── SQL/ # SQL 관련 자료
├── start.bat # Windows 개발 실행 보조 스크립트
└── README.md
태그: 변경 내용 형식을 사용합니다.
| 태그 | 의미 |
|---|---|
feat |
새로운 기능 추가 |
fix |
버그 수정 |
docs |
문서 수정 |
design |
UI 디자인 변경 |
chore |
빌드, 설정, 패키지 작업 |
refactor |
동작 변경 없는 코드 구조 개선 |
test |
테스트 추가 또는 수정 |
커밋 메시지에는 Co-Authored-By: Codex를 추가하지 않습니다.
기본 브랜치:
main: 안정 버전 기준 브랜치feat/*: 기능 개발 브랜치fix/*: 버그 수정 브랜치docs/*: 문서 수정 브랜치
팀원별 시작 브랜치:
team/kim-youngseoteam/kim-seohyeonteam/shin-donghateam/lee-hoyeonteam/choi-youngsu
- 구조 변경이나 주요 결정은
docs/architecture.md,docs/progress.md등에 기록합니다. - 버그를 수정한 경우
docs/troubleshooting.md에 증상, 원인, 해결, 관련 파일을 남깁니다. - API 계약이나 추천 파이프라인을 바꾼 경우 관련 테스트 또는 스모크 스크립트도 함께 확인합니다.