목표가 알림 PRD

배경 (Background)

토스 증권 Open API 시세를 주기 폴링해 목표가 도달 시 Discord·Mac으로 1회 알림을 보내는 도구를 만든다. 호가창을 계속 보지 않아도 매수·매도 타이밍을 놓치지 않는 것이 목표다.

요구사항

ID요구사항우선순위
R-01종목·목표가·방향(ABOVE/BELOW)·메모로 알림을 등록할 수 있다
R-02현재 활성 알림 목록을 조회하고 불필요한 알림을 삭제할 수 있다
R-0330초 주기 폴링으로 목표가 도달을 자동 감시한다
R-04목표가 도달 시 Discord·Mac 채널로 알림을 발송한다
R-05동일 알림은 도달 시 1회만 발송 후 TRIGGERED 종료한다
R-06발송된 알림 이력을 최신순으로 조회할 수 있다
R-07관심종목을 등록·조회·삭제할 수 있다
R-08종목명으로 자동완성 검색(Top 20)을 제공한다

기대 효과

  • 시세 모니터링 수작업 제거 — 등록만 하면 도달 시 알림 수신.
  • 매매 판단 타이밍 확보 (최대 30초 지연 내 감지).
  • 이후 시그널·추천이 재사용할 watchlist·종목 검색 기반 확보.

경쟁사·동일 제품군 비교

토스증권 앱 (목표가 알림)

  • 앱 내 푸시 알림 제공. 단 앱 푸시에 한정되고 Discord 등 외부 채널·자체 도구 연동 불가.

증권사 MTS (키움 영웅문·미래에셋 등)

  • 조건 검색·가격 알림 풍부. 단 데스크톱·앱에 종속, 외부 자동화·커스텀 채널 연동 어려움.

TradingView 알림

  • 강력한 조건식·웹훅(Discord 연동 가능). 단 유료 플랜에 기능 집중, 한국 종목 시세 커버리지 제약.

비교 요약표

항목본 도구토스 앱증권사 MTSTradingView
외부 채널(Discord)✅(유료)
Mac 네이티브 알림
한국 종목 시세✅(토스)
커스텀·자체 호스팅
비용무료(자체)무료무료유료 가능

세부 정책

정책 1: 목표가 알림 등록·관리

유저 스토리

  • 사용자로서, 종목·목표가·방향(이상/이하)·메모로 알림을 등록하고 싶다.
  • 사용자로서, 현재 활성 알림 목록을 보고 불필요한 알림을 삭제하고 싶다.

UI / UX 주요 작업 포인트

  • 알림 등록 폼: 종목 검색 자동완성 + 목표가 + 방향(ABOVE/BELOW) + 메모.
  • 활성 알림 테이블: 종목·목표가·방향·상태·삭제 버튼.

상세 정책

  • 방향: ABOVE(현재가 ≥ 목표가), BELOW(현재가 ≤ 목표가).
  • 생성 응답 201, 삭제 204.
  • 엔드포인트: POST /api/v1/alerts, GET /api/v1/alerts, DELETE /api/v1/alerts/{id}.

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

  • price_alert 테이블 신규 생성. 실패 시 역방향 DDL로 제거.

정책 2: 목표가 도달 감시·발송

유저 스토리

  • 사용자로서, 시세가 목표가에 도달하면 자동으로 알림을 받고 싶다.
  • 사용자로서, 같은 알림이 중복으로 울리지 않기를 원한다.

UI / UX 주요 작업 포인트

  • 발송 채널: Discord 메시지 + Mac 네이티브 배너.
  • 알림 메시지에 종목·목표가·도달가·방향 포함.

상세 정책

  • 30초 주기(alert.polling.interval-ms) 폴링, ACTIVE 알림 일괄 평가.
  • 시세는 종목 일괄(batch) 조회로 호출 수 최소화.
  • 도달 시 CompositeNotificationGateway로 활성 채널 모두 발송 → 상태 ACTIVE → TRIGGERED(터미널) 전이.
  • 토스 OAuth 토큰 만료 시 자동 갱신 후 1회 재시도. 한 주기 실패는 다음 주기에 자연 복구.

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

  • 해당 없음 (스케줄러는 폴링 프로퍼티 OFF로 롤백).

정책 3: 알림 이력 + 관심종목·검색 기반

유저 스토리

  • 사용자로서, 과거에 도달해 발송된 알림 이력을 최신순으로 보고 싶다.
  • 사용자로서, 관심종목을 등록해두고 종목명으로 빠르게 검색하고 싶다.

UI / UX 주요 작업 포인트

  • 이력 테이블: 도달 시점·도달가 역순 표시.
  • 종목 검색 인풋: 디바운스 자동완성(Top 20).

상세 정책

  • GET /api/v1/alerts/history (역순), alert_history 적재.
  • watchlist: POST/GET/DELETE /api/v1/watchlist, symbol unique·멱등 추가.
  • 종목 검색: GET /api/v1/stocks/search?q=.

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

  • alert_history·watchlist·stock 테이블 신규 생성. 실패 시 역방향 DDL.

사용자 시나리오

시나리오 1: 목표가 알림 등록 후 도달 수신

  1. 사용자가 종목 검색 자동완성으로 종목을 선택한다.
  2. 목표가·방향(ABOVE)·메모를 입력하고 등록한다 (POST /api/v1/alerts → 201).
  3. 30초 후 폴링 스케줄러가 ACTIVE 알림을 일괄 평가한다.
  4. 현재가 ≥ 목표가 조건 충족 시 Discord·Mac으로 알림 발송, 상태가 TRIGGERED로 전이된다.
  5. 이력 테이블(GET /api/v1/alerts/history)에서 도달 이력을 확인한다.

시나리오 2: 관심종목 등록 후 검색

  1. 사용자가 관심종목 추가 버튼으로 symbol을 등록한다 (POST /api/v1/watchlist → 201).
  2. 동일 symbol 재등록 시 멱등 처리로 중복 없이 저장된다.
  3. 종목 검색 인풋에 키워드를 입력해 자동완성 결과(Top 20)를 확인한다.

범위 외

  • 사용자 인증/멀티 테넌트 (단일 사용자 로컬 도구).
  • 실시간 WebSocket 시세 (토스 미제공 → 폴링).
  • 반복 알림 (1회 발송 후 종료가 기본).

관련 문서