TRENDSHIFT 딥다이브 · 일간 #11 · 2026-06-05

daily_stock_analysis 딥다이브
— GitHub Actions로 매일 자동으로 돌리는 'AI 주식 분석 비서'

daily_stock_analysis(줄여서 DSA)는 A주·홍콩·미국 주식을 매 거래일 자동으로 분석해 → "사야 하나/지켜봐야 하나/팔아야 하나"를 점수와 함께 정리한 '결정 대시보드'를 → 텔레그램·디스코드·슬랙·이메일 등으로 쏴 주는 LLM 기반 주식 분석 자동화 시스템이다. 핵심은 서버 한 대 없이 GitHub를 Fork하고 키만 등록하면 매일 18시에 알아서 돌아간다는 점. (저장소: ZhuLinsen/daily_stock_analysis · Python+FastAPI 백엔드 + React 19 프론트 · MIT 라이선스)
목차
  1. 프로젝트 한줄 요약
  2. 왜 주목받는가
  3. 기술 스택 전체 지도
  4. 아키텍처 심화 분석
  5. 디렉토리 구조 해부
  6. 학습 포인트 (기술별)
  7. 시스템 요구사항
  8. 직접 해볼 수 있는 실습 과제
  9. 관련 기술 심화 학습 로드맵
  10. 핵심 키워드 사전
  11. 참고 링크

1프로젝트 한줄 요약

한 문장으로 이 프로젝트가 뭘 하는지부터.

daily_stock_analysis = "내 관심 종목을 매일 밤 자동으로 분석해 카톡처럼 알림으로 보내 주는 AI 애널리스트". 내가 관심 종목 리스트(예: 600519,hk00700,AAPL,TSLA)만 등록해 두면, 매 거래일 장 마감 후 시스템이 시세·차트·기술지표·자금 흐름·뉴스·공시·기본면을 긁어모으고, 그걸 LLM(거대 언어 모델)에게 통째로 넘겨 "한 줄 결론 + 점수 + 매수/매도 포인트 + 리스크 경보"를 만든 뒤 알림 채널로 쏴 준다.

📈 한 줄 비유

"증권사 리포트를 매일 자동으로 써 주는 로봇 애널리스트"를 내가 직접 고용한 것

보통 애널리스트 리포트는 사람이 손으로 데이터를 모으고, 차트를 읽고, 뉴스를 훑어 며칠 걸려 쓴다. DSA는 그 과정을 데이터 수집 → 분석 → LLM 작성 → 알림 발송이라는 5단계 파이프라인으로 자동화했다.

게다가 이 로봇은 내 서버가 아니라 GitHub의 무료 컴퓨터(Actions) 위에서 굴러간다. 즉 "PC를 켜 둘 필요도, 클라우드 요금도 없이" 매일 정해진 시간에 알아서 출근해 리포트를 써서 내 폰으로 보내 준다.

용어
LLM (거대 언어 모델)
ChatGPT·Claude·Gemini·DeepSeek 같은, 글을 읽고 쓸 줄 아는 AI. DSA에서는 "사람 애널리스트의 뇌" 역할을 한다. 숫자·뉴스를 통째로 넣어 주면 "이 종목은 단기 과열, 관망 권고" 같은 사람이 읽을 수 있는 판단으로 바꿔 준다.
용어
결정 대시보드 (决策仪表盘)
DSA의 핵심 산출물. 단순히 "주가 3% 상승" 같은 날것 데이터가 아니라, ① 한 줄 결론·신호·비중 → ② 데이터 관점(추세·가격위치·거래량·매물대) → ③ 정보(뉴스·리스크 경보·호재) → ④ 작전 계획(매수/매도 목표가·비중 전략·리스크 체크리스트)의 4단 구조로 가공된 "바로 행동에 옮길 수 있는" 요약본이다.

핵심 철학은 "제로 코스트 · 제로 서버 · 풀 자동"이다. README가 직접 "零成本定时运行,纯白嫖(돈 한 푼 안 들이고 정해진 시간에 돌린다)"이라고 자랑할 만큼, 진입 장벽을 극단적으로 낮춘 게 이 프로젝트의 정체성이다.

먼저 못 박고 갑니다
이 글도, 이 도구도 '투자 조언'이 아니다

DSA의 README 맨 끝에는 굵게 "본 프로젝트는 학습·연구용이며 어떤 투자 조언도 아니다. 주식은 위험하다"라고 적혀 있다. 이 문서 역시 코드와 아키텍처를 공부하기 위한 기술 해설일 뿐, 종목 추천이나 매매 권유가 아니다. LLM이 뱉은 "매수/매도" 신호는 검증되지 않은 확률적 출력이라는 점을 항상 전제로 읽어야 한다.

