DEV ZZAME logoDEV ZZAME
Back To Projects

Project Archive

스크래핑 시스템 구축

이커머스 셀러들의 마켓별 정산 데이터를 자동으로 수집하여 빠른정산 서비스의 채권 근거로 활용할 필요가 있었음.

JavaSpring BootMariaDBAWSDocker

Why

  • 이커머스 셀러들의 마켓별 정산 데이터를 자동으로 수집하여 빠른정산 서비스의 채권 근거로 활용할 필요가 있었음.
  • 수동으로 데이터를 확인하는 방식으로는 실시간 정산 현황 파악이 불가능했고, 서비스 확장에 따라 자동화된 수집 체계가 필수적이었음.

Challenge

  • 플랫폼별 상이한 인증 방식 대응: 쿠팡(윙/로켓그로스/로켓배송), ESM Plus, 토스페이먼츠, 섹타나인 등 각 플랫폼마다 로그인 방식, 세션 유지, MFA 처리, Captcha 대응이 모두 달라 플랫폼별 스크래핑 전략을 각각 설계해야 했음.
  • Captcha 실시간 처리: ESM Plus의 경우 스크래핑 도중 Captcha가 발생하는 구간이 있어, 운영자가 즉각 개입할 수 있는 구조가 필요했음.
  • 데이터 정합성 확보: 마켓별로 정산 구조와 항목이 달라(광고비, 상계내역, 밀크런 등) 수집된 원시 데이터를 채권으로 인정 가능한 구조로 가공하는 정합 로직 구현이 어려웠음.
  • 안정적인 24시간 운영: 배치 스케줄러 기반으로 정기 스크래핑이 돌아가야 했고, 장애 발생 시 즉각 대응이 가능해야 했음.

To Be

  • 플랫폼 특성에 따른 스크래핑 방식 분리 적용: API를 공식 제공하는 플랫폼은 RestTemplate을 통한 직접 통신으로 처리하여 안정성을 확보함. 브라우저 렌더링이 필요한 플랫폼은 HtmlUnit 기반의 경량 스크래핑으로 처리하고, 정적 페이지 파싱이 가능한 경우 Jsoup을 활용하여 자원 소모를 최소화함. 플랫폼별 로그인 플로우와 MFA·2FA 처리 로직을 분리 구현하여 유지보수성을 높임.
  • Captcha 실시간 대응 프로세스 구축: Captcha 발생 시 Slack Slash Command를 통해 운영자가 실시간으로 개입하여 처리할 수 있는 운영 프로세스를 구축함.
  • 정산 데이터 정합 엔진 개발: 마켓별 정산 항목(광고비, 쿠폰, 성장장려금, 밀크런 등 10개 이상의 상계 항목)을 파싱하고 채권 가능 금액으로 변환하는 정합 로직을 구현함. 중복 채권 및 삭제 채권 감지 로직을 추가하여 데이터 신뢰성을 확보함.
  • 배치 스케줄러 및 실시간 모니터링 구축: Spring Batch 기반의 정기 스크래핑 배치를 구성하고, 스크래핑 시작/종료/오류 상태를 Slack 웹훅으로 실시간 전송하여 장애 발생 시 신속하게 대응할 수 있도록 함.