티스토리 뷰

🟩 학습 목표

  • 실습 프로젝트 생성 및 멀티플레이 기초 상식 학습
  • 멀티플레이 프로젝트 필수 설정 파악
  • 멀티플레이 심화 개념 학습을 위한 선수 지식 습득

🟧 서버의 종류 (P2P, Listen, Dedicated)

멀티플레이 게임 아키텍처는 데이터 권한과 통신 방식에 따라 크게 세 가지로 분류된다.

🟦 P2P Server (Peer to Peer Server)

각각의 컴퓨터가 클라이언트이자 서버 역할을 동시에 수행하는 구조다. 모든 플레이어가 서로 연결되어 권한을 나누어 갖는다.

  • 예시: 다크소울, 토렌트

🟦 Listen Server

클라이언트이자 서버 역할을 하는 방장(Host)이 존재하고, 나머지 참가자(Guest)는 모두 클라이언트 역할만 맡는 형태다. P2P의 일종으로 볼 수 있다. 방장의 권한이 절대적이다.

  • 예시: 마인크래프트, 어몽어스

🟦 Dedicated Server

서버 역할을 담당하는 컴퓨터가 따로 존재하는 서버-클라이언트 구조다. 서버 컴퓨터는 그래픽 렌더링 없이 오직 게임 로직과 데이터 검증만 처리한다. 가장 높은 신뢰도를 보장한다.

  • 예시: 배틀그라운드

🟧 데디케이티드 서버 실행 흐름도

데디케이티드 서버의 실행과 연결 과정은 다음과 같은 순서로 진행된다.

🟦 서버 프로세스 실행 및 소켓 생성

  • 에디터에서 PIE(Play in Editor)를 실행하거나 Server.exe를 구동하는 방식으로 서버 프로세스를 실행한다.
  • 실행 시 인자로 Open {Level이름}?Listen 명령어가 전달되어 해당 레벨을 열고, 다른 PC가 접속할 수 있도록 소켓(Socket)을 생성한다. ?Listen 인자가 없으면 싱글플레이로 작동한다.

🟦 서버 전용 객체 생성 (GameMode, GameState)

  • 레벨의 WorldSettings에 있는 정보를 바탕으로 GameMode와 GameState 액터가 생성된다.
  • 핵심 포인트: GameMode 액터는 전체 컴퓨터 중 오직 **서버(Server)**에만 존재한다. 따라서 GameMode와 Server를 동일시해도 무방하다.

🟦 클라이언트 접속 및 레벨 동기화

  • 클라이언트는 서버의 IP 주소와 포트 번호로 접속을 시도한다.
  • 서버는 클라이언트에게 레벨 정보를 전달하고, 클라이언트는 해당 레벨을 성공적으로 여는 데 성공했다고 데디 서버에게 알린다.

🟦 클라이언트 전용 액터 생성 및 복제 (Replication)

  • 레벨을 연 클라이언트 전용 PlayerState, PlayerController, PlayerCharacter가 서버에 생성된다.
  • 이 객체들은 다시 해당 클라이언트에게 복제되며, GameState도 함께 복제된다.
  • 또 다른 클라이언트가 접속하면 마찬가지로 전용 액터들이 생성되고 각 클라이언트에게 복제되며, 클라이언트 간의 PlayerState와 PlayerCharacter도 복제되어 서로의 모습이 보이게 된다.

🟧 서버-클라이언트 구조의 핵심 특징

🟦 클라이언트 간 직통 불가 (Client-to-Client Impossible)

서버-클라이언트 구조의 아주 중요한 특징은 클라이언트와 클라이언트 간의 직접 통신이 불가능하다는 점이다. 오직 서버와 클라이언트 사이의 통신만 가능하다. 이 특징은 앞으로 배울 RPC나 프로퍼티 레플리케이션 설계 방식에도 직접적인 영향을 끼치므로 반드시 기억해야 한다.


🟧핵심 요약

  • 멀티플레이 서버는 크게 P2P, Listen, Dedicated 세 가지로 분류된다.
  • 데디케이티드 서버 실행 시 ?Listen 파라미터가 소켓 생성의 핵심이며, 클라이언트는 레벨 정보를 넘겨받아 동기화한다.
  • GameMode는 전 세계에 단 하나, 오직 서버에만 존재하므로 서버의 권한 그 자체다.
  • 서버-클라이언트 구조에서는 클라이언트 간의 직접 통신이 불가능하며 모든 데이터는 서버를 거쳐야 한다.