# BC-Game Up/Down - 빌드 & 배포 가이드

---

## 📋 목차

1. [환경 설정](#환경-설정)
2. [빌드 방법](#빌드-방법)
3. [배포 방법](#배포-방법)
4. [서버 실행](#서버-실행)
5. [문제 해결](#문제-해결)

---

## 🔧 환경 설정

### 필수 요구사항
- **Node.js**: v18 이상
- **npm**: v9 이상
- **PHP**: 8.3.28
- **MySQL**: 8.0 이상
- **Nginx**: 최신 버전
- **OS**: Windows (Laragon 환경)

### 프로젝트 구조
```
bc-game-updown/
├── frontend/               # 프론트엔드 (React + Vite)
│   ├── apps/up-down/      # Up/Down 앱
│   ├── dist/              # 빌드 결과물
│   └── package.json
├── backend/               # 백엔드 (PHP)
│   ├── api/              # REST API
│   └── websocket/        # WebSocket 서버
├── public/               # 배포 디렉토리 (Nginx 루트)
├── sql/                  # 데이터베이스 스키마
└── 0117.md, 0118.md     # 작업 로그
```

---

## 🏗️ 빌드 방법

### 1. 프론트엔드 빌드

#### 기본 빌드
```bash
# 1. frontend 디렉토리로 이동
cd C:\laragon\www\bc-game-updown\frontend

# 2. 의존성 설치 (최초 1회만)
npm install

# 3. 빌드 실행
npm run build
```

#### 빌드 결과 확인
```bash
# 빌드 결과물 위치
C:\laragon\www\bc-game-updown\frontend\dist\apps\up-down\

# 주요 파일
├── index.html                    # 메인 HTML
├── assets/
│   ├── index-*.js               # 메인 JavaScript
│   ├── index-*.css              # 메인 CSS
│   └── chart_core_bg-*.wasm     # 차트 WASM
```

#### 빌드 시간
- 일반적으로 **20~30초** 소요
- 첫 빌드는 더 오래 걸릴 수 있음

---

## 🚀 배포 방법

### 1. 빌드 결과물 복사

#### Bash 명령어 (Git Bash, WSL)
```bash
cd C:\laragon\www\bc-game-updown
cp -r frontend/dist/apps/up-down/* public/
```

#### Windows CMD
```cmd
cd C:\laragon\www\bc-game-updown
xcopy /E /I /Y "frontend\dist\apps\up-down\*" "public\"
```

#### PowerShell
```powershell
cd C:\laragon\www\bc-game-updown
Copy-Item -Path "frontend\dist\apps\up-down\*" -Destination "public\" -Recurse -Force
```

### 2. 한 번에 빌드 + 배포

#### Bash (추천)
```bash
cd C:\laragon\www\bc-game-updown\frontend && \
npm run build && \
cd .. && \
cp -r frontend/dist/apps/up-down/* public/
```

#### Windows CMD
```cmd
cd C:\laragon\www\bc-game-updown\frontend && npm run build && cd .. && xcopy /E /I /Y "frontend\dist\apps\up-down\*" "public\"
```

### 3. 배포 확인
```bash
# public 폴더 내용 확인
ls -la C:\laragon\www\bc-game-updown\public\

# 주요 파일 존재 여부 확인
# - index.html
# - assets/index-*.js
# - assets/index-*.css
```

---

## 🖥️ 서버 실행

### 1. WebSocket 서버

#### 실행 방법 A: 배치 파일 사용 (추천)
```bash
cd C:\laragon\www\bc-game-updown
start-websocket.bat
```

**배치 파일 내용:**
```batch
@echo off
cd C:\laragon\www\bc-game-updown\backend\websocket
C:\laragon\bin\php\php-8.3.28-Win32-vs16-x64\php.exe server.php
pause
```

#### 실행 방법 B: 직접 실행
```bash
cd C:\laragon\www\bc-game-updown\backend\websocket
C:\laragon\bin\php\php-8.3.28-Win32-vs16-x64\php.exe server.php
```

#### 정상 실행 시 출력
```
==================================================
BC-Game Up/Down WebSocket Server
==================================================
Starting server on 0.0.0.0:8080
Game tick interval: 1s
==================================================

[WebSocket] Server initialized
[Server] WebSocket server started successfully
[Server] Listening on ws://0.0.0.0:8080
[Server] Press Ctrl+C to stop
```

#### WebSocket 서버 상태 확인
```bash
# Windows
netstat -an | findstr :8080

# 출력 예시
TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING
```

#### WebSocket 서버 중지
```bash
# Ctrl+C 또는 창 닫기

# 강제 종료 (프로세스 죽이기)
taskkill /F /IM php.exe
```

### 2. Nginx 웹서버

#### Nginx 시작
```bash
# Laragon에서 자동 시작됨
# 또는 수동으로:
C:\laragon\bin\nginx\nginx.exe
```

#### Nginx 재시작
```bash
# Laragon 컨트롤 패널에서 "Restart All"
# 또는 수동으로:
C:\laragon\bin\nginx\nginx.exe -s reload
```

#### Nginx 설정 파일
- **메인 도메인**: `C:\laragon\etc\nginx\sites-enabled\gr.ezywallets.com.conf`
- **WebSocket 서브도메인**: `C:\laragon\etc\nginx\sites-enabled\ws.gr.ezywallets.com.conf`

#### Nginx 상태 확인
```bash
# 프로세스 확인
tasklist | findstr nginx

# 포트 확인 (443, 2053, 8443)
netstat -an | findstr :443
netstat -an | findstr :2053
netstat -an | findstr :8443
```

### 3. MySQL 데이터베이스

#### MySQL 시작
```bash
# Laragon에서 자동 시작됨
```

#### 데이터베이스 접속
```bash
# phpMyAdmin
http://localhost/phpmyadmin

# 또는 명령줄
mysql -u root -p
```

#### 데이터베이스 초기화 (필요시)
```bash
mysql -u root -p bc_game_updown < sql/schema.sql
mysql -u root -p bc_game_updown < sql/update_schema_login.sql
```

---

## 🌐 서비스 접속

### 프론트엔드
- **로컬**: http://localhost
- **도메인**: https://gr.ezywallets.com

### API 엔드포인트
- **인증**: https://gr.ezywallets.com/api/auth.php
- **배팅**: https://gr.ezywallets.com/api/betting.php
- **게임**: https://gr.ezywallets.com/api/game.php

### WebSocket
- **로컬**: ws://localhost:8080
- **프로덕션**: wss://gr.ezywallets.com/ws

---

## 🔥 전체 시스템 시작 (처음부터)

### 1단계: 환경 준비
```bash
# Laragon 실행
# - MySQL 시작
# - Nginx 시작
```

### 2단계: WebSocket 서버 시작
```bash
cd C:\laragon\www\bc-game-updown
start-websocket.bat
```

### 3단계: 프론트엔드 빌드 (코드 변경 시)
```bash
cd C:\laragon\www\bc-game-updown\frontend
npm run build
```

### 4단계: 배포 (빌드 후)
```bash
cd C:\laragon\www\bc-game-updown
cp -r frontend/dist/apps/up-down/* public/
```

### 5단계: 브라우저 접속
```
https://gr.ezywallets.com
```

---

## 🛠️ 문제 해결

### 빌드 실패

#### 문제: `npm run build` 실패
```bash
# 1. node_modules 삭제 후 재설치
cd C:\laragon\www\bc-game-updown\frontend
rm -rf node_modules
rm package-lock.json
npm install

# 2. 캐시 클리어 후 빌드
npm cache clean --force
npm run build
```

#### 문제: 메모리 부족
```bash
# Node.js 메모리 증가
export NODE_OPTIONS="--max-old-space-size=4096"
npm run build
```

### WebSocket 연결 실패

#### 문제: WebSocket 서버가 시작되지 않음
```bash
# 1. 포트 8080이 이미 사용 중인지 확인
netstat -an | findstr :8080

# 2. 다른 PHP 프로세스 종료
taskkill /F /IM php.exe

# 3. 다시 시작
cd C:\laragon\www\bc-game-updown\backend\websocket
C:\laragon\bin\php\php-8.3.28-Win32-vs16-x64\php.exe server.php
```

#### 문제: WebSocket 연결 끊김
```bash
# 1. 서버 로그 확인
# server.php 실행 창의 에러 메시지 확인

# 2. Nginx 에러 로그 확인
tail -f C:\laragon\etc\nginx\logs\error.log

# 3. Cloudflare 설정 확인
# - WebSocket이 ON인지 확인
# - SSL/TLS가 Full로 설정되어 있는지 확인
```

### Nginx 오류

#### 문제: 502 Bad Gateway
```bash
# 1. PHP-FPM 재시작
# Laragon 컨트롤 패널 → "Restart All"

# 2. Nginx 설정 테스트
C:\laragon\bin\nginx\nginx.exe -t

# 3. Nginx 재시작
C:\laragon\bin\nginx\nginx.exe -s reload
```

#### 문제: 403 Forbidden
```bash
# 1. 파일 권한 확인
# public 폴더에 index.html이 있는지 확인

# 2. Nginx 설정 확인
# root 경로가 올바른지 확인
# C:\laragon\etc\nginx\sites-enabled\gr.ezywallets.com.conf
```

### 배포 안 됨

#### 문제: 빌드 파일이 public에 복사 안 됨
```bash
# 1. 경로 확인
ls -la C:\laragon\www\bc-game-updown\frontend\dist\apps\up-down\

# 2. 수동 복사
cd C:\laragon\www\bc-game-updown
cp -r frontend/dist/apps/up-down/* public/

# 3. 복사 확인
ls -la public/
```

#### 문제: 브라우저에 이전 버전 표시
```bash
# 1. 브라우저 캐시 클리어
# Ctrl+Shift+R (강력 새로고침)

# 2. 브라우저 개발자 도구 → Network → "Disable cache" 체크

# 3. Nginx 캐시 클리어 (설정된 경우)
```

### 데이터베이스 오류

#### 문제: 로그인 안 됨
```bash
# 1. 데이터베이스 접속 확인
mysql -u root -p bc_game_updown

# 2. users 테이블 확인
SELECT * FROM users;

# 3. 스키마 업데이트
mysql -u root -p bc_game_updown < sql/update_schema_login.sql
```

---

## 📝 개발 워크플로우

### 일반적인 작업 흐름

1. **코드 수정**
   - `frontend/apps/up-down/src/` 내 파일 수정

2. **로컬 개발 서버 (개발 중)**
   ```bash
   cd frontend
   npm run dev
   # http://localhost:4200
   ```

3. **빌드 (배포 전)**
   ```bash
   cd frontend
   npm run build
   ```

4. **배포**
   ```bash
   cd ..
   cp -r frontend/dist/apps/up-down/* public/
   ```

5. **확인**
   - https://gr.ezywallets.com 접속
   - Ctrl+Shift+R (강력 새로고침)

---

## 🔍 유용한 명령어

### 빌드 관련
```bash
# 빌드만
npm run build

# 개발 서버 (HMR 지원)
npm run dev

# 타입 체크
npm run type-check

# 린트
npm run lint
```

### 서버 관리
```bash
# 모든 PHP 프로세스 종료
taskkill /F /IM php.exe

# 모든 Nginx 프로세스 종료
taskkill /F /IM nginx.exe

# 포트 사용 확인
netstat -an | findstr :8080
netstat -an | findstr :443
```

### 로그 확인
```bash
# Nginx 에러 로그
tail -f C:\laragon\etc\nginx\logs\error.log

# Nginx 액세스 로그
tail -f C:\laragon\etc\nginx\logs\access.log

# PHP 에러 로그
tail -f C:\laragon\etc\php\logs\php_error.log
```

---

## 📦 배포 체크리스트

배포하기 전에 다음 사항들을 확인하세요:

- [ ] 코드 변경사항 커밋
- [ ] `npm run build` 성공
- [ ] 빌드 파일 `public/`로 복사
- [ ] WebSocket 서버 실행 중
- [ ] Nginx 서버 실행 중
- [ ] 브라우저에서 접속 확인
- [ ] 강력 새로고침 (Ctrl+Shift+R)
- [ ] 로그인 기능 테스트
- [ ] 배팅 기능 테스트
- [ ] WebSocket 연결 확인

---

## 🎯 빠른 참조

### 빌드 + 배포 (한 줄)
```bash
cd C:\laragon\www\bc-game-updown\frontend && npm run build && cd .. && cp -r frontend/dist/apps/up-down/* public/
```

### WebSocket 서버 시작
```bash
cd C:\laragon\www\bc-game-updown && start-websocket.bat
```

### 전체 재시작
```bash
# 1. 모든 프로세스 종료
taskkill /F /IM php.exe
taskkill /F /IM nginx.exe

# 2. Laragon에서 "Start All"

# 3. WebSocket 서버 시작
cd C:\laragon\www\bc-game-updown && start-websocket.bat

# 4. 필요시 재빌드
cd frontend && npm run build && cd .. && cp -r frontend/dist/apps/up-down/* public/
```

---

## 📚 관련 문서

- `0117.md` - WebSocket 연결 문제 해결
- `0118.md` - 모바일 반응형 및 UI 최적화
- `README.md` - 프로젝트 개요

---

**작성일**: 2026-01-18
**작성자**: Development Team
**버전**: 1.0
