
오늘은 언리얼 엔진에서 네트워크 프로그래밍을 할 때 꼭 알아야 할 NetRole에 대해 학습했다. NetRole은 액터가 네트워크 상에서 어떤 역할을 수행하는지를 나타내는 속성으로, 서버와 클라이언트 간의 권한 분리를 명확히 해준다.
🧩 NetRole의 종류
| NetRole | 내 용 |
|---|---|
| ROLE_None | 네트워크에 존재하지 않음, 클라이언트에서만 생성된 액터 등 |
| ROLE_SimulatedProxy | 서버에서 복제된 액터로 클라이언트에서 읽기 전용, 동기화만 받음 |
| ROLE_AutonomousProxy | 클라이언트가 제어하는 액터, 서버에 입력을 전송할 수 있음 |
| ROLE_Authority | 서버에서 생성된 액터로 모든 권한을 가짐, 로직 실행의 주체. |
📝 핵심 개념
LocalRole은 현재 실행 중인 시스템(서버/클라이언트)에서의 역할RemoteRole은 반대편 시스템에서의 역할LocalRole만 포함된다NetRoleLocalRole은 항상 ROLE_AuthorityRemoteRole이 결정된다.NetRoleROLE_AutonomousProxyROLE_SimulatedProxyROLE_None🛠️ 실전 팁
AController::IsLocalController() 또는 APawn::IsLocallyControlled()를 통해 현재 액터가 로컬에서 제어 중인지 확인 가능NetRole을 활용하면 서버 전용 로직과 클라이언트 전용 로직을 분리하여 작성할 수 있어, 네트워크 최적화와 보안에 유리📌 오늘의 깨달음
NetRole은 단순한 속성이 아니라, 언리얼 네트워크 구조의 핵심 철학을 담고 있다. 액터가 어디서 생성되었고, 누가 제어하며, 어떤 권한을 가지는지를 명확히 이해해야 안정적인 멀티플레이 게임을 만들 수 있다.