2왜 주목받는가

TrendShift 일간 11위까지 올라온 이유 — 트렌딩의 배경.

"AI로 주식 분석"을 표방하는 레포는 수없이 많다. 그 속에서 DSA가 튀어 오른 이유는 "기술 자체"보다 "누구나 5분 만에 진짜로 돌릴 수 있게 만든 패키징"에 있다. 다섯 가지로 정리한다.

① 제로 서버 · 제로 코스트 — Fork만 하면 끝

가장 강력한 한 방. 서버를 빌리거나 PC를 켜 둘 필요 없이, GitHub 저장소를 Fork → Secrets에 API 키 등록 → Actions 켜기 세 단계면 매일 18시(베이징 시간)에 자동 실행된다. GitHub Actions의 무료 실행 시간을 그대로 활용하는 서버리스 발상이라, 비개발자도 "클릭 몇 번"으로 자기만의 분석 봇을 갖는다.

② 다중 시장 + 다중 데이터 소스 폴백 — 안 끊긴다

A주·홍콩·미국·ETF를 모두 다루고, 시세 데이터를 한 곳이 막히면 다음 소스로 자동 전환하는 다단 폴백 체인(efinance → akshare → tushare → pytdx → baostock → yfinance → longbridge 등, A주 메인 체인 기준. 미국주식 전용 Finnhub·AlphaVantage 등 추가 소스 포함)을 깔았다. 무료 데이터 소스는 자주 막히는데, DSA는 한 소스가 죽어도 전체 분석이 멈추지 않게 설계해 "그냥 돌아간다"는 안정감을 준다.

③ 18개+ LLM 자유 선택 — 무료 모델로도 OK

litellm 덕분에 Anspire·AIHubMix·Gemini·OpenAI 호환·DeepSeek·통의천문(Qwen)·Claude·Ollama(로컬) 등을 설정만 바꿔 갈아 끼운다. "비싼 GPT만 써야 하는" 게 아니라 무료/저가 모델로 시작할 수 있어, 비용이 트렌딩의 발목을 잡지 않는다.

④ 날것 데이터가 아니라 '결정 대시보드'를 준다

대부분의 "주가 알림 봇"은 숫자만 던진다. DSA는 LLM에게 한 줄 결론 → 데이터 관점 → 정보 → 작전 계획이라는 4단 구조로 정리시켜, "그래서 어떻게 하라는 건데?"에 답하는 형태로 쏜다. 받는 사람이 바로 읽고 판단할 수 있는 UX 설계가 차별점이다.

⑤ 봇을 넘어 '워크스테이션'으로 — Web·데스크탑·에이전트

알림만 보내는 데 그치지 않는다. React 19 웹 작업대(수동 분석·과거 리포트·백테스트·보유 관리), Electron 데스크탑 앱, 그리고 15가지 전략(균선·캔들·파동·이벤트 등)으로 다중 질문이 가능한 'Agent 문股'까지 갖췄다. "취미 스크립트"가 아니라 제품처럼 다듬여 있다는 인상이 신뢰를 만든다.

비유로 정리

일반 주가 알림 봇 = 자판기 — 동전을 넣으면(종목을 넣으면) 정해진 숫자만 툭 떨어진다. 해석은 내 몫.

DSA = 24시간 근무하는 신입 애널리스트 — 데이터를 직접 모아 읽고, 뉴스를 훑고, "제 의견은 이렇습니다(점수·리스크·매매 포인트)"까지 정리해 보고서를 올린다. 단, 신입이라 틀릴 수 있으니 결재는 내가 한다.

냉정하게 보기
트렌딩 ≠ 수익 보장, LLM ≠ 점쟁이

아무리 데이터를 잘 모아도 LLM의 "매수" 한마디가 미래 수익을 보장하지 않는다. LLM은 입력된 텍스트의 패턴을 그럴듯하게 이어 붙일 뿐, 시장을 예측하는 능력이 검증된 게 아니다. 또 무료 데이터 소스의 지연·오류, 뉴스 검색의 노이즈가 그대로 판단에 섞인다. 이 레포의 가치는 "돈 버는 비법"이 아니라, 데이터 폴백·LLM 추상화·FastAPI 계층 설계·GitHub Actions 자동화를 한 번에 공부할 수 있는 살아있는 교재라는 데 있다.

3기술 스택 전체 지도

requirements.txt · package.json · AGENTS.md · 소스 트리에서 뽑아낸 실제 구성.

