멀티플레이어 게임 개발 2 (Server)

김여울·2025년 9월 1일

내일배움캠프

목록 보기
66/139

1. 서버의 종류

P2P Server(Peer to Peer Server)

  • 설명
    • 플레이어들끼리 직접 데이터를 주고받는 방식
    • 호스트가 별도로 존재하지 않거나, 한 명이 자동으로 호스트 역할 수행
  • 장점
    • 서버 비용 없음- 빠르게 연결 가능
  • 단점
    • 보안 취약(핵)
    • 핑 불안정
    • 호스트 나가면 게임 종료 → 다른 클라이언트가 호스트를 이어받을 수 있다

Listen Server

  • 설명
    • 한 명의 플레이어가 서버를 직접 실행하며 동시에 게임에도 참여함
  • 장점
    • 설정 간편
    • 친구끼리 소규모 플레이 적합
  • 단점
    • 호스트 의존 큼
    • 호스트가 나가면 서버 종료

Dedicated Server

  • 설명

    • 별도의 컴퓨터(또는 클라우드)가 서버 역할만 전담
    • 플레이어들은 접속만 함
  • 장점

    • 안정적이고 지속적인 서버 유지 가능
    • 커스터마이징 용이
  • 단점

    • 서버 비용 발생
    • 운영/세팅 복잡할 수 있음

2. Dedicated Server 실행 흐름

[Server 실행]
   ↓
Open {Level}?Listen
   ↓
소켓 열림 (접속 대기)
   ↓
[Client 접속 요청]
   ↓
서버가 Level 정보 전달
   ↓
클라이언트 Level 로드 완료
   ↓
서버: PlayerState, Controller, Character 생성
   ↓
클라이언트: 해당 객체 복제 받음
   ↓
GameState 동기화
   ↓
[다른 클라이언트 접속 시 반복]
   ↓
클라이언트 간 객체 정보도 서로 복제됨

[경호튜터님 강의 노션]

1️⃣ 서버 실행

  • PIE(Play In Editor with Dedicated Server) 실행 또는 Server.exe 실행
  • 실행 시 인자로 Open {Level명}?Listen 전달
    → 해당 Level이 열리고 Listen Socket 생성
    → 외부 클라이언트 접속 가능
  • Listen 옵션이 없다면 싱글플레이 모드 실행됨

2️⃣ 클라이언트 접속

  • 클라이언트는 서버의 IP주소 + 포트번호로 접속 시도
  • 서버는 접속 요청을 받으면 Level 정보를 클라이언트에 전달
  • 클라이언트는 받은 Level을 로드
    → 성공 시 서버에 “로드 완료” 통지

3️⃣ 서버 측 객체 생성 & 복제

  • 클라이언트가 접속 완료되면 서버는 해당 클라이언트 전용으로 다음 객체 생성:
    • PlayerState
    • PlayerController
    • PlayerCharacter
  • 생성된 객체들은 클라이언트 측으로 복제됨 (Replicate)
  • GameState도 클라이언트로 동기화

4️⃣ 다중 클라이언트 상황

  • 새로운 클라이언트가 접속하면 동일한 절차 반복
  • 예) Client2 접속 시
    • 서버가 Level 정보 전달 → Client2가 로드 완료 통지
    • 서버에서 Client2 전용 객체들 생성
    • 해당 객체가 Client2에도 복제됨
  • 또한 기존 클라이언트(Client1)와 새로운 클라이언트(Client2) 간에도 PlayerState, PlayerCharacter가 교차 복제
    → 서로의 캐릭터/상태를 볼 수 있게 됨

5️⃣ 클라이언트 간 통신

  • 클라이언트끼리 직접 통신 불가
  • 반드시 서버를 경유해야 함
    → 예: Client1ServerClient2

특징

Server

  • GameMode 액터는 딱 한 곳(Server)에만 존재
    GameModeServer 를 동일시 가능
  • Level 관리 + 객체 생성/복제 + 클라이언트 간 중계 역할을 수행

Client

  • Level 로드 + 서버로부터 받은 객체 반영 역할

0개의 댓글