실시간 멀티플레이의 모델
작성자: jeekpark
서론
실시간 멀티플레이 게임을 개발할 때, 가장 큰 도전과제는 두 클라이언트 간의 게임상태를 실시간으로 동기화하는 일이다. 직접 해보기 전까진, “그냥 데이터 서로 주고 받으면 되는거 아니야?”라는 생각이었지만, 생각보다 까다로운 문제가 많다. 그래서 여러가지 방법을 조사하고 각 방법의 장단점을 분석했다.
1. 서버 권위 모델(Server Authority Model)
서버 권위 모델은 서버를 게임 상태를 관리하는 책임을 부여하여, 모든 클라이언트가 서버의 결정에 따르도록 하는 방식이다. 클라이언트는 입력기기(키보드, 마우스 등)의 입력을 서버에 보내고, 서버는 입력 데이터를 처리한 후 업데이트된 게임 상태를 클라이언트에게 전송한다. 이를 통해 모든 클라이언트가 동일한 게임 상태를 유지할 수 있다. 이 모델은 서버가 모든 주요 게임 로직과 물리 연산을 처리하고, 클라이언트는 서버의 결정을 따른다. 그래서 서버 ‘권위’ 모델이다.
주로 사용되는 게임은 MMORPG, FPS, MOBA(롤, 도타2)에서 사용된다.
장점
- 일관성 유지: 즉 공평함이다. 모든 클라이언트가 동일한 게임 상태를 공유하게 되므로 동기화 문제가 줄어들고 일관된 게임을 플레이할 수 있다. 서버가 모든 입력을 처리함으로써 클라이언트 간의 상태 불일치를 최소화할 수 있다.
- 보안: 서버가 게임상태를 결정하므로 클라이언트 측의 해킹, 치팅, 트레이너를 방지할 수 있다. 클라이언트는 단지 입력을 보내고 서버의 결정을 따르기 때문에, 게임 로직을 변경하여 이득을 취하는 형태의 해킹이 불가능하다.
- 중앙관리: 서버가 모든 게임 데이터를 중앙에서 관리하므로, 데이터베이스 통합과 게임 통계 수집이 용이하다. 또한 게임 업데이트나 패치 관리가 중앙에서 이루어진다면 유저가 클라이언트를 패치해야할 일이 적어진다.
단점
- 레이턴시: 클라이언트의 입력이 서버에 도달하고, 서버의 응답이 클라이언트에 도달하는 데 걸리는 시간이 꽤나 발생한다. 따라서 반응성이 떨어지는 플레이를 경험하게 되거나 화면이 멈추는 등의 문제가 발생할 수 있다. 특히 이 문제는 유저간의 물리적 거리가 멀수록(ex: 아르헨티나와 한국) 지연시간이 더 길어질 수 있다.
- 비용: 서버 비용이 배로 늘어난다. 대규모플레이 경우 더더욱 서버의 고성능 컴퓨팅이 필요해진다. 많은 동시 접속자가 있을 경우 서버 자원이 많이 소모되고, 성능을 위해 C/C++로 서버를 제작하게 된다.
2. P2P 모델 (Peer To Peer Model)
P2P 모델은 중앙 서버 없이 클라이언트(Peer)들 간에 직접적으로 데이터를 교환하는 방식이다. 각 피어는 다른 피어들과 네트워크를 형성해, 서로의 게임 상태를 공유하고, 필요한 경우 특정 피어가 호스트 역할을 맡아 일부 게임 로직을 처리할 수 있다.
주주로 사용되는 게임은
- 턴제 전략 게임
- 파티 게임
- 일부 FPS(콜오브 듀티)
- 그리고 중앙서버를 둘 만큼의 비지니스 로직이 아닌 경우
장점
- 서버 비용 절감: 중앙서버를 유지할 필요가 없어, 서버 비용이 없다. 게임 호스트를 플레이어 중 한 명으로 맡게 하는 경우가 일반적이다.
- 낮은 지연: 직접 통신을 하게되어, 서버를 공유하는 대신, 직접 데이터를 교환할 수 있어, 지연을 줄일 수 있다. 대신, 호스트의 컴퓨터 사양, 네트워크 품질에 의존되고, 물리적 거리가 먼 경우에는 어쩔 수 없이 지연이 발생할 수 있다.
단점
- 보안문제: 클라이언트간의 신뢰 문제가 발생한다. 클라이언트 중 하나가 의도적으로 변조된다면, 게임 전체에 영향을 끼칠 수 있다. 치팅 방지가 어렵다.
- 네트워크 안정성: 호스트가 게임을 종료하거나 네트워크가 끊어지면, 게임 전체가 먹통이 된다. 이러한 경우에 호스트 마이그레이션이 필요할 수 있다.
Leave a comment