[WATCH-04] FE: 감성 레이블 직관화 + 뉴스 리스트 UI 고도화
작업 내용 (설계 의도)
변경 사항
세 가지를 함께 개선한다:
signal.label행동 레이블을 “매수 유망 / 상승 주목 / 중립 관망 / 하락 주의 / 매도 주의”로 맞춘다 (ML WATCH-01 완료 후 실제 값이 바뀌므로SignalCard에서 표현 매핑만 업데이트).SignalCard뉴스 섹션을NewsItem컴포넌트로 교체: 호재/악재/중립 배지, 클릭 가능한 링크, 번역 제목 표시.- 카드 최상단에
NewsSummary블록(BE에서 조회한 요약 텍스트) 추가.
WATCH-01(ML 뉴스 shape 변경), WATCH-03(BE 요약 API)에 의존한다.
WATCH-05가 WatchlistItemCard.tsx를 수정하므로 이 티켓은 SignalCard.tsx·SignalCard.module.css·types/signal.ts만 수정한다.
다이어그램
처리 흐름
sequenceDiagram participant FE as WatchlistSection participant BE as BE :8080 participant ML as ML :8000 FE->>BE: GET /api/v1/watchlist/{symbol}/news FE->>ML: GET /signals/{symbol} BE-->>FE: {summary, headlines} ML-->>FE: Signal FE->>FE: render SignalCard(signal, newsSummary, headlines)
클래스 의존
flowchart LR WatchlistSection --> SignalCard SignalCard --> NewsSummary SignalCard --> NewsItem SignalCard --> SignalLabel
테스트 케이스
SignalLabel이 composite ≥ 0.5일 때 “매수 유망”을 렌더한다SignalLabel이 composite ≥ 0.15일 때 “상승 주목”을 렌더한다SignalLabel이 composite > -0.15일 때 “중립 관망”을 렌더한다SignalLabel이 composite > -0.5일 때 “하락 주의”를 렌더한다SignalLabel이 composite < -0.5일 때 “매도 주의”를 렌더한다NewsItem이sentiment="호재"일 때 초록색 배지를 렌더한다NewsItem이sentiment="악재"일 때 빨간색 배지를 렌더한다NewsItem이 링크를 제공할 때<a href>요소로 렌더된다NewsSummary가 비어 있으면 섹션 자체가 렌더되지 않는다translated_title이 있으면 원문 대신 번역 제목을 표시한다