자료실

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

여러 사람이 실시간으로 즐기는 게임은 아주 흥미진진합니다!
그래서 사람들은 종종 무의식적으로 게임에 빠져 헤어나오지 못하기도 하죠.
파트너 형태, 경쟁 형태, 일대일 대결, 단체 길드전을 가리지 않고 모두 많은 사용자가 끊임없이 온라인으로 맹렬하게 토론하고 연구합니다. 심지어 더 나아가 사회 및 전 세계 경제 인문의 발전을 변화시키기도 합니다.



멀티플레이어 연결 및 실시간 교류

현실 세계의 컴퓨터 및 네트워크 기술은 해마다 변화하고 발전하며 업데이트되고 있습니다. 최초의 모뎀(Modem) 네트워킹으로 출현한 문자형 MUD를 시작으로 모바일을 통한 실시간 연동으로 전투가 가능한 1 vs 1 모드의 Clash Royal<<부락의 충돌: 황실 전쟁>>, Hearthstone<<마석 전기: 마수 영웅전>> 등등 다채롭고 언제 어디서든 즐길 수 있는 멀티플레이어 전투까지 가능해졌습니다.


최근 임팩트 있었던 모바일 게임인 포켓몬 Go(Pokemon Go), 오랫동안 인기를 누리고 있는 데스크탑 게임인 월드 오브 워크래프트(World of Warcraft)를 살펴보면 멀티플레이어 유형과 메커니즘도 끊임없이 진화했습니다. 매번 진화를 통해 출시될 때마다, 어김없이 사용자들의 열광적인 관심과 사랑이 쏟아지고 개발업체/운영 서비스 제공업체/운영 대리업체 모두 큰 돈을 벌고, 사용자들 또한 다채롭고 실시간 연동 교류가 가능한 게임 세계의 재미를 즐길 수 있었습니다.


멀티플레이어 게임 형태(Multiplayer Game Type)

그렇다면, 멀티플레이어/실시간 게임 체제는 어떻게 설계할까?
참고할 만한 구조는 무엇이 있을까?
어느 정도의 네트워크 기술 연구로 온라인 게임을 구현할 수 있을까?
"포켓몬 Go"는 멀티플레이어 게임인가?
"동물의 숲"은 실시간 온라인 게임인가?

음... 질문이 아주 많지요? 그럼 우선 현재 찾아볼 수 있는 멀티플레이어 게임의 형태에 대해 알아보겠습니다.

FPS → First Person Shooter = 1인칭 슈팅 게임

라운드 사용자 인원수: 100명 이하
보관 파일: X
인기 게임: Quake 2, Call of Duty, BattleField 4

RTS → Real Time Strategy = 실시간 전략 게임

라운드 사용자 인원수: 8명 이하
보관 파일: X
인기 게임: StarCraft, WarCraft, Command and Conquer, Clash Royal

MMO → Massively Multiplayer Online = 멀티플레이 온라인 롤플레잉 게임

라운드 사용자 인원수: 천명 이상
보관 파일: O, 사용자 및 월드의 상태, 사용자 장비/재화, NPC 상태
인기 게임: WorldOfWarcraft, WarCommander, FireFall

MOBA → Multiplayer Online Battle Arena = 멀티플레이어 온라인 배틀 아레나

라운드 사용자 인원수: 보통 10명 이하
보관 파일: X
인기 게임: LeagueOfLegends, DefenseOfTheAncients

Sandbox → Multiplayer Sandbox = 멀티플레이어(싱글) 샌드박스

라운드 사용자 인원수: 보통 50명 이하
보관 파일: O, 사용자 및 월드의 상태
인기 게임: MineCraft, Trove, 동물의 숲

TCG → Trading Card Game = 정통 트레이딩 카드 게임

라운드 사용자 인원수: 1 vs 1
보관 파일: O, 사용자의 재화 및 상태
인기 게임: HearthStone

Cassino → Casino Card Game = 카지노 카드 게임

라운드 사용자 인원수: 2~5 명
보관 파일: X
인기 게임: 텍사스 홀덤

Simulation → Community Simulation Game = 커뮤니티 시뮬레이션 게임

라운드 사용자 인원수: 보통 50명 이하
보관 파일: O, 사용자 및 월드의 상태
인기 게임: TheSims4, 동물의 숲

음... 또 다른 기타 분류가 있나요? 네, 이들뿐만 아니라 변화된 유형도 많이 있습니다. 위에 언급한 유형은 흔히 볼 수 있는 분류일 뿐입니다. 실제로는 기타 여러 유형으로 분류되어 있으며, 발전 측면에서도 지속적으로 새로운 형태의 게임이 출현하고 있습니다. 최근 가장 인기 있는 Clash Royal를 예로 들 수 있는데, 언뜻 보기엔 2인 대전 카드 게임 유형 같지만, 실제로는 MOBA/RTS 유형의 멀티플레이어 실시간 온라인 게임입니다.
그렇다면 가장 기본인 "네트워크 구조"는 어떻게 구성되어 있나요?
현재 선진화된 소프트웨어 기술로 구성할 수 있는 건가요?

멀티플레이어 온라인 X 네트워크 구조

네트워크 소프트웨어 기술을 통해 멀티플레이어 게임을 만드는 방법은? 정말로 Photon Engine 으로 온라인 게임 세계와 운영 체제를 구축할 수 있을까요?

우선 기본적인 네트워크 관련 지식부터 알아보겠습니다. 현재, 온라인 게임 설계 구조 대부분은 주로 Client-Server/PeerToPeer 두 가지 유형으로 크게 나뉘며, 이를 중심으로 다소 변형된 유형을 보입니다.

