Skip to content

jhboyo/hft

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

HFT Stock Web Application

모바일 최적화 주식 시세 조회 웹 애플리케이션

개요

한국투자증권 KIS API 기반 실시간 주식 시세 조회 웹 서비스입니다. 모바일 브라우저 환경에 최적화된 웹 애플리케이션으로, PC에서도 사용 가능합니다.

📱 주요 특징

  • 모바일 우선 설계: 모바일 브라우저에서 최적의 사용자 경험 제공
  • 웹 기반: 별도 앱 설치 없이 모바일 브라우저에서 즉시 실행
  • 터치 최적화: 스와이프, 탭, 드래그 등 모바일 제스처 지원
  • 반응형 디자인: 모바일, 태블릿, PC 모든 화면 크기 대응
  • PWA 지원: 모바일 홈 화면에 추가하여 앱처럼 사용 가능
  • 실시간 시세: WebSocket 기반 실시간 데이터 업데이트
  • 경량 설계: 모바일 데이터 절약 및 빠른 로딩 속도

📊 제공 데이터

  • 유가증권(KOSPI), KOSDAQ 실시간 시세 조회
  • 주요 지표 모니터링 (금, 비트코인, 나스닥, 야간선물)
  • 실시간 호가체결 내역
  • 차트 및 기술적 지표

🔗 연관 프로젝트

  • Backend (별도 프로젝트): Spring Boot 기반 WebSocket 서버
    • KIS API 연동
    • 실시간 데이터 수집 및 배포
    • REST API 제공

주요 기능

📊 실시간 시세

  • KOSPI/KOSDAQ 전 종목 실시간 시세 조회
  • 현재가, 등락률, 거래량 실시간 업데이트
  • 10호가 실시간 호가창 제공
  • 실시간 체결 내역 조회

🔍 종목 검색 및 관리

  • 통합 검색: 종목명, 종목코드 기반 빠른 검색
  • 관심 종목: 즐겨찾기 등록 및 관리
  • 가격 알림: 목표가 도달 시 알림 (PWA 푸시)

📈 차트 및 분석

  • 멀티 타임프레임: 분봉, 일봉, 주봉, 월봉
  • 기술적 지표: 이동평균선, 볼린저밴드, RSI, MACD
  • 터치 인터랙션: 확대/축소, 스크롤, 핀치 제스처

📰 정보 제공

  • 주요 지표 대시보드: 금, 비트코인, 나스닥, 야간선물
  • 뉴스/공시: 종목별 실시간 뉴스 및 공시 정보
  • VI 알림: 변동성완화장치(VI) 발동 실시간 알림
  • 시장 시간: 개장/폐장, 동시호가 시간 표시

기술 스택

📱 Frontend (Mobile-First Web Application)

  • 프레임워크: React / Next.js (선택 예정)
  • 언어: TypeScript
  • 상태 관리: Redux Toolkit / Zustand
  • UI 라이브러리:
    • Tailwind CSS (모바일 우선 반응형 스타일링)
    • shadcn/ui (터치 최적화 컴포넌트)
    • Framer Motion (부드러운 모바일 애니메이션)
  • 차트: Lightweight Charts (모바일 터치 제스처 지원)
  • WebSocket: Socket.IO Client / Native WebSocket API
  • PWA: Workbox, Service Worker (오프라인 지원, 홈 화면 추가)
  • 모바일 최적화:
    • React Virtual (가상 스크롤 - 성능 최적화)
    • React Spring (터치 인터랙션)
    • Web Vitals (성능 모니터링)
  • 빌드 도구: Vite (빠른 HMR, 최적화된 번들링)
  • 배포: Vercel / Netlify / AWS S3 + CloudFront

🔗 Backend (별도 Spring Boot 프로젝트)

  • 프레임워크: Spring Boot 3.x
  • 언어: Java 17+
  • WebSocket: Spring WebSocket (STOMP)
  • API: 한국투자증권 KIS REST API & WebSocket
  • 데이터베이스: PostgreSQL / MySQL
  • 캐시: Redis
  • 메시징: Kafka / RabbitMQ (예정)

