P2P 멀티플레이 서비스 조사 🖇️

간단한 멀티플레이 게임을 만들기 위해서 P2P 서비스에 대해 조사한 내용입니다.
P2P란?
Peer-to-Peer의 약자로, 중앙 서버 없이 클라이언트 컴퓨터(Peer, 플레이어)끼리 직접 통신하는 방식을 말한다. 한 플레이어가 보통 “호스트” 역할을 맡아하기 때문에 서버 호스팅 비용이 없다. 플레이어 간 직접 연결하기 때문에 호스트의 인터넷 품질에 영향을 받긴 하지만 중간 서버를 거치지 않고 플레이어간 직접 연결하기 때문에 대부분의 경우 낮은 레이턴시를 가진다.
대표적인 P2P 방법
- 호스트-클라이언트: 한 플레이어가 호스트로 권한을 가지고 있고, 다른 플레이어들은 호스트에 연결한다. 일반적이고 구현이 쉬운만큼 대부분의 코옵게임들이 이 형태를 사용중이다.
- 풀 메시: 모든 플레이어가 서로 직접연결(N:N) 동기화가 복잡하다는 단점을 가지고 있지만 호스트 의존도가 낮다는 장점이 있다. 예를들어 격투 게임의 관전 시스템이 이 방법을 사용한다.
동기화 방식
- 락스텝(Lockstep): 모든 클라이언트가 같은 입력을 같은 프레임에 실행하는 완벽 동기화 방식. 단, 한 명이라도 느리면 전체 게임이 느려진다는 단점이 있다.
- 스냅샷 보간: 주기적으로 게임 상태를 전송한다. 클라이언트에서 보간하여 부드럽게 표현한다.
- 상태 동기화: 변경된 것만 전송
방 입장 방식 정리
- 직접 IP 입력: 가장 구현이 간단하지만 보안 위험이 크고 사용자가 불편함을 느낄 수 있다
- 방번호 입력: 코드를 입력하면 서버가 호스트IP를 알려준다. 매치메이킹을 해주는 서버는 필요하지만 가벼운 편.
- 스팀 로비: 스팀ID를 활용하여 연결하는 방식. 단 스팀 플랫폼에 종속된다.
- 로비 브라우저 방식: 중앙 서버가 활성된 방 목록을 제공해준다. 매치메이킹 서버가 필요하다
- 초대 링크 방식: 링크 클릭하면 자동 입장되는 방식. 웹 인프라가 필요하다
P2P 멀티플레이서비스 종류
룸 코드 시스템이 구현 가능한 서비스만 정리한다.
- Unity Relay
- Unity의 공식 멀티플레이 솔루션
- 100 CCU(Concurrent Users=동시접속자 수)까지 무료
- Mirror
- 오픈소스
- 완전무료이지만 어차피 NAT traversal을 위한 릴레이 서버가 별도로 필요함
- Photon Fusion / PUN 2
- 20 CCU까지 무료
- 로비 시스템도 내장
- 매치메이킹 기능 포함
- Steam P2P
- Steam 플랫폼 전용 (Steam Game only)
- 완전 무료
- Epic Online Services(EOS)
- 완전 무료
- 모든 플랫폼 크로스 플랫폼 가능
- 단, 개발자는 Epic 계정 연동 필요
추천
소규모 게임이고, Unity를 사용한다면 프로토타입으로 Unity Relay를 사용하는 것이 가장 나아보인다. Epic Online Services도 물론 좋지만 Epic 계정에 연동 및 개발자 등록이 필요하고 플랫폼 별 설정도 따로 해주어야한다. Unity Relay는 로비시스템이나 보이스 시스템이 내장되어있지 않다는 단점이 있지만 이는 Vivox나 Unity Lobby 등으로 해결할 수 있다. 따라서 초반에는 Unity Relay + Unity Lobby로 진행하고, 후에 Epic Online Services를 고려하는 편이 좋다.
혹은 스팀에만 출시할 것이라면 Steam P2P도 고려할만 하다. 단, 스팀 개발자 아이디가 필요하고 여기에 초기비용 13만원이 소비된다. 다만 어차피 스팀에 출시할 것이라면 내야하는 것이므로 큰 문제가 되지 않을수도 있다. 단, 테스트를 하려면 스팀 아이디가 2개가 필요하므로 테스트에 어려움이 있다는 건 기억해야한다.