[DAY62] Listen Servers vs. Dedicated Servers

베리투스·2025년 11월 13일

TIL: Today I Learned

목록 보기
52/93

오늘은 멀티플레이 게임의 심장이라 할 수 있는 '서버'의 종류에 대해 깊이 파고들었다. 플레이어가 직접 서버를 여는 '리슨 서버'와, 게임사에서 제공하는 별도의 '데디케이티드 서버'의 개념과 장단점을 명확히 구분했다. 특히 데디케이티드 서버 환경에서 클라이언트가 접속하고, 서버가 플레이어에게 필요한 액터들을 생성하여 복제해주는 '연결 및 복제'의 전체 흐름을 도식과 함께 이해했다. 이를 통해 모든 통신은 반드시 서버를 거쳐야 한다는 멀티플레이의 제1원칙을 다시 한번 되새겼다.


📌 오늘의 목표

  • 서버의 세 가지 주요 방식(P2P, 리슨, 데디케이티드)의 차이점 이해하기
  • 데디케이티드 서버의 클라이언트 접속 및 액터 생성/복제 과정 파악하기
  • 서버-클라이언트 구조에서 '서버를 통한 통신' 원칙의 중요성 인지하기

📚 이론 및 원리

이전 시간에는 게임모드와 플레이어 컨트롤러라는 '개념'을 배웠다면, 오늘은 이 개념들이 실제 네트워크 환경이라는 '땅' 위에 어떻게 지어지는지를 배웠다. "서버를 연다"는 말이 생각보다 여러 종류가 있다는 사실이 흥미로웠다.

1. 서버의 종류: 누가 '방장'인가?

친구들과 간단한 멀티 게임을 할 때와, 수만 명이 접속하는 온라인 게임의 서버 방식은 근본적으로 다르다.

  • 리슨 서버 (Listen Server)
    마인크래프트나 어몽어스처럼, 플레이어 중 한 명이 '방장(Host)'이 되어 서버 역할을 겸하는 방식이다. 이 방장은 클라이언트이면서 동시에 서버다. 구축이 간편하고 비용이 들지 않는다는 장점이 있지만, 방장의 컴퓨터 사양이나 네트워크 상태가 게임 전체의 퀄리티를 좌우한다. 만약 방장이 게임을 꺼버리면 방 전체가 터져버리는 비극이 발생한다. 👎

  • 데디케이티드 서버 (Dedicated Server)
    배틀그라운드나 리그 오브 레전드처럼, 오직 게임 서버 역할만을 위해 존재하는 독립된 고성능 컴퓨터다. 여기에는 그래픽이나 사운드 같은 리소스가 필요 없으며, 오직 게임 로직 연산과 데이터 처리에만 모든 자원을 쏟아붓는다. 모든 플레이어는 동등한 '클라이언트'로 접속하므로 공평하고 안정적인 환경을 제공한다. 대규모 멀티플레이 게임에서는 사실상 표준 방식이다. 💪

  • P2P 서버 (Peer to Peer Server)
    모든 플레이어가 각자 서버이자 클라이언트가 되는 구조다. 소규모 대전 게임 등에서 사용되지만, 모든 플레이어가 서로의 IP 주소를 알아야 해서 보안에 취약하고 동기화가 매우 까다롭다는 단점이 있다.

2. 데디케이티드 서버의 내부 동작 흐름 ⚙️

"클라이언트가 서버에 접속한다"는 한 문장 뒤에는 아래와 같이 정교한 '악수(Handshake)' 과정이 숨어있었다.

  1. 서버 준비: 데디케이티드 서버가 실행되면, 지정된 레벨(맵)을 열고 Socket을 통해 클라이언트가 접속할 수 있도록 귀를 열고 기다린다 (Listen). 이때 서버는 WorldSettings에 지정된 GameMode를 생성한다.
  2. 클라이언트 접속 시도: 클라이언트는 서버의 IP와 포트 번호로 "똑똑, 들어가도 될까요?" 하고 문을 두드린다.
  3. 서버의 응답 및 레벨 정보 전달: 서버는 접속을 허락하고, "우리는 지금 이 레벨에서 놀고 있어. 너도 이 레벨을 열어."라며 레벨 정보를 클라이언트에게 전달한다.
  4. 클라이언트 레벨 로딩 및 준비 완료 알림: 클라이언트는 전달받은 레벨을 로딩하고, "나도 준비 끝났어!"라고 서버에 다시 알린다.
  5. 서버의 플레이어 액터 생성 및 복제: 이 알림을 받은 서버는 해당 클라이언트를 위한 PlayerController, PlayerState, PlayerCharacter 액터들을 서버 월드에 생성한다. 그리고 이 액터 정보와, 게임의 공통된 정보인 GameState를 방금 접속한 클라이언트에게 복제(Replicate)해준다.

이 과정을 통해 클라이언트는 자신의 아바타를 화면에서 보고 조종할 수 있게 된다. 다른 클라이언트가 접속하면, 서버는 기존 플레이어들의 정보(PlayerState, PlayerCharacter 등)를 새로운 클라이언트에게도 복제해주기 때문에 서로를 볼 수 있게 되는 것이다.

3. 절대 법칙: 모든 통신은 서버를 통해!

오늘 배운 내용의 가장 중요한 결론이다. 클라이언트는 절대로 다른 클라이언트와 직접 통신할 수 없다. 내가 채팅을 치면, 그 메시지는 다른 플레이어에게 바로 가는 것이 아니라 서버로 먼저 보내진다. 그러면 서버가 그 메시지를 받고, 다른 모든 클라이언트에게 "A가 이런 말을 했어"라고 다시 뿌려주는 것이다.

이 원칙은 치트를 방지하고 모든 플레이어가 동일한 게임 상태를 보도록 보장하는 핵심적인 장치다. 앞으로 배울 RPC나 변수 리플리케이션도 모두 이 원칙 위에서 동작한다고 하니, 확실히 기억해둬야겠다.


✅ 핵심 요약

개념설명비고
리슨 서버 (Listen Server)플레이어 중 한 명이 서버(호스트) 역할을 겸하는 방식.구축이 간편하지만, 호스트의 환경에 크게 의존함. (예: 어몽어스)
데디케이티드 서버 (Dedicated Server)게임 로직만을 처리하는 독립된 전용 서버 컴퓨터.안정성/공평성/보안성이 높음. 대규모 온라인 게임에 필수. (예: 배틀그라운드)
액터 복제 (Replication)서버에서 생성/변경된 액터의 정보를 클라이언트로 복사하여 동기화하는 과정.이를 통해 모든 플레이어가 같은 게임 월드를 보게 된다.
서버-클라이언트 통신 구조모든 클라이언트는 오직 서버와 통신하며, 클라이언트 간 직접 통신은 불가능하다.치트 방지 및 데이터 동기화의 핵심 원칙이다.
profile
Shin Ji Yong // Unreal Engine 5 공부중입니다~

0개의 댓글