프로젝트 구조

hft-web/
├── public/                   # 정적 파일
│   ├── icons/               # PWA 아이콘
│   ├── manifest.json        # PWA 매니페스트
│   └── sw.js                # Service Worker
│
├── src/
│   ├── app/                 # Next.js App Router (선택 시)
│   │   ├── layout.tsx
│   │   ├── page.tsx
│   │   └── ...
│   │
│   ├── pages/               # React Router (선택 시)
│   │   ├── Home/            # 홈 화면 (주요 지표, 모바일 대시보드)
│   │   ├── Market/          # 시장 현황 (KOSPI/KOSDAQ, 터치 최적화)
│   │   ├── Stock/           # 종목 상세 (시세/호가/체결, 차트)
│   │   ├── Watchlist/       # 관심 종목 (스와이프 액션)
│   │   └── News/            # 뉴스/공시 (카드 레이아웃)
│   │
│   ├── components/          # 재사용 컴포넌트
│   │   ├── common/          # 공통 컴포넌트 (터치 최적화 Button, Input 등)
│   │   ├── chart/           # 차트 컴포넌트 (터치 제스처 지원)
│   │   ├── stock/           # 주식 관련 컴포넌트 (호가창, 체결 리스트)
│   │   ├── mobile/          # 모바일 전용 컴포넌트 (BottomSheet, PullToRefresh)
│   │   └── layout/          # 레이아웃 컴포넌트 (하단 네비게이션 등)
│   │
│   ├── services/            # API 서비스
│   │   ├── api.ts           # Axios 인스턴스
│   │   ├── websocket.ts     # WebSocket 클라이언트
│   │   ├── stockService.ts  # 종목 API
│   │   └── marketService.ts # 시장 데이터 API
│   │
│   ├── store/               # 상태 관리
│   │   ├── slices/          # Redux slices (또는 Zustand stores)
│   │   │   ├── stockSlice.ts
│   │   │   ├── marketSlice.ts
│   │   │   └── userSlice.ts
│   │   └── index.ts
│   │
│   ├── hooks/               # Custom Hooks
│   │   ├── useWebSocket.ts
│   │   ├── useStock.ts
│   │   └── useMarket.ts
│   │
│   ├── types/               # TypeScript 타입 정의
│   │   ├── stock.ts
│   │   ├── market.ts
│   │   └── api.ts
│   │
│   ├── utils/               # 유틸리티 함수
│   │   ├── format.ts        # 숫자 포맷팅
│   │   ├── date.ts          # 날짜 처리
│   │   └── storage.ts       # 로컬 스토리지
│   │
│   └── styles/              # 스타일
│       ├── globals.css
│       └── tailwind.css
│
├── docs/                     # 문서
│   ├── krx.md               # KRX 시장 구조
│   ├── vi.md                # 변동성완화장치(VI)
│   └── api.md               # API 명세서 (예정)
│
├── .env.example             # 환경변수 예시
├── package.json
├── tsconfig.json
├── tailwind.config.js
└── vite.config.ts (또는 next.config.js)

설치 및 실행

1. 프로젝트 클론

git clone <repository-url>
cd hft-web

2. 의존성 설치

# npm 사용
npm install

# 또는 yarn 사용
yarn install

# 또는 pnpm 사용
pnpm install

3. 환경변수 설정

# .env 파일 생성
cp .env.example .env

# .env 파일 편집
# VITE_API_URL=http://localhost:8080  (백엔드 서버 URL)
# VITE_WS_URL=ws://localhost:8080/ws  (WebSocket 서버 URL)

4. 개발 서버 실행

# Vite 사용 시
npm run dev

# Next.js 사용 시
npm run dev

# 브라우저에서 http://localhost:3000 접속

