[Unreal Engine 5] 언리얼 엔진 멀티플레이: 서버의 종류와 데디케이티드 서버 실행 흐름

2026. 3. 13. 20:15·프로그래밍/Unreal Engine 5

🖥️ 1. 멀티플레이 서버의 종류

네트워크 게임을 설계할 때 뼈대가 되는 서버 아키텍처는 크게 3가지로 나눌 수 있다.

1) P2P Server & Listen Server (리슨 서버)

  • 개념: 방을 만든 방장(Host)의 컴퓨터가 클라이언트이자 서버 역할을 동시에 수행하고, 나머지 참가자(Guest)들은 클라이언트 역할만 맡는 형태다.
  • 특징: 서버 유지비가 들지 않지만, 방장의 컴퓨터 성능과 인터넷 회선에 모든 참가자의 게임 환경이 좌우된다.
  • 대표 게임: 마인크래프트, 어몽어스, 철권 등.

2) Dedicated Server (데디케이티드 서버)

  • 개념: 오직 '서버' 역할만을 24시간 전담하는 별도의 깡통 컴퓨터(프로세스)가 존재하는 구조이다. (위 이미지의 가운데 검은색 모니터)
  • 특징: 클라이언트들은 이 전담 서버에 접속하여 통신하는 완벽한 중앙 집중형 구조를 가진다. 안정성과 보안이 매우 뛰어나다.
  • 대표 게임: 배틀그라운드, 오버워치, 발로란트 등 대규모 멀티플레이 게임.

⚙️ 2. 데디케이티드 서버(Dedicated Server)의 실행 흐름

다음은 데디케이티드 서버 환경에서 서버가 켜지고 여러 유저가 접속하여 서로를 보게 되기까지의 핵심 과정을 3단계다.

Step 1. 서버 오픈 및 초기화

  1. 서버 프로세스를 실행할 때 ?Listen 명령어가 인자로 전달되며, 지정된 맵(Level)을 연다.
  2. 외부 컴퓨터가 접속할 수 있도록 네트워크의 문인 Socket(소켓)을 연다.
  3. Level의 WorldSettings 정보를 읽어와 게임의 규칙을 관장하는 GameMode와 전체 상태를 나타내는 GameState 액터를 생성한다.
  4. 💡 [핵심포인트] GameMode 액터는 클라이언트에는 절대 존재하지 않으며, 오직 서버(Server)에만 단 한 개 존재한다.

Step 2. 첫 번째 클라이언트(Client 01)의 접속과 복제

  1. 첫 번째 유저(Client 01, 빨간색)가 서버의 IP와 포트 번호로 접속을 시도하면, 서버는 열어야 할 Level 정보를 넘겨준다.
  2. 클라이언트가 Level 로드에 성공하면, 서버는 이 유저를 위한 전용 PlayerState, PlayerController, PlayerCharacter (빨간색 실선 박스)를 서버 메모리에 생성한다.
  3. 복제(Replication): 서버에 만들어진 이 객체들의 정보와 전체 GameState가 Client 01 컴퓨터로 복제(빨간색 점선 박스)되어 화면에 그려진다.

Step 3. 다중 클라이언트 동기화 (서로의 캐릭터가 보이는 순간!)

  1. 두 번째 유저(Client 02, 파란색)가 접속하면 Step 2와 똑같은 과정을 거쳐 서버에 파란색 객체들이 생성된다.
  2. 교차 복제(Cross-Replication) 발생: 서버는 기존 유저(빨간색)와 신규 유저(파란색)가 서로를 볼 수 있도록 해준다.
  3. Client 01의 컴퓨터에는 Client 02의 PlayerState와 PlayerCharacter가 껍데기(파란색 점선) 형태로 복제되어 전달된다. 반대도 마찬가지다.
  4. (단, 조종대 역할을 하는 PlayerController는 보안상 남에게 복제해주지 않고 오직 자신만 가지고 있다.)

🚨 3. 서버-클라이언트 아키텍처의 절대 원칙

위 다이어그램들을 통해 반드시 기억해야 할 멀티플레이 프로그래밍의 대원칙이다.

  • "클라이언트 간 직접 통신은 절대 불가능하다."
  • 빨간색 컴퓨터(Client 01)와 파란색 컴퓨터(Client 02)를 잇는 직접적인 선은 없다.
  • 누군가를 공격하거나 아이템을 먹고 싶다면, 반드시 가운데 있는 검은색 데디케이티드 서버를 거쳐서(RPC 요청) 허락을 받아야만 전체 화면에 반영(Replication)된다.

'프로그래밍 > Unreal Engine 5' 카테고리의 다른 글

[Unreal Engine 5] Remote Procedure Call 기초  (0) 2026.03.18
[Unreal Engine 5] NetRole (Authority와 Proxy)  (0) 2026.03.17
[Unreal Engine 5] CDO(Class Default Object)  (0) 2026.03.12
[Unreal Engine 5] 언리얼 엔진 스마트 포인터와 메모리 관리 총정리 (TObjectPtr, TSoftObjectPtr, TSubclassOf 등)  (0) 2026.03.11
[Unreal Engine 5] 동기(Synchronous) VS 비동기(Asynchronous)  (0) 2026.03.09
'프로그래밍/Unreal Engine 5' 카테고리의 다른 글
  • [Unreal Engine 5] Remote Procedure Call 기초
  • [Unreal Engine 5] NetRole (Authority와 Proxy)
  • [Unreal Engine 5] CDO(Class Default Object)
  • [Unreal Engine 5] 언리얼 엔진 스마트 포인터와 메모리 관리 총정리 (TObjectPtr, TSoftObjectPtr, TSubclassOf 등)
hanong8
hanong8
hanong8 님의 블로그 입니다.
  • hanong8
    HaNong
    hanong8
  • 전체
    오늘
    어제
    • 분류 전체보기 (102) N
      • 프로그래밍 (99) N
        • Unreal Engine 5 (45)
        • C++ (22)
        • UML (2)
        • 자료구조 (2)
        • 알고리즘 (9)
        • 개발일지 (4)
        • DirectX11 (5)
        • Git (2)
        • 코드카타 (8) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
hanong8
[Unreal Engine 5] 언리얼 엔진 멀티플레이: 서버의 종류와 데디케이티드 서버 실행 흐름
상단으로

티스토리툴바