# PM2 사용법 - UPBIT & BTC 서버

## 📦 설정 완료

**파일:** `ecosystem.config.js`

**관리 대상:**
1. **upbit-server** (포트 3001, 8081)
   - Socket.io 게임 서버
   - 실시간 가격 WebSocket

2. **btc-server** (포트 9090)
   - BTC 차트 서버

---

## 🚀 PM2 명령어

### **1. 서버 시작**

```bash
# 전체 시작
pm2 start ecosystem.config.js

# 개별 시작
pm2 start ecosystem.config.js --only upbit-server
pm2 start ecosystem.config.js --only btc-server
```

### **2. 서버 중지**

```bash
# 전체 중지
pm2 stop all

# 개별 중지
pm2 stop upbit-server
pm2 stop btc-server
```

### **3. 서버 재시작**

```bash
# 전체 재시작
pm2 restart all

# 개별 재시작
pm2 restart upbit-server
pm2 restart btc-server

# 다운타임 없이 재시작 (0-downtime reload)
pm2 reload all
```

### **4. 서버 삭제**

```bash
# 전체 삭제
pm2 delete all

# 개별 삭제
pm2 delete upbit-server
pm2 delete btc-server
```

### **5. 상태 확인**

```bash
# 목록 보기
pm2 list
pm2 ls

# 상세 정보
pm2 show upbit-server
pm2 show btc-server

# 실시간 모니터링
pm2 monit
```

### **6. 로그 확인**

```bash
# 실시간 로그 (전체)
pm2 logs

# 개별 로그
pm2 logs upbit-server
pm2 logs btc-server

# 에러만
pm2 logs --err

# 최근 100줄
pm2 logs --lines 100

# 로그 초기화
pm2 flush
```

### **7. 자동 시작 (부팅 시)**

```bash
# Windows 시작 프로그램 등록
pm2 startup

# 현재 프로세스 저장
pm2 save

# 자동 시작 제거
pm2 unstartup
```

---

## 📊 모니터링

### **대시보드**

```bash
pm2 monit
```

**표시 정보:**
- CPU 사용률
- 메모리 사용률
- 재시작 횟수
- 실시간 로그

### **웹 대시보드 (선택)**

```bash
# pm2-web 설치
npm install -g pm2-web

# 실행 (포트 9615)
pm2-web
```

---

## 🔧 설정 세부사항

### **ecosystem.config.js**

```javascript
{
  name: 'upbit-server',
  script: './socket/server.js',
  instances: 1,              // 단일 인스턴스
  exec_mode: 'fork',         // fork 모드
  autorestart: true,         // 자동 재시작
  max_memory_restart: '500M', // 500MB 초과 시 재시작
  min_uptime: '10s',         // 최소 가동 시간
  max_restarts: 10,          // 최대 재시작 횟수
  restart_delay: 4000        // 재시작 딜레이 4초
}
```

### **로그 파일 위치**

```
C:\laragon\www\site_user\logs\
├── upbit-error.log   (UPBIT 에러)
├── upbit-out.log     (UPBIT 일반)
├── btc-error.log     (BTC 에러)
└── btc-out.log       (BTC 일반)
```

---

## 🛠️ 문제 해결

### **1. 포트 충돌**

```bash
# 현재 포트 사용 확인
netstat -ano | findstr :3001
netstat -ano | findstr :9090

# PID로 프로세스 종료
taskkill /PID [PID번호] /F
```

### **2. 서버 재시작 루프**

```bash
# 로그 확인
pm2 logs upbit-server --err

# 재시작 횟수 초기화
pm2 reset upbit-server
```

### **3. 메모리 누수**

```bash
# 메모리 사용량 확인
pm2 list

# 강제 재시작
pm2 restart upbit-server
```

---

## 📝 기본 워크플로우

### **개발 중**

```bash
# 서버 시작
pm2 start ecosystem.config.js

# 로그 모니터링
pm2 logs

# 코드 수정 후 재시작
pm2 restart all
```

### **프로덕션 배포**

```bash
# 기존 서버 중지
pm2 stop all

# 코드 업데이트 (git pull 등)

# 무중단 재시작
pm2 reload all

# 상태 확인
pm2 list
pm2 logs --lines 50
```

### **서버 점검**

```bash
# 상태 확인
pm2 list

# 각 서버 상세 정보
pm2 show upbit-server
pm2 show btc-server

# 최근 로그
pm2 logs --lines 100
```

---

## ⚡ 유용한 별칭 (선택)

PowerShell 프로필에 추가:

```powershell
# C:\Users\Administrator\Documents\PowerShell\Microsoft.PowerShell_profile.ps1

function pm2-start { pm2 start ecosystem.config.js }
function pm2-restart { pm2 restart all }
function pm2-status { pm2 list }
function pm2-log { pm2 logs --lines 100 }
```

사용:
```bash
pm2-start
pm2-restart
pm2-status
pm2-log
```

---

## 🔐 보안 팁

1. **로그 로테이션**
   ```bash
   pm2 install pm2-logrotate
   pm2 set pm2-logrotate:max_size 10M
   pm2 set pm2-logrotate:retain 7
   ```

2. **메모리 제한 설정**
   - `max_memory_restart: '500M'` (이미 설정됨)

3. **자동 재시작 제한**
   - `max_restarts: 10` (이미 설정됨)

---

## 📌 빠른 참조

| 명령어 | 설명 |
|--------|------|
| `pm2 start ecosystem.config.js` | 전체 시작 |
| `pm2 stop all` | 전체 중지 |
| `pm2 restart all` | 전체 재시작 |
| `pm2 list` | 목록 보기 |
| `pm2 logs` | 로그 보기 |
| `pm2 monit` | 모니터링 |
| `pm2 save` | 현재 상태 저장 |
| `pm2 resurrect` | 저장된 상태 복원 |

---

**생성일:** 2026-03-15
**위치:** C:\laragon\www\site_user\ecosystem.config.js
