목표가 알림 PRD
배경 (Background)
토스 증권 Open API 시세를 주기 폴링해 목표가 도달 시 Discord·Mac으로 1회 알림을 보내는 도구를 만든다. 호가창을 계속 보지 않아도 매수·매도 타이밍을 놓치지 않는 것이 목표다.
요구사항
| ID | 요구사항 | 우선순위 |
|---|
| R-01 | 종목·목표가·방향(ABOVE/BELOW)·메모로 알림을 등록할 수 있다 | 상 |
| R-02 | 현재 활성 알림 목록을 조회하고 불필요한 알림을 삭제할 수 있다 | 상 |
| R-03 | 30초 주기 폴링으로 목표가 도달을 자동 감시한다 | 상 |
| R-04 | 목표가 도달 시 Discord·Mac 채널로 알림을 발송한다 | 상 |
| R-05 | 동일 알림은 도달 시 1회만 발송 후 TRIGGERED 종료한다 | 상 |
| R-06 | 발송된 알림 이력을 최신순으로 조회할 수 있다 | 중 |
| R-07 | 관심종목을 등록·조회·삭제할 수 있다 | 중 |
| R-08 | 종목명으로 자동완성 검색(Top 20)을 제공한다 | 중 |
기대 효과
- 시세 모니터링 수작업 제거 — 등록만 하면 도달 시 알림 수신.
- 매매 판단 타이밍 확보 (최대 30초 지연 내 감지).
- 이후 시그널·추천이 재사용할 watchlist·종목 검색 기반 확보.
경쟁사·동일 제품군 비교
토스증권 앱 (목표가 알림)
- 앱 내 푸시 알림 제공. 단 앱 푸시에 한정되고 Discord 등 외부 채널·자체 도구 연동 불가.
증권사 MTS (키움 영웅문·미래에셋 등)
- 조건 검색·가격 알림 풍부. 단 데스크톱·앱에 종속, 외부 자동화·커스텀 채널 연동 어려움.
TradingView 알림
- 강력한 조건식·웹훅(Discord 연동 가능). 단 유료 플랜에 기능 집중, 한국 종목 시세 커버리지 제약.
비교 요약표
| 항목 | 본 도구 | 토스 앱 | 증권사 MTS | TradingView |
|---|
| 외부 채널(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: 목표가 알림 등록 후 도달 수신
- 사용자가 종목 검색 자동완성으로 종목을 선택한다.
- 목표가·방향(ABOVE)·메모를 입력하고 등록한다 (
POST /api/v1/alerts → 201).
- 30초 후 폴링 스케줄러가 ACTIVE 알림을 일괄 평가한다.
- 현재가 ≥ 목표가 조건 충족 시 Discord·Mac으로 알림 발송, 상태가 TRIGGERED로 전이된다.
- 이력 테이블(
GET /api/v1/alerts/history)에서 도달 이력을 확인한다.
시나리오 2: 관심종목 등록 후 검색
- 사용자가 관심종목 추가 버튼으로 symbol을 등록한다 (
POST /api/v1/watchlist → 201).
- 동일 symbol 재등록 시 멱등 처리로 중복 없이 저장된다.
- 종목 검색 인풋에 키워드를 입력해 자동완성 결과(Top 20)를 확인한다.
범위 외
- 사용자 인증/멀티 테넌트 (단일 사용자 로컬 도구).
- 실시간 WebSocket 시세 (토스 미제공 → 폴링).
- 반복 알림 (1회 발송 후 종료가 기본).
관련 문서