Skip to content

LikeLion-at-DGU/2025-hackathon-5-jaego-backend

Repository files navigation

2025-Likelion-hackathon-5팀-backend

2025 동국대 멋쟁이사자처럼 중앙해커톤 '심봤다' 백엔드 레포지토리입니다.

🌰 심봤다 - 지역 상권 할인 재고 예약 플랫폼

KakaoTalk_20250825_014024295

🖥 프로젝트 소개

본 서비스는 충무로 지역의 소상공인과 소비자를 연결하는 로컬 재고 마켓 플랫폼입니다.

점주가 남은 재고를 원가보다 할인된 가격에 등록하면, 소비자가 재고 지도, 특가 상품, ai 맞춤 추천, 검색 기능 등을 통해 편리하게 상품을 찾고 예약할 수 있도록 돕는 서비스입니다.

이를 통해 소상공인은 폐기 비용을 절감 + 추가 수익 창출 효과에 더불어 매장 방문으로 소소한 홍보 효과를 얻고, 소비자는 합리적 소비 니즈를 충족하며 지역 사회 내 연결을 견고히 하는 효과를 기대할 수 있습니다.

🤸‍♀️ 개발자 소개

🤍 하연희

🍄 조민정

⠀⠀

🕰개발 기간

  • 25.08.01일 - 25.08.26일

🚀 주요 기능

  • 회원가입/로그인: 소비자 / 판매자 구분
  • 매장 등록: Step1(주소/정보) → Step2(서류 업로드)
  • 상품 관리: 등록 / 삭제, 할인율, 유통기한
  • 소비자 기능:
    • 근처 가게 상품 및 가게 검색 (위도/경도 기반, 카테고리 기능 포함)
    • 재고 지도로 판매 중인 근처 상품 탐색 (기본 5km이내 상품은 도토리로 표시, 이외 나뭇잎)
    • 예약 및 취소 (재고 자동 반영)
    • 찜, 특가 상품(30%), 추천 상품 확인
    • 주문 내역 확인(주문상태, 주문 상세, 매장위치 지도에서 확인 가능)
  • 예약 관리:
    • 상태 전환: pending → confirm → ready → pickup / cancel
    • 알림(Notification) 자동 생성
  • 자동화 기능:
    • 예약 10분 초과 시 자동 취소 (Celery + Redis)
    • 유통기한 만료 시 상품 자동 비활성화
    • 추천 임베딩 벡터 자동 갱신

🛠 배포 환경 / 사용 기술

  • 서버 운영체제: Ubuntu 22.04 LTS
  • 배포 주소: yeonhee.shop
  • 웹 서버: Nginx + Gunicorn
  • 백엔드: Django REST Framework, SimpleJWT
  • 데이터베이스: SQLite
  • 비동기 작업 / Task Queue: Celery + Redis
    • Redis는 AWS Elasticache에서 호스팅
  • AI 추천 로직: OpenAI Embedding API (text-embedding-3-small) 사용
  • 주요 배포/호스팅: AWS EC2
  • 정기 작업: cron / Celery Beat를 이용해 상품 임베딩 및 예약/유통기한 처리

📡 API 엔드포인트

  • /accounts/ : 회원가입, 로그인, 로그아웃, 내 정보
  • /stores/ : 매장 등록(step1/step2), 조회, 오픈/마감
  • /products/ : 상품 등록, 삭제, 조회, 찜, 특가, 근처 상품 조회
  • /reservations/ : 예약 생성, 상태 변경(confirm/cancel/ready/pickup)
  • /notifications/ : 알림 조회 및 읽음 처리

🔄 예약 프로세스

  1. 소비자가 상품 예약 → 상태 pending
  2. 판매자가 예약 확인 → 상태 confirm, 예약 시간 기록
  3. 판매자가 상품 준비 완료 → 상태 ready
  4. 소비자가 픽업 완료 → 상태 pickup
  5. 취소 시: 사유 기록 + 재고 복구 + 알림 생성
  • 예약 전송 10분 이내 미응답 시 자동 취소

🧠 AI 추천 시스템 개요

