docs : 수용 인원 추정 및 하드웨어/네트워크 요구사항 추가
- 현재 및 개선 단계별 CCU 추정 (현재 30~50명 → Phase 전체 적용 시 5,000명) - M4 Mac Mini 기준 하드웨어 적합성 분석 - CCU별 네트워크 대역폭 계산 (AOI 적용 후 기준) - 환경별 (가정용/IDC/클라우드) 현실적 CCU 결론 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -328,3 +328,97 @@ GameLoop
|
|||||||
[장기] Phase 5: 서버 분산
|
[장기] Phase 5: 서버 분산
|
||||||
→ CCU 1,000+ 대응
|
→ CCU 1,000+ 대응
|
||||||
```
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. 현재 수용 가능 인원 추정
|
||||||
|
|
||||||
|
### 처리 성능 (단일 스레드 기준)
|
||||||
|
|
||||||
|
```
|
||||||
|
PollEvents() 틱 간격: ~15ms (Task.Delay(1) Windows 해상도)
|
||||||
|
초당 틱 수: ~66회
|
||||||
|
틱당 처리 가능 시간: 15ms
|
||||||
|
```
|
||||||
|
|
||||||
|
| 시나리오 | 패킷 1개 처리 시간 | 유저당 초당 패킷 | 예상 CCU |
|
||||||
|
|----------|-------------------|-----------------|----------|
|
||||||
|
| 에코 테스트 (현재) | ~0.01ms | 10 | **~1,000명** |
|
||||||
|
| 간단한 게임 로직 | ~0.1ms | 10 | **~500명** |
|
||||||
|
| 실제 MMORPG 로직 | ~1ms | 10 | **~50명** |
|
||||||
|
| DB 호출 포함 | ~5ms | 10 | **~10명** |
|
||||||
|
|
||||||
|
> HandlePacket 안에 뭘 넣느냐가 전부다.
|
||||||
|
> 지금 빈 껍데기라서 수백 명이 되는 거지, 로직이 들어가는 순간 급락한다.
|
||||||
|
|
||||||
|
### 개선 시 수용 인원 (단일 서버)
|
||||||
|
|
||||||
|
| 개선 단계 | 핵심 변경 | 예상 CCU |
|
||||||
|
|-----------|-----------|----------|
|
||||||
|
| **현재** | 단일 스레드, 동기 처리 | 30~50명 |
|
||||||
|
| **Phase 1** | 게임 루프 + 입력 큐 분리 | **200~500명** |
|
||||||
|
| **Phase 1 + 2** | + AOI 적용 | **1,000~2,000명** |
|
||||||
|
| **Phase 1~4** | + 캐시 + DB 분리 | **3,000~5,000명** |
|
||||||
|
| **Phase 5** | 멀티 서버 분산 | **서버당 5,000 × N대** |
|
||||||
|
|
||||||
|
### 개선별 효과 설명
|
||||||
|
|
||||||
|
**Phase 1 (게임 루프)** - 4~10배 향상
|
||||||
|
```
|
||||||
|
현재: 패킷 100개 → 하나씩 순차 처리 (100번 컨텍스트 스위칭)
|
||||||
|
개선: 패킷 100개 → 큐에 모아서 → 틱 1번에 일괄 처리 (배치)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Phase 2 (AOI)** - 가장 극적인 효과
|
||||||
|
```
|
||||||
|
현재: 유저 1,000명 이동 → 브로드캐스트 1,000 × 1,000 = 1,000,000 패킷/틱
|
||||||
|
개선: 유저 1,000명 이동 → AOI 반경 내 ~20명에게만 = 20,000 패킷/틱 (98% 감소)
|
||||||
|
```
|
||||||
|
|
||||||
|
> AOI가 가장 임팩트가 크다. 네트워크 부하가 O(N²) → O(N)으로 바뀐다.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. 하드웨어 & 네트워크 요구사항
|
||||||
|
|
||||||
|
### M4 Mac Mini 깡통 (16GB RAM) 기준
|
||||||
|
|
||||||
|
| 리소스 | M4 Mac Mini | 서버 필요량 (CCU 3,000) | 여유 |
|
||||||
|
|--------|-------------|------------------------|------|
|
||||||
|
| CPU | 10코어 (4P+6E) | 게임 루프 1~2코어 + 네트워크 1코어 | **충분** |
|
||||||
|
| RAM | 16GB | 유저당 ~10KB × 3,000 = 30MB + 앱 ~500MB | **매우 충분** |
|
||||||
|
| 디스크 | 256GB SSD | MySQL + 로그 | **충분** |
|
||||||
|
|
||||||
|
> M4 싱글코어 성능이 서버용 Xeon보다 빠르다.
|
||||||
|
> 게임 루프는 본질적으로 싱글스레드 위주라서 M4로 CCU 3,000~5,000 처리 가능.
|
||||||
|
|
||||||
|
### 네트워크 대역폭 계산 (AOI 적용 후)
|
||||||
|
|
||||||
|
```
|
||||||
|
유저 1명이 받는 패킷:
|
||||||
|
- 주변 플레이어 이동: ~20명 × 30Hz × 50byte = 30KB/s
|
||||||
|
- NPC/몬스터 상태: ~10개 × 10Hz × 40byte = 4KB/s
|
||||||
|
- 기타 (채팅, 파티): = 1KB/s
|
||||||
|
──────────────────────────────────────────────────────
|
||||||
|
유저 1명 ≈ 35KB/s (다운) + 5KB/s (업) = 40KB/s
|
||||||
|
```
|
||||||
|
|
||||||
|
| CCU | 필요 대역폭 | 필요 회선 |
|
||||||
|
|-----|-------------|-----------|
|
||||||
|
| 100명 | 4MB/s (32Mbps) | 100Mbps 충분 |
|
||||||
|
| 500명 | 20MB/s (160Mbps) | 1Gbps 필요 |
|
||||||
|
| 1,000명 | 40MB/s (320Mbps) | 1Gbps 필요 |
|
||||||
|
| 3,000명 | 120MB/s (960Mbps) | 1Gbps 빡빡 |
|
||||||
|
| 5,000명 | 200MB/s (1.6Gbps) | 2.5Gbps 이상 |
|
||||||
|
|
||||||
|
### 환경별 결론
|
||||||
|
|
||||||
|
| 환경 | 병목 | 현실적 CCU |
|
||||||
|
|------|------|-----------|
|
||||||
|
| M4 Mac Mini + 가정용 기가 인터넷 | 업로드 속도, NAT 테이블 | **100~500명** |
|
||||||
|
| M4 Mac Mini + IDC/클라우드 1Gbps 보장 | 대역폭 | **2,000~3,000명** |
|
||||||
|
| 클라우드 서버 + 2.5Gbps 이상 | CPU | **3,000~5,000명** |
|
||||||
|
|
||||||
|
> **병목은 Mac Mini 성능이 아니라 네트워크다.**
|
||||||
|
> CPU/RAM은 남아돌지만, 가정용 인터넷은 업로드 제한(보통 다운의 1/10)과
|
||||||
|
> 공유기 NAT 테이블 한계가 있다.
|
||||||
|
|||||||
Reference in New Issue
Block a user