스포츠토토 배당 데이터 기반 분석 서비스
- 경기 배당 조회: 회차별 승무패 / 핸디캡 / 언더오버 배당 확인
- 배당 분석 모달: 동일 배당 과거 통계, 상대 전적 H2H, 팀별 최근 10경기
- 장바구니: 다중 경기 배당 선택 및 예상 배당률 계산
- 소셜 피드: 다른 유저의 구매 내역 확인 및 팔로우
- 마이페이지: 구매 내역, GP 잔액, 팔로잉 탭
- 유저 프로필: 유저별 전적 및 구매 히스토리
| 영역 | 기술 |
|---|---|
| 프레임워크 | Next.js 16 (App Router) |
| UI | Tailwind CSS v4 + CSS Variables |
| 상태 관리 | Zustand (장바구니 / 유저) + TanStack Query |
| DB | SQLite + Drizzle ORM (better-sqlite3) |
| 배포 | Docker Compose |
- Node.js 20+
- 의존성 설치
git clone https://github.com/yjoonh/oddlab.git
cd oddlab
npm install- DB 초기화
npx tsx scripts/import.ts- 개발 서버 실행
npm run devhttp://localhost:3003 에서 확인
docker compose up -d --buildDB 파일은 ./db 디렉토리에 볼륨 마운트되어 컨테이너 재시작 시에도 데이터가 유지됩니다.
oddlab/
├── app/
│ ├── api/
│ │ ├── bets/ # 경기 배당 조회 API
│ │ ├── analysis/ # 배당 분석 통계 API
│ │ ├── auth/ # 로그인/인증 API
│ │ ├── purchase/ # 구매 처리 API
│ │ ├── purchases/ # 구매 내역 조회 API
│ │ ├── follow/ # 팔로우/언팔로우 API
│ │ ├── feed/ # 피드 API
│ │ ├── gp/ # GP 잔액 조회 API
│ │ └── user/ # 유저 프로필 API
│ ├── feed/ # 피드 페이지
│ ├── mypage/ # 마이페이지
│ ├── user/[username]/ # 유저 프로필 페이지
│ └── page.tsx # 홈 (경기 목록)
├── components/
│ ├── HomeClient.tsx # 홈 클라이언트 (회차 선택, 필터)
│ ├── BetRow.tsx # 경기 배당 행 컴포넌트
│ ├── CartPanel.tsx # 장바구니 (모바일/데스크탑)
│ ├── AnalysisModal.tsx # 배당 분석 모달
│ └── Header.tsx # 헤더 네비게이션
├── db/
│ ├── schema.ts # Drizzle 스키마
│ └── index.ts # DB 연결 및 마이그레이션
├── store/
│ ├── cartStore.ts # 장바구니 Zustand 스토어
│ └── userStore.ts # 유저 Zustand 스토어
├── lib/
│ ├── basePath.ts # API fetch 경로 헬퍼
│ └── constants.ts # 종목/카테고리 상수
├── scripts/
│ └── import.ts # 데이터 임포트 스크립트
├── Dockerfile
└── docker-compose.yml
npm run dev # 개발 서버 실행
npm run build # 프로덕션 빌드MIT