자료실

[Photon엔진강좌] 멀티플레이어 게임 패턴(Part 2)
작성자 | admin 2020-06-29  |    조회수 : 2185  

대화형 멀티플레이어 실시간 게임 개발 구조의 요소 구성을 높은 수준의 시각으로 바라볼 수 있으며, 자주 등장하는 클라이언트(Client),피어(Peer),노드(Node),서버(Server),호스트,(Host),마스터 클라이언트(MasterClient)등을 이해하기 위한 파트입니다.


클라이언트, 피어, 노드, 서버, 호스트

클라이언트(엔드포인트, 피어, 노드) 하나는 사용자(플레이어) 한 명을 대표합니다. 사용자가 입력한 데이터를 수신하고 서버와의 통신 연결을 통해 서버에서 전송한 정보 명령을 수신한 후UI로 변경하거나 상호 출력을 통해 사용자에게 변경 사항에 대해 알려줍니다.

서버를 하나의 특수한 엔드포인트(피어, 노드)로 볼 수도 있으나, 서버에서는 주로 온라인상의 모든 클라이언트에서 전송한 정보와 명령을 처리하는 동시에 모든 온라인 통신을 유지하고 정적 데이터(데이터베이스), 시스템과 사용자 상태(State), 게임 로직(비즈니스 로직)을 엑세스합니다.

마스터 클라이언트는 일종의 특수 클라이언트로, 기본 역할은 클라이언트이며 일부 서버의 기능을 제공하기도 합니다. 일부 네트워크상에서는 호스트로 불리기도 합니다.

엔드포인트(피어, 노드)의 뜻은 알고 있습니다. 그렇다면 연결 방법은 무엇인가요? 클라이언트/서버 간의 네트워크 연결(네트워킹), 엔드포인트 간에 컴퓨터나 모바일 및 네트워크 하드웨어를 통해 연결하고 연결고리 간 통신 교류는 어떻게 하나요?

계속 이어서, 프로토콜과 소켓에 대해 간단하게 알아보겠습니다!

네트워킹 프로토콜 — UDP 및 TCP

컴퓨터 네트워크 세계에서 프로토콜이란 통신 시스템이 데이터를 교환하기 위해 사용하는 통신 규칙입니다. 이러한 규약을 통해 수신자가 정보(메시지) 내용을 표현하는 정보의 포맷 구성 형태로 정보 코덱(인코딩/디코딩)에 사용합니다.
프로토콜은 서비스의 유형에 따라 두 종류, UDP와 TCP로 구분되며, 이 둘 모두 데이터 압축 패키지 방식과 네트워크상의 전송 및 수집 방법을 의미합니다.

TCP(Transmission Control Protocol)

TCP는 연결형 서비스를 지원하는 프로토콜이며 완전한 데이터를 순서대로 한 포인트에서 다른 포인트로 전송합니다. 신뢰할 수 있는 순차적인 데이터 전송을 보장하기 때문에 TCP도 시간을 소모해 두 지점 간의 패키지가 순차적으로 정확하게 전송되었는지를 처리 및 판단하게 됩니다. 흔히 문자나 파일 데이터처럼 데이터의 무결성이 중시될 때 이 모드로 전송합니다. Line/iMessenger와 같은 통신 소프트웨어의 문자 전송이 TCP 방식을 사용합니다.

UDP(User Datagram Protocol)

UDP는 비연결형 서비스를 지원하는 프로토콜로, 데이터 전송 시 기존에 구축한 채널을 통해 보내지 않습니다. UDP의 주목적은 한쪽의 데이터를 효율적인 방식으로 신속하게 다른 쪽으로 전송하는 것입니다. 주로 대용량 데이터나 일부 데이터 손실이나 중복 전송도 가능할 경우 이 UDP 방식을 사용합니다. 음성과 같은 데이터 전송에 자주 사용합니다. Skype/FaceTime과 같은 통신 소프트웨어의 음성 및 영상 데이터는 대용량의 UDP 압축 패키징으로 처리합니다.

네트워크 소켓

네트워크 인터페이스, 네트워크상의 엔드포인트 간 정보 연결을 의미하며 최소 구성 요소로 로컬 IP 주소(IP 위치), 포트 번호(Port Number), 프로토콜(Protocol)을 포함합니다. 따라서 TCP 포트 128과 UDP 포트 128은 독립적인 소켓입니다.

멀티플레이어 게임 서버 구조

네트워크의 기본 용어에 대해 알아보았으니 한 발 더 나아가 멀티플레이어 온라인 세계의 구조 연결에 대해서 알아보겠습니다. 아래의 내용은 흔하게 볼 수 있는 멀티플레이어 게임 서버 구축 분포 개념에 대한 소개입니다.



Photon Cloud의 연결 예시

