
FOOD x DOPAMINE
도파민한입 (Food X Dopamin)
현재 비공개 테스트 중
Kotlin Android 앱 + Firebase(Firestore · Storage) + OpenAI Vision API로 구현한 AI 음식 분석·랭킹 서비스
KotlinFirebaseFirestoreStorageOpenAI VisionRoomHilt
- Android
- Kotlin · XML · ViewBinding (minSdk 24, targetSdk 35)
- Architecture
- MVVM · Clean Architecture · Hilt DI
- Local
- Room — 분석 기록 로컬 저장 · RxJava3
- Server
- Firebase Firestore · Firebase Storage · REST 분석 API
- AI
- OpenAI Vision — Structured JSON 응답 파싱
- 상태
- 비공개 테스트 중 (Play Store 미배포)
기술 구성
별도 자체 서버 DB 없이 Firebase Firestore를 랭킹·평가·쿼터 저장소로, Firebase Storage를 랭킹 이미지 저장소로 사용합니다. AI 분석은 REST API + OpenAI Vision으로 처리하고, 앱 내부는 Room으로 분석 기록을 로컬 캐싱합니다.
Android (Kotlin) — UI · ViewModel · UseCase
↓
Room — 분석 결과 로컬 기록
↓
REST API → OpenAI Vision — 음식 사진 분석
↓
Domain — DopamineScoreCalculator 점수 산출
↓
Firestore — 랭킹 · 좋아요 · 평가 · 쿼터
↓
Storage — 랭킹 게시물 이미지 업로드
기능 & 기술 적용
FOOD CHECK — OpenAI Vision 분석
- REST 분석 API → OpenAI Vision Structured JSON 호출
- Coil + ExifInterface — 이미지 로드 · EXIF 회전 보정 · 리사이즈
- Firestore — 기기 ID 기준 일 5회 분석 쿼터 관리 (KST)
- Room — 분석 결과 로컬 저장 · 재조회
- 음식명·카테고리·1인분/100g 영양 6종 + AI 코멘트 파싱



도파민 지수 — Domain 계산
- Kotlin Domain — DopamineScoreCalculator (UI·Firestore와 분리)
- 6개 영양 항목 기준치 대비 정규화 → 0~100점 산출
- Clean Architecture — Presentation / Domain / Data 레이어 분리
- 항목별 기여도(%) + HIGH / MEDIUM / LOW UI 시각화

랭킹 — Firestore · Storage
- Firebase Storage — 랭킹 게시물 음식 이미지 업로드
- Firestore — 게시물·점수·카테고리·메타데이터 저장
- Firestore 실시간 쿼리 — TOP 10 · 카테고리 필터 (8종)
- 홈 미리보기 (1~3위 카드 + 4~10위 리스트) · 포디움 UI
- 게시물 삭제 — SHA-256 + salt 비밀번호 확인



사용자 참여 — Firestore Transaction
- Firestore Transaction — 좋아요·평가 동시성·중복 제출 방지
- 기기 ID 기준 좋아요 중복 방지 · 도파민 평가 1회 제한
- 0~100 슬라이더 UI → Firestore에 사용자 점수 저장
- 점수 결합: (AI 점수 + Σ 사용자 점수) / (1 + 사용자 수)
- Transaction으로 랭킹 점수·평가 수 atomic 업데이트

설정 · 다국어 · 번역 API
- Android 리소스 — 한국어 / English UI 전환
- OpenAI 번역 API → Firestore 이중 필드 저장 (foodName / foodNameEn)
- 개인정보처리방침 · 이용약관 · 오픈소스 라이선스 · 앱 버전



기술 스택
- Language
- Kotlin
- UI
- XML, ViewBinding
- Architecture
- MVVM, Clean Architecture
- DI
- Hilt
- Local DB
- Room
- Async
- RxJava3, RxKotlin, RxAndroid
- Server
- Firebase
- Database
- Firestore — 랭킹, 평가, 좋아요, 쿼터, 번역 필드
- File Storage
- Firebase Storage — 랭킹 게시물 이미지
- API
- REST 분석 API (OpenAI Vision 프록시)
- AI
- OpenAI GPT-4.1 Vision (Structured JSON)
- Image
- Coil, ExifInterface
- Platform
- Android (minSdk 24, targetSdk 35)
Firebase 활용
- Firestore — 랭킹 게시물, TOP 10 쿼리, 카테고리 필터
- Firestore — 좋아요·도파민 평가·기기 ID 중복 방지
- Firestore Transaction — 점수 결합·동시 제출 atomic 처리
- Firestore — 분석 쿼터(일 5회), 번역 이중 필드(foodName/foodNameEn)
- Storage — 랭킹 업로드 음식 사진 저장·URL 참조
Android 앱
- Kotlin + MVVM + Clean Architecture (Presentation / Domain / Data)
- Hilt DI · UseCase 9개 · Repository Interface
- Room — AI 분석 결과 로컬 캐싱
- RxJava3 — 비동기 API·Firestore·Room 처리
AI · API
- REST API → OpenAI Vision — 음식 사진 Structured JSON 분석
- 영양 6종·음식명·카테고리·AI 코멘트 파싱
- OpenAI 번역 API — 랭킹 콘텐츠 한·영 변환
음식 사진 분석부터 도파민 지수 산출, 랭킹 공유, 사용자 평가까지 직접 설계·구현한 Android 프로젝트