DSA는 ⓐ 백엔드(분석 엔진) ⓑ 데이터 계층 ⓒ 프론트엔드 ⓓ 인프라/자동화 네 층으로 나뉜다. 특히 "파이썬 분석 엔진"과 "React 프론트"가 FastAPI를 사이에 두고 분리돼 있고, 같은 엔진이 CLI·웹·데스크탑·봇 어디서든 호출되는 게 설계의 큰 특징이다.

ⓐ 백엔드 — 분석 엔진 (Python 3.10+)

구성요소무엇역할
litellmLLM 통합 클라이언트Gemini·Anthropic·OpenAI·DeepSeek·Qwen·Ollama 등을 한 인터페이스로. 공급자를 설정으로 교체.
tiktoken토큰 계산기LLM에 넣을 데이터가 컨텍스트 한도를 넘지 않게 토큰 수를 센다.
FastAPI + uvicornREST API 서버server.py 진입점. 분석·히스토리·백테스트·포트폴리오·에이전트 등 12+ 엔드포인트.
SQLAlchemy 2.0 + SQLiteORM · 로컬 DB분석 결과·히스토리·설정을 파이썬 객체로 다루고 파일 DB에 저장.
tenacity재시도 엔진네트워크·API 실패 시 지수 백오프로 자동 재시도.
schedule + exchange-calendars스케줄러 · 거래일 달력정해진 시간 실행 + A/H/US 휴장일이면 건너뛰기.
jinja2리포트 템플릿 엔진분석 결과(데이터)를 보고서(표현)와 분리해 렌더링.
imgkit (+wkhtmltopdf)마크다운 → 이미지리포트를 이미지 카드로 변환해 메신저에 예쁘게 전송.
newspaper3k기사 본문 추출뉴스 URL에서 광고·메뉴를 걷어내고 본문만 뽑는다.
alphasift (git 의존성)선택형 종목 스크리닝 엔진같은 저자의 자매 프로젝트. 전체 시장에서 후보 종목을 걸러낸다.

ⓑ 데이터 계층 — 다중 소스 + 검색 + 알림

구성요소무엇역할
시세 폴백 체인다단 데이터 소스efinance(P0 동방재부)→Tencent(P0 A주 K선)→akshare(P1)→tushare(P2 Pro)→pytdx(P2 통달신)→Finnhub(P2 미국주식)→baostock(P3)→AlphaVantage(P3 미국주식)→yfinance(P4)→longbridge(P5 美/港). A주 메인 체인 기준 7단+, 미국주식 전용 소스 포함 시 10단+.
pandas · numpy데이터 가공시세·K선·기술지표를 표로 다루고 계산.
pypinyin · openpyxl종목명 해석 · 엑셀"한자 종목명/병음/별칭 → 코드" 매칭, CSV/Excel 가져오기.
tavily · SerpAPI · (Anspire/Bocha/Brave/MiniMax/SearXNG)뉴스 검색종목 관련 실시간 뉴스·공시·여론을 끌어와 LLM 입력에 보강.
lark-oapi · discord.py(+PyNaCl) · dingtalk-stream알림 SDK飞书·Discord(Ed25519 서명검증)·딩톡 봇으로 리포트 발송.
json-repairJSON 복구LLM이 망가뜨린 JSON 출력을 자동 교정해 파싱 실패를 막는다.
Stock Sentiment API (선택)소셜 여론Reddit/X/Polymarket 기반(미국 주식 한정) 심리 지표.

ⓒ 프론트엔드 — 모던 React (apps/dsa-web)

구성요소무엇역할
React 19 + Vite 7웹 UI · 번들러최신 React. babel-plugin-react-compilerReact Compiler까지 도입.
TypeScript 5.9 + Tailwind 4타입 · 스타일타입 안전 + 유틸리티 CSS. next-themes로 라이트/다크.
Zustand전역 상태가볍고 단순한 클라이언트 상태 스토어.
React Router 7라우팅분석·히스토리·채팅·설정 페이지 전환.
Recharts 3차트주가·지표를 React 컴포넌트 차트로 그린다.
react-markdown + remark-gfm리포트 렌더마크다운 분석 리포트를 웹에서 표·체크박스까지 표시.
motion · axios애니메이션 · HTTP부드러운 전환 효과 + 백엔드 API 호출.
Vitest + Playwright단위 · E2E 테스트컴포넌트 테스트 + 브라우저 스모크 테스트.

ⓓ 인프라 & 자동화

