피드로 돌아가기
It Worked on My Machine (Literally)
Dev.toDev.to
Backend

TLS Fingerprinting 우회를 통한 Cloudflare 차단 해결 및 스크래핑 서버 설계

It Worked on My Machine (Literally)

christine2026년 6월 9일8intermediate

Context

Public API가 부재한 StoryGraph의 데이터를 e-ink 디스플레이에 표시하기 위한 데이터 파이프라인 구축 필요. 단순 HTTP Header 변조만으로는 Cloudflare의 Managed Challenge로 인한 403 Forbidden 에러를 해결할 수 없는 제약 상황 발생.

Technical Solution

  • TLS Handshake의 Cipher Order 및 Extension 패턴을 분석하여 브라우저와 동일한 지문을 생성하는 curl-impersonate 도입
  • 오버헤드 최소화를 위해 Heavy Framework를 배제하고 Ruby 및 Rack 기반의 경량 API 서버 설계
  • Nokogiri를 활용한 HTML Parsing 로직과 TRMNL 전용 Liquid Template 렌더링 구조 결합
  • 불필요한 외부 요청 감소 및 응답 속도 향상을 위한 30분 TTL 기반 In-memory Cache 계층 구현
  • 스크래핑 실패 시 500 에러 대신 에러 메시지를 포함한 200 OK를 반환하는 Fail-soft 전략 적용
  • 요청 누락 방지를 위한 Short Backoff 기반의 Retry 메커니즘 구축

- HTTP Header 외에 TLS Fingerprint가 서버 식별의 핵심 지표로 사용되는지 확인 - 클라우드 환경의 Data Center IP 대역이 타겟 서버에서 차단 대상인지 사전 검증 - 외부 API 의존성 제거를 위한 HTML Fixture 기반의 테스트 스위트 구축 - 스크래핑 서비스 설계 시 Target 서버 부하 방지를 위한 Cache 및 Rate Limit 전략 수립

원문 읽기