loadtest/monitor.py (:9700, 단일 파일·외부 인프라 없음) + run_monitor.sh(대화형). e2e 부하(N=100 loadtest.py) 중 "프로세스가 잘 진행되는지, 코어가 전부 도는지, 병목이 어느 층인지"를 브라우저에서 2초 간격으로 본다: - 큐 추이: /v1/lps/ops 폴링 — PENDING/RUNNING/DONE/DEAD 라인 + 처리량(개/분) 타일 - 프로세스 그룹 CPU: worker/api/chrome/postgres — 병목 층 판독 (chrome 은 워커 자손만 집계해 사용자 브라우저와 분리, uvicorn spawn 자식은 부모로 api 귀속) - 코어별 사용률 막대: 멀티코어 활용 확인 - 현재 스냅샷 표 + 호버 툴팁 + 라인 끝 직접 라벨(dataviz 팔레트 검증 통과, 다크 서피스) - psutil 의존성 추가(로컬 관측 전용) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
20 lines
1.2 KiB
Plaintext
20 lines
1.2 KiB
Plaintext
fastapi
|
|
uvicorn[standard]
|
|
sqlalchemy>=2.0
|
|
greenlet # SQLAlchemy async 의 sync/async 브리지에 필수 (일부 환경에서 자동 설치 누락됨)
|
|
asyncpg
|
|
orjson
|
|
pydantic>=2.0
|
|
httpx # 외부 사이트/오픈API(최저가 조회) 호출용 async HTTP 클라이언트
|
|
|
|
# --- 크롤링(LPS) — 안티봇 대응은 어댑터 안에 격리. 트레드밀 대비 버전 pin. ---
|
|
curl_cffi==0.15.0 # 쿠팡: TLS/HTTP2 지문 위장(impersonate) async HTTP 클라이언트
|
|
selectolax==0.4.10 # 빠른 C 파서(쿠팡 HTML). bs4 대비 최대 30배
|
|
patchright # 스텔스 Playwright 포크. 쿠팡 Akamai JS 챌린지 통과(실제 Chrome, channel=chrome)
|
|
# ※ nodriver 는 Python 3.14 소스인코딩 버그로 미채택 → Patchright 로 대체
|
|
# ※ 실행엔 시스템 Google Chrome 필요(로컬) / 배포 이미지엔 chromium 설치 필요
|
|
openai # AI 유사도 판정(같은 상품 매칭) — [OpenAIConfig].api_key(config.local.toml). structured output 사용
|
|
|
|
# --- 로컬 관측 도구(프로덕션 미사용) ---
|
|
psutil # loadtest/monitor.py — 코어별 CPU·프로세스 그룹(worker/api/chrome/postgres) 사용률 샘플링
|