스톡온 — 프로그램 설계 개요
국내 주식 데이터를 수집·저장하고, 웹과 모바일에서 조회·분석·개인화 기능을 제공하는 시스템입니다. 저장소는 웹 애플리케이션, 모바일 WebView 셸, Python 배치 봇 세 부분으로 구성됩니다.
1. 시스템 구성 요소
| 구분 | 디렉터리 | 역할 |
|---|---|---|
| 웹 | stockon-web | Next.js(App Router) UI 및 API Routes, Prisma·MySQL, NextAuth 기반 인증 |
| 모바일 | stockon-app | Expo(React Native) 앱. 전체 화면 WebView로 웹을 로드하고 푸시·OTA·뒤로가기 등 네이티브 연동 |
| 배치 | stockon-bot | 종목 마스터·일별 시세 수집, 베팅 채점·모니터링 등 스크립트와 셸 배치 |
2. 아키텍처
- 클라이언트: 브라우저는 웹에 직접 접속합니다. 모바일 앱은 동일 웹을 WebView로 표시합니다.
- 서버: Next.js가 페이지 렌더링과 REST형 API를 담당하며 Prisma로 MySQL에 접근합니다.
- 배치: 봇이 외부 시세 소스에서 데이터를 가져와 DB를 갱신합니다. 웹은 이 DB를 읽습니다.
- 푸시: 서버에서 Expo Server SDK 등을 통해 푸시 게이트웨이로 전송하고, 기기는 네이티브 알림으로 수신합니다. WebView 로드 URL·푸시 등록 엔드포인트는 배포 환경에 맞게 앱·서버 설정으로 둡니다.
3. 데이터 흐름
- 수집: 배치가
Company(종목 마스터),DailyPrice(일별 가격·지표),QuantScore(전략별 퀀트 점수·메타데이터) 등을 갱신합니다. - 조회·가공: 웹 API가 동일 스키마를 조회해 대시보드, 일일 시세, 우량주 후보(
/api/quality-stocks등), 시장 지수·랭킹 등을 제공합니다. - 사용자 데이터:
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.js의source.uri및 배포 설정에서 지정합니다. 문서에는 고정 URL을 적지 않습니다. - 브릿지:
injectedJavaScript와onMessage로localStorage의userId기반 로그인 상태를 네이티브에 전달합니다. 웹에서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 |
| 웹 UI | Radix 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 기준) |