본문 바로가기
언리얼(Unreal)/네트워크

25.03.14 언리얼 Replication 개념과 이벤트, 이벤트 디스패처 개념

by alwaysyoung2 2025. 3. 14.
728x90
반응형

1️⃣ Listen Server 환경에서 권한 체크가 중요한 이유

  • Listen Server는 서버와 클라이언트가 한 컴퓨터에서 돌아가는 환경입니다.
    • 예를 들어, 친구와 게임을 할 때 내 컴퓨터가 서버 역할을 하면서 동시에 나도 게임을 플레이하는 상황이죠.
  • 이때 문제는, 서버에서만 실행되어야 하는 코드 클라이언트에서만 실행되어야 하는 코드가 섞일 수 있다는 겁니다.
    • 예: 아이템을 생성하는 코드는 서버에서만 실행되어야 하는데, 클라이언트에서 실행되면 버그가 발생합니다.
  • 그래서 권한 체크가 필요합니다.
    • "이 코드는 서버에서만 실행해!" 또는 "이 코드는 클라이언트에서만 실행해!"라고 명확히 구분해주는 거예요.

2️⃣ 이벤트와 Replication (동기화)

  • 멀티플레이어 게임에서는 서버와 클라이언트가 서로 정보를 주고받아야 합니다.
  • Replication은 서버와 클라이언트 간에 데이터를 동기화하는 기술입니다.
    • 예: 서버에서 플레이어가 아이템을 먹으면, 클라이언트도 그걸 알아야 화면에 표시할 수 있죠.
  • 이벤트는 서버와 클라이언트가 서로 통신하는 방법 중 하나입니다.
    • 이벤트는 세 가지 방식으로 동작할 수 있습니다:
      1. Run on Server: 클라이언트가 서버로 "이거 해줘!"라고 요청할 때 사용합니다.
        • 예: 플레이어가 아이템을 먹으려고 할 때, 서버에 "아이템 먹을게요!"라고 알리는 거예요.
      2. Run on Owning Client: 서버가 특정 클라이언트에게 "이거 해!"라고 지시할 때 사용합니다.
        • 예: 서버가 플레이어에게 "체력이 줄었어요!"라고 알리는 거예요.
      3. Multicast: 서버가 모든 클라이언트에게 "이거 다 같이 해!"라고 알릴 때 사용합니다.
        • 예: 서버가 "폭탄이 터졌어요!"라고 모든 플레이어에게 알리는 거예요.

3️⃣ 이벤트 호출 시 권한 체크

  • 이벤트를 호출할 때는 누가 이걸 실행할지를 정확히 알아야 합니다.
    • 예를 들어, 서버에서만 실행되어야 하는 코드가 클라이언트에서 실행되면 큰일 나죠!
  • 권한 체크 방법:
    • HasAuthority(): "내가 이걸 실행할 권한이 있나?"를 확인합니다.
      • 서버인지, 클라이언트인지 구분할 때 사용합니다.
    • IsServer(): "내가 서버인가?"를 확인합니다.
    • Remote Role / Local Role: 객체의 역할을 확인해 서버인지 클라이언트인지 구분합니다.

4️⃣ 데디케이트 서버

  • Listen Server는 서버와 클라이언트가 한 컴퓨터에서 돌아가지만, 데디케이트 서버는 서버만 전문적으로 돌아가는 환경입니다.
    • 예: 게임 회사에서 대규모 멀티플레이어 게임을 운영할 때 사용하는 서버죠.
  • 데디케이트 서버는 클라이언트와 완전히 분리되어 있기 때문에, 서버 전용 로직에만 집중할 수 있습니다.
728x90
반응형