클라우드온프로미스 서버에 있는 게임서버와 데이터베이스, 로그인 API와 연동해서 유니티 온라인 멀티플레이 게임 프로젝트를 배포해보았다
요새 저는 클라우드 서버와 온라인 멀티플레이어 게임을 구현하는 것에 관심을 많이 가지고 있습니다. 정확히 구분하자면, 게임을 구현하는 것 보다는 실시간으로 사용자들이 연결되어 상호작용하는 온라인 서비스를 어떻게 만드는지에 관심이 많습니다. 실시간 연결된 상태의 서비스 중에서는 온라인 멀티플레이어 게임이 가장 잘 들어맞는 형태의 서비스라고 생각합니다. 그 외에는 실시간 영상채팅과 같은 서비스도 있겠지요? 그래서 유니티 프로젝트를 만드는 것을 공부하고 있습니다.
멀티플레이어 서비스를 만드려고 하니 신경써야 할 것이 굉장히 많아보였습니다. 초반에 접했던 fishnet이라는 네트워킹 라이브러리가 tcp, udp 통신을 담당하면서 서버 권한 이동을 쉽게 고성능으로 구현해주기 때문에, 저도 그에 맞는 캐릭터 컨트롤러를 구현하고 나서는 마치 거의 다 한 것과 같은 착각에 잠시 젖었었습니다. 그러나 fishnet을 이용한 게임의 프로덕션의 사례가 거의 없고 접할 수 있는 자료도 굉장히 파편화된 기능 구현의 소개에 지나지 않는다는 것을 깨닫게 되었습니다. 그래서 더 자료가 많고 프로덕션의 사례가 많은 mirror 네트워킹 라이브러리를 살펴보았습니다. mirror로도 굉장히 안정적인 실시간 캐릭터 이동을 구현할 수 있었고, 더 많은, 더 많이 완성된 형태의 게임 템플릿을 구하여 뜯어볼 수 있었습니다. 이렇게 되고 나니 서버 권한 이동은 사실 후순위로 타협하게 되었습니다. 왜냐하면 인디 게임은 클라이언트 권한 이동으로 개발해서 그 개발 시간과 난이도를 많이 단축하고 출시한 다음, 만일 나중에 이용자 수가 많이 늘어난다면 결제 모듈과 추가 컨텐츠를 업데이트 하면서 그제서야 치팅 방지를 위해 서버 권한 이동으로 갈아엎는 방식을 취하는 편이 낫기 때문입니다. (인정하기 싫었지만 결국 납득하게 되었습니다. ㅎㅎ)
그러면 mirror나 netcode와 같이 참고자료가 많은 네트워킹으로 하기로 했으니 문제가 더 없었을까요? 아닙니다. 전형적인 io게임이 아닌 이상, 보통의 온라인 멀티플레이 게임 서비스에는 필수적으로 사용자 로그인 기능이 있습니다. 그리고 database에 로그인한 정보가 기록이 되어야 하죠. 그리고 이 모든 기능은 dedicated server(혹은 cloud server)에서 동작해야 합니다. 그리고 matchmaking이라는 기능을 담당하는 lobby 서버도 있어야 합니다. 정리하자면, login, database, lobby 기능을 모두 서버에서 해야 합니다.
여기서 많은 사람들이 선택할 수 있는 선택지가 있습니다. 이 모든 로그인&데이터베이스&매치메이킹 서비스를 모두 제공하는 완성된 형태의 서버 api를 사용료를 내면서 가져와서 쓰는 Unity Game Service(UGS), Google Azure playfab, Amazon GameLift, 한국의 뒤끝이라는 서비스, 또는 무료로 가져와서 쓰지만 Steam에 출시해야 하는 Steamworks, 그리고 이 중 한 부분만 자체 cloud에서 서비스하거나, 모든 것을 자체 cloud에서 서비스하는 3가지 선택지가 있습니다.
저는 모바일 플랫폼 출시를 고려했기 때문에 steamworks는 제외하였고 playfab이 필요해보였습니다. playfab은 상대적으로 저렴한 이용료를 책정한다고 합니다. 이용료에 관련한 저의 해프닝도 있었는데요, 저렴하다고 해서 앱function을 만들어놓았는데 갑자기 275달러가 결제 예정이라는 이메일을 받게 된 것입니다. 깜짝 놀라서 헬프데스크에 문의를 했는데 275원을 275달러로 제가 오해했던 것이었습니다. ㅋㅋ
- LoginAPI의 직접 구현 혹은 이해가능한 수준의 코드 사용
- Database 프레임워크(mysql, postgresql, mongodb 등 어떤 것이든) 의 기초적 사용법 숙지
- LoginAPI와 Database의 연결
- 로비 서버: 여러 플레이어가 매치매이킹 티켓으로 서로 연결될 수 있도록 하는 기능
- 서버 리스트: 여러 개의 room을 별도로 운영할 수 있게 하는 기능
- 클라우드 서버 리눅스 및 서비스 설치, 배포: 도커
[영상]
클라우드 백엔드를 세팅하면서 느낀 점은, 도커컴포즈를 사용해서 자동으로 쉽게 서버 환경을 세팅할 수 있다는 점, 뭔가 원격으로 실시간 연결된다는 사실, 그리고 상시 켜두는 나만의 서비스가 있다는 것이 흥미를 많이 불러일으키는 포인트가 아닐까 생각이 듭니다. udp 통신을 하는 부분도 마찬가지로 매력적이라고 생각합니다.
감사합니다.