구성요소무엇역할
GitHub Actions서버리스 실행매일 18시 자동 분석 + CI + 릴리스. 핵심 배포 수단.
Docker컨테이너 배포docker/ 안의 Dockerfile/compose로 로컬·NAS·서버에 띄우기.
CI 게이트품질 검사ai-governance · backend-gate(ci_gate.sh) · docker-build · web-gate(lint+build) · network-smoke.
Electron (dsa-desktop)데스크탑 앱같은 웹 UI를 데스크탑 클라이언트로 패키징.
용어
litellm
100여 개 LLM 공급자를 "OpenAI와 똑같은 호출 방식" 하나로 묶어 주는 파이썬 라이브러리. 코드는 항상 같은 함수만 부르고, .env에서 모델 이름·키만 바꾸면 GPT → DeepSeek → 로컬 Ollama로 갈아탄다. DSA가 "18개 공급자 지원"을 손쉽게 내세울 수 있는 비결.
왜 '데이터 소스 폴백'이 이 프로젝트의 심장일까

무료 주식 데이터 소스(akshare, yfinance 등)는 수시로 막히거나 느려지거나 형식이 바뀐다. 하나에만 의존하면 그 소스가 죽는 날 전체 봇이 멈춘다. DSA는 "P0가 실패하면 P1, 그것도 안 되면 P2…" 식으로 우선순위 사다리를 타고 내려가며 graceful degradation(우아한 성능 저하)을 구현했다. 덕분에 "오늘은 데이터가 안 와서 리포트가 없네" 같은 사고가 줄어든다 — 자동화 봇에서 가장 중요한 '그냥 매일 돌아간다'를 떠받치는 설계다.

4아키텍처 심화 분석

종목 코드 한 줄이 "내 폰 알림"이 되기까지 — 데이터의 5단 여정.

AGENTS.md가 직접 밝힌 메인 흐름은 抓取数据 → 技术分析/新闻检索 → LLM分析 → 生成报告 → 通知推送, 즉 ① 데이터 수집 → ② 기술분석·뉴스검색 → ③ LLM 분석 → ④ 리포트 생성 → ⑤ 알림 발송의 5단 파이프라인이다. 이 한 줄기를 main.py(CLI)·server.py(API)·웹·봇 어디서 불러도 똑같이 흐른다.

┌───────────────────────────────────────────────────────────────┐ │ 진입점 main.py(CLI) · server.py(FastAPI) · webui.py · bot/ │ │ "600519,AAPL 분석해" 한 번의 호출 │ └───────────────────────────────┬───────────────────────────────┘ ▼ ┌───────────────────────────────────────────────────────────────┐ │ src/core/ 파이프라인 오케스트레이션 (5단계 지휘자) │ └──┬──────────┬───────────┬───────────┬───────────┬──────────────┘ │①수집 │②기술/뉴스 │③LLM분석 │④리포트 │⑤알림 ▼ ▼ ▼ ▼ ▼ ┌────────┐ ┌────────┐ ┌─────────┐ ┌─────────┐ ┌─────────────┐ │ data_ │ │ src/ │ │ litellm │ │ src/ │ │ bot/ + │ │provider│ │services│ │ 어댑터 │ │ reports │ │ 알림 SDK │ │ 7단 │ │기술지표│ │18+공급자│ │ jinja2 │ │ 飞书/TG/ │ │ 폴백 │ │+뉴스 │ │ 호출 │ │ 템플릿 │ │ Discord/... │ └───┬────┘ │ 검색 │ └────┬────┘ └────┬────┘ └──────┬──────┘ │ └────────┘ │ │ │ ▼ ▼ ▼ ▼ 시세·K선·지표·자금 AnalysisResult.dashboard 채널별 독립 발송 ·뉴스·공시·기본면 ┌─────────────────────┐ (한 채널 실패해도 │ 표준화 │ ① core_conclusion │ 전체는 안 멈춤) ▼ │ ② data_perspective │ ┌────────────────┐ │ ③ intelligence │ │ SQLAlchemy │◀────▶│ ④ battle_plan │ │ + SQLite │ 저장 └─────────────────────┘ │ (히스토리/설정)│ api/ → React 19 웹 · Electron 데스크탑이 조회 └────────────────┘

핵심 설계 패턴 ① — 데이터 소스 다단 폴백 (Chain of Responsibility)

가장 중요한 결정. data_provider/는 시세 소스를 우선순위로 줄 세우고, 위에서부터 시도하다 실패하면 다음으로 넘긴다. efinance(P0) → Tencent(P0 A주 K선) → akshare(P1) → tushare/pytdx(P2) → Finnhub(P2 미국주식) → baostock(P3) → AlphaVantage(P3 미국주식) → yfinance(P4) → longbridge(P5). 무료 소스가 자주 죽는 현실에서 단일 소스 실패가 전체 분석을 무너뜨리지 않게 하는 핵심. AGENTS.md도 "단일 데이터 소스 실패가 전체 분석 흐름을 막아선 안 된다"를 안정성 護欄(가드레일)로 못 박았다.