Client-Server

매우 간단한 개념으로 모든 클라이언트(고객/플레이어)가 고정된 메인 서버(서버, 호스트)에 접속하면 Google Cloud Platform, Microsoft Azure, Amazon EC2 등 클라우드의 가상 머신에 가설할 수 있고, 집이나 회사, 개인 작업실(집안)의 메인 서버에도 가설할 수도 있어 사용자 모두 해당 서버와 연결하기만 하면 됩니다.



Client — Server

간단히말해, 서버가 바로 각각의 클라이언트 기기에 정보 자료 및 서비스를 제공하는 메인 장치입니다. 게임 개발 시 주로 사용하는 기기는 바로 둘 이상의 클라이언트를 하나의 서버에 동시에 연결하여 상호 간의 자료와 게임 상태를 각각의 사용자에게 전송하며 서버 내에 모든 관련 자료를 기록합니다. 이중 두 사용자가 상호 간의 자료를 전송할 때, 두 사용자만 정보를 수신하게 되고, 다른 사용자는 해당 정보를 몰라도 되기 때문에 네트워크 대역폭 소모에 있어 불필요한 자료 전송을 줄일 수 있습니다. 각 클라이언트마다 다른 사용자의 모든 자료를 알 필요도 없기 때문에 불필요한 자료를 처리하거나 필터링하며 CPU/메모리 자원을 소모하지 않아도 됩니다.

Client-Server의 장점:
•중앙 집중화:모든 상업적 연산 로직이 호스트에서 실행됩니다. 자료 관리, 사용자 상태 엑세스, 게임 세계 스토리 및 외부 기타 서비스와의 연계 등등
•분산 시스템:서버에서 다른 요소를 실행하거나 서버별로 서로 다른 이벤트를 처리할 수 있어 게임의 연산 작업량을 분산하고 게임 개발에 필요한 설계/테스트/유지 보수/설치의 작업량을 경감합니다.
•클라이언트 작업량 감소:특정 클라이언트로 모든 이벤트를 전송할 필요가 없으며 공유 자료도 웹상에 동시에 업로드/다운로드할 필요가 없습니다. 일부 주요 클라이언트에 문제가 발생하거나 오프라인 상태가 되어도 라운드 내 사용자의 자료는 유지됩니다.

Peer-To-Peer

이 모드는 센터의 정보 처리 및 전송에 필요한 독립된 서버가 필요하지 않습니다. 매 피어(클라이언트/플레이어)별 자료 전송 시 다른 사용자에게 동시에 전송되며, 모든 사용자가 전송한 자료를 수신하게 됩니다. 따라서, 보통 동일 지역 내 게임 사용자 수가 그렇게 많지 않음을 짐작할 수 있습니다. 초기에는, 네트워크 속도가 지금처럼 빠르지 않았기 때문에 설령 Local Network(로컬 영역 네트워크)라 해도 멀티플레이어 실시간 게임을 많은 사람이 함께 플레이하는 게임 구조를 설계하지 못했고, 최대 4~8명의 자료 전송 시 많은 문제가 발생했습니다. 하지만 이러한 장애 속에서도 플레이하는 것만으로도 매우 흥미진진했습니다.



Peer To Peer

정의상 점대점(PC 대 PC)의 네트워크 연결 시스템으로, 두 개 이상의 기점이 독립적이면서도 직접적으로 웹상의 다른 기점과 연결하기 때문에 자료 교환이나 처리를 담당하는 센터 서버가 존재하지 않습니다. 따라서 하나의 기점을 가상의 호스트로 만들어 시스템을 동기화합니다.

Peer To Peer의 장점:
•간소화된 설정:사용자의 입력값만 알면 변동된 데이터를 연결된 다른 모든 클라이언트로 전송하고, 다른 클라이언트에서 전송한 데이터를 처리 및 피드백합니다. 따라서, 초반에도 턴 베이스 라운드식 게임에 주로 사용되었습니다.
•신속한 데이터 전송:데이터가 네트워크상의 다른 접점을 통과하지 않고 연결된 클라이언트로 바로 전송되기 때문에 입출력(사용자 입력값, UI, 데이터베이스) 내용 모두 신속하게 반응해 변경할 수 있습니다.
•안정적인 네트워크 연결:어떤 사용자(클라이언트)가 오프라인 상태이거나 활동을 하지 않을 경우 다른 사용자의 연결에 아무 영향을 미치지 않으나, 게임 세계에서는 사용자 수 감소로 변화가 발생할 수 있습니다. 단, 네트워크 데이터 운영과는 무관해 정상적으로 작동합니다. 예를 들어, 일부 센터 고정 서버 체계에서는 서버가 다운되면 접속 사용자 모두 플레이가 불가능해집니다!

게임 개발자의 세계관 변화에 따른 게임 개발 그룹의 연구 개발 능력 향상,
하드웨어 규격의 혁신, 기본 네트워크 기술의 급속한 발전,
네트워크 연결의 품질 향상, 소프트웨어 구조의 다양화,
멀티플레이어 온라인 네트워크 기술 및 운용의 새로운 시대로 들어섰습니다!

여기까지 온라인 게임 분류 및 네트워크 프로그램 기본 구조의 장점에 대해 알아보았습니다. 그럼 이제 다음 파트에서는 멀티플레이어 게임에 사용되는 간단한 네트워크 프로토콜/소켓에 대한 기초 지식과 이를 멀티 온라인 게임에 적용하는 방법에 대해 알아보겠습니다.

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