Skip to content

Latest commit

 

History

History
206 lines (157 loc) · 9.32 KB

File metadata and controls

206 lines (157 loc) · 9.32 KB

🍳 Algorithm Chef (알고리즘 셰프)

AI를 활용한 식재료 관리 및 레시피 추천 서비스

냉장고 속 식재료를 등록하면, 보유 재료·소비기한·개인 식습관을 바탕으로 AI가 맞춤 레시피를 추천해 주는 웹 서비스입니다.


📌 프로젝트 소개

바쁜 일상 속에서 "남은 식재료로 뭘 해 먹지?"라는 고민과, 관리되지 않고 버려지는 식재료 문제를 해결하기 위해 시작한 프로젝트입니다.

Algorithm Chef는 다음 세 가지 핵심 가치를 제공합니다.

  • 식재료 입력 자동화 — OCR로 영수증을 스캔하거나 음성으로 입력해, 일일이 타이핑하지 않아도 냉장고를 채울 수 있습니다.
  • 개인화된 레시피 추천 — 보유 식재료, 소비기한 임박 재료, 사용자 성향 설문을 종합해 AI가 메뉴를 추천합니다.
  • 식재료 관리 + 나눔 — 냉장고 재고를 체계적으로 관리하고, 남는 재료는 나눔 게시판을 통해 이웃과 공유합니다.

✨ 주요 기능

1. 식재료 등록 자동화

  • OCR 영수증 인식 — 마트 영수증 사진을 업로드하면 품목을 자동으로 추출해 냉장고에 등록합니다.
  • 음성 인식(STT) 등록 — 말로 식재료를 불러 등록할 수 있습니다.
  • 수동 등록 / 수정 — 카테고리별로 재료와 수량, 등록일·소비기한을 직접 관리할 수 있습니다.

2. AI 기반 레시피 추천

  • 보유 식재료 기반 추천 — 현재 냉장고에 있는 재료로 만들 수 있는 메뉴를 추천합니다.
  • 소비기한 임박 재료 우선 추천 — 빨리 소비해야 하는 재료를 활용하는 레시피를 우선 제안해 음식물 낭비를 줄입니다.
  • 사용자 성향 기반 추천 — 가입 시 입력한 식습관·선호 설문을 반영한 맞춤 추천을 제공합니다.
  • 레시피 재추천 / 수정 — 추천 결과가 마음에 들지 않으면 다시 추천받거나, 조건을 바꿔 레시피를 다듬을 수 있습니다.
  • 레시피 상세 보기 — 추천된 메뉴의 재료, 조리 순서를 상세 페이지에서 확인합니다.

3. 나의 냉장고 관리

  • 카테고리(육류·채소·유제품 등)별 재고 현황을 한눈에 확인합니다.
  • 등록일·소비기한 기반으로 재료 상태를 관리합니다.

4. 커뮤니티 — 재료 나눔 게시판

  • 남는 식재료를 나눔 글로 등록하고, 댓글로 소통할 수 있습니다.
  • 글 작성·수정·삭제 및 댓글 기능을 제공합니다.

5. 회원 / 계정 관리

  • 회원가입 및 성향 정보 등록 — 가입 시 식습관·건강 목표 등 성향 설문을 함께 수집합니다.
  • 인증/인가 — Spring Security + JWT 기반 로그인 및 토큰 인증.
  • 아이디 찾기 / 비밀번호 찾기 — 이메일을 통한 계정 복구.
  • 임시 비밀번호 발급 — 메일로 임시 비밀번호를 전송하고 변경하도록 안내.
  • 마이페이지 — 내 정보, 성향 설정, 알림 설정 관리.

6. 알림

  • Web Push 알림 — 소비기한 임박 등 주요 이벤트를 푸시로 안내합니다.

🛠 기술 스택

Backend

구분 기술
Language Java 21
Framework Spring Boot 3.5.7
Build Gradle
Persistence Spring Data JPA (Hibernate) + JDBC
Security Spring Security, JWT (jjwt 0.11.5)
Validation Spring Boot Starter Validation
Mail Spring Boot Starter Mail (계정 복구·임시 비밀번호 발송)
Database MySQL
Test JUnit 5, Spring Security Test

Frontend

구분 기술
Library React
음성 입력 Web Speech API
푸시 Web Push API

External APIs

