o2o-negosium-original/lps/tests
민헌 bca8032b79 feat(lps): 봇 감지 시 IP 회전+재시도 + 감지 이력 기록
쿠팡이 봇으로 감지(Akamai 차단 페이지)하면, 같은 IP로 재시도하던 것을
'브라우저 끄고 새 IP로 켜서 재시도'로 전환. 감지 패턴도 축적한다.

- DecodoProxy.rotate(): 시간창 무관 즉시 다음 포트(=새 IP). current_port 노출
- coupang/adapter: 0건+차단마커 감지 시 → 감지기록 → proxy.rotate()+강제재기동 →
  인라인 재시도(max_block_retries=1). IP당 요청수(ip_request_no) 추적, 재기동 시 리셋
- bot_detection 테이블 + crud: source/query/ip_request_no/proxy_port/elapsed_sec/marker/
  headless/html_len 기록 → 'IP당 몇 요청 만에 감지되나' 분석 가능
- worker_main: on_detect=BotDetectionLog.record 주입
- 로그: [coupang][BOT-DETECTED] ip_req#N port=... elapsed=...s marker=...
- tests: proxy rotate 즉시회전 + 감지기록 CRUD → 전체 47/47

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 11:04:07 +09:00
..
fixtures feat(lps): 쿠팡 검색 어댑터 — Akamai 우회(Patchright) + 정규화 파서 2026-07-08 15:59:48 +09:00
test_bot_detection.py feat(lps): 봇 감지 시 IP 회전+재시도 + 감지 이력 기록 2026-07-09 11:04:07 +09:00
test_coupang_parser.py feat(lps): 쿠팡 검색 어댑터 — Akamai 우회(Patchright) + 정규화 파서 2026-07-08 15:59:48 +09:00
test_health.py feat(lps): 인터넷 최저가 검색 솔루션 프레임워크 골격 추가 2026-07-08 15:18:27 +09:00
test_job_queue.py feat(lps): 작업 큐 엔진 — PostgreSQL 원자적 claim + lease + dead-letter 2026-07-08 16:37:32 +09:00
test_lps_api.py feat(lps): 검색 API 라우터 — 요청 적재(enqueue) + 상태/큐 통계 조회 2026-07-08 16:49:28 +09:00
test_naver_transform.py feat(lps): 네이버 어댑터 + 다중 소스 병합 검색 2026-07-09 08:38:15 +09:00
test_negative_cache.py feat(lps): 재시도/못찾음 완결 로직 — 재정제 루프 + not_found + 네거티브 캐시 2026-07-09 09:12:47 +09:00
test_pipeline.py feat(lps): 코어 파이프라인 — mall 필터·IQR 이상치·top-N 최저가 2026-07-08 17:06:15 +09:00
test_proxy.py feat(lps): 봇 감지 시 IP 회전+재시도 + 감지 이력 기록 2026-07-09 11:04:07 +09:00
test_search_handler.py feat(lps): 재시도/못찾음 완결 로직 — 재정제 루프 + not_found + 네거티브 캐시 2026-07-09 09:12:47 +09:00
test_worker.py feat(lps): 워커 루프 + LISTEN/NOTIFY — 큐 소비 파이프라인 가동 2026-07-08 16:58:58 +09:00