Replication(레플리케이션)이란

멀티플레이 환경에서 각 컴퓨터마다 객체의 상태를 동기화시켜주기 위해 서버 컴퓨터의 객체 정보를 각 클라이언트 컴퓨터로 복제해주는 과정을 Replication이라 한다.

클라이언트-서버 모델에서는 서버에서 클라이언트로 복제되는 것이 기본 규칙이다

 

프로퍼티 레플리케이션은 항상 Authority에서 Proxy로의 복제만 가능하다.

  • Authority: 권한을 가진 원본. 서버에 있는 객체가 Authority다.
  • Proxy: 권한 없는 사본. 클라이언트에 있는 객체가 Proxy다.

복제는 항상 서버(Authority) → 클라이언트(Proxy) 방향으로만 흐른다.

클라이언트(Proxy)에서 어떤 속성 값을 직접 바꿔도 그 변경 내용은 서버나 다른 클라이언트에 자동으로 복제되지 않는다.

오히려 다음 복제 시점에 서버 값으로 덮어씌워질 수 있다.

(이는 Proxy에서 게임 로직을 실행하면 디싱크(desync)나 보안 취약점이 생긴다는 원칙과 연결되는 부분이다)

 

프로퍼티 레플리케이션(Property Replication)이란

액터의 특정 속성 값이 변경되면 변경된 값을 다른 클라이언트에 생성된 액터에도 복제할 필요가 있다

하지만 해당 액터의 모든 속성을 매번 변경될 때마다 복제하는 것은 비효율적이다

그래서 원하는 속성만을 복제하는 것을 Property Replication이라고 한다

 

지정하지 않은 속성은 복제 대상에서 빠지고 각 클라이언트는 그 값을 독립적으로 가지게 된다(서버 값과 달라질 수 있다)

 

프로퍼티 레플리케이션 설정 방법 (3단계)

1단계: 액터의 Replicates 속성을 true로 설정한다

bReplicates = true; // 보통 생성자에서 설정

 

이 액터 자체를 복제 대상으로 켜는 큰 스위치다

이게 꺼져 있으면 그 안의 속성을 Replicated로 지정해도 의미가 없다

 

2단계: 네트워크로 복제할 속성의 UPROPERTY()에 Replicated 키워드를 추가한다

UPROPERTY(Replicated)
int32 Health;

 

이 변수가 복제 후보임을 표시하는 단계다

아직 실제 복제는 동작하지 않는다

 

3단계: GetLifetimeReplicatedProps() 함수에 복제할 속성을 등록한다

#include "Net/UnrealNetwork.h" 헤더 파일을 추가하고, DOREPLIFETIME 매크로를 사용해 복제할 속성을 명시한다.

#include "Net/UnrealNetwork.h"

void AMyActor::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
{
	Super::GetLifetimeReplicatedProps(OutLifetimeProps);

	DOREPLIFETIME(AMyActor, Health);
}

 

이 3단계가 모두 있어야 실제로 복제가 작동한다.

 

2단계(UPROPERTY(Replicated))만 하고 3단계(DOREPLIFETIME)를 빼먹으면 컴파일은 정상적으로 되고 에러도 발생하지 않지만 실제로는 아무 복제도 일어나지 않는다.

태그만 찍어두고 발송 목록에 등록하지 않은 것과 같아서 클라이언트마다 그 변수 값이 서버와 다르게 따로 동작하게 된다.

'학습 > Unreal' 카테고리의 다른 글

멀티플레이 디버깅  (0) 2026.06.24
게임플레이 프레임워크  (0) 2026.06.24
서버를 거치는 통신 구조  (0) 2026.06.22
Remote Procedure Call 기초 (RPC 기초)  (0) 2026.06.19
NetRole (Authority, Proxy, 로컬/리모트 롤)  (0) 2026.06.19

+ Recent posts