추천 종목 고도화 PRD
배경 (Background)
Phase 3에서 대형주(KR 8 + US 4) 한정 추천 시스템을 구현했다. 현재 3가지 한계가 있다: ① 추천 대상이 대형주로 고정 — 중/소형 유망주 발굴 불가 ② 호재 뉴스가 연관 산업 전반에 미치는 효과를 반영하지 못함 (예: AI 붐 → GPU·메모리 관련주) ③ 종목 리스트에 관심종목 추가 버튼이 없고, 가격이 폴링 방식으로 수신됨
목표
- 추천 대상을 중·소형주로 확대한다.
- 호재 뉴스로부터 테마를 추출하여 연관 종목 체인을 추천한다.
- 종목 리스트에서 관심종목 상태를 확인하고 즉시 추가·제거할 수 있다.
- 현재가·등락율을 SSE로 수신해 추가 API 호출 없이 실시간 갱신한다.
요구사항
| ID | 요구사항 | 우선순위 |
|---|---|---|
| R-01 | 중·소형주 추천 종목도 조회할 수 있다 | P0 |
| R-02 | 호재 뉴스 테마 기반 연관 종목 추천을 제공한다 | P0 |
| R-03 | 종목 리스트에서 관심종목 상태(★/☆)를 표시하고 추가·제거할 수 있다 | P0 |
| R-04 | 종목 리스트의 현재가·등락율을 SSE로 실시간 수신한다 | P0 |
사용자 시나리오
시나리오 1: 중소형주 추천
- 추천 탭에서 “소형주” 필터를 선택한다.
- 기존 대형주 외에 유망 소형주 목록과 진입가·시점을 확인한다.
시나리오 2: 테마 연관 추천
- 오늘 뉴스: “엔비디아 실적 어닝 서프라이즈, AI 서버 수요 급증”
- 추천 탭 상단에 “AI 테마” 섹션이 나타난다.
- 연관 종목: SK하이닉스(HBM 공급), 삼성전자(메모리), TSMC(파운드리), 제이씨현시스템(AI 서버 부품) 등을 확인한다.
시나리오 3: 종목 리스트 관심종목 버튼
- 종목 리스트에서 “에코프로비엠”을 발견한다.
- 옆의 ☆ 버튼을 클릭해 관심종목에 즉시 추가한다.
- ★로 변경되며 관심종목 탭에도 반영된다.
시나리오 4: SSE 실시간 가격 수신
- 종목 리스트 화면 진입 시 SSE 연결이 맺어진다.
- 30초마다 서버에서 현재가·등락율이 SSE 이벤트로 푸시된다.
- 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초 미만 실시간 호가창
- 테마 추천 결과 기반 자동 주문
- 개인화 모델(사용자별 선호 테마 학습)