尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗계좌별 매수·매도 기록으로 보유 종목, 수익률, 자산 증가율을 관리하는 Next.js 웹앱입니다. PC 웹은 반응형으로, 모바일에서는 홈 화면에 설치하는 웹앱(PWA)으로 사용합니다.
| 항목 | 방식 |
|---|---|
| 평균단가 / 실현손익 | 이동평균법. 수수료·세금은 매입원가에 포함하고, 매도 시에는 매도대금에서 뺍니다. |
| 미국 주식 원화 환산 | 매입원가는 매수일 환율, 평가금액은 현재 환율로 환산합니다. 그래서 환차손익도 손익에 들어갑니다. |
| 수익률 | 시간가중수익률(TWR). 추가 매수나 매도로 돈이 들어오고 나가는 효과를 뺀 순수 투자 성과입니다. |
| 자산 증가율 | (기말 평가금액 − 기초 평가금액) / 기초 평가금액. 추가 매수 금액까지 포함한 단순 증감률입니다. |
| 과거 자산 | 매매 기록과 일별 종가(DB 캐시)로 날마다 다시 계산하므로, 과거 기록을 입력해도 바로 반영됩니다. |
| API | 코스피/코스닥 | 미국 | 환율 | 키 | 무료 한도 | 비고 |
|---|---|---|---|---|---|---|
| Yahoo Finance (채택) | O (.KS/.KQ) | O | O (KRW=X) | 불필요 | 비공식, 넉넉함 | 가장 대중적이며 한 곳에서 세 시장과 환율을 모두 제공합니다. 약 15~20분 지연. |
| 한국투자증권 KIS Open API | O | O | O | 필요 (계좌 개설) | 무료 | 실시간 시세가 가능하지만 계좌와 토큰 관리가 필요합니다. |
| 공공데이터포털 주식시세정보 | O | X | X | 필요 (무료) | 무료 | 하루 늦게(T+1) 제공되는 공식 종가입니다. |
| Alpha Vantage | 제한적 | O | O | 필요 | 하루 25회 | 한도가 매우 작습니다. |
| Finnhub | X (무료 플랜) | O | 유료 | 필요 | 분당 60회 | 미국 주식 위주입니다. |
| Twelve Data | 제한적 | O | O | 필요 | 하루 800회 | 한국 시장 커버리지가 약합니다. |
키 없이 세 시장과 환율을 모두 다룰 수 있는 Yahoo Finance를 기본으로 씁니다. 다만 비공식 API라 언제든 막힐 수 있습니다.
그래서 시세는 공급자 인터페이스(src/lib/market/types.ts) 뒤에 두었고, 다른 API는 src/lib/market/에 공급자를 추가해 바꿀 수 있습니다.
조회한 시세는 DB에 캐시합니다(현재가 10분, 일봉 6시간). 외부 API가 실패하면 마지막으로 저장된 값을 씁니다.
한글 종목명 검색은 Yahoo가 지원하지 않습니다. 종목코드(005930), 티커(AAPL), 영문명(Samsung)으로 검색하거나 직접 입력하세요.
Next.js 15 (App Router, Server Actions) · TypeScript · Tailwind CSS 4 · Prisma 6 + PostgreSQL · Auth.js 5 · Recharts · Vitest
cp .env.example .env # DATABASE_URL, AUTH_SECRET 입력
npm install
npm run db:migrate # 테이블 생성
npm run db:seed # (선택) 데모 계정 [email protected] / demo1234
npm run dev # http://localhost:3000
시세 API에 접근할 수 없는 환경에서는 MARKET_DATA_PROVIDER=mock으로 가짜 시세를 써서 개발할 수 있습니다.
npm test # 수익률 계산 단위 테스트
npm run lint
npm run build
donjo를 Import합니다. 프레임워크는 Next.js로 자동 인식됩니다.DATABASE_URL이 자동으로 들어갑니다.AUTH_SECRET을 추가합니다. 값은 openssl rand -base64 32로 만듭니다.vercel-build 스크립트가 prisma migrate deploy로 테이블을 자동으로 만듭니다.Neon 대신 Supabase 같은 외부 Postgres를 쓰려면 2번 대신 DATABASE_URL을 직접 넣으면 됩니다.
DB 동시 접속 한도(P2037) 오류 방지: Vercel 같은 서버리스에서는 서버가 여러 개 떠서 DB 접속이 쉽게 늘어납니다. 앱은
ACCELERATE_URL→PRISMA_DATABASE_URL→DATABASE_URL→POSTGRES_URL순으로 살펴서 풀링 주소(Accelerateprisma+postgres://또는 호스트가pooled.로 시작하는 주소, 예:pooled.db.prisma.io)가 있으면 그 주소로 쿼리합니다. 풀링 주소가 없으면 서버 하나당 DB 접속을 1개로 제한합니다. 마이그레이션은 항상DATABASE_URL(직접 연결)을 씁니다. 어떤 방식으로 접속했는지는 서버 로그의[db] ...줄에서 확인할 수 있습니다.
prisma/schema.prisma DB 스키마 (User, Account, Transaction, PriceBar, SymbolCache)
src/lib/portfolio.ts 보유·평균단가·실현손익 계산 (순수 함수)
src/lib/performance.ts 일별 자산 시계열, 일/월/년 수익률 (순수 함수)
src/lib/market/ 시세 공급자 (yahoo, mock) + DB 캐시
src/app/actions.ts 서버 액션 (인증, 계좌, 매매 기록)
src/app/(app)/ 대시보드, 계좌, 매매기록, 수익률 페이지