From 6f164b6cdbcc2c4f7f98d4499f01550b55317291 Mon Sep 17 00:00:00 2001 From: tolelom <98kimsungmin@naver.com> Date: Tue, 3 Mar 2026 01:22:44 +0900 Subject: [PATCH] =?UTF-8?q?docs=20:=20=EC=88=98=EC=9A=A9=20=EC=9D=B8?= =?UTF-8?q?=EC=9B=90=20=EC=B6=94=EC=A0=95=20=EB=B0=8F=20=ED=95=98=EB=93=9C?= =?UTF-8?q?=EC=9B=A8=EC=96=B4/=EB=84=A4=ED=8A=B8=EC=9B=8C=ED=81=AC=20?= =?UTF-8?q?=EC=9A=94=EA=B5=AC=EC=82=AC=ED=95=AD=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 현재 및 개선 단계별 CCU 추정 (현재 30~50명 → Phase 전체 적용 시 5,000명) - M4 Mac Mini 기준 하드웨어 적합성 분석 - CCU별 네트워크 대역폭 계산 (AOI 적용 후 기준) - 환경별 (가정용/IDC/클라우드) 현실적 CCU 결론 Co-Authored-By: Claude Opus 4.6 --- MMORPG_ARCHITECTURE_ANALYSIS.md | 94 +++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) diff --git a/MMORPG_ARCHITECTURE_ANALYSIS.md b/MMORPG_ARCHITECTURE_ANALYSIS.md index 55cc1bb..af8ce60 100644 --- a/MMORPG_ARCHITECTURE_ANALYSIS.md +++ b/MMORPG_ARCHITECTURE_ANALYSIS.md @@ -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 테이블 한계가 있다.