Today I Learn

25/02/26 | TIL 멀티플레이어1

오늘도즐겨 2025. 2. 26. 23:10

😊네트워크 기초지식

프로토콜(규칙)

IP주소 네트워크 안에 있는 기기의 주소체계로, 8비트 0~255 로 구성된 부분이 4개(ipv4기준)가 연결되어 구성된 형태

IP주소가 부족함에 따라 네트워크 어드레스 트랜슬래이션 (NAT) 등의 기술이 도입 되어 IP주소만으로는 연결하기 어려운 경우도 있지만, 같은 내부 네트워크 상에서는 기기들의 IP는 고유해야함.

 

포트

IP주소가 장치를 식별했다면, 포트는 특정 애플리케이션 또는 서비스를 지정하는데 사용합니다.

일반적으로 알려진 포트(Well-Known-Port)가 존재하며, 이는 1024번까지에 해당합니다

비유하자면 건물의 주소가 IP라고 한다면, 실제로 이를 처리할 담당자가 Port가 됨

 

라우팅

데이터 패킷이 송신자에서 수신자까지 도달하기 위해 네트워크 장치들 사이에서 이동하는 경로

라우터는 이러한 패킷을 적절한 목적지로 안내하는 역할을 한다.

 

패킷

네트워크를 통해 전송된 데이터의 작은 단위

큰 데이터는 네트워크 전송을 위해 여러 패킷으로 분할되고, 목적지에서 다시 조합된다.

 

패킷전달의 방식 TCP/UCP

🔎TCP (Transmission Control Protocol): 신뢰성 있는 데이터 전송을 보장한다.

                손실된 패킷은 재전송되며, 데이터는 전송된 순서대로 도착.

                따라서, 실시간 요구가 덜한 웹 통신과 이메일 전송에 주로 사용된다.

 

🔎UDP (User Datagram Protocol): 신속한 데이터 전송을 위해 설계되었다.

                FPS와 같은 시간에 민감한 애플리케이션에 적합합니다.

                TCP보다 오버헤드가 적지만, 패킷 손실에 대해 보상하지 않는다.

 

✅ 멀티플레이어 설계

🔎 클라이언트-서버 모델

Client-Server Model

 - 서버는 중앙에서 클라이언트의 요청을 처리하고 응답하는 역할을 한다.

 -  클라이언트는 사용자의 장치로, 서버에 서비스를 요청.

Dedicated Server

 -  멀티플레이어 게임에서 모든 게임 로직과 플레이어 데이터를 처리하는 전용 서버를 의미

Host-Client 

 -  한 플레이어가 게임 호스트와 클라이언트의 역할을 모두 수행한다.

 -  소규모 멀티플레이어 게임에 적합하다. 

 

🔎 피어 투 피어 (P2P) 모델

Peer-to-Peer Model

 -  중앙 집중식 서버 없이 각 참여자(피어)가 서로 직접 통신한다.

     이 모델은 네트워크 리소스를 효율적으로 사용할 수 있지만, 악성 유저의 가능성을 피하기가 어렵다.

 -  우리가 배울 PUN2에서는 클라이언트의 요청을 중앙 서버가 중계하여 전달하는 방식을 채택하고 있다.

     Photon에서는 관련하여 다양한 방식의 제품들을 판매합니다.

 -   PUN vs. Bolt | Photon Engine

 

Pun 2 PUN vs. Bolt | Photon Engine

PUN과 Photon 볼트는 두 개의 강력한 게임 네트워킹 미들웨어 입니다. 두개중 어떤 것을 선택하는 것은 쉽지는 않습니다. 이 문서의 목표는 이 두개의 툴에서 개발자가 요구사항에 가장 적합한 것

doc.photonengine.com


😥 멀티플레이어 유의사항

  비동기 로직

서버에서 처리되는 로직들은 비동기적으로 처리된다.

즉, 그 결과를 바로 활용하는 것이 아닌 콜백 등을 통하여 처리 결과를 받아 이어서 처리하는 방식.

이 과정에서 프로그램의 복잡도가 매우 높아지며,

이를 관리하기 위해 코루틴이나 UniTask와 같은 비동기 처리를 전문적으로 처리하는 프레임워크를 사용하기도 한다.

 

   틱 빈도( Tick Rate )

게임 서버가 로직을 업데이트하는 빈도

높은 틱률은 더 부드럽고 정확한 게임 플레이를 제공하지만, 네트워크 및 서버 부하를 증가시킬 수 있습니다.

틱의 빈도를 설정할 때는 게임의 유형, 네트워크 상태, 서버의 처리 능력 등 여러 요소를 고려해야 한다.

너무 낮은 Tick Rate는 게임 플레이에 지연을 일으킬 수 있고, 너무 높을 땐 불필요한 네트워크 트래픽과 서버 부하를 초래할 수 있다.

따라서, 개발자는 게임의 요구 사항과 가능한 서버 리소스를 균형 있게 고려하여 최적의 틱률을 결정해야 한다.

(대부분의 멀티플레이어 엔진은 바꿀 수 있도록 제공)

 

  연결해제

네트워크 불안정성으로 인한 플레이어의 연결해제는 게임 플레이에 부정적인 영향을 미칠 수 있다.

재연결시 어떻게 처리될 지에 대한 방법을 정의해야한다.

재연결 - 모두의 마블처럼 AI가 플레이하고 있다가 다시 연결되는 방식

몰수패 처리 - 연결이 끊어지면 바로 패배한 것으로 처리 등 다양한 방법이 있다.

 

  악성 유저 및 검증

클라이언트 측에서 수행된 작업의 서버 측 검증은 부정 행위 방지에 중요하다.

또한, 입력 검증을 통해 서버가 예상치 못한 동작을 하는 것을 방지할 수 있다.

싱글 플레이어 게임에서는 게임을 해킹하는 것이 개인의 일탈이었지만,

멀티플레이어에서는 게임 전체의 경제를 해치거나 게임의 커뮤니티 전체를 위협할 수 있다(배틀그라운드).