How Beaconmon Monitors Shopify Competitor Storefronts at Scale (Without Playwright)
개요
Beaconmon은 Playwright, 스크래핑 팜, VPS 없이 대규모로 Shopify 경쟁사 스토어프론트를 모니터링하는 방법을 설명합니다.
주요 내용
- 아키텍처: BullMQ 워커가 정해진 간격으로 경쟁사 스토어 HTML을 가져오고, cheerio를 사용하여 가격, 프로모션, 제품 그리드 콘텐츠를 추출합니다. 추출된 데이터는 정규화되고 저장되며, 규칙 기반 및 AI 기반으로 변경 사항의 중요도가 평가됩니다.
- 카탈로그 매핑: Shopify의 공개 JSON 엔드포인트를 사용하여 스토어의 제품 카탈로그를 한 번 설정 시점에 가져와 내부 제품 맵을 구축합니다. 이는 개별 URL 대신 제품 수를 기준으로 추적할 수 있게 합니다.
- 셀렉터 캐스케이드: Shopify 테마의 비표준화된 특성을 고려하여, 가격, 공지 바, 컬렉션 그리드 등에 대한 우선순위가 지정된 셀렉터 목록을 사용하고, 일치하는 첫 번째 셀렉터를 선택합니다. 일치하는 셀렉터가 없을 경우 대비 셀렉터(fallbackSelector)를 사용하며, 이 경우 "감지됨"으로 표시하지 않아 오탐지를 방지합니다.
- 콘텐츠 확인: undici를 사용하여 HTML을 가져오고, cheerio로 파싱합니다. 가져온 텍스트는 줄바꿈 문자, 공백 등을 정규화하여 저장합니다. 이 정규화 과정은 CDN 엣지 및 A/B 테스트 변형에 따른 불규칙한 공백으로 인한 오탐지를 방지하는 데 중요합니다.
- 변경 사항 점수화: 변경 사항의 중요도는 두 단계로 평가됩니다. 첫째, 가격 변동률, 재고 상태 변경, 세일 시작 등 미리 정의된 규칙을 기반으로 신속하게 점수가 매겨집니다. 둘째, Growth 및 Scale 플랜의 경우, 변경된 텍스트가 Claude와 같은 AI 모델로 전달되어 추가적인 중요도 평가를 받습니다. AI 평가가 실패하거나 포함되지 않는 경우, 규칙 기반 점수가 사용됩니다.
- 데이터 활용: 경쟁사 가격 변동, 프로모션 일정, 신제품 출시 속도, 재고 신호 등 다양한 인사이트를 얻을 수 있습니다. 이는 데이터 기반 가격 책정, 프로모션 전략 수립, 소싱 전략 결정 등에 활용될 수 있습니다.
- 핵심 교훈:
1. 셀렉터 캐스케이드는 큐보다 더 중요한 부분이며, 이름이 지정된 대체 셀렉터와 "매칭" 및 "폴백"의 명확한 구분이 중요합니다.
2. 저장 전에 반드시 정규화해야 하며, 그렇지 않으면 CDN 속성, 스크립트 값, 공백 변화 등으로 인해 끊임없는 오탐지가 발생할 수 있습니다.
3. 모든 계층에서 실패 시 개방(fail open) 전략을 사용해야 하며, AI 계층, 셀렉터 캐스케이드, 또는 모니터링 자체가 실패하더라도 서비스가 중단되지 않고 오류 유형을 기록하고 계속 진행해야 합니다.
시사점
Beaconmon은 Playwright나 헤드리스 브라우저 없이도 효율적이고 확장 가능한 경쟁사 스토어 모니터링 솔루션을 제공하며, 정규화된 HTML 기반 데이터 추출 및 다단계 평가 방식을 통해 정확하고 실행 가능한 인사이트를 제공합니다.
댓글
GitHub Discussions