뉴스 시그널 PRD

배경 (Background)

토스 API엔 뉴스가 없다. 사용자는 종목 분위기를 파악하려면 뉴스를 일일이 검색해야 하고, 감성만으로는 가격 흐름을 알 수 없다. 무료 뉴스 소스와 claude -p CLI 감성 분석을 결합해 뉴스 감성 + 가격 추세를 종합한 참고 시그널을 제공한다.

목표

종목에 대해 뉴스 감성 + 가격 추세를 종합한 참고 시그널을 제공해 매매 판단을 보조한다. 단, 이는 수익 예측이 아니라 참고용임을 명확히 한다.

요구사항

ID요구사항우선순위
R-01KR=Google RSS / US=GDELT 헤드라인을 자동 수집한다높음
R-02claude -p로 헤드라인 감성을 [-1,1]로 점수화한다높음
R-03MA·RSI 추세 점수와 0.6:0.4 블렌딩으로 종합 시그널을 산출한다높음
R-04종목별 TTL 캐시(기본 600초)로 hit 시 ~1s 응답을 보장한다높음
R-05매체 접미사 제거 dedup으로 중복 헤드라인을 제거한다중간
R-06GET /signals/{symbol} 단일 호출로 감성·추세·종합 점수와 근거 헤드라인을 반환한다높음
R-07KR/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 중심, 한국 종목·한국어 감성 미지원.

비교 요약표

항목본 도구네이버·한경TradingViewFinviz
뉴스 감성 정량화✅(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 키 없이 로그인된 claude CLI 서브프로세스로 수행.

마이그레이션 조건 (선택)

  • 해당 없음 (감성 비활성 시 중립 고정으로 추세만 반영).

정책 3: 캐싱 + 알림 연계

유저 스토리

  • 사용자로서, 같은 종목을 다시 조회할 때 빠르게 받고 싶다.
  • 사용자로서, 시그널을 본 종목을 바로 목표가 알림으로 걸고 싶다.

UI / UX 주요 작업 포인트

  • 시그널 카드 인라인 “이 가격에 알림” 폼: 목표가(기본 현재가) + 방향.

상세 정책

  • TtlCache로 종목별 TTL(SIGNAL_CACHE_TTL 기본 600초). hit 시 재계산 없음.
  • 알림 등록은 신규 BE 없이 POST /api/v1/alerts 재사용.

마이그레이션 조건 (선택)

  • 해당 없음.

범위 외

  • 실시간 뉴스 푸시·종목 추천.
  • 과거 뉴스 감성 시계열(복원 불가 → 백테스트에서 제외).

관련 문서