<div align="center">
OpenTerminal
우리 같은 사람들을 위한 터미널 스타일 워크스페이스 — 완전히 무료, 공개 시장 데이터를 기반으로 구축되었습니다.
다크 모드. 밀도 높음. 키보드 구동 방식. 유료 API 키 없음, 구독료 없음.
Stack
License: MIT
No API Key Required
PRs Welcome
<a href="https://trendshift.io/repositories/215916?utm_source=trendshift-badge&utm_medium=badge&utm_campaign=badge-trendshift-215916" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/trendshift/repositories/215916/daily?language=TypeScript" alt="ErTasselli%2FOpenTerminal | Trendshift" width="250" height="55"/></a>
<br/>
<img src="https://raw.githubusercontent.com/ErTasselli/OpenTerminal/HEAD/docs/screenshots/dashboard.png" alt="OpenTerminal 대시보드 — 실시간 차트, 시세 패널, 관심 종목, 뉴스 및 거시 지수" width="100%" />
<sub>⭐ 이것이 유용하다면, 레포에 별점을 주시는 것을 고려해 주세요. 다른 사람들이 이 프로젝트를 찾는데 진정으로 도움이 됩니다.</sub>
</div>
<br/>
OpenTerminal을 사용하는 이유?
실제 트레이딩 터미널은 월 2,000달러 이상의 비용이 듭니다. 대부분의 리테일 대시보드는 좋은 기능을 유료 장벽 뒤에 숨기거나, 실제로 필요할 때 작동을 멈추는 단 하나의 불안정한 데이터 소스에 의존합니다.
OpenTerminal은 다른 접근 방식을 취합니다: 여러 무료로 공개 문서화된 (또는 리버스 엔지니어링되었지만 널리 사용되는) 시장 데이터 엔드포인트를 하나로 짜깁기하여, 주요 금융 사이트의 프런트엔드를 구동하는 것과 동일한 데이터를 사용하여 빠르고 키보드 우선이며 위젯 기반의 대시보드를 구축합니다. 이 모든 것이 오직 사용자 컴퓨터에서 실행됩니다. 각 데이터 엔드포인트는 자동 폴백 체인(automatic fallback chain)을 가지고 있어, 단일 제공업체의 문제가 전체 앱이 다운되는 것을 막아줍니다.
가입할 필요 없음. 신용카드 필요 없음. 속도 제한이 걸린 데모 등급도 없습니다. 클론하고, npm install만 하면 1분도 안 되어 실시간 터미널을 갖게 됩니다.
<br/>
✨ 기능
- 🖥️ 위젯 기반 워크스페이스 — 패널을 드래그하고 크기를 조절하며 추가 및 제거할 수 있습니다 (
react-grid-layout); 레이아웃은 로컬에 저장되며 다시 로드 시 복원됩니다
- ⌘K 전역 명령어 팔레트 — 주식, ETF, 암호화폐를 즉시 검색하고 해당 항목으로 바로 이동합니다
- 📈 전문 차트 분석 (
lightweight-charts 이용) — 캔들스틱, 바(bar), 라인, 영역, 거래량, 8개 시간대(1D → MAX), 그리고 SMA / EMA / VWAP / 볼린저 밴드 / RSI / MACD 지표를 제공하며, 커서 아래에는 OHLC, 거래량 및 활성화된 모든 지표의 값을 보여주는 실시간 호버 레전드가 표시됩니다
- 💹 호가 패널 — 최종/매수/매도/OHLC, 거래량, 시가총액, P/E, EPS, 배당수익률, 52주 범위, 베타, 발행 주식 수
- 📰 뉴스 피드 — 여러 RSS 소스에서 취합 및 중복 제거된 뉴스이며, 종목별 또는 글로벌로 제공됩니다
- 🔎 전체 시장 스크리너 — 전체 미국 주식 시장을 대상으로 섹터, 시가총액, % 변화, 거래량으로 필터링할 수 있으며 모든 열에서 정렬이 가능합니다
- 🗺️ 실시간 섹터 히트맵 — 시가총액별로 크기가 지정된 트리맵이며, 일일 % 변화에 따라 색상이 지정되고 몇 초마다 새로 고침됩니다
- ⛓️ 옵션 체인 — 행사가격(strike)을 기준으로 콜 옵션과 풋 옵션을 나란히 보여주며, 매수/매도 호가, 거래량, 미결제약정(open interest), 그리고 내가격(ITM) 강조 표시 기능이 있습니다
- 🪙 암호화폐 보드 — 상위 자산에 대해 7일 스파크라인, BTC/ETH 지배력, 그리고 등록된 모든 코인에 대한 전체 OHLCV 차트 분석을 제공합니다
- 🏦 거시 경제 대시보드 — 실시간 미국 국채 수익률 곡선, VIX, 주요 지수 및 상품 프록시를 보여줍니다
- 💼 포트폴리오 추적기 — 매수/매도 거래 기록, 평균 비용 추적, 실현 및 미실현 손익(SQLite에 저장)을 관리합니다
- 📅 달력 — 경제 이벤트(Fed, ECB, CPI, NFP 등)와 컨센서스 예측치, 이전 수치, 그리고 주요 미국/EU 발표의 경우 실제 결과가 제공됩니다. 또한, 관심 종목별로 예상치 대 실제 결과를 보여주는 클릭 가능한 기록을 가진 실적 달력이 있습니다.
최근 몇 분기 동안의 실제 EPS와 해당 주식의 다음 날 가격 변동
- 🤖 AI 어시스턴트 (선택 사항) — Claude 기반으로, 현재 터미널의 데이터에 대한 완전한 문맥 인지 기능을 통해 보고 있는 심볼에 대해 질문할 수 있습니다.
- ⚡ 준 실시간 업데이트 — 시세와 지수는 매초마다 미묘하게 깜빡이며 새로 고침되므로, 무엇이 움직였는지 항상 알 수 있습니다.
- ⌨️ 키보드 단축키가 곳곳에 — 검색은
⌘K, 위젯 추가는 ⌥1–⌥9를 사용합니다.
<br/>
📸 자세히 보기
차트(Charting)
캔들스틱, 바, 라인 또는 영역 등 — 8개 시간대, 6가지 기술 지표, 그리고 커서 아래에 OHLC, 거래량 및 포인팅하는 캔들의 모든 활성 지표 값을 보여주는 실시간 범례가 제공됩니다.
<img src="https://raw.githubusercontent.com/ErTasselli/OpenTerminal/HEAD/docs/screenshots/chart.png" alt="SMA/RSI/MACD 지표와 호버 범례가 있는 캔들스틱 차트" width="100%" />
<br/>
실시간 섹터 히트맵(Live sector heatmap)
전체 미국 주식 시장을 트리맵으로 보여주며 — 시가총액별 크기, 일일 % 변화에 따른 색상으로 표시되며, 몇 초마다 새로 고침되어 보는 모든 것이 구식이 되는 것을 방지합니다.
<img src="https://raw.githubusercontent.com/ErTasselli/OpenTerminal/HEAD/docs/screenshots/heatmap.png" alt="미국 주식 시장의 실시간 섹터 히트맵" width="100%" />
<br/>
암호화폐(Crypto)
7일간의 스파크라인과 BTC/ETH 지배력을 갖춘 주요 자산 — 나열된 모든 코인에 대해 클릭하여 전체 OHLCV 캔들스틱 차트를 볼 수 있으며, 이는 주식과 동일한 차트 엔진을 사용합니다.
<img src="https://raw.githubusercontent.com/ErTasselli/OpenTerminal/HEAD/docs/screenshots/crypto.png" alt="스파크라인 및 지배력이 있는 암호화폐 보드" width="100%" />
<br/>
뉴스(News)
여러 출처에서 수집되고 중복이 제거된 헤드라인을 제공하며, 심볼별 또는 전역적으로 필터링할 수 있어 여러 탭을 뒤질 필요 없이 최신 정보를 얻을 수 있습니다.
<img src="https://raw.githubusercontent.com/ErTasselli/OpenTerminal/HEAD/docs/screenshots/news.png" alt="심볼별 및 전역 뉴스 피드, 집계 및 중복 제거됨" width="100%" />
<br/>
🗂️ 데이터 소스
유료 API도, 키도 필요 없고 단일 장애점(single point of failure)도 없습니다. 모든 엔드포인트는 폴백 체인(fallback chain)을 가지고 있으며, 결과는 stale-while-revalidate 전략으로 캐싱되어 일시적인 서비스 중단이 UI를 완전히 비우지 않습니다.
| 데이터 | 주 소스 | 폴백 (Fallback) | :--- |
| 시세 (주식/ETF) | Nasdaq 공개 시세 API | Yahoo Finance → Stooq | |
| ... | | |
⚠️ 이들은 공식적으로 라이선스가 부여된 데이터 피드가 아닌 공개 엔드포인트입니다. 가격은 실행 등급(execution-grade)이 아닌 지연되거나 참고용으로 간주하십시오. server/src/providers/를 참조하세요. 각 제공업체는 작고 격리된 모듈이므로, 데이터 소스를 교체하거나 추가하는 작업은 30분이면 충분합니다.
<br/>
🚀 빠른 시작 (Quick start)
git clone https://github.com/ErTasselli/openterminal.git
cd openterminal
npm install
...
이것으로 충분합니다. 완벽하게 작동하는 터미널을 얻기 위해 .env 파일이 필요하지 않습니다.
선택 사항: AI 비서 (AI assistant)
export ANTHROPIC_API_KEY=sk-ant-...
npm run dev
키가 없어도 다른 모든 기능은 작동합니다. AI 위젯만 실패하는 대신 친절한
- API는 기본적으로
127.0.0.1에 바인딩되며, http://localhost:3000에서 오는 브라우저 요청만 허용합니다. 네트워크의 다른 장치에서는 별도의 설정 없이는 접근할 수 없습니다.
- 포트폴리오 및 AI 엔드포인트는 공유 비밀(shared secret)을 필요로 합니다. 만약
API_KEY를 직접 설정하지 않으면, API가 첫 실행 시 자동으로 생성하여 data/.api-key에 저장합니다. 번들된 웹 앱은 이 파일을 자동으로 읽기 때문에 로컬 개발 환경에서 별도의 설정 없이도 사용 가능합니다 (zero-config).
- 이를 자신의 컴퓨터 외부로 노출하려면,
API_HOST=0.0.0.0, API_KEY=<강력한-비밀값> (api 및 web 프로세스 모두에), 그리고 WEB_ORIGIN=<실제-사용자-출발지>를 명시적으로 설정해야 합니다. 이 설정을 할 때는 의존성 패치(dependencies patched)도 함께 유지해야 합니다. 아래 알려진 제한 사항을 참조하세요.
/api/ai의 속도 제한(rate limit, 10 req/min)은 req.ip를 기준으로 적용됩니다. 번들된 웹 프록시를 통해 호출되는 모든 요청은 해당 프록시 자체의 주소에서 오기 때문에, 기본적으로 이 프록시를 공유하는 모든 사용자가 하나의 할당량(bucket)을 공유하게 됩니다. 만약 이를 통해 여러 실제 사용자에게 서비스를 제공하려면, api 프로세스에 TRUST_PROXY=1을 설정해야 합니다. 단, 웹 서비스 앞에 자체 리버스 프록시(reverse proxy)를 실행하여 실제 클라이언트의 IP 주소를 X-Forwarded-For 헤더로 설정하고 방문자가 이 헤더를 임의로 설정하는 것을 막는 경우에만 해당됩니다. 그렇지 않으면 호출자가 이 헤더를 위조하여 제한을 우회할 수 있습니다.
<br/>
🐳 Docker
docker compose up --build
포트폴리오 데이터는 terminal-data 볼륨에 영구 저장됩니다 (SQLite, WAL 모드). 기본적으로 포트는 127.0.0.1에서만 게시되므로, 의도적으로 노출하려면 보안 기본 설정을 참조하세요.
<br/>
🧱 Tech stack
| Layer | Stack |
|---|
| Frontend | Next.js 15 · React 19 · TypeScript · Tailwind CSS 4 · Zustand · TanStack Query |
| ... | |
<br/>
📁 Project structure
├── server/ # Express + TypeScript API
│ └── src/
│ ├── providers/ # nasdaq, tradingview, yahoo, stooq, fred, econcalendar, coingecko, binance, news
...
npm test로 테스트를 실행하세요 (Vitest, 네트워크 호출 없음). CI는 푸시(push)할 때마다 실행됩니다 — .github/workflows/ci.yml을 참조하세요.
<br/><br/>
🗺️ 로드맵 (Roadmap)
아이디어가 있나요? 이슈 열기 — 기여는 언제나 환영합니다.
<br/><br/>
🤝 기여 (Contributing)
풀 리퀘스트(Pull request)는 언제나 환영하며, 특히 다음 분야에 대한 기여를 기다립니다:
- 새롭거나 더 복원력 있는 데이터 제공자 (
server/src/providers/)
- 새 위젯 (
web/components/widgets/)
- 버그 수정 및 UI 개선
사소하지 않은(non-trivial) 변경 사항의 경우, 먼저 이슈를 열어주시면 시간을 투자하기 전에 접근 방식에 대해 논의할 수 있습니다.
<br/><br/>
알려진 한계점 (Known limitations)
npm audit는 여전히 이 프로젝트가 강제 수정하지 않는 두 가지 종속성 권고 사항을 표시합니다: fast-xml-parser의 XMLBuilder 주입(moderate)은 여기에 적용되지 않습니다 — 오직 XMLParser만 사용되며, XMLBuilder는 절대 사용되지 않으며 — 그리고 postcss의 높은 심각도 이슈는 Next.js 자체에 번들링되어 있으며, Next 16 메이저 업그레이드를 통해서만 해결됩니다. 두 가지 모두 추적되고 있으며, 어느 것도 조용히 무시되지는 않습니다.
- 리버스 프록시(reverse proxy)나 로드 밸런서(load balancer) 뒤에 배포하는 경우,
API_HOST/WEB_ORIGIN을 일치하도록 설정하고 그 앞에 TLS를 종료해야 합니다 — 이 프로젝트 자체는 HTTPS 처리를 하지 않습니다.
<br/><br/>
⚖️ 면책 조항 (Disclaimer)
개인 및 교육 목적으로만 사용하십시오. 시장 데이터는 공개 엔드포인트(public endpoints)에서 가져오며 지연되거나, 불완전하거나, 때때로 잘못될 수 있습니다 — 실제 투자 결정에 사용하지 마십시오.
라이선스 (License)
MIT
<br/><br/>
<div align="center">
저장소(repo)를 스타(star) ⭐ — 프로젝트를 지원하는 가장 좋은 방법입니다.
</div>