뉴스 시그널 PRD
배경 (Background)
토스 API엔 뉴스가 없다. 사용자는 종목 분위기를 파악하려면 뉴스를 일일이 검색해야 하고, 감성만으로는 가격 흐름을 알 수 없다. 무료 뉴스 소스와 claude -p CLI 감성 분석을 결합해 뉴스 감성 + 가격 추세를 종합한 참고 시그널을 제공한다.
목표
종목에 대해 뉴스 감성 + 가격 추세를 종합한 참고 시그널을 제공해 매매 판단을 보조한다. 단, 이는 수익 예측이 아니라 참고용임을 명확히 한다.
요구사항
| ID | 요구사항 | 우선순위 |
|---|---|---|
| R-01 | KR=Google RSS / US=GDELT 헤드라인을 자동 수집한다 | 높음 |
| R-02 | claude -p로 헤드라인 감성을 [-1,1]로 점수화한다 | 높음 |
| R-03 | MA·RSI 추세 점수와 0.6:0.4 블렌딩으로 종합 시그널을 산출한다 | 높음 |
| R-04 | 종목별 TTL 캐시(기본 600초)로 hit 시 ~1s 응답을 보장한다 | 높음 |
| R-05 | 매체 접미사 제거 dedup으로 중복 헤드라인을 제거한다 | 중간 |
| R-06 | GET /signals/{symbol} 단일 호출로 감성·추세·종합 점수와 근거 헤드라인을 반환한다 | 높음 |
| R-07 | KR/US 시장에 맞는 뉴스 소스를 자동 선택한다 | 높음 |
| R-08 | 헤드라인 0건이거나 감성 파싱 실패 시 에러 없이 NEUTRAL(0.0)로 폴백한다 | 높음 |
| R-09 | 시그널 카드에서 목표가 알림을 바로 등록할 수 있다 | 중간 |
기대 효과
- 종목별 분위기를 단일 호출(
GET /signals/{symbol})로 파악. - KR/US 시장에 맞는 뉴스 소스 자동 선택.
- 시그널 카드에서 바로 목표가 알림 등록 가능.
사용자 시나리오
시나리오 1 — 종합 시그널 조회
사용자가 관심 종목(예: 삼성전자)의 시그널 탭에 진입한다. 시스템은 Google RSS로 최신 뉴스를 수집하고 claude -p로 감성 점수를 산출한 뒤 MA·RSI 추세와 합산해 종합 점수와 5단계 라벨(강한 긍정~강한 부정)을 반환한다. 같은 종목을 재조회하면 캐시 hit으로 ~1s 내에 응답한다.
시나리오 2 — 시그널 기반 알림 등록
사용자가 시그널 카드를 보고 “이 가격에 알림” 폼을 통해 목표가와 방향을 설정한다. 시스템은 기존 POST /api/v1/alerts API를 재사용해 알림을 등록하고 시그널 탭에서 바로 이탈 없이 처리를 완료한다.
경쟁사·동일 제품군 비교
네이버 증권 / 한경 컨센서스
- 종목 뉴스·리포트 집계 제공. 단 감성 정량화·기술 지표 종합 점수는 없음. 사람이 읽고 판단.
TradingView 아이디어·기술 지표
- 강력한 차트·지표. 단 한국어 뉴스 감성 결합 부재, 헤드라인 감성 점수 미제공.
Finviz (US)
- 종목 스크리너·뉴스 집계. 단 US 중심, 한국 종목·한국어 감성 미지원.
비교 요약표
| 항목 | 본 도구 | 네이버·한경 | TradingView | Finviz |
|---|---|---|---|---|
| 뉴스 감성 정량화 | ✅(claude) | ✗ | ✗ | ✗ |
| 기술 추세 종합 점수 | ✅ | ✗ | △(지표만) | △ |
| KR·US 자동 분기 | ✅ | KR | 글로벌 | US |
| 단일 호출 종합 시그널 | ✅ | ✗ | ✗ | ✗ |
| 비용 | 무료(자체) | 무료 | 유료 가능 | 무료/유료 |
세부 정책
정책 1: 종합 시그널 조회
유저 스토리
- 사용자로서, 종목코드를 입력하면 감성·추세·종합 점수와 근거 헤드라인을 한 번에 보고 싶다.
UI / UX 주요 작업 포인트
- 시그널 카드: 종합 점수·5단계 라벨(강한 긍정~강한 부정), 감성·모멘텀 분해, 근거 헤드라인 리스트.
- 색상은 한국 관례: 상승/긍정 빨강, 하락/부정 파랑, 중립 회색, primary 토스블루
#3182F6.
상세 정책
GET /signals/{symbol}→ 토스 종목 마스터로 종목명·시장(KR/US)·통화 판별.- 종합 =
clamp(0.6×감성 + 0.4×모멘텀, -1, 1). 라벨 임계값: ≥0.5 강한 긍정 / ≥0.15 긍정 / ±0.15 중립 / >-0.5 부정 / ≤-0.5 강한 부정. - 모멘텀 = MA20 이격·MA5/MA20 크로스·RSI14 평균.
마이그레이션 조건 (선택)
- 해당 없음 (별도 영속 스토리지 없음, stateless + in-memory 캐시).
정책 2: 뉴스 수집·감성 분석
유저 스토리
- 사용자로서, KR/US 종목 모두 적절한 소스의 최신 뉴스 감성을 받고 싶다.
- 사용자로서, 뉴스가 없거나 분석이 실패해도 에러 없이 결과를 받고 싶다.
UI / UX 주요 작업 포인트
- 헤드라인은 중복 제거 후 표시, 감성 라벨 배지 노출.
상세 정책
- 소스 분기: KR(KOSPI/KOSDAQ/KONEX) → Google News RSS(ko), US → GDELT(폴백 Google en-US).
- 감성:
claude -p "<프롬프트>"(timeout 120s), 실적·수주·규제·신제품 가중. JSON만 강제. - 실패 모드: 헤드라인 0건 → 즉시 중립, 파싱 불가 → NEUTRAL(0.0) graceful 폴백.
- 감성 분석은 API 키 없이 로그인된
claudeCLI 서브프로세스로 수행.
마이그레이션 조건 (선택)
- 해당 없음 (감성 비활성 시 중립 고정으로 추세만 반영).
정책 3: 캐싱 + 알림 연계
유저 스토리
- 사용자로서, 같은 종목을 다시 조회할 때 빠르게 받고 싶다.
- 사용자로서, 시그널을 본 종목을 바로 목표가 알림으로 걸고 싶다.
UI / UX 주요 작업 포인트
- 시그널 카드 인라인 “이 가격에 알림” 폼: 목표가(기본 현재가) + 방향.
상세 정책
TtlCache로 종목별 TTL(SIGNAL_CACHE_TTL기본 600초). hit 시 재계산 없음.- 알림 등록은 신규 BE 없이
POST /api/v1/alerts재사용.
마이그레이션 조건 (선택)
- 해당 없음.
범위 외
- 실시간 뉴스 푸시·종목 추천.
- 과거 뉴스 감성 시계열(복원 불가 → 백테스트에서 제외).