FlipPrice: 사진을 찍으면 실제 판매 가능한 가격을 알려주는 앱
요약
FlipPrice는 중고 물품 리셀러를 위해 사진 한 장만으로 판매 가격과 상세 설명을 제공하는 모바일 앱입니다. 이 앱은 eBay의 실제 판매 기록(sold comps)을 기반으로 정확한 제안 가격 범위를 제시하며, 사용자의 과거 판매 이력까지 반영하여 개인화된 가격 책정이 가능합니다.
핵심 포인트
- 사진 인식 및 시장 데이터 분석을 통한 자동 가격 산정
- 단순 추측이 아닌 '실제 판매 기록' 기반의 가격 제공
- 사용자별 판매 패턴 학습으로 정교한 가격 예측 구현
- Gemma와 SerpApi, TabPFN 등을 활용한 기술 스택 구성
이 글은 Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle 제출물입니다.
제가 만든 것
FlipPrice는 eBay에서 중고 상점이나 차고 세일에서 발견한 물건을 되파는 사람들을 위한 휴대폰 앱입니다.
재판매 과정에서 가장 느린 부분은 물건을 찾는 것이 아닙니다. 모든 개별 품목에 대해 그것이 무엇인지 파악하고, 판매된 목록을 검색하며, 가격을 추측하고, 상품 설명을 작성하는 데 소비되는 시간입니다. 이것을 30개짜리 상자에 곱하면 부업이 수익을 내기 어렵게 됩니다.
FlipPrice를 사용하면 사진 한 장으로 다음을 얻을 수 있습니다:
- 제안 가격 및 범위: eBay에서 유사한 품목들이 '실제로 판매된' 기록을 기반으로 하며, 단순히 요청 가격이나 챗봇의 추측이 아닙니다.
- 가장 근접한 판매 목록 5개: 한 번의 터치만으로 확인할 수 있어 사용자가 직접 가격을 검토할 수 있습니다.
- 게시 준비 완료된 설명: 보이는 것만을 설명하는 게시글로, 구매자가 따질 수 있는 '완벽하게 작동함, 잘 관리됨'과 같은 꾸며낸 주장은 없습니다.
- 사용자로부터 학습하는 가격: 품목을 판매된 것으로 표시하면, 특정 카테고리에서 충분한 판매 기록이 쌓인 후에는 시장 평균 대신 '본인의' 과거 기록을 기반으로 FlipPrice가 가격을 책정합니다. 빈티지 Levi's를 항상 시장가보다 20% 높게 파는 판매자는 그 점이 가격에 반영되어야 합니다.
AI가 잘못된 정보를 제공할 경우(한때 Redragon 게이밍 마우스를 Logitech으로 오인하여 Logitech의 가격을 불러왔던 적이 있습니다), **
- Gemma가 라벨을 읽었습니다: Engage · Amber Hues · eau de parfum · good.
- 작성된 리스팅은 담백하고 정직했습니다: "Engage Amber Hues Eau de Parfum. 상품 상태는 좋음(good)입니다. 더 자세한 내용은 사진을 참고해 주세요."
- FlipPrice의 첫 번째 버전은 가격을 $65로 책정했습니다. eBay 검색 결과에는 $170짜리 틈새 향수, 에이븐 6개 묶음, 그리고 다른 12가지 향수들이 포함되어 있었습니다. Engage 향수는 실제로는 $27–$39에 판매되었습니다.
- 아래 설명된 수정 사항을 적용한 후에는 실제로 Engage 향수를 판매한 3개의 eBay 판매 기록만을 기반으로 $28 (범위 $27–$39)라고 표시됩니다.
코드
GitHub logo existentialcoder / flipprice
Hacktoberfest Week 2 챌린지
FlipPrice
사진 → 판매용 부업(side-hustle) 리셀러를 위한 가격 및 리스팅 정보 제공. Gemma가 상품을 식별하고, SerpApi가 eBay 판매 비교 자료(sold comps)를 가져오며, TabPFN이 판매자의 자체 판매 이력을 기반으로 가격을 예측합니다.
app/ Expo Router 클라이언트: 화면 캡처 → 결과 화면
api/ FastAPI: /analyze, /price, /sold, /history (TabPFN은 인프로세스(in-process)에서 실행)
video/ Remotion 데모 비디오
실행 방법
1. API (MongoDB 필요: 로컬 또는 Atlas URI)
cd api && python3 -m venv .venv && .venv/bin/pip install -r requirements.txt
cp .env.example .env # GEMINI_API_KEY, SERPAPI_KEY, MONGODB_URI, TABPFN_TOKEN 채우기
set -a && . ./.env && set +a && .venv/bin/uvicorn main:app --reload --host 0.0.0.0 --port 3000 --timeout-keep-alive 75
2. 선택 사항: 판매 이력 시드(seed) (컬럼: category, brand, item_type, condition, era, sold_price)
jq -Rs '{csv: .}' sample-sales.csv | curl -s -H 'content-type: application/json' -d @- localhost:3000/history
3. 앱 (Expo Go에서 열기; 휴대폰과 노트북을 동일한 Wi-Fi에 연결)
cd app && npm install
printf 'EXPO_PUBLIC_API_URL=http://<your-lan-ip>:3000\nREACT_NATIVE_PACKAGER_HOSTNAME=<your-lan-ip>\n'
…
app/: Expo (React Native) 앱과 Expo Router를 사용한 구현: 화면 캡처 → 결과 화면api/: FastAPI 서비스:/analyze,/price,/sold,/historyvideo/: Remotion으로 제작된 데모 비디오
구축 과정 (How I Built It)
photo ──► Gemma 4 (vision) ──► 브랜드 / 모델 / 유형 / 상태 + 판매 목록 텍스트
│
▼
...
**Gemma 4 (26B-A4B, 오픈 웨이트)**가 시각 정보 처리와 작성 작업을 담당합니다. 한 번의 호출로 사진을 읽고 구조화된 필드(브랜드, 모델, 품목 유형, 상태, 시대)를 반환하며 판매 목록을 작성합니다. 기존에 두 번의 호출이 필요했던 것을 하나로 통합하여 사진당 약 15초를 절약했습니다. 프롬프트는 의도적으로 엄격하게 설정되어 있습니다. 로고가 판독 가능하지 않은 경우 브랜드는 `
- 식별 오류가 가격 책정 오류보다 더 큰 비용을 초래합니다. 단순히 'asus laptop'으로 검색하면 저가형 netbook부터 고급 게이밍 노트북까지 뒤섞입니다.
model필드를 추가하고 사용자가 이를 수정할 수 있게 한 것이 어떤 모델링 선택보다도 중요했습니다. - 검색 결과는 비교 가능한 판매품이 아닙니다. eBay의 '판매됨(sold)' 검색은 모호합니다. 특정 향수 하나를 요청하면 앰버 향을 가진 물건 서른 가지가 나옵니다. FlipPrice는 이제 제목에 모델명이 명시된 결과만 가격 책정하고, 브랜드명으로 대체하며, 이마저도 일치하는 항목이 3개 미만일 때만 모든 것을 대상으로 합니다. 그 필터 하나로 인해 향수 가격이 $65에서 정확한 $28로 떨어졌습니다.
- 호스팅 모델 엔드포인트가 실패합니다. 테스트 중 Gemma의 API가 500 에러를 반환하여, 백엔드가 재시도하고 두 번째 모델로 대체됩니다. 모든 응답에는 어떤 모델이 목록을 작성했는지 기록됩니다.
Open Innovation은 왜 중요할까요?
재판매 가격 책정은 개인 데이터에 의존합니다: 당신이 얼마를 지불했는지, 당신이 얼마에 팔았는지, 당신의 구매자 중 누가 더 많이 지불하는지. 폐쇄형 가격 API는 그 이력을 다른 사람의 서버에 업로드해야 하며, 당신의 시장 관점이 아닌 그들의 모델 관점을 제공할 것입니다.
여기서는 판매 내역을 보는 부분인 TabPFN이 백엔드에서 인-프로세스(in-process)로 실행되므로, 당신의 판매 이력이 제3자에게 절대 전달되지 않습니다. 그리고 Gemma의 가중치(weights)가 오픈되어 있기 때문에, 비전 단계가 특정 공급업체에 묶이지 않습니다. 오늘날에는 편의를 위해 Google의 호스팅 엔드포인트를 호출하지만, 동일한 모델은 단일 GPU(또는 노트북용 소형 Gemma)에서 실행될 수 있습니다. 판매자나 작은 재판매 가게는 사진을 포함하여 FlipPrice 전체를 자체 하드웨어에서, 사진당 비용 없이 운영할 수 있습니다.
오픈 모델이 없다면 이것은 누군가의 API 위에 덧씌운 얇은 포장지에 불과할 것입니다. 하지만 오픈 모델 덕분에 당신의 비즈니스를 가장 잘 아는 가격 책정 모델을 소유하게 됩니다.
제 에이전트 세션
경품 카테고리
- TabPFN의 최적 활용 사례: 판매자 자신의 소규모 판매 이력으로부터 개인별 가격 예측
- Gemma의 최적 활용 사례: 아이템 식별 및 리스팅 생성을 위한 Gemma 4 비전 기능
- SerpApi: 실시간 eBay 판매 목록 검색을 통한 모든 가격
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기