스톡온 — 프로그램 설계 개요

국내 주식 데이터를 수집·저장하고, 웹과 모바일에서 조회·분석·개인화 기능을 제공하는 시스템입니다. 저장소는 웹 애플리케이션, 모바일 WebView 셸, Python 배치 봇 세 부분으로 구성됩니다.


1. 시스템 구성 요소

구분디렉터리역할
stockon-webNext.js(App Router) UI 및 API Routes, Prisma·MySQL, NextAuth 기반 인증
모바일stockon-appExpo(React Native) 앱. 전체 화면 WebView로 웹을 로드하고 푸시·OTA·뒤로가기 등 네이티브 연동
배치stockon-bot종목 마스터·일별 시세 수집, 베팅 채점·모니터링 등 스크립트와 셸 배치

2. 아키텍처

  • 클라이언트: 브라우저는 웹에 직접 접속합니다. 모바일 앱은 동일 웹을 WebView로 표시합니다.
  • 서버: Next.js가 페이지 렌더링과 REST형 API를 담당하며 Prisma로 MySQL에 접근합니다.
  • 배치: 봇이 외부 시세 소스에서 데이터를 가져와 DB를 갱신합니다. 웹은 이 DB를 읽습니다.
  • 푸시: 서버에서 Expo Server SDK 등을 통해 푸시 게이트웨이로 전송하고, 기기는 네이티브 알림으로 수신합니다. WebView 로드 URL·푸시 등록 엔드포인트는 배포 환경에 맞게 앱·서버 설정으로 둡니다.

3. 데이터 흐름

  1. 수집: 배치가 Company(종목 마스터), DailyPrice(일별 가격·지표), QuantScore(전략별 퀀트 점수·메타데이터) 등을 갱신합니다.
  2. 조회·가공: 웹 API가 동일 스키마를 조회해 대시보드, 일일 시세, 우량주 후보(/api/quality-stocks 등), 시장 지수·랭킹 등을 제공합니다.
  3. 사용자 데이터: StockonUser, Favorite, Bet, Holding, PushToken, UserStrategy, 전략 마스터 Strategy 등으로 계정·관심종목·베팅·보유·알림·전략 연동을 표현합니다. 상세 필드는 stockon-web/prisma/schema.prisma를 기준으로 합니다.

대시보드의 저·고평가 우량주·급등주 등은 퀀트 점수(전략별 메타데이터)와 일별 시세를 조합한 API 단일 소스에서 일관되게 계산합니다. 세부 임계값·정렬 규칙은 stockon-web/README.md의 해당 절을 참고하면 됩니다.

3.1 데이터 파이프라인(도식)

3.2 핵심 엔티티 관계(요약)


4. 웹 애플리케이션 레이어 (stockon-web)

4.1 주요 화면(예)

  • 대시보드, 일일 시세, 관심종목, 전략, AI 분석, 예측, 베팅, 내 정보, 인트로
  • 로그인·회원가입·비밀번호 찾기·재설정
  • 모니터링 등 일부 화면은 역할에 따라 접근이 제한됩니다.

4.3 인증·보호

  • NextAuth 세션과 middleware.ts로 공개 경로와 보호 경로를 구분합니다.
  • 토큰의 역할에 따라 일부 관리 전용 경로 접근을 제한합니다.

5. 모바일 앱 레이어 (stockon-app)

5.1 WebView 브릿지(메시지 흐름, 요약)

  • WebView: 프로덕션 웹 URL은 App.jssource.uri 및 배포 설정에서 지정합니다. 문서에는 고정 URL을 적지 않습니다.
  • 브릿지: injectedJavaScriptonMessagelocalStorageuserId 기반 로그인 상태를 네이티브에 전달합니다. 웹에서 REQUEST_PUSH_TOKEN 등 메시지 타입으로 토큰·기기명을 주고받습니다.
  • 안정성: 로드 실패 재시도, iOS WebView 프로세스 종료 시 복구, 주기적 빈 화면 감지 후 reload, 백그라운드 복귀 시 OTA 업데이트 확인 등이 포함됩니다.
  • 푸시: expo-notifications로 권한·토큰을 얻고, 로그인 사용자 ID와 함께 서버에 등록합니다(엔드포인트는 서버·앱 설정에 따름).

6. 배치·운영 (stockon-bot)

  • collect/: ccl.py(종목 리스트: KOSPI·KOSDAQ·ETF/ETN 등), cdp.py(일별 시세). 셸 스크립트 collect/ccl.sh, collect/cdp.sh로 cron 연동 가능합니다.
  • bet-scoring/: 베팅 채점·봇 로직(betting_scoring.py, betting_bot.py) 및 대응 셸 스크립트.
  • monitoring/: 모니터링 스크립트(monitor.py) 및 monitor.sh.
  • 공통: share/config.py, share/db.py 등에서 DB 연결·로깅·에러 처리를 공유합니다.
  • 로그: log/{환경}/collect/, log/{환경}/bet-scoring/, log/{환경}/monitoring/ 등 하위에 일자별 로그가 쌓이는 패턴을 사용합니다.

자세한 실행 예·크론 샘플은 stockon-bot/README.md를 참고합니다.


7. 디렉터리 구조(루트)

PROD_stockon/
├── stockon-web/     # Next.js + Prisma + MySQL
├── stockon-app/     # Expo WebView 셸
├── stockon-bot/     # Python 수집·배치
└── ReadMe.md        # 본 문서

8. 기술 스택 요약

영역기술
Next.js 16, React 19, TypeScript, Tailwind CSS 4, Prisma, MySQL, NextAuth
웹 UIRadix UI, Framer Motion, Recharts, lightweight-charts 등
Expo 54, React Native 0.81, react-native-webview, expo-notifications, expo-updates
Python 3.8+, SQLAlchemy, pymysql(또는 프로젝트 requirements.txt 기준)