추천 종목 고도화 PRD

배경 (Background)

Phase 3에서 대형주(KR 8 + US 4) 한정 추천 시스템을 구현했다. 현재 3가지 한계가 있다: ① 추천 대상이 대형주로 고정 — 중/소형 유망주 발굴 불가 ② 호재 뉴스가 연관 산업 전반에 미치는 효과를 반영하지 못함 (예: AI 붐 → GPU·메모리 관련주) ③ 종목 리스트에 관심종목 추가 버튼이 없고, 가격이 폴링 방식으로 수신됨

목표

  1. 추천 대상을 중·소형주로 확대한다.
  2. 호재 뉴스로부터 테마를 추출하여 연관 종목 체인을 추천한다.
  3. 종목 리스트에서 관심종목 상태를 확인하고 즉시 추가·제거할 수 있다.
  4. 현재가·등락율을 SSE로 수신해 추가 API 호출 없이 실시간 갱신한다.

요구사항

ID요구사항우선순위
R-01중·소형주 추천 종목도 조회할 수 있다P0
R-02호재 뉴스 테마 기반 연관 종목 추천을 제공한다P0
R-03종목 리스트에서 관심종목 상태(★/☆)를 표시하고 추가·제거할 수 있다P0
R-04종목 리스트의 현재가·등락율을 SSE로 실시간 수신한다P0

사용자 시나리오

시나리오 1: 중소형주 추천

  1. 추천 탭에서 “소형주” 필터를 선택한다.
  2. 기존 대형주 외에 유망 소형주 목록과 진입가·시점을 확인한다.

시나리오 2: 테마 연관 추천

  1. 오늘 뉴스: “엔비디아 실적 어닝 서프라이즈, AI 서버 수요 급증”
  2. 추천 탭 상단에 “AI 테마” 섹션이 나타난다.
  3. 연관 종목: SK하이닉스(HBM 공급), 삼성전자(메모리), TSMC(파운드리), 제이씨현시스템(AI 서버 부품) 등을 확인한다.

시나리오 3: 종목 리스트 관심종목 버튼

  1. 종목 리스트에서 “에코프로비엠”을 발견한다.
  2. 옆의 ☆ 버튼을 클릭해 관심종목에 즉시 추가한다.
  3. ★로 변경되며 관심종목 탭에도 반영된다.

시나리오 4: SSE 실시간 가격 수신

  1. 종목 리스트 화면 진입 시 SSE 연결이 맺어진다.
  2. 30초마다 서버에서 현재가·등락율이 SSE 이벤트로 푸시된다.
  3. FE가 별도 API 호출 없이 가격을 갱신한다.

세부 정책

정책 1: 중·소형주 후보군 확대

  • ML 서비스 CURATED_SYMBOLS를 3개 카테고리로 분류·확장한다.
    • LARGE: 기존 KR 8 + US 4
    • MID: 코스피·코스닥 중형 KR 6 + US 3 추가
    • SMALL: 유망 소형 KR 4 + US 2 추가
  • GET /recommendations?category=large|mid|small|all — category 파라미터 추가
  • 응답에 marketCapCategory 필드 포함

정책 2: 호재 테마 연관 종목 추천

  • ML 서비스에 GET /theme-recommendations 신규 엔드포인트
  • 최근 관심종목 뉴스 헤드라인에서 우세 테마를 추출한다
  • 테마→연관 종목 매핑은 정적 JSON(v1) + Claude API 동적 보완(v2)
  • 응답 구조: [{theme, reason, stocks: [{symbol, name, relation}]}]

정책 3: 종목 리스트 관심종목 상태 연동

  • GET /api/v1/stocks 응답의 isInWatchlist 필드를 실제 관심종목 여부로 반영한다
  • AS-IS: ListStocksUseCase가 watchlist를 참조하지 않아 항상 false
  • TO-BE: WatchlistDomainService.findAll() 심볼 set과 교차 조회
  • 추가/제거는 기존 POST /api/v1/watchlist, DELETE /api/v1/watchlist/{id} 재사용

정책 4: SSE 현재가·등락율 실시간 전송

  • AS-IS: SSE event name price-updated, data "refresh" 문자열만 전송 → FE가 REST 추가 호출
  • TO-BE: SSE event name price-updated, data = JSON 배열 [{symbol, lastPrice, changeRate, changeAmount}]
  • StockPriceScheduler(30초 주기)에서 동기화된 가격 데이터를 SSE로 직접 푸시
  • FE는 SSE 이벤트 수신 시 별도 REST 호출 없이 UI 갱신

범위 외

  • 1초 미만 실시간 호가창
  • 테마 추천 결과 기반 자동 주문
  • 개인화 모델(사용자별 선호 테마 학습)

관련 문서