signalApi.ts: ML(:8000) 직접 호출(NEXT_PUBLIC_SIGNAL_BASE_URL).
“이 가격에 알림” → BE POST /api/v1/alerts 재사용(목표가 기본=현재가).
색상: 상승/긍정 빨강, 하락/부정 파랑, 중립 회색, primary 토스블루.
의존
선행: STK2-06
후행: 없음
다이어그램
처리 흐름
sequenceDiagram
participant User as 사용자
participant SI as SignalTab (FE)
participant ML as ML 서비스 (:8000)
participant BE as BE (:8080)
User->>SI: 종목 검색 (250ms 디바운스)
SI->>ML: GET /signals/{symbol}
ML-->>SI: Signal JSON
SI->>SI: SignalCard 렌더링 (색상 매핑)
User->>SI: "이 가격에 알림" 클릭
SI->>BE: POST /api/v1/alerts (목표가, 방향)
BE-->>SI: 201 Created
SI-->>User: 알림 등록 완료 표시
클래스 의존
flowchart LR
subgraph FE["FE (Next.js)"]
SignalTab["SignalTab (page)"]
SignalCard["SignalCard (component)"]
StockSearch["StockSearchInput (component)"]
signalApi["signalApi.ts"]
alertApi["alertApi.ts"]
end
subgraph External["External"]
ML["ML :8000"]
BE["BE :8080"]
end
SignalTab --> SignalCard
SignalTab --> StockSearch
SignalCard --> signalApi
SignalCard --> alertApi
signalApi --> ML
alertApi --> BE
테스트 케이스
시그널 카드에서 목표가·방향을 입력하면 POST /api/v1/alerts가 호출된다.
ML 서비스가 응답 오류를 반환하면 시그널 카드에 에러 상태가 표시된다.
composite 양수면 카드 색상이 빨강, 음수면 파랑, 0이면 회색으로 렌더링된다.
검색 입력 후 250ms 이내 재입력 시 API 호출이 1회만 발생한다(디바운스).
NEXT_PUBLIC_SIGNAL_BASE_URL 미설정 시 시그널 탭이 비활성 상태를 표시한다.