25/02/26 | TIL 멀티플레이어1
😊네트워크 기초지식
✅ 프로토콜(규칙)
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가 플레이하고 있다가 다시 연결되는 방식
몰수패 처리 - 연결이 끊어지면 바로 패배한 것으로 처리 등 다양한 방법이 있다.
✅ 악성 유저 및 검증
클라이언트 측에서 수행된 작업의 서버 측 검증은 부정 행위 방지에 중요하다.
또한, 입력 검증을 통해 서버가 예상치 못한 동작을 하는 것을 방지할 수 있다.
싱글 플레이어 게임에서는 게임을 해킹하는 것이 개인의 일탈이었지만,
멀티플레이어에서는 게임 전체의 경제를 해치거나 게임의 커뮤니티 전체를 위협할 수 있다(배틀그라운드).