본 프로젝트는 OpenAI Embedding API(text-embedding-3-small)를 활용하여 상품 추천 시스템을 구현했습니다.

1. 임베딩 생성

  • 상품명, 상점명, 카테고리명을 하나의 문자열로 묶어 OpenAI Embedding API에 입력
  • 결과로 나온 1536차원 벡터NumPy 배열로 저장
    • product_ids.npy : 상품 ID 배열
    • product_vectors.npy : 상품 벡터 배열

2. 사용자 벡터 생성

  • 소비자가 찜한 상품들의 벡터를 불러옴
  • 최근 n개(max_recent) 상품 벡터를 가중 평균하여 사용자 벡터 생성

3. 추천 알고리즘

  • 코사인 유사도 기반으로 사용자 벡터와 상품 벡터 비교
  • 동일 카테고리 / 동일 상점 / 가까운 거리(하버사인 거리 계산)에 따라 보너스 점수 부여
  • 최종 점수가 일정 threshold 이상인 상품만 추천

⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣦⣄⣀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣃⠈⠙⠛⢶⣦ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⡾⠛⠿⣶⡏⠙⠻⠶⣤⣼⠇ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣧⣀⢀⣼⢀⣴⠶⢶⣴⡟⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠁⢸⣇⠀⠀⣹⠇⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⡿⠁⠈⠙⣷⡀⠀⠀⠀⠀⠀⠀⢀⣤⣤⣀⣠⡾⠛⠻⣦⠀⠀⠀⠀⠀⠀⠀⣀⡀⠀⠉⠛⠛⠋⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠁⠀⠀⠀⠈⣷⣤⣤⣤⣤⣤⣴⡟⠉⠉⠹⣯⠀⠀⠀⢹⡆⠀⠀⠀⠀⠀⠀⣏⠁⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⣠⡾⠟⠛⠀⠀⠀⠀⠉⠉⠉⠀⠀⢈⣿⠀⠠⣷⣤⣿⠿⢶⣦⡾⠟⠻⣶⡄⠀⠀⢀⣿⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⣰⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⣄⣀⣀⣿⡇⠀⢀⣿⣦⡀⠀⢸⣇⠀⠀⠈⠁⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⢀⣾⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⠉⠻⠷⢿⣇⠈⠁⠀⣾⠿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⣼⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⢷⣶⡾⠋⠀⠙⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⢠⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣷⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠛⠛⢻⡿⠶⠦⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⠶⢿⡟⠛⠃⠀⠀⠀⠀⠀⠀ ⠀⣀⣠⣼⣧⣤⠀⠀⠱⡀⢀⣴⣶⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⡀⢀⣀⣸⣧⣄⣀⠀⠀⠀⠀⠀⠀ ⠈⠋⠉⢹⣏⢀⡀⠀⠀⡇⢸⣿⣿⣿⠀⠀⠀⠀⢠⡔⠒⢦⠀⠀⠀⠀⠀⢠⣿⣿⣷⡈⠉⠀⠀⠈⢋⡍⢹⡏⠉⠉⠀⠀⠀⠀⠀⠀ ⠀⠀⣠⡴⢿⡟⠉⢀⡼⠀⠈⠛⠛⠁⠀⠀⠀⠀⠀⠙⠒⠉⠀⠀⠀⠀⠀⠸⣿⣿⣿⠃⠀⠀⠀⠀⠙⠻⣿⣷⣄⡀⠀⠀⠀⠀⠀⠀ ⠀⠈⠉⠀⠈⢿⣤⣤⣤⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢢⡀⠀⠀⠀⠀⠀⣰⡟⠀⠉⠁⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⣾⠋⠀⠀⠈⠙⢷⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⡾⠛⠛⠻⢿⣟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠈⣿⡄⠀⠀⠀⠀⢸⣧⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡏⠀⠀⠀⠀⠀⣻⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠈⠛⠷⢶⣴⠶⠟⠉⠙⠛⠛⠶⠶⠶⠶⠶⠶⠤⣦⠦⠶⠶⠶⠶⠶⠛⢷⣤⣀⣀⣀⣴⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠛⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors