P2P, 리슨 서버, 데디케이티드 서버 비교
3강. P2P, 리슨 서버, 데디케이티드 서버 비교
1. 이번 강의에서 해결할 문제
“친구끼리 연결하니 P2P”, “호스트가 서버니 서버 권한이 없다”처럼 연결 방식과 권한 모델을 섞으면 보안·비용·호스트 이탈 대응을 잘못 설계합니다. Unreal의 일반 게임플레이 복제는 서버 권한 모델이며, 그 서버 프로세스를 플레이어가 함께 실행하는지 별도 머신이 실행하는지가 핵심입니다.
2. 학습 목표
3. 핵심 개념
| 모델 | 권위 있는 판정 위치 | 로컬 화면 | 장점 | 주요 위험·비용 |
|---|---|---|---|---|
| 순수 P2P | 피어 합의 또는 역할 분산 | 모든 피어 | 중앙 서버 비용 감소 가능 | 신뢰·동기화·NAT·치팅 설계가 복잡 |
| 리슨 서버 | 호스트 플레이어 프로세스 | 호스트에게 있음 | 소규모 협동, 빠른 시작, 별도 서버 비용 없음 | 호스트 지연 우위, 이탈, 업로드 품질, 변조 위험 |
| 데디케이티드 서버 | 별도 헤드리스 서버 프로세스 | 없음 | 공정한 권한, 지속성, 자원 분리 | 인프라·배포·운영·모니터링 비용 |
리슨 서버의 호스트는 NM_ListenServer World에서 서버 권한을 실행하면서 로컬 PlayerController와 화면도 가집니다. 원격 플레이어는 NM_Client입니다. 데디케이티드 서버는 NM_DedicatedServer이며 렌더링과 로컬 플레이어 입력이 없습니다.
4. 단계별 실습
실행 프로필 기록: Docs/hosting-model-check.md
프로필 A: PIE / 2 players / Listen Server
- 호스트: NM_ListenServer, Authority Character + Local Player
- 참가자: NM_Client, Autonomous Proxy Character
프로필 B: PIE / 2 players / Play as Client + Launch Separate Server
- 서버: NM_DedicatedServer, 화면·로컬 PlayerController 없음
- 클라이언트 1·2: NM_Client
아래 코드를 서버 전용 로직이 있는 Actor에 추가해 렌더링 의존을 찾습니다.
if (GetNetMode() == NM_DedicatedServer)
{
// 전용 서버에는 카메라, 로컬 HUD, 시각 효과가 필요하지 않습니다.
return;
}
PlayLocalPresentation();
PIE에서 리슨 서버와 Launch Separate Server 프로필을 번갈아 실행합니다. 서버 로직이 카메라나 첫 번째 로컬 PlayerController를 당연히 존재한다고 가정하면 데디케이티드 프로필에서 실패하는지 확인합니다.
5. 코드가 동작하는 이유
GetNetMode()는 World가 Standalone, Dedicated Server, Listen Server, Client 중 어떤 네트워크 형태인지 알려 줍니다. 데디케이티드 서버에서 표현 코드를 건너뛰는 것은 최적화이자 잘못된 로컬 화면 의존을 제거하는 경계입니다. 반대로 게임 규칙을 NM_ListenServer에서만 실행하면 데디케이티드 서버가 빠지므로 권한 판정은 HasAuthority() 또는 서버 GameMode 책임으로 둡니다.
6. 자주 하는 실수와 해결법
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
P2P, 리슨 서버, 데디케이티드 서버 비교 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.