피드로 돌아가기
Dev.toInfrastructure
원문 읽기
분산 큐 기반 Web Intelligence 구축으로 물류비 12,000€ 절감
Automating Web Intelligence with Python: A Practical Guide
AI 요약
Context
단순 정적 HTML 파싱으로는 현대적인 JS 렌더링 기반 SPA 사이트의 데이터 추출이 불가능한 한계 존재. 대규모 URL 처리 시 발생하는 Rate Limit 및 서버 부하로 인한 데이터 유실과 차단 가능성을 해결해야 하는 상황.
Technical Solution
- Content 특성에 따른 계층적 추출 전략: 정적 페이지는 BeautifulSoup, JS 렌더링 페이지는 Playwright를 선택적으로 적용하여 리소스 최적화
- Playwright 기반 Anti-detection 설계: navigator.webdriver 속성을 undefined로 재정의하여 브라우저 자동화 탐지 우회
- Celery와 Redis 기반의 Distributed Crawling 구조: Redis를 URL 큐 및 결과 캐시로 활용하고 CPU 코어당 1개의 Worker를 배치하여 병렬 처리 성능 극대화
- Robust Error Handling 메커니즘: 429 상태 코드 발생 시 60초 대기 및 Timeout 발생 시 Exponential Backoff를 적용한 재시도 로직 구현
- DSGVO 준수를 위한 Privacy-first 인프라: Public 데이터 한정 수집, User-Agent 명시, 90일 데이터 보유 정책 및 개인정보 제거 필터 적용
Impact
- Rotterdam 파업 상황을 주요 뉴스보다 4시간 먼저 감지하여 컨테이너 3개 경로 변경 및 체선료(Demurrage fees) 12,000€ 절감
- Playwright 도입 시 BeautifulSoup 대비 약 3~5배의 처리 속도 저하가 발생하나, JS Hydration 대기 전략(networkidle)으로 데이터 정밀도 확보
실천 포인트
- 대상 사이트의 JS 렌더링 여부에 따라 requests와 Playwright를 구분하여 리소스 소모 최적화 - Rate Limit 방지를 위해 일반 사이트 1 req/sec, 소규모 사이트
0.5 req/sec 수준의 속도 제어 적용 - 분산 환경 구축 시 Redis 큐와 Celery Worker 배치를 통한 수평 확장(Horizontal Scaling) 구조 검토 - HTTP 429 응답에 대비한 Exponential Backoff 전략 및 재시도 횟수 설정 필수