Server란?

서버는 게임의 중앙 관리자 역할을 합니다. 클라이언트들의 요청을 받아 처리하고, 게임의 상태를 유지하며, 모든 클라이언트에 일관된 데이터를 전달하는 역할을 합니다.

Server 의 주요 역할

  • 게임 상태 관리: 모든 플레이어의 위치, 행동, 게임 오브젝트 상태 등을 추적하고 동기화
  • 클라이언트 요청 처리: 클라이언트에서 발생하는 이벤트(이동, 공격 등)를 수락하고 반영
  • 보안 역할 수행: 치트 방지, 비정상적인 네트워크 패킷 필터링
  • 물리 연산 담당: 서버에서 중요한 물리 연산을 수행하고 클라이언트에 결과 전송

Server 의 종류

1). 리슨 서버 (Listen Server)
서버가 한 클라이언트와 동일한 프로세스에서 실행됨
작은 규모의 게임에서 사용되며, 호스트 플레이어가 게임을 종료하면 서버도 종료됨

2). 전용 서버 (Dedicated Server)
게임을 실행하는 클라이언트가 존재하지 않는 독립적인 서버
안정적이며 대규모 멀티플레이어 게임에서 사용됨
게임 로직을 실행하지만 그래픽을 렌더링하지 않음


Client란?

클라이언트는 서버에 연결하여 게임을 플레이하는 개별 플레이어입니다. 클라이언트는 서버로부터 게임 데이터를 받아 화면에 렌더링하며, 플레이어의 입력을 서버에 전달합니다.

Client의 주요 역할

  • 그래픽 렌더링: 서버에서 받은 데이터를 이용해 화면을 렌더링
  • 플레이어 입력 처리: 키보드, 마우스, 컨트롤러 입력을 받아 서버에 전송
  • 사운드 및 UI 관리: 게임 내 사운드 및 UI를 플레이어에게 적절히 출력
  • 로컬 예측 및 보간(Interpolation): 네트워크 지연을 줄이기 위해 클라이언트에서 일시적으로 예측된 움직임을 보정

Client의 한계점

  • 서버가 권한을 가지므로, 클라이언트에서 조작된 값은 무조건 검증됨
  • 네트워크 상태에 따라 입력이 딜레이될 수 있음
  • 서버가 비정상 종료될 경우 게임 진행이 불가능

Server - Client 모델과 인스턴스 실행모드

Unreal Engine은 멀티플레이어 게임에서 Server-Client 구조를 사용합니다.
이는 Server로 정의된 인스턴스가 게임의 상태에 대한 Authority을 가지며, 다른 모든 인스턴스는 Server로부터 업데이트를 받는 Client임을 의미한다

Client들 끼리는 직접 통신하지 않고 Client가 취하는 모든 행동은 Sever로 전송이 되서 검증을 받고난뒤 다시 Client로 뿌려진다음 실행 하게 된다
즉 Sever는 게임의 모든 최종결정을 내리며 이런 이유는 일관성을 유지하고 Cheat를 방지하기 위해서고 항상 "Never Trust the Client”라는 보편적인 원칙이 있다고하네요

Server - Client 간의 데이터 흐름

언리얼 엔진에서는 RPC (Remote Procedure Call)을 사용하여 서버와 클라이언트 간 데이터를 주고받습니다.

서버-클라이언트 통신 방법

  • 클라이언트 → 서버 (Server RPC)
    클라이언트가 서버에게 특정 요청을 보낼 때 사용
    실행위치 : 서버
    보통 유저 요청 전달
    예: "플레이어가 공격 버튼을 눌렀습니다!" → 서버가 공격을 처리

  • 서버 → 클라이언트 (Multicast RPC)
    서버가 여러 클라이언트에게 동기화된 데이터를 보낼 때 사용
    실행위치 : 모든 클라이언트 및 모든 서버
    보통 시각효과, 소리등 게임진행을 하다가 게임에 접속하고 있는 모든 플레이어들 한테 정보전달을 해줘야할 때
    예: "이 적이 죽었습니다!" → 모든 클라이언트가 동일한 장면을 렌더링

  • 서버 → 특정 클라이언트 (Client RPC)
    실행위치: 특정 클라이언트
    보통 Ui업데이트 알림 등 특정 플레이어 피드백 전달 할 때
    서버가 특정 클라이언트에게만 데이터를 전송할 때 사용
    예: "너의 체력이 20 남았어!"

Sever와 Client 개발시 고려할 점

  • 네트워크 최적화: 불필요한 데이터 전송을 줄이고, 데이터 압축을 고려해야 함
  • 보안 강화: 클라이언트에서 조작할 수 없는 중요한 로직(예: 체력 계산, 아이템 드랍 등)은 반드시 서버에서 처리
  • 레이턴시(지연) 최소화: 빠른 응답이 필요한 게임에서는 예측(Prediction) 및 보정(Reconciliation) 기법 활용
profile
기록은 기억을 지배한다!

0개의 댓글

Powered by GraphCDN, the GraphQL CDN