마스터 서버
마스터 서버는 서버를 관리하는 위치이며, 자체적으로 여러 게임 서버와 연결하여 각 서버의 상태를 기록하고 감독하며 주요 데이터를 점검하고 업데이트합니다. 자주 사용하는 클라이언트는 마스터 서버와 연결한 후 게임 서버의 연결 데이터를 취득해야 하며 나아가 실제 게임 서버 플랫폼과 연결해야 합니다. 일부 마스터 서버는 서로 다른 클라이언트를 다른 게임 서버로 분배해 동적이거나 맞춤화된 로드 밸런싱을 조정합니다.

네임 서버(Name Server)

네임 서버 또한 관리 서버로, 자체적으로 여러 지리적 위치별로 분포한 세계 각지의 서로 다른 마스터 서버에 연결하기 때문에 해당 서버로 연결만 되면 조건에 따라 마스터 서버에서 원하는 데이터를 얻을 수 있어 후속 연결에 유리합니다. 최고 품질로 동적 연결한 마스터 서버는 연결하고자 하는 마스터 서버에 문제가 발생한 경우에도 게임 서버와 연결할 수 있습니다.

부하 분산 서버(서비스)

독립된 서버로, 일부 서버 내 구축한 서비스 요소로 기능을 제공하며 주로 동적으로 대량의 사용자를 또 다른 적합한 서버 플랫폼, 즉 위에서 언급한 이름 서버, 하나 혹은 여러 마스터 서버, 게임 서버 등으로 분산시킵니다. 따라서 설령 일부 서버에 문제가 발생하더라도 사용자는 다른 양호한 상태의 플랫폼으로 분산되어 안정적으로 플레이할 수 있습니다.

게임 서버

독립된 서버로, 사용자들의 상호 교류 데이터를 기록해 실시간으로 사용자 데이터를 전송합니다. 이전 단계에서 부하 분산을 위해 사용자별로 서로 다른 게임 서버로 분산시켰기 때문에 각 서버를 독립적으로 운용할 수 있습니다. 물론, 일부 게임 세계 설계에서 각 게임 서버별로 데이터를 전송할 수 있게 하려면 게임 서버에서 별개로 설계해야합니다.



신규 사용자뿐만 아니라 게임을 플레이하고 있는 사용자도 게임 서버와의 연결을 기다립니다.

게임 로비

게임 로비, 보통 게임당 최소 한 개의 로비가 존재하며, 일부는 모든 사용자의 공개 데이터를 제공합니다. 예를 들자면 닉네임과 같은 모든 사용자의 온라인 채팅을 제공하기도 합니다. 그러나 가장 중요한 기능은 해당 게임의 대형 로비에 연결된 모든 룸을 찾을 수 있으며 이를 통해 게임의 룸으로 쉽게 진입해 플레이할 수 있습니다. Photon Engine 구조에는 공용 로비가 설치되어 있으나, 자유롭게 다른 게임 로비를 구축해 사용자가 서로 다른 그룹을 선택 가입할 수도 있습니다. 여러 단계로 그룹화해 관리할 수 있습니다.

게임 룸(Game Room)

게임의 방과 같은 사이버 게임 공간으로, 게임 서버에 해당 라운드/세트/맵/구역의 모든 사용자의 데이터 전송 및 운영을 전담 처리하는 프로그램이 존재합니다. 게임 플레이 중 동일 게임 룸의 사용자는 해당 게임 룸의 사용자와만 교류할 수 있습니다. 일반적으로 게임 룸은 독립적인 규칙과 데이터를 가진 운영 공간입니다. 경우에 따라서는 광범위한 MMO식 맵 구역에서도 별개의 게임 룸으로 나뉘어 진행하기도 하는데, 그곳에서 사용자들은 룸 A에서 상호 연결된 룸 B로 이동할 수 있습니다.
몇몇 게임에서는 특수 연동 목적을 달성하기 위해 서로 다른 일부 게임 룸에서도 별개의 게임 이벤트를 다른 게임 룸으로 전송할 수 있도록 설계하기도 합니다.

지금부터 시작하세요

멀티플레이어 게임의 몇몇 네트워크 시스템에 대해 알아보았으니, 이제 여러분이 생각하고 있는 게임 세계를 설계해 볼 수 있을 것입니다! 또한, 2016년부터는 실세계 AR 및 가상 현실 VR로 확장된 다양한 소프트웨어 장비가 시작 단계에 있기 때문에 새로운 게임 세계 운영이나 상호 작용 멀티 네트워크 프로그램 응용에 적합하고, 이러한 장치를 실제로 운용하기 시작할 쯤에는 해당 장치를 엔드포인트나 이전보다 더 풍부한 대화형 맨머신 입력 장치로 볼 수 있을 것입니다.

따라서, 지금부터 Photon Engine이라는 최고의 멀티플레이어 실시간 연결 도구(네드워크 엔진)으로 흥미롭고 다채로운 미래에 참여하실 수 있을 것입니다!

★더 많은 글은 Photon HelpCenter https://support.photonengine.jp/hc/ko/categories/204651467 에서 확인하세요!