종목 리스트 PRD

배경 (Background)

목표가 알림·뉴스 시그널·종목 추천을 구현했으나, 앱 전체의 종목 데이터 레이어가 통일되어 있지 않다. 현재는 UI 컴포넌트별로 토스 API를 散발적으로 호출하고, 종목 마스터를 MySQL에 영속화하지 않아 검색·필터·커스텀 필드 추가가 불가능하다. 종목 리스트 기능은 앱 전반에서 종목 데이터를 공급하는 기반(Foundation) 기능이다.

문제 정의 (Define Problem)

AS-IS

  • 종목 데이터를 MySQL에 영속화하지 않음 — 매 요청마다 토스 API 호출
  • 종목명·코드로 검색하는 전용 UI 없음
  • 관심종목 추가 경로가 시그널 탭에만 존재
  • 현재가를 보여주는 종목 리스트 화면 없음
  • 각 컴포넌트가 가격·종목 정보를 제각각 조회함

TO-BE

  • 전체 주식 종목 마스터를 MySQL에 영속화, 토스 API 필드 전부 + 자체 필드 보관
  • 종목명·코드 검색 API + 검색 UI
  • 관심종목 추가를 리스트 화면에서 바로 가능
  • 앱 전체 주식 조회에 동일 데이터 정책 적용 (단일 소스)
  • 현재가는 BE 가격 캐시에서 공급 (실시간 처리 전략 → ADR-1 참조)

요구사항 (Requirements)

필수 (Must)

ID요구사항우선순위
R-01주식 종목 리스트를 조회할 수 있다. 토스 증권 실시간 차트 형태 참고Must
R-02종목명 또는 종목 코드로 특정 주식을 검색할 수 있다Must
R-03토스 API가 제공하는 종목 필드를 전부 MySQL에 영속화한다Must
R-04자체적으로 개발한 항목(커스텀 필드)을 추가할 수 있는 구조를 갖춘다Must
R-05종목 리스트에서 관심 항목으로 추가/제거할 수 있다Must
R-06주식 종목 리스트는 MySQL에 영속화한다Must
R-07앱에서 보이는 모든 주식 조회는 동일 데이터 정책을 적용한다Must

선택 (Nice to have)

ID요구사항우선순위
R-08업종(sector)·거래소(market)별 필터Nice to have
R-09시가총액 순·등락률 순 정렬Nice to have

사용자 시나리오

시나리오 1 — 종목 리스트 조회 및 관심종목 추가

사용자가 앱의 종목 리스트 탭에 진입하면 종목명·현재가·등락률이 표시된다. 특정 종목(예: 삼성전자) 옆의 ☆ 버튼을 누르면 관심종목에 추가되고 아이콘이 ★로 변경된다. 이후 관심종목 탭에서도 해당 종목이 확인된다.

시나리오 2 — 종목 검색

사용자가 검색창에 “삼성”을 입력하면 삼성 관련 종목 목록이 실시간 필터링되어 표시된다. “005930”처럼 코드를 직접 입력하면 해당 종목이 상단에 노출된다. 검색 결과에서도 관심종목 추가/제거가 가능하다.

수락 기준 (Acceptance Criteria)

#시나리오기준
AC-01종목 리스트 화면 진입종목명·현재가·등락률이 표시된다
AC-02검색창에 “삼성” 입력삼성 관련 종목 목록이 실시간 필터된다
AC-03종목 코드 “005930” 입력해당 종목이 상단에 표시된다
AC-04종목 옆 ☆ 버튼 클릭관심종목에 추가되고 ★로 변경된다
AC-05목표가 알림 등록 화면종목 리스트 종목 검색 컴포넌트를 재사용한다
AC-06현재가 갱신최대 30초 지연으로 화면에 반영된다
AC-07DB 영속화stocks 테이블에 토스 API 전체 필드 + 커스텀 필드가 저장된다

고민사항 — 현재가(실시간) 처리 전략

ADR-1 에서 결정. 요약: BE 가격 캐시 + 30초 스케줄 갱신 채택.

  • 토스 API에 WebSocket·Push 미제공
  • 30초 폴링 패턴 사용 중
  • 개인 투자 도구 수준에서 최대 30초 지연 허용

범위 외

  • 주식 주문·매매 기능
  • 1초 미만 실시간 호가창
  • 종목 상세 차트 (캔들·볼린저 등 — 별도 과제)
  • 사용자 포트폴리오 관리

이해관계자

역할이름
개발·기획biuea

일정

단계내용
Wave 1DB 스키마
Wave 2BE 도메인 + 가격 캐시
Wave 3BE API
Wave 4FE 구현

관련 문서

  • TDD — 기술 설계 문서
  • index — 아키텍처 결정 기록 목록
  • README — 티켓 목록 및 DAG