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:
2026-03-03 01:22:44 +09:00
parent f3eaeac37b
commit 6f164b6cdb

View File

@@ -328,3 +328,97 @@ GameLoop
[장기] Phase 5: 서버 분산
→ 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 테이블 한계가 있다.