docs(lps): 오픈마켓 폴백 크롤 반영 — 아키텍처·README

파이프라인 ⑤-1 폴백 단계(네이버 미커버 몰만 크롤), 구성요소 표에 오픈마켓 폴백,
폴더 구조에 esm/st11 추가.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
민헌 2026-07-09 14:54:00 +09:00
parent 7e5814b0e5
commit 61b9e6ae82
2 changed files with 8 additions and 3 deletions

View File

@ -100,7 +100,7 @@ lps/
│ └── database/model/models.py # DB 테이블 정의
├── crud/ # DB 접근 (job_crud, price_history, negative_cache, bot_detection)
├── services/
│ ├── search/ # 소스 어댑터 (coupang, naver) + 프록시·필터
│ ├── search/ # 소스 어댑터 (coupang, naver, esm=G마켓·옥션, st11=11번가) + 프록시·필터
│ ├── pipeline/ # 필터·이상치·최저가 정렬
│ └── ai/ # AI 유사도 판정·검색어 생성 (OpenAI)
├── worker/ # 워커 루프·핸들러·알림(NOTIFY)

View File

@ -10,6 +10,7 @@
| **큐(대기줄)** | `crud/job_crud.py` + `job` 테이블 | 할 일을 순서대로 안전하게 보관 (PostgreSQL 사용) |
| **워커(일꾼)** | `worker_main.py`, `worker/` | 큐에서 하나씩 꺼내 **실제 검색·판정·저장** 수행 |
| **소스 어댑터** | `services/search/` | 네이버·쿠팡에서 상품 수집 (소스별 방식 캡슐화) |
| **오픈마켓 폴백** | `services/search/{esm,st11}/` | G마켓·옥션·11번가 크롤 — 네이버가 그 몰을 커버 못 했을 때만 (BrowserSearchAdapter 공유) |
| **파이프라인** | `services/pipeline/` | 수집 결과를 필터·이상치 제거·최저가 정렬 |
| **AI** | `services/ai/` | "같은 상품" 판정 + 검색어 생성 (OpenAI) |
@ -36,12 +37,16 @@
⑤ AI 같은 상품 판정
후보 중 "찾는 상품과 동일한 것"만 선별 (액세서리·다른 규격 제외)
→ 매칭 있으면: 최저가순 정렬 → 상위 N개 반환 (found)
→ 매칭 있으면: ⑤-1 오픈마켓 폴백 → 최저가순 정렬 → 상위 N개 반환 (found)
→ 매칭 0건 + 소스 정상: 다음 라운드로
→ 매칭 0건 + 소스 차단: 작업 실패 처리(뒤에서 재시도)
⑤-1 오픈마켓 폴백 (매칭 성공 시)
네이버가 커버 못 한 몰(G마켓·옥션·11번가)만 실사이트 크롤 → 같은 상품 판정 → 병합
("네이버로 그 몰 값 확보 성공 → 그 값, 실패(몰 없음) → 크롤". 크롤 실패는 격리)
⑥ 결과 저장
최저가 확정 + 최저가 이력 스냅샷 기록
최저가 확정 + 최저가 이력 스냅샷 기록(몰별 by_mall 포함)
```
모든 라운드에서 못 찾으면 → **not_found(정상 종료)** + 네거티브 캐시에 기록.