백치미 (구미 1반 7조 D107)
미정(味定)
프로젝트 기간 : 2024.08.19~ 2024.10.11 (8주)
미정(味定) 시나리오는 👉여기👈에서 더 자세히 보실 수 있습니다.
사용자가 현재 식재료 가격 변동을 확인하고, 연관된 식재료와 레시피를 추천받아 합리적이고 맛있는 요리를 준비할 수 있도록 도와주는 통합 플랫폼입니다. 분산처리를 활용하여 대용량 데이터를 효율적으로 분석하고, 사용자에게 맞춤형 추천을 제공합니다.
- 물가 변동을 확인하여 저렴한 식재료를 한눈에 확인할 수 있습니다.
- 사용자가 원하는 식재료에 맞는 레시피를 추천 받을 수 있습니다.
- 사용자가 원하는 식재료와 많이 쓰이는 식재료를 추천 받을 수 있습니다.
🙋🏻♂️ 사용자 목표
요리를 좋아하는 사람들이 온라인으로 식재료에 가격 정보와 레시피에 대한 정보를 얻을 수 있는 플랫폼
- 식재료 가격 제공
- 식재료 목록 검색
- 검색어 자동완성
- 식재료 가격 추이 그래프
- 시계열 분석
- 식재료 네트워크 그래프
- 코사인 유사도
- 레시피 목록 검색
- 검색어 자동완성
- 선택한 식재료 기반 식재료/레시피 추천
- 식재료 추천 : 연관성 분석(장바구니 분석)
- 레시피 추천 : 코사인 유사도
-
CI/CD 파이프라인 구축 및 배포 자동화
-
FrntEnd, BackEnd, DB를 각 docker 컨테이너로 관리하여 빌드 및 배포를 통해 안정적인 CI / CD 구축
-
임베딩과 코사인 유사도
- 단어 임베딩과 방법론 : 단어를 컴퓨터로 계산하기 위해서는 이를 계산 가능한 실수로 표현해야 합니다. 즉, 단어를 공간에 매핑하는 것으로 이는 '임베딩'이라고 합니다. 임베딩에는 두 가지 주요 방법론이 있습니다: CBOW(Continuous Bag of Words)와 Skip-gram입니다.
- CBOW 방법론 : CBOW는 특정 단어의 주변 단어들을 활용해 그 단어를 예측하는 방법입니다. 예를 들어, "the quick brown fox"라는 문장에서는 "quick"이라는 단어를 예측하기 위해 "the", "brown", "fox"라는 단어들을 입력으로 사용합니다. 이를 통해 "quick"을 공간 상에 잘 매핑합니다.
- Skip-gram 방법론 : Skip-gram은 반대로, "quick"이라는 단어를 사용해 "the", "brown", "fox"를 예측할 수 있도록 "quick"을 공간에 매핑하도록 하는 방법입니다. 일반적으로 Skip-gram 방법론이 많이 사용되지만, 본 프로젝트에서는 여러 재료 중 하나를 예측하는 가정에 따라 CBOW 방법론을 활용해 임베딩을 진행했습니다,
- 코사인 유사도 : 코사인 유사도는 두 벡터가 이루는 각도를 통해 벡터가 얼마나 유사한지를 측정합니다. 유사도가 1에 가까울수록 두 벡터가 유사하다고 정의합니다.
-
장바구니 분석 : 장바구니 연관 규칙 기반 추천 시스템을 사용하여 레시피에 사용된 식재료와 관련된 패턴을 분석하여, 사용자가 선택한 식재료와 레시피에서 많이 사용된 식재료를 추천합니다. Apache Spark의 FPGrowth 알고리즘을 활용하여 대규모 데이터를 빠르게 분석합니다.
-
시계열 분석 :
-
사용자 맞춤형 시각화 도구 : 네트워크 그래프, 시세 차트 등 다양한 시각화 도구를 사용하여 데이터를 직관적으로 표현하고, 사용자 경험을 개선합니다.
- 가격 변동 분석 : 사용자가 식재료에 대한 가격 추이를 확인하고, 예측하여 식재료에 대한 정보를 확인할 수 있습니다.
- 맞춤형 추천 기능: 사용자의 식재료 선택에 따라 적합한 레시피와 식재료를 추천하여, 요리 준비 과정을 단순화합니다.
- 종합적인 식재료 정보 제공: 가격 변동 분석, 네트워크 그래프 등을 통해 사용자가 필요한 모든 정보를 종합적으로 제공합니다.
🛠️Backend
- IntelliJ
- Spring boot
- Spring-boot-jpa
- Java 17
- MySQL
- Visual Studio Code
- Hadoop/Spark
- Gradle
- Python
- FastAPI
🛠️Frontend
- Visual Studio Code
- React
- Tanstack React Query
- Tailwind
- Zustand
- TypeScript
- D3.js
- Sigma.js
- vis.js
🛠️CI/CD
- AWS EC2
- Docker
- Nginx
- Jenkins
-
프론트엔드
- React.js : UI/UX 설계
- Zustand : 상태 관리
- Chart.js/D3.js : 데이터 시각화
-
백엔드
- Java + Spring Boot : API 서버 구축
- Python : 데이터 수집, 분석, 크롤링 로직 구현
-
데이터베이스
- MySQL : 식재료 및 레시피 데이터 관리
-
분산 처리 및 데이터 분석
- Hadoop을 사용해 대규모 데이터를 분산 처리
- Apache Spark를 활용한 데이터 분석
-
클라우드 인프라
- AWS EC2 : 웹 서버와 데이터베이스 서버 호스팅
-
CI/CD
- Jenkins 또는 Gitlab webhook으로 지속적 통합/배포(CI/CD) 파이프라인 구축
- 모니터링 및 로깅 : AWS CloudWatch로 서버 및 애플리케이션 모니터링
- pandas: 데이터 처리
- numpy: 벡터 연산
- mlxtend: 카테고리별 연관 규칙 학습
- collections: 빈도 분석
- scikit-learn: 코사인 유사도 계산
- APScheduler: 작업 스케쥴러
- fastapi: 서버
- PyMySQL: DB
- pytest: 테스트
| 정지원 | 김소연 | 박태우 |
|---|---|---|
| 팀장 / BE | BE | BE |
| @Jiwon96 | @so-oyeon | twey163@gmail.com |
| 권대호 | 김봉상 | 신건우 |
|---|---|---|
| FE | FE | 데이터 시각화 |
| @vaaast-lake | @BongSangKim | twey163@gmail.com |











