Skip to content
YANG SEUNG HYEOK
도파민한입 (Food X Dopamin) 프로모션 그래픽

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 코멘트 파싱
FOOD CHECK — 사진 업로드/촬영
AI 분석 중
분석 결과 — 영양 정보 (1인분/100g)

도파민 지수 — Domain 계산

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

랭킹 — Firestore · Storage

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

사용자 참여 — Firestore Transaction

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

설정 · 다국어 · 번역 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 프로젝트