5. 프로덕션 빌드

# 빌드
npm run build

# 빌드 파일 미리보기
npm run preview

백엔드 서버 연동

이 프로젝트는 별도의 Spring Boot 백엔드 서버가 필요합니다.

백엔드 서버 요구사항

  • Spring Boot 3.x
  • WebSocket (STOMP) 지원
  • 다음 API 엔드포인트 제공:
    • /api/market/kospi - KOSPI 지수 조회
    • /api/market/kosdaq - KOSDAQ 지수 조회
    • /api/stock/{code} - 종목 시세 조회
    • /api/stock/{code}/orderbook - 호가 조회
    • /ws/stock - 실시간 시세 WebSocket

로컬 개발 환경 설정

  1. 백엔드 서버를 http://localhost:8080에서 실행
  2. .env 파일의 VITE_API_URL 설정 확인
  3. 프론트엔드 개발 서버 실행

개발 로드맵

Phase 1: 프로젝트 초기 설정 🚀

  • 프레임워크 선택 (React + Vite / Next.js)
  • 프로젝트 초기 설정
    • TypeScript 설정
    • Tailwind CSS 설정 (모바일 우선 브레이크포인트)
    • ESLint/Prettier 설정
    • 상태 관리 라이브러리 설정 (Redux Toolkit / Zustand)
  • 모바일 우선 디자인 시스템
    • 컬러 팔레트 정의 (다크 모드 지원)
    • 타이포그래피 (모바일 가독성)
    • 터치 친화적 공통 컴포넌트 (Button, Input, Card)
    • 모바일 레이아웃 컴포넌트 (하단 네비게이션, 헤더)
    • 터치 영역 최소 크기 설정 (44x44px)
  • 라우팅 설정
    • 페이지 전환 애니메이션
    • 스와이프 백 제스처
  • API 클라이언트 구축
    • Axios 인스턴스 (Timeout, Retry 설정)
    • 로딩 상태 관리
    • 에러 핸들링
  • WebSocket 클라이언트 구축
    • 자동 재연결
    • 연결 상태 모니터링

Phase 2: 핵심 화면 구현 (모바일 우선) 📱

  • 홈 화면
    • 주요 지표 대시보드 (금, 비트코인, 나스닥, 야간선물)
    • KOSPI/KOSDAQ 지수 표시
    • 시장 시간 표시
    • 거래량/등락률 상위 종목 (스와이프 가능한 카드 형식)
    • Pull-to-Refresh (당겨서 새로고침)
  • 시장 현황 화면
    • KOSPI/KOSDAQ 탭 (터치 최적화)
    • 종목 리스트 (무한 스크롤 + 가상 스크롤)
    • 정렬 기능 (하단 시트 UI)
    • 빠른 스크롤 인디케이터
  • 종목 상세 화면
    • 종목 정보 (현재가, 등락률, 거래량 등)
    • 10호가 실시간 표시 (모바일 레이아웃)
    • 체결 내역 (실시간 애니메이션)
    • 기본 차트 (핀치 줌, 스와이프 지원)

Phase 3: 실시간 데이터 연동 ⚡

  • WebSocket 연결 관리
  • 실시간 시세 구독/해제
  • 실시간 호가 업데이트
  • 데이터 캐싱 전략

Phase 4: 고급 기능 📊

  • 관심 종목 관리
    • 스와이프로 추가/삭제
    • 드래그 앤 드롭으로 순서 변경
    • 가격 알림 설정 (모바일 친화적 UI)
  • 고급 차트
    • Lightweight Charts (터치 제스처 최적화)
    • 멀티 터치 줌/팬
    • 차트 타입 전환 (하단 시트)
  • 기술적 지표
    • MA, BB, RSI, MACD
    • 지표 on/off 토글 (모바일 UI)
  • 검색 기능
    • 자동완성 (모바일 키보드 최적화)
    • 최근 검색 (스와이프로 삭제)
  • 뉴스/공시
    • 카드 형식 레이아웃
    • 무한 스크롤