핵심 설계 패턴 ② — litellm 공급자 추상화 (어댑터 패턴)

18개 LLM 공급자를 if/else로 분기하면 코드가 지옥이 된다. 대신 litellm이 "OpenAI 방식" 한 가지 인터페이스를 제공하고, 위쪽 분석 로직은 "어느 회사 모델인지 모른 채" 같은 함수만 호출한다. .env에서 모델명·키만 바꾸면 GPT → DeepSeek → 로컬 Ollama로 무중단 전환. "공급자 다양성"이 마법이 아니라 추상화 설계의 결과인 이유다.

핵심 설계 패턴 ③ — 계층형 아키텍처 (core / services / repositories)

AGENTS.md가 명시한 src/의 책임 분리가 또렷하다. src/core/(흐름 지휘) → src/services/(업무 로직) → src/repositories/(데이터 접근) → src/schemas/(데이터 구조). 라우터·CLI는 얇게 두고 진짜 일은 service에서, DB 접근은 repository로 격리한다. 현업 백엔드에서 통하는 정석 레이어드 구조라, 테스트·교체·디버깅이 쉬워진다.

핵심 설계 패턴 ④ — 4단 '결정 대시보드' 데이터 계약 (Schema)

LLM 출력을 자유 텍스트로 두지 않고 AnalysisResult.dashboard라는 고정 구조로 강제한다(루트 SKILL.md에 계약이 문서화돼 있다). ① core_conclusion(한 줄 결론·신호·비중) ② data_perspective(추세·가격위치·거래량·매물대) ③ intelligence(뉴스·리스크·호재) ④ battle_plan(매수/매도 목표가·비중·체크리스트). 출력을 스키마로 규격화했기에 웹·데스크탑·알림이 같은 데이터를 일관되게 소비한다.

핵심 설계 패턴 ⑤ — "안 끼워도 돌아가고, 끼우면 강해진다"

AGENTS.md의 가드레일: "새 설정은 '不配置也可运行,配置后增强能力(설정 없이도 동작, 설정하면 강화)'을 우선". 뉴스 검색 키가 없으면 뉴스 보강을 건너뛰고, 알림 채널 하나가 죽어도 나머지로 보낸다. 모든 기능을 선택적(opt-in)으로 두고 핵심 파이프라인은 최소 조건(LLM 키 1개 + 알림 1개 + 종목 리스트)으로 굴러가게 한 게, "그냥 켜면 된다"는 사용 경험을 만든다.

5디렉토리 구조 해부

실제 저장소 트리에서 "어디에 뭐가 있는지" 핵심만 (GitHub Contents API 기준).

daily_stock_analysis/ ├── main.py ★ 분석 작업 메인 진입점 (CLI · 36KB) │ --stocks / --market-review / --schedule / --webui ├── server.py FastAPI 서비스 진입점 (uvicorn server:app) ├── webui.py 웹 UI 단독 실행 헬퍼 │ ├── src/ ★ 핵심 분석 엔진 (계층형) │ ├── core/ 5단 파이프라인 오케스트레이션 │ ├── services/ 업무 로직 (analyzer_service.py = 분석 핵심) │ ├── repositories/ 데이터 접근 계층 (DB 쿼리 격리) │ ├── reports/ 리포트 생성 (jinja2 렌더링) │ ├── schemas/ 데이터 구조 (AnalysisResult 등 계약) │ └── config.py .env 기반 설정 싱글톤 │ ├── data_provider/ ★ 다중 데이터 소스 + 폴백 어댑터 │ efinance/akshare/tushare/.../longbridge ├── strategies/ Agent 전략 15종 (균선·缠论·파동·이벤트…) ├── templates/ jinja2 리포트 템플릿 │ ├── api/ ★ FastAPI v1 (server.py가 마운트) │ ├── app.py · deps.py │ ├── middlewares/ auth.py · error_handler.py │ └── v1/ │ ├── endpoints/ analysis · history · backtest · portfolio │ │ agent · alerts · alphasift · stocks · auth … │ └── schemas/ 엔드포인트별 Pydantic 스키마 │ ├── bot/ 챗봇 접속 계층 (메신저 연동) │ ├── apps/ ★ 프론트엔드 모노레포 │ ├── dsa-web/ React 19 + Vite 7 웹 작업대 │ │ └── src/ components / api / hooks / contexts │ └── dsa-desktop/ Electron 데스크탑 클라이언트 │ ├── docker/ Dockerfile · compose (컨테이너 배포) ├── scripts/ ci_gate.sh 등 로컬/CI 스크립트 ├── .github/workflows/ daily 분석 · CI · 릴리스 자동화 ├── docs/ full-guide · LLM_CONFIG_GUIDE · CHANGELOG ├── tests/ pytest (network 마커로 온/오프라인 분리) ├── requirements.txt 백엔드 의존성 └── AGENTS.md AI 협업·개발 규칙의 단일 진실원

핵심 읽는 순서를 추천하면: main.py(어떤 명령이 있나) → src/core/(5단 흐름이 어떻게 엮이나) → src/services/analyzer_service.py(한 종목이 실제로 어떻게 분석되나) → data_provider/(데이터를 어떻게 폴백으로 끌어오나) → api/v1/endpoints/(웹·앱이 무엇을 호출하나) 순이다. CLI·API·봇이 전부 같은 src/services를 부르는 엔진 공유 구조가 또렷이 보인다.

6학습 포인트 (기술별)

이 레포에서 "무엇을 배울 수 있는가" — 기술별 배울 것 + 실습 아이디어.

데이터 소스 폴백 · 안정성 설계

"하나 죽어도 안 멈추는" 파이프라인 만드는 법

우선순위 체인, 타임아웃, 필드 표준화, 우아한 성능 저하(graceful degradation) — 실서비스 자동화의 핵심 패턴이 data_provider/에 통째로 들어 있다.

실습: 폴백 순서를 일부러 1번 소스부터 실패하게 막아 보고, 로그에서 다음 소스로 어떻게 넘어가는지 추적. "단일 소스 의존"과 "체인"의 차이를 체감해 보자.

litellm · LLM 추상화

여러 LLM 공급자를 한 코드로 갈아 끼우기

OpenAI·DeepSeek·Gemini·Ollama를 설정만으로 전환하는 어댑터 패턴. 토큰 계산(tiktoken)으로 컨텍스트 예산을 관리하고, json-repair로 LLM의 깨진 출력을 복구하는 실전 기법까지.

실습: .env의 모델을 유료 → 무료(또는 로컬 Ollama)로 바꿔 같은 종목을 분석. 출력 품질·속도·비용이 어떻게 달라지는지 비교표를 만들어 보자.

FastAPI · 계층 아키텍처

core → services → repositories 레이어드 백엔드

라우터는 얇게, 로직은 service, 데이터는 repository로 분리하는 현업형 구조. 미들웨어(auth·error_handler), Pydantic 스키마 검증, 의존성 주입을 한 저장소에서 본다.

실습: uvicorn server:app --reload로 띄우고 /docs(자동 Swagger)에서 분석 엔드포인트를 직접 호출. 한 요청이 endpoint → service → repository로 어떻게 내려가는지 따라가 보기.

프롬프트 · 리포트 엔진

LLM 출력을 '스키마'로 규격화하는 기술

자유 텍스트가 아니라 4단 AnalysisResult.dashboard 구조로 강제하고, jinja2 템플릿으로 데이터와 표현을 분리해 렌더링. imgkit로 마크다운을 이미지 카드로 바꿔 메신저에 보내는 흐름까지.

실습: templates/의 리포트 템플릿을 열어 "리스크 경보" 섹션의 문구·이모지를 바꿔 보고, 출력 메시지가 어떻게 달라지는지 확인.

React 19 · Vite · Recharts

분석 결과를 보여 주는 모던 프론트엔드

React 19 + React Compiler, Zustand 상태, TanStack 없이 axios+Zustand로 서버 데이터 다루기, Recharts 차트, react-markdown으로 리포트 렌더. Playwright E2E 스모크 테스트도 함께.

실습: apps/dsa-web에서 npm ci && npm run dev로 띄우고, 분석 리포트가 API 응답을 어떻게 받아 Recharts 차트로 그리는지 컴포넌트를 추적.

GitHub Actions · 서버리스 자동화

서버 없이 '매일 도는 잡' 만드는 법

cron 스케줄, Secrets로 키 주입, 거래일 달력(exchange-calendars)으로 휴장일 건너뛰기, 단계 실패 시 재시도(tenacity), 알림 채널 fan-out. "PC를 안 켜도 매일 도는 봇"의 표준 레시피다.

실습: .github/workflows/의 daily 워크플로를 읽고, cron 시각과 거래일 체크 로직을 찾아 "내 시간대(KST)"에 맞게 바꿔 보기.

7시스템 요구사항

"내 환경에서 돌아갈까?" — 배포 방식에 따라 부담이 천차만별이다.

배포 방식필요한 것비고
GitHub Actions(추천)GitHub 계정 + API 키내 PC·서버 불필요. Fork → Secrets 등록 → Actions 켜기면 끝. 무료 실행 시간 활용.
로컬 실행Python 3.10+ / 가벼운 RAM클라우드 LLM API만 쓰면 PC는 가볍다. 추론은 공급자 서버가 함.
로컬 LLM(Ollama)RAM 16GB+ / GPU 권장모델을 내 PC에서 돌리면 무겁다. 프라이버시·무과금이 목적일 때만.
Docker / NASDocker 엔진docker/ compose로 24시간 셀프호스팅. 시놀로지 등에도 올릴 수 있다.
이미지 알림 쓸 때wkhtmltopdfimgkit가 마크다운→이미지 변환에 사용. 텍스트 알림만이면 불필요.

최소 필수 설정 (셋 다 있어야 분석이 돈다)

항목예시설명
LLM 키 1개ANSPIRE_API_KEYS분석의 '뇌'. 무료/저가 공급자도 OK.
알림 채널 1개TELEGRAM_BOT_TOKEN리포트를 받을 곳. 飞书/TG/Discord/Slack/메일 중 택1.
종목 리스트600519,hk00700,AAPLSTOCK_LIST에 분석할 코드를 콤마로.
핵심 포인트
"가볍게 Fork로 시작 → 필요해지면 셀프호스팅" 이 정석

처음엔 무료 LLM 키 + 텔레그램만으로 GitHub Actions에 띄워 감을 잡고, 더 자주/유연하게 돌리고 싶어지면 그때 Docker로 옮기면 된다. 핵심 설계가 "설정 없이도 최소 동작"이라, 키를 하나씩 추가할수록 뉴스·이미지·소셜여론 같은 기능이 점진적으로 켜진다.

8직접 해볼 수 있는 실습 과제

읽기만 하면 안 남는다 — 손으로 해보는 난이도별 과제 6선.

① 로컬에서 1회 분석 돌려 보기 ★ 입문

git clonepip install -r requirements.txt.env에 LLM 키 1개만 넣고 python main.py --stocks AAPL --dry-run. 실제 발송 없이 분석 결과가 콘솔에 어떻게 찍히는지부터 확인한다.

② GitHub Actions로 자동화 띄우기 ★ 입문

저장소를 Fork → Settings의 Secrets에 LLM 키·알림 토큰·STOCK_LIST 등록 → Actions 활성화 → "每日股票分析" 워크플로를 수동 Run workflow. 내 폰으로 리포트가 도착하는지 확인.

③ 웹 작업대 + 大盘复盘 써 보기 ★★ 중급

python main.py --webui로 띄워 127.0.0.1:8000 접속. 수동 분석·과거 리포트·백테스트를 눌러 보고, python main.py --market-review로 "대장세 복盘(시장 전체 리뷰)"이 어떻게 생성되는지 비교.

④ LLM 공급자 갈아 끼우기 ★★ 중급

.env의 모델을 유료(GPT) → 무료/로컬(DeepSeek·Ollama)로 바꿔 같은 종목을 분석. docs/LLM_CONFIG_GUIDE.md를 참고해 멀티모델 라우팅까지 시도하고, 출력 품질·지연을 표로 정리.

⑤ Agent 전략 문股 + 커스텀 전략 ★★★ 고급

/chat에서 균선·缠论·파동·이벤트 등 내장 전략으로 다중 질문. 그 다음 strategies/의 전략 파일 형식을 본떠 "내 매매 규칙"을 담은 커스텀 전략 파일을 추가해 보기.

⑥ 데이터 소스 폴백 직접 파보기 ★★★ 고급

data_provider/를 읽고 시세 소스 폴백 순서를 그려 본 뒤, 새 데이터 소스 어댑터를 하나 추가하거나 우선순위를 바꿔 본다. AGENTS.md의 "데이터 소스 fallback" 가드레일(타임아웃·필드 표준화)을 지키며 수정하는 연습.

9관련 기술 심화 학습 로드맵

이 레포를 발판으로 "LLM 자동화 풀스택"을 익히는 6주 코스.

주차주제학습 내용
1주차LLM 앱 기초 · litellm프롬프트·컨텍스트·토큰 개념 + litellm으로 여러 공급자 호출, json-repair로 출력 안정화.
2주차금융 데이터 파이프라인efinance·akshare로 시세/K선/지표 수집, pandas 가공, 폴백 체인·타임아웃 설계.
3주차FastAPI 계층 아키텍처core/services/repositories 분리, Pydantic 스키마, 미들웨어·인증, /docs 자동화.
4주차프롬프트 엔지니어링 · 리포트 엔진출력 스키마 강제(AnalysisResult), jinja2 템플릿, imgkit 이미지화, 4단 대시보드 설계.
5주차React 19 · Vite 프론트React Compiler, Zustand 상태, Recharts 차트, react-markdown 렌더, Playwright E2E.
6주차자동화 · 배포 · 운영GitHub Actions cron, 거래일 달력, tenacity 재시도, 알림 fan-out, Docker 셀프호스팅.
학습 팁

