[STK9-02] ML: in-memory TtlCache 제거
작업 내용 (설계 의도)
ML 서비스를 stateless 순수 계산 서비스로 만든다. Aggregator가 Backend DB를 먼저 확인하고 DB MISS 또는 refresh일 때만 ML을 호출하게 되므로, ML 내부의 in-memory TtlCache는 불필요해진다.
변경 파일: ml/app/main.py
signal_cache = TtlCache(settings.signal_cache_ttl)제거_compute_signal()함수 제거 — 각 엔드포인트가build_signal()을 직접 호출- recommendations 엔드포인트의
signal_cache.get_or_compute()래퍼 제거 config.py의signal_cache_ttl필드 제거
다이어그램
처리 흐름
sequenceDiagram participant AGG as Aggregator participant ML as FastAPI participant TC as TossClient AGG->>ML: GET /signals/{symbol} ML->>TC: get_stock(symbol) ML->>ML: fetch_headlines() ML->>ML: analyze_headlines_v2() → Claude CLI ML->>TC: get_closes(symbol, 20) ML-->>AGG: Signal 계산 결과
클래스 의존
flowchart LR route["/signals/{symbol}"] --> build_signal build_signal --> TossClient build_signal --> fetch_headlines build_signal --> analyze_headlines_v2
테스트 케이스
/signals/{symbol}호출 시 매번build_signal()이 실행된다 (캐시 없음)/recommendations호출 시 12종목 병렬 계산이 실행된다TtlCache관련 코드가 남아 있지 않다signal_cache_ttl환경변수 설정 여부와 무관하게 동작한다