API 용도
Gemini API AI 레시피 추천 / 프롬프팅
Google Cloud API OCR(영수증 인식) 등
FCM 푸시 알림

Infra / Tooling

  • Docker
  • GitHub Actions (CI/CD)
  • Git / GitHub (협업)
  • Notion (API 명세·문서화)

🏗 시스템 아키텍처

┌─────────────────────────────┐         ┌──────────────────────────────────────┐
│            Client            │         │            Backend Server             │
│  React                       │         │  ┌──────────────────────────────────┐ │
│  Web Speech API (음성 입력)   │  HTTP   │  │ Controller Layer  @RestController │ │
│  Web Push API   (푸시 알림)   │ ◄─────► │  │   HTTP 요청 처리                  │ │
└─────────────────────────────┘  REST   │  ├──────────────────────────────────┤ │
                                         │  │ Service Layer     @Service        │ │
┌─────────────────────────────┐         │  │   핵심 비즈니스 로직, 외부 API 통신 │ │
│        External APIs         │  API    │  ├──────────────────────────────────┤ │
│  Gemini API                  │ ◄─────► │  │ Data Access Layer @Repository     │ │
│  FCM                         │  CALL   │  │   DB 연결, JPA 및 SQL 번역         │ │
│  Google Cloud API            │         │  ├──────────────────────────────────┤ │
└─────────────────────────────┘         │  │ Persistence Framework             │ │
                                         │  │   JPA(Hibernate) + JDBC SQL 실행  │ │
                                         │  └──────────────────────────────────┘ │
                                         └────────────────────┬───────────────────┘
                                                              │
                                                       ┌──────▼──────┐
                                                       │    MySQL    │
                                                       └─────────────┘

계층형 아키텍처(Layered Architecture)를 따릅니다. Controller → Service → Repository → Persistence 순으로 책임을 분리해, 각 계층이 자신의 역할에만 집중하도록 설계했습니다.


📂 프로젝트 구조 (Backend)

AlgorithmChef_Backend
├── gradle/wrapper
├── src
│   ├── main
│   │   ├── java/com/webservice/algorithmchef
│   │   │   └── (도메인별 계층 구성: controller / service / repository / domain)
│   │   └── resources
│   │       └── application.yml   # DB, JWT, Mail, 외부 API Key 등 환경 설정
│   └── test
├── build.gradle
├── settings.gradle
├── gradlew
└── gradlew.bat

Spring Boot(Gradle) 기반 프로젝트이며, group은 com.webservice.algorithmchef 입니다. 세부 패키지 구성은 소스 코드를 참고해 주세요.


🔌 주요 API 예시

기능 Method Endpoint
OCR 영수증 업로드 POST /api/ocr/upload
음성 인식(STT) POST /api/stt
레시피 재추천 POST /recipe/recommendation/retry
레시피 수정 POST /recipe/revise

전체 API 명세는 Notion 문서로 관리됩니다.


🚀 실행 방법

# 1. 저장소 클론
git clone https://github.com/AlgorithmChef/AlgorithmChef_Backend.git
cd AlgorithmChef_Backend

# 2. 환경 설정
# src/main/resources/application.yml 에 아래 값을 설정하세요.
#   - MySQL 접속 정보 (url, username, password)
#   - JWT secret key
#   - Mail(SMTP) 계정 정보
#   - 외부 API Key (Gemini, Google Cloud 등)

# 3. 빌드
./gradlew build

# 4. 실행
./gradlew bootRun

요구 사항: Java 21, MySQL


🌱 개선점 및 확장 가능성

  • API 호출 로직 최적화 — 다양한 외부 API 간 호출 로직을 더 안정적으로 정리
  • 미구현 기능 구현 — 일정상 미처 구현하지 못한 기능 보완
  • 프론트엔드 UI 개선 — 레시피 추천 영역 등 UX 고도화

확장 로드맵

  • Phase 1. 개인화 알고리즘 — 축적된 데이터를 바탕으로 개인 맞춤 추천 고도화
  • Phase 2. 위치기반 채팅 서비스 — 근처 이웃과 식재료 나눔을 위한 채팅 기능
  • Phase 3. 헬스케어 연동 — 식습관 통계 기반 건강 관리 연동

👥 팀 — Team Algorithm Chef

역할 이름
팀장 김부연 (컴퓨터공학부)
팀원 오건우, 이준형, 김효찬

📎 Repository