한 번에 다 보려 하지 말고 "종목 한 개가 알림이 되는 경로"만 끝까지 따라가 보라. main.py --stockssrc/core(파이프라인) → data_provider(수집) → src/services(분석) → litellm(LLM) → src/reports(렌더) → bot/(발송). 이 한 줄기를 완전히 이해하면, 웹·데스크탑·백테스트는 같은 엔진을 다르게 호출하는 변주임이 보인다.

10핵심 키워드 사전

이 프로젝트를 읽다 만나는 용어들 — 짧게 정리.

용어
LLM거대 언어 모델. DSA에서 데이터·뉴스를 받아 "결론·점수·매매 포인트"로 가공하는 분석 두뇌.
litellm100여 개 LLM 공급자를 "OpenAI 한 가지 방식"으로 묶는 통합 클라이언트. 설정만 바꿔 모델 교체.
데이터 소스 폴백시세 소스를 우선순위로 줄 세워, 위가 실패하면 아래로 자동 전환하는 안정성 패턴.
결정 대시보드DSA의 4단 출력(결론·데이터관점·정보·작전계획). 날것이 아니라 바로 읽는 요약본.
A주 / 港股 / 美股중국 본토 / 홍콩 / 미국 주식. DSA가 모두 다루는 다중 시장.
大盘复盘개별 종목이 아닌 "시장 전체(지수·등락·섹터)"를 리뷰하는 시황 복기 기능.
筹码(매물대)특정 가격대에 쌓인 보유 물량 분포. 매물 집중도로 저항·지지를 가늠하는 지표.
量能(거래량 에너지)거래량의 강약. 추세의 진위를 가늠하는 보조 신호.
缠论 / 파동이론중국·서구의 대표적 차트 분석 이론. DSA Agent의 내장 전략에 포함.
efinance / akshare중국 무료 주식 데이터 라이브러리. 폴백 체인의 최우선 소스들.
exchange-calendars각국 거래소 휴장일 달력. "장 안 여는 날엔 분석 안 함"을 자동 판단.
tenacity실패한 작업을 지수 백오프로 자동 재시도하는 파이썬 라이브러리.
jinja2데이터를 템플릿에 끼워 텍스트(리포트)를 찍어내는 파이썬 템플릿 엔진.
imgkit / wkhtmltopdf마크다운/HTML을 이미지로 변환. 리포트를 예쁜 카드 이미지로 메신저에 발송.
GitHub ActionsGitHub가 무료로 주는 자동화 실행 환경. DSA의 "서버 없는 매일 실행"의 핵심.
Webhook"이벤트가 나면 정해진 URL로 메시지 쏘기". 飞书·Discord 알림이 작동하는 방식.
SQLAlchemy파이썬 객체 ↔ DB 테이블을 잇는 ORM. 히스토리·설정 저장에 사용.
Zustand / Recharts가벼운 React 전역 상태 라이브러리 / React 차트 라이브러리.
AlphaSift같은 저자의 자매 프로젝트. 전체 시장에서 후보 종목을 거르는 멀티팩터 스크리너.
SKILL.md / Agent 문股분석 기능을 'AI 스킬'로 노출. 15개 전략으로 다중 질문하는 에이전트 인터페이스.

11참고 링크

더 깊이 파고들 때의 출발점.

자료링크
GitHub 저장소github.com/ZhuLinsen/daily_stock_analysis
완전 가이드저장소 docs/full-guide.md (설정·배포·데이터소스 우선순위)
LLM 설정 가이드저장소 docs/LLM_CONFIG_GUIDE.md
개발 규칙(단일 진실원)저장소 AGENTS.md
자매 프로젝트 — 선별github.com/ZhuLinsen/alphasift (멀티팩터 종목 스크리닝)
자매 프로젝트 — 진화github.com/ZhuLinsen/alphaevo (전략 백테스트·자기진화)
litellmgithub.com/BerriAI/litellm
TrendShift 순위trendshift.io/repositories/18527
마지막으로 한 번 더
학습용 · 연구용 — 투자 조언이 아닙니다

이 문서와 DSA가 만들어 내는 모든 "매수/매도/점수"는 코드·아키텍처 학습을 위한 예시일 뿐, 어떤 종목 추천이나 투자 권유도 아니다. 실제 매매 판단과 그 결과에 대한 책임은 전적으로 사용자 본인에게 있다. 주식 투자에는 원금 손실 위험이 있다.