誠品線上庫存查詢工具 — 技術報告 노트

誠品線上庫存查詢工具 — 技術報告

이 프로젝트는 Eslite Online의 상품 재고 상태를 모니터링하기 위한 경량 CLI 도구를 개발했습니다. 기존 Eslite Online 상품 페이지는 재고를 개별적으로만 표시하여 대량 확인이나 인기 상품의 실시간 모니터링을 방해했습니다. 핵심 기술적 과제는 프론트엔드 보호를 우회하고 백엔드 API를 올바르게 호출하는 것이었습니다. 이 도구는 Eslite의 상품 API와 직접 상호 작용하여 수동 웹페이지 새로고침을 대체합니다.발생한 중요한 문제는 TLS 지문 감지로 인한 Cloudflare의 403 Forbidden 오류였습니다. 표준 Python 라이브러리는 실제 브라우저와 다른 TLS 지문을 생성하여 Cloudflare가 요청을 차단하게 했습니다. 해결책은 curl-cffiimpersonate="chrome120" 매개변수와 함께 사용하여 Chrome 브라우저의 TLS 및 HTTP/2 지문을 모방하는 것이었습니다. Eslite의 API는 요청 유효성 검사 또는 캐시 무효화를 위해 YYYYMMDDHHMMSS 형식의 동적 타임스탬프 매개변수를 요구합니다. 이 도구는 각 API 호출에 대해 실시간으로 이 타임스탬프를 생성합니다.사용자 입력을 단순화하기 위해 이 도구는 정규 표현식을 사용하여 원시 GUID 또는 전체 상품 URL에서 20자리 GUID를 추출합니다. --watch N 매개변수는 N초마다 재고를 쿼리하고 터미널 디스플레이를 새로고침하는 지속적인 모니터링을 위해 추가되었습니다. 재고 및 구매 상태는 시각적 스캔을 용이하게 하기 위해 색상으로 구분됩니다. 이 도구는 여러 상품을 동시에 쿼리하는 것을 지원하며, 개별 상품 쿼리 실패는 전체 배치를 중단하지 않고 격리됩니다.기본적으로 UTF-8 인코딩을 사용하지 않을 수 있는 Windows 터미널과의 호환성을 보장하기 위해 스크립트는 표준 출력 및 오류 스트림을 UTF-8을 사용하도록 적극적으로 재구성합니다. 이 프로젝트는 PEP 723을 준수하여 사용자가 종속성을 미리 설치할 필요 없이 uv run을 사용하여 스크립트를 실행할 수 있도록 합니다. 가장 중요하고 가장 파악하기 어려운 기술적 결정은 TLS 지문 문제를 극복하는 것이었으며, 이는 단순히 HTTP 헤더를 위조하는 것이 아니라 특수 라이브러리를 필요로 했습니다.