Phase 5: 모바일 최적화 및 PWA 🔧

  • PWA 설정
    • Service Worker 구현
    • 오프라인 지원 (캐시 전략)
    • 홈 화면 추가 배너 (iOS/Android)
    • 앱 아이콘 및 Manifest 설정
    • 스플래시 스크린
  • 모바일 성능 최적화
    • Code Splitting (라우트별)
    • Lazy Loading (이미지, 컴포넌트)
    • 이미지 WebP 포맷 사용
    • 번들 사이즈 최적화 (Tree Shaking)
    • 가상 스크롤 (긴 리스트 성능)
    • 디바운싱/쓰로틀링 (검색, 스크롤)
  • 모바일 UX 개선
    • 햅틱 피드백 (진동)
    • 스켈레톤 로딩
    • 부드러운 애니메이션 (60fps)
    • 터치 영역 최적화 (최소 44x44px)
    • Safe Area 처리 (노치, 홈 인디케이터)
  • 푸시 알림 (FCM)
    • VI 발동 알림
    • 가격 알림
    • 뉴스 알림
    • 알림 권한 요청 UI
  • 반응형 UI
    • 모바일 레이아웃 (320px ~ 480px)
    • 태블릿 레이아웃 (481px ~ 1024px)
    • 데스크톱 레이아웃 (1025px ~)
    • 가로/세로 모드 대응

Phase 6: 배포 및 운영 🚀

  • 프로덕션 빌드
    • 환경별 빌드 설정 (dev, staging, prod)
    • 최적화 및 압축
  • 배포 환경 설정
    • Vercel / Netlify / AWS S3 + CloudFront
    • 도메인 연결
    • HTTPS 설정
  • CI/CD 파이프라인
    • GitHub Actions
    • 자동 테스트
    • 자동 배포
  • 모니터링 및 분석
    • Sentry (에러 트래킹)
    • Google Analytics (사용자 분석)
    • 성능 모니터링

주의사항

🎯 프로젝트 특성

  • 모바일 우선: 이 프로젝트는 모바일 브라우저에 최적화된 웹 애플리케이션입니다
  • 웹 기반: 네이티브 앱이 아닌, 브라우저에서 실행되는 웹 서비스입니다
  • PWA: 모바일 홈 화면에 추가하여 앱처럼 사용할 수 있습니다

🔧 기술적 요구사항

  • 백엔드 서버 필요: 별도의 Spring Boot 백엔드 서버가 필요합니다
  • 실시간 데이터: WebSocket 연결을 통해 실시간 시세를 받아옵니다
  • API 호출 제한: 백엔드 서버에서 KIS API 호출 제한 관리 필요
  • 민감정보 보호: .env 파일을 절대 커밋하지 마세요

📱 모바일 최적화 권장사항

  • 브라우저: iOS Safari, Android Chrome 최신 버전 권장
  • 네트워크: 4G/5G 또는 Wi-Fi 환경 권장 (3G는 느릴 수 있음)
  • 화면 크기: 최소 320px 이상의 화면 크기
  • 터치: 터치 제스처 지원 기기에서 최적의 경험 제공
  • 데이터 절약: 이미지 압축 및 데이터 캐싱으로 데이터 사용량 최소화

🌐 반응형 지원

  • 모바일: 스마트폰 (320px ~ 480px) - 주 타겟
  • 태블릿: 태블릿 (481px ~ 1024px) - 부가 지원
  • 데스크톱: PC (1025px ~) - 부가 지원

법적 고지

이 프로젝트는 교육 및 연구 목적으로 제작되었습니다. 실제 투자에 사용 시 발생하는 손실에 대해 개발자는 책임지지 않습니다. 투자는 본인의 판단과 책임하에 진행하세요.

라이센스

MIT License

About

high frequency trading service

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages