Game Tech Blog
메가존클라우드 Gaming 기술전담팀에서는 GameLift를 이용하여 “비용과 관리요소를 최소화 한” 세션 게임을 구현해보았습니다.
Amazon GameLift와 AWS의 다양한 기술을 활용하여 대전 게임을 만들어낸 리얼 개발기와 게임 구성도, 플레이 화면도 함께 확인해보시죠!
■ 게임 장르 : 실시간 대전 캐주얼 게임
■ 사용할 클라이언트 엔진 : Unity3D 2020.1.1f1
■ 게임 특징 및 주요 기능 :
① 두 명의 유져가 3판 2선승제의 가위바위보 게임을 통하여 승패를 정합니다.
② 승패 결과는 해당 유저의 랭킹에 (즉시)반영 됩니다
③ 전적을 기반으로 랜덤하게 상대를 매칭하여 게임을 진행할 수 있습니다.
④ 게임이 이루어지는 방은 상대방과 실시간 양방향 통신으로, 게임 진행 상황과 결과를 즉시 알 수 있어야 합니다.
⑤ 이미 생성된 방에 참가하거나, 새로 방을 만들어 상대방과 대전 가능합니다.
■ 게임 진행 방법 :
① 사용자 생성 및 로그인
② 방 만들기 및 방 검색 / 자동 상대 찾기
③ 게임 진행
④ 제한 시간 내에 가위/바위/보를 선택하여 상대방과 대전 진행
⑤ 결과 확인
위와 같은 게임을 구동하기 위해 서버는 일반적으로 이러한 구조가 될 것 입니다.
우선 게임에 접속하면 로그인 처리를 해줄 수 있는 로비(GameService)가 있고, 상대를 찾거나 방을 만들 수 있는 서버(MatchingSerive)와 실제 가위바위보를 진행하는 서버(RoomServer)가 필요할 것 입니다.
단순 접속 처리를 하는 로비는 유저가 대기하는 장소로 모든 유저의 요청을 받아야 하므로, 유저접속에 따라 스케일 인/아웃이 되도록 ELB 통해 분산처리가 되도록 해야하고, 매칭 서버와 대전서버(RoomServer)도 미리 충분히 리소스를 확보해 놓아야 합니다.
[구성도 1] 일반적인 세션형 게임의 구성도
저희는 위와 같은 구조의 게임 인프라 환경에서 AWS GameLift 서비스를 이용하면 어떻게 변하게 될지 생각해 보았습니다.
우선 [구성도 1]에서의 대전서버(GameRoom)은 게임리프트의 Fleet으로 대치될 수 있었습니다. 이 플릿은 하나의 빌드를 사용하여 동일한 기능을 하는 1개 이상의 서버 인스턴스의 집합으로, 게임에서 사용하는 포트, 프로세스 수, 세션 수 등의 값을 미리 설정하여 생성하면 지정된 값 만큼 자동으로 스케일 인/아웃을 하여 유저의 요청에 대응할 수 있는 기능을 제공하며, 무엇보다 손쉬운 설정으로 스팟 인스턴스를 이용할 수 있게되어있어 비용절감에도 큰 효과를 볼 수 있게 되어있습니다.
그리고 매칭 서버는 정해진 규칙에 따라 유저와 유저의 대결을 매칭해 주는 기능을 제공하는 서비스로, 게임리프트에서 플렉스매치 기능을 이용하여 위에서 말한 규칙을 지정해 놓으면 따로 이를 위한 인스턴스를 유지/관리할 필요가 없게되어 활용해 보는 것으로 하였습니다.
게임리프트의 이런 기능을 이용하게 되는 경우 시스템 구성은 [구성도 2]와 같이 단순하게 그려지게 됩니다.
[구성도 2] 게임리프트를 이용한 일반적인 세션형 게임 구성도
이로서 저희가 구현하려고 했던 게임의 기능들은 모두 구현이 가능했습니다.
하지만, 단순 로비 역할의 게임 서비스 인스턴스(GameService) 유지/관리를 위해 ALB 등을 항상 서비스 상태로 준비하지 않으면 안되는 구조여서, 서버리스로 구현하면 좀 더 비용적인 이점이 있고 관리가 편할 것으로 생각하여 API Gateway와 Lambda를 이용하여 [구성도 3]과 같이 수정하였습니다.
[구성도 3] Serverless+GameLift를 이용한 세션형 게임의 구성도
이로서 비용과 관리요소를 최소화한 가위바위보 게임을 완성할 수 있었습니다🙌
이렇게 간단한 게임을 개발하는데 있어 게임리프트를 이용하여
- 불필요한 인프라 설정 및 관리로부터의 시간과 노력 절약!
- 손쉬운 스팟 인스턴스 사용으로 비용 절감 효과!
를 직접 느낄 수 있었습니다.
지금까지 Amazon GameLift와 AWS의 다양한 기술을 활용한 게임 개발기를 살펴보았습니다!
Amazon GameLift의 주요 기능과 효용성을 이해하시는데 도움이 되었기를 바랍니다.
GameLift 도입에 관해 궁금한 사항이 있으시다면 메가존클라우드로 연락 부탁드립니다.
감사합니다😊
메가존클라우드 게이밍세일즈팀 I mzc_gaming@mz.co.kr