Unreal C++ ch8-3 · Server RPC

서버 RPC 검증

`Client_RequestShoot`는 입력을 전달할 뿐이고, 서버는 `Server_ShootWeapon_Validate`에서 위치와 속도를 걸러낸 뒤 `_Implementation`에서만 탄약, 투사체, 데미지를 바꾼다.

Client_RequestShoot

클라이언트 요청

소유 클라이언트가 발사 입력과 `MuzzleLocation`, `MuzzleRotation`을 보낸다.

Server, Reliable

서버로 전달

중요한 발사 요청은 유실되면 안 되므로 Reliable 후보가 된다.

_Validate

입력 방어선

총구 위치가 캐릭터에서 너무 멀거나 발사 속도가 비정상이면 `false`로 막는다.

_Implementation

권한 있는 변경

탄약 감소, 투사체 스폰, 데미지 계산은 서버에서만 확정한다.

NetMulticast

표현 전파

총구 이펙트와 사운드는 서버 결정 뒤 필요한 대상에게 별도로 보낸다.

보안

클라이언트 값은 힌트다

위치, 회전, 타이밍은 서버 기준으로 다시 검사해야 치트와 오차를 줄일 수 있다.

신뢰성

중요한 이벤트만 Reliable

데미지와 아이템 획득은 보장하고, 짧은 반복 이펙트는 Unreliable로 비용을 낮춘다.

분리

상태와 표현 분류

서버 상태 변경과 클라이언트 피드백을 분리하면 지연 보정과 디버깅이 쉬워진다.