🖥️ 1. 멀티플레이 서버의 종류
네트워크 게임을 설계할 때 뼈대가 되는 서버 아키텍처는 크게 3가지로 나눌 수 있다.
1) P2P Server & Listen Server (리슨 서버)

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

- 개념: 오직 '서버' 역할만을 24시간 전담하는 별도의 깡통 컴퓨터(프로세스)가 존재하는 구조이다. (위 이미지의 가운데 검은색 모니터)
- 특징: 클라이언트들은 이 전담 서버에 접속하여 통신하는 완벽한 중앙 집중형 구조를 가진다. 안정성과 보안이 매우 뛰어나다.
- 대표 게임: 배틀그라운드, 오버워치, 발로란트 등 대규모 멀티플레이 게임.
⚙️ 2. 데디케이티드 서버(Dedicated Server)의 실행 흐름
다음은 데디케이티드 서버 환경에서 서버가 켜지고 여러 유저가 접속하여 서로를 보게 되기까지의 핵심 과정을 3단계다.
Step 1. 서버 오픈 및 초기화

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

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

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