Open Net Worth
Open Net Worth is an open-source personal AI wealth assistant you run yourself: one ledger for your whole financial life, worked by an AI agent you control.
KAIST 디지털금융MBA 클라우드컴퓨팅실습 5조 발표. 주식·코인 유튜브 채널 51개의 1년치 영상 제목에서 종목을 찾아 언급 뒤 5·20·60거래일 수익률을 센 서비스.
Translation pending
FinancePython · HTMLGitHub @insung1939OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
Hindsight(하인드사이트) — 유튜버가 말한 종목, 그 뒤에 어떻게 됐나 KAIST 디지털금융MBA 〈클라우드컴퓨팅실습〉 팀 프로젝트. 주식·코인 유튜브 채널이 영상 제목에서 언급한 종목을 모아, 언급 뒤 5·20·60 거래일 동안 주가가 실제로 어떻게 움직였는지 통계로 보여준다. 채널 실명과 채널별 성적(상·하위)을 보여주되 학습용 통계임을 고지하고, 종목 추천 문구는 없다. 처음 보면 docs/overview.md(검토 가이드) 부터. 교수님 요구사항·중간 피드백·디자인 원칙은 docs/requirements.md, 현재 상태와 10/21 까지의 할 일은 docs/checklist.md. 기획·역할은 PLAN.md, API 설명은 docs/api.md, 테이블은 docs/db.md, 데이터 출처는 docs/data-sources.md, 배포는 docs/deploy.md, 세미나 데모는 docs/seminar-demo.md.Read the full README ↗
배포 주소 · 서비스 https://hindsight-web.vercel.app · Swagger https://hindsight-api-edab.onrender.com/docs · 발표 페이지 https://hindsight-gold.vercel.app · 저장소 https://github.com/insung1939/hindsight
KAIST 디지털금융MBA 〈클라우드컴퓨팅실습〉 팀 프로젝트. 주식·코인 유튜브 채널이 영상 제목에서 언급한 종목을 모아, 언급 뒤 5·20·60 거래일 동안 주가가 실제로 어떻게 움직였는지 통계로 보여준다. 채널 실명과 채널별 성적(상·하위)을 보여주되 학습용 통계임을 고지하고, 종목 추천 문구는 없다.
처음 보면 docs/overview.md(검토 가이드) 부터. 교수님 요구사항·중간 피드백·디자인 원칙은 docs/requirements.md, 현재 상태와 10/21 까지의 할 일은 docs/checklist.md. 기획·역할은 PLAN.md, API 설명은 docs/api.md, 테이블은 docs/db.md, 데이터 출처는 docs/data-sources.md, 배포는 docs/deploy.md.
apps/team-page/dataflow.mp4)평가 포인트(교수 피드백): 어떤 소스에서 데이터를 가져와 어떻게 가공해 무슨 가치를 주는가. UI 가 아니라 데이터와 API 호출이 중심. 발표의 절반은 파이프라인(소스 → 수집 → 매칭 → 계산 → 결과)에 실제 건수를 붙여 설명한다.
| 서비스 | 담당 질문 | 소유 데이터 | 호출하는 서비스 | 로컬 포트 |
|---|---|---|---|---|
market-data | 이 종목이 언제 얼마였나, 종목 사전은 | 자산 마스터+별칭, 일별 시세, 지수 | — | 8001 |
youtube | 어떤 채널이 언제 무슨 영상을 올렸나 | 채널(실명·핸들·구독자), 영상 메타 | — | 8002 |
mentions | 이 영상이 어떤 종목을 말했나 | 언급, 못 잡은 제목 | youtube, market-data | 8003 |
stats | 언급 뒤 주가는 어땠나 | 언급별 수익률, 요약 캐시 | mentions, market-data | 8004 |
apps/web (Vercel)
┌────────┴────────┬──────────────┐
▼ ▼ ▼
stats mentions market-data (타임라인·사전 읽기)
│ ╲ │ ╲
▼ ╲ ▼ ╲
mentions ╲ youtube ╲
╲▶ market-data ◀──┘
/internal/sync. 매일 순서: market-data → youtube → mentions → market-data(새 종목) → stats.X-Request-ID 전파, 오류는 RFC 9457 application/problem+json, 명세는 contracts/ 가 기준.매칭 규칙 (services/mentions/matcher.py): 사전(이름·별칭)을 긴 표현부터 정확 문자열 매칭, 잡힌 구간은 지워 중복 방지, 흔한 단어(KT·삼성·현대 …)는 단독 매칭 금지, 영문은 단어 경계로만. 못 잡은 제목은 버리지 않고 남겨 성공률을 화면에 그대로 보여준다.
hindsight/
├── contracts/ OpenAPI 3.1 명세 4개 — 단일 진실 공급원. .spectral.yaml 이 스타일 규칙
├── libs/hs-common 앱 골격 · 오류 포맷 · 요청 ID · DB · 서비스 간 클라이언트 · .env 로더
├── services/<svc>/ FastAPI + SQLAlchemy, Dockerfile, tests/(계약 드리프트 + 매칭 규칙)
├── apps/web/ React + TypeScript (Vite) — 이번 주 언급 · 언급 뒤에(분석) · 종목 타임라인 · 데이터
├── apps/api/ 합본 배포(Render 1개): 서비스 4개를 한 프로세스에 마운트(/docs 하나) — single.py · Dockerfile
├── apps/team-page/ 발표 페이지(정적)
├── platform/ compose(서비스+게이트웨이+관측) · gateway(APISIX) · k8s(kustomize) · backstage
├── docs/ requirements · checklist · data-plan · channel-selection · api · db · data-sources · deploy · script
├── scripts/ dev_up/down · smoke.py · discover_channels.py(채널 선정) · register_channels.py · migrate_sqlite_to_pg.py · export_contracts.py · gen_api_docs.py
└── .github/workflows/ contracts(Spectral·oasdiff) · services(pytest·GHCR 이미지) · sync(매일 수집)
make setup # venv + 의존성 + npm install (최초 1회)
make up # 서비스 4개 → http://127.0.0.1:800{1..4}/docs
make smoke # 사전·시세 → 샘플 영상 → 매칭 → 수익률 한 바퀴
cd apps/web && npm run dev # http://localhost:5173
make down
키 없이도 샘플 영상으로 전 과정이 돈다. 실제 채널을 쓰려면 services/youtube/.env 에 YOUTUBE_API_KEY= 를 넣고 채널을 등록한다.
curl -X POST localhost:8002/v1/channels -H 'Content-Type: application/json' -d '{"handle":"@채널핸들","category":"stock"}'
python scripts/smoke.py --real # 최근 30일 영상 수집 → 매칭 → 수익률
선택 키: DART_KEY(국내 전 상장사 사전), DATA_GO_KR_KEY(국내 시세, 없으면 Yahoo 국내 심볼로 대체). 키는 .env 로만, 저장소·프롬프트에 넣지 않는다.
Docker: make compose (서비스 4개) · make compose-all (+ APISIX 9080 · Grafana 3000 · Prometheus 9090 · Tempo 3200). 명령 목록 make help.
contracts/<service>.yaml 에 엔드포인트를 쓰고, 호출하는 쪽 팀원이 리뷰한다.python scripts/export_contracts.py <service> 로 명세를 갱신하면 그 diff 가 리뷰 대상.npx @stoplight/prism-cli mock contracts/market-data.yaml.| 계층 | 팀 운영 (수업 제출) | 분리 배포 실험 (platform/) |
|---|---|---|
| 프론트 | Vercel (apps/web) | 동일 |
| 백엔드 | Render 웹 서비스 1개 — render.yaml → apps/api(서비스 4개 + 게이트웨이, Swagger 하나) | kind/minikube → EC2 k3s (platform/k8s) + APISIX, 서비스별 컨테이너 |
| DB | Supabase (스키마 market yt mentions stats) | 동일 |
| 관측 | OTel → Grafana Cloud | OTel → Prometheus · Tempo · Grafana |
| 수집 | GitHub Actions sync.yml 매일 07:10 | k8s CronJob |
| 데이터 | 출처 | 키 |
|---|---|---|
| 채널·영상 메타(제목·설명·게시일·조회수) | YouTube Data API v3 (수업 제공) | 필요 |
| 상장사 이름·종목코드 | DART OpenAPI corpCode (수업 제공) | 필요 (없으면 시드 57개) |
| 국내 시세 | 공공데이터포털 금융위원회_주식시세정보 | 필요 (없으면 Yahoo 대체) |
| 미국 시세 · 코스피/S&P500 지수 · 국내 대체 | Yahoo Finance chart API | 불필요 |
| 코인 마켓 목록 · 일봉 | 업비트 Open API | 불필요 |
자막·댓글은 수집하지 않는다. 채널은 실명으로 보여주되(2026-10-07 팀 결정) 학습용 통계이며 추천이 아님을 화면에 고정 고지한다.
피드백 반영으로 추가한 것: 거래량(Yahoo·업비트 응답에 포함) · 업종·테마 사전 20개(반도체·2차전지 등 → 대표 ETF 시세) · DART 공시(언급 전후 공시 여부). 네이버 뉴스 API 는 소급 불가·과금 우려로, 네이버 증권 뉴스 크롤링은 필수가 아니고 설명 부담이 커서 제외(10/14). 데이터는 10/17(토) 07:10 수집을 마지막으로 확정한다(10/16 금 종가까지). 상세는 docs/data-plan.md.
김지환 · 김현준 · 오선호 · 조인성 · 채재희. 발표는 조인성이 진행한다. 서비스 전체를 코드 없이 설명한 문서는 docs/team-guide.md.
구조와 코드는 Claude Code 와 함께 작성했고, 생성된 코드는 로컬에서 실행해 scripts/smoke.py, 매칭 규칙 테스트, 브라우저로 확인한 뒤 반영했다.