mirror of
https://github.com/shawnkim1997/All-in-one-Financial-Analysis.git
synced 2026-08-13 10:28:05 +00:00
Complete migration from Streamlit to Next.js 14 App Router + FastAPI backend. Frontend (Next.js 14): - 10 pages: Overview, Research, Valuation, Technical, Markets, Earnings, News, Portfolio, Filings, Settings - Terminal Noir dark theme with custom Tailwind config - TradingView Lightweight Charts for candlestick/volume - Valuation: DCF, Sensitivity Matrix, Monte Carlo, Tornado, Reverse DCF - Financial Statements table with YoY growth badges and margin rows - SEC EDGAR inline filing viewer with section tabs - News split-view with iframe article embedding - Technical Analysis with RSI, MACD, Bollinger, Fibonacci, Moving Averages - Earnings beat/miss visualization - AI Copilot chat panel with Gemini integration Backend (FastAPI): - 13 routers: market_data, financials, valuation, technical, earnings, insider, edgar, news, portfolio, analysis, chat, estimates, fx - Services: DCF engine, Monte Carlo simulation, sensitivity analysis, risk metrics, SEC parser, technical indicators - yfinance + yahooquery data sources with fallback pattern - SQLite caching layer Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
168 lines
9.0 KiB
Markdown
168 lines
9.0 KiB
Markdown
# ATLAS Terminal — 종합 프로젝트 평가 & 빌딩 가이드
|
|
|
|
---
|
|
|
|
## PART 1: 현재 프로젝트 평가
|
|
|
|
### 🟢 잘한 점 (Strengths)
|
|
|
|
**1. 하이브리드 아키텍처 — 이건 진짜 좋다**
|
|
정성(LLM)과 정량(Pandas/yfinance)을 분리한 설계는 비용 효율성과 정확도를 동시에 잡는 프로덕션 레벨 판단이다. Gemini를 텍스트 분석에만 쓰고, 숫자는 무료 API에서 가져오는 구조는 실제 FinTech 스타트업에서도 채택하는 패턴이다.
|
|
|
|
**2. 429 토큰 최적화 — 실전 문제 해결**
|
|
200페이지 10-K를 통째로 보내지 않고, Item 1A~9A만 슬라이싱 → regex 파싱 → smart_chunk로 head+tail 보존하는 전략은 토큰 80%+ 절감을 달성했다. 이건 면접에서 강력한 스토리가 된다.
|
|
|
|
**3. 다단계 폴백 시스템**
|
|
yahooquery → yfinance(fast_info → info → balance_sheet) → TTM/분기 합산 → 수동 입력 순으로 떨어지는 폴백 체인은 실사용에서 데이터 누락을 최소화한다. `_safe_float()` 일관 사용도 좋다.
|
|
|
|
**4. 10년 2단계 DCF**
|
|
5년 DCF의 터미널밸류 왜곡 문제를 인식하고 Y6~10 선형 Fade를 적용한 건 학부생 수준을 넘어선다. Damodaran 참조 패널까지 있어서 학술적 근거도 확보했다.
|
|
|
|
**5. Piotroski F-Score, Altman Z, DuPont — 정량 깊이**
|
|
단순 밸류에이션이 아닌 재무 건전성 지표까지 커버한 점이 Bloomberg Terminal 컨셉과 맞다.
|
|
|
|
### 🟡 개선이 필요한 점 (Weaknesses)
|
|
|
|
**1. app.py 단일 파일 2,846줄 — 가장 큰 기술 부채**
|
|
SEC 파싱, Gemini 호출, DCF 계산, 차트 생성, UI 렌더링이 전부 하나에 있다. 디버깅, 테스트, 협업 모두 어렵다. 모듈 분리가 최우선이다.
|
|
|
|
**2. Streamlit 한계 — Bloomberg 터미널 UI와 거리가 있다**
|
|
Streamlit은 프로토타이핑엔 최고지만, 다중 패널 동시 업데이트, 실시간 웹소켓, 커스텀 레이아웃에 제약이 크다. Next.js + FastAPI로 전환하면 진정한 터미널 UX가 가능하다.
|
|
|
|
**3. 글로벌 시장 커버리지 — 아직 US 중심**
|
|
한국(DART), 일본(EDINET), 유럽, 중국/홍콩 공시 파싱이 "Phase 2" 상태다. 가격 데이터는 yfinance 접미사로 커버되지만, 공시 분석은 미국만 된다.
|
|
|
|
**4. 포트폴리오 — 스크린샷 OCR은 있지만 지속성 부족**
|
|
Trading 212, IBKR 스크린샷 분석은 구현되었으나, 포지션 이력 추적, 수익률 시계열, 리밸런싱 인사이트가 없다. Supabase에 저장하면 해결된다.
|
|
|
|
**5. 뉴스 통합 없음**
|
|
회사 관련 뉴스가 아예 없다. Bloomberg 터미널의 핵심 기능 중 하나인 뉴스 피드가 빠져 있다.
|
|
|
|
**6. 환율/암호화폐 — 별도 탭이지만 메인 대시보드와 통합 부족**
|
|
Bithumb/Binance 가격은 있지만, 포트폴리오 총 수익률에 FX 영향이 실시간으로 반영되는 통합 뷰가 없다.
|
|
|
|
### 🔴 위험 요소 (Risks)
|
|
|
|
- `app.py` 3000줄 단일 파일은 더 커지면 유지보수 불가능해진다
|
|
- yfinance/yahooquery는 언제든 차단될 수 있다 (IP 제한)
|
|
- Gemini 무료 티어 rate limit은 프로덕션에서 문제가 된다
|
|
- SEC EDGAR User-Agent 정책 위반 시 IP 차단 가능
|
|
|
|
---
|
|
|
|
## PART 2: 발전 방향 — Next.js 기반 ATLAS Terminal
|
|
|
|
### 목표 아키텍처
|
|
|
|
```
|
|
atlas-terminal/
|
|
├── apps/
|
|
│ └── web/ # Next.js 14 (App Router)
|
|
│ ├── app/
|
|
│ │ ├── layout.tsx # 루트 레이아웃 (다크 테마, 글로벌 네비)
|
|
│ │ ├── page.tsx # 메인 대시보드 (그리드 레이아웃)
|
|
│ │ ├── (dashboard)/
|
|
│ │ │ ├── overview/ # 포트폴리오 오버뷰 + 뉴스 피드
|
|
│ │ │ ├── research/ # 10-K 분석 + 뉴스 (회사별)
|
|
│ │ │ ├── valuation/ # DCF + RIM + Comps
|
|
│ │ │ ├── markets/ # 히트맵 + 환율 + 암호화폐
|
|
│ │ │ ├── portfolio/ # 포지션 관리 + 스크린샷 OCR
|
|
│ │ │ └── filings/ # SEC/DART/EDINET 원문 뷰어
|
|
│ │ └── api/ # Route Handlers (BFF 패턴)
|
|
│ │ ├── search/
|
|
│ │ ├── news/
|
|
│ │ └── portfolio/
|
|
│ ├── components/
|
|
│ │ ├── ui/ # shadcn/ui 기반 원자 컴포넌트
|
|
│ │ ├── charts/ # Recharts/D3 차트 컴포넌트
|
|
│ │ │ ├── SankeyFlow.tsx
|
|
│ │ │ ├── RadarHealth.tsx
|
|
│ │ │ ├── DCFWaterfall.tsx
|
|
│ │ │ └── HeatmapGrid.tsx
|
|
│ │ ├── terminal/ # 터미널 스타일 컴포넌트
|
|
│ │ │ ├── TickerBar.tsx # 상단 실시간 티커 바
|
|
│ │ │ ├── CommandPalette.tsx # ⌘K 검색
|
|
│ │ │ ├── PanelGrid.tsx # 리사이즈 가능 패널
|
|
│ │ │ └── NewsFeed.tsx # 실시간 뉴스 피드
|
|
│ │ └── portfolio/
|
|
│ │ ├── ScreenshotUpload.tsx
|
|
│ │ └── PositionTable.tsx
|
|
│ ├── lib/
|
|
│ │ ├── api-client.ts # FastAPI 호출 래퍼
|
|
│ │ └── format.ts # 통화/숫자 포맷 유틸
|
|
│ └── styles/
|
|
│ └── terminal-theme.css # Bloomberg 스타일 CSS 변수
|
|
│
|
|
├── server/ # FastAPI 백엔드
|
|
│ ├── main.py # FastAPI 엔트리포인트
|
|
│ ├── routers/
|
|
│ │ ├── edgar.py # SEC EDGAR 다운로드/파싱
|
|
│ │ ├── dart.py # 한국 DART API
|
|
│ │ ├── edinet.py # 일본 EDINET API
|
|
│ │ ├── analysis.py # Gemini LLM 분석 (MD&A, Risk)
|
|
│ │ ├── valuation.py # DCF, RIM, Comps 계산
|
|
│ │ ├── market_data.py # yfinance/yahooquery 래퍼
|
|
│ │ ├── news.py # 뉴스 집계 (RSS + API)
|
|
│ │ ├── crypto.py # Bithumb/Binance API
|
|
│ │ ├── fx.py # 환율 데이터
|
|
│ │ └── portfolio.py # 포트폴리오 CRUD + OCR
|
|
│ ├── services/
|
|
│ │ ├── gemini_service.py # Gemini API 래퍼 (retry, chunk, stream)
|
|
│ │ ├── sec_parser.py # 10-K HTML → 섹션 추출
|
|
│ │ ├── text_chunker.py # smart_chunk, clean_text_for_llm
|
|
│ │ ├── dcf_engine.py # 10Y 2-stage DCF + Reverse DCF + RIM
|
|
│ │ ├── financial_metrics.py # DuPont, Altman Z, F-Score, Red Flags
|
|
│ │ ├── market_fetcher.py # yfinance/yahooquery 폴백 체인
|
|
│ │ └── screenshot_ocr.py # Gemini Vision 포트폴리오 OCR
|
|
│ ├── models/
|
|
│ │ ├── schemas.py # Pydantic 요청/응답 스키마
|
|
│ │ └── db.py # Supabase 클라이언트
|
|
│ └── utils/
|
|
│ ├── safe_float.py # _safe_float, _na 유틸
|
|
│ ├── ticker_utils.py # get_global_ticker, infer_market
|
|
│ └── cache.py # Redis/인메모리 캐시 래퍼
|
|
│
|
|
├── supabase/
|
|
│ └── migrations/ # DB 스키마 (포트폴리오, 캐시, 사용자)
|
|
│
|
|
├── claude.md # ← 이 파일 (에이전트 빌딩 가이드)
|
|
├── .github/
|
|
│ └── workflows/
|
|
│ └── update-readme.yml # README 자동 업데이트 (GitHub Actions)
|
|
└── package.json
|
|
```
|
|
|
|
### UI 디자인 방향 — "Terminal Noir"
|
|
|
|
Bloomberg Terminal + Notion의 깔끔함 + 다크 모드를 결합한 디자인
|
|
|
|
**컬러 팔레트:**
|
|
- Background: `#0A0A0F` (거의 검정, 살짝 네이비)
|
|
- Surface: `#12121A` (카드/패널 배경)
|
|
- Border: `#1E1E2E` (구분선)
|
|
- Primary: `#00D4AA` (민트 그린 — 핵심 액션, 상승)
|
|
- Danger: `#FF4757` (하락, 경고)
|
|
- Text Primary: `#E8E8F0` (거의 흰색)
|
|
- Text Secondary: `#6B7280` (설명 텍스트)
|
|
- Accent: `#818CF8` (인디고 — AI 분석 결과 강조)
|
|
|
|
**타이포그래피:**
|
|
- 숫자/데이터: `JetBrains Mono` (모노스페이스, 가독성)
|
|
- 제목: `Satoshi` (기하학적 산세리프, 모던)
|
|
- 본문: `Inter` (가독성 최우선)
|
|
|
|
**핵심 UI 패턴:**
|
|
1. **Command Palette (⌘K)**: 회사 검색, 기능 이동 — Notion/Linear 스타일
|
|
2. **리사이즈 가능 패널 그리드**: react-grid-layout으로 사용자가 패널 배치 커스텀
|
|
3. **상단 티커 바**: 실시간 가격 스크롤 (주식 + 암호화폐 + 환율)
|
|
4. **사이드바 워치리스트**: 즐겨찾기 종목 실시간 업데이트
|
|
5. **AI 분석 결과**: 인디고 보더 카드 안에 스트리밍 텍스트
|
|
|
|
---
|
|
|
|
## PART 3: claude.md (Claude Code 빌딩 가이드)
|
|
|
|
아래 내용을 프로젝트 루트의 `claude.md`로 저장하면 Claude Code가 참조한다.
|
|
|
|
---
|