Amazon Web Services 한국 블로그
Amazon GameLift를 시작하기 위한 기술 팁 모음
지난 2월 11일 클라우드 기반 게임 개발자에게 게임 개발을 위한 신규 Lumberyard, Amazon GameLift 및 Twitch 통합 서비스라는 반가운 소식이 있었습니다.
Amazon Lumberyard는 CryEngine에 기반한 게임 개발 엔진입니다. 소스 코드 형태로 제공되며 사용자가 직접적으로 빌드해서 원하는 게임을 만들 수 있습니다. 현재 CryEngine 3.8.1을 기본으로 AWS 서비스와 GameLift를 지원하도록 제공되고 있습니다. Lumberyard에 대한 튜토리얼 자료는 시작하기 기술 문서나 Amazon GameDev Tutorials를 참고하시면 됩니다.
이 글에서는 Amazon GameLift에 대한 소개와 첫 예제를 실행할 때, 발생하기 쉬운 문제들에 대한 해결 방법 등에 대해 소개하고자 합니다.
Amazon GameLift란 무엇인가?
Amazon GameLift는 세션 기반의 멀티 플레이어 게임 서비스를 위한 관리형 서비스입니다. 게임 서버를 배포, 운영, 확장하기 위해 기존 다른 AWS 서비스와 마찬가지로 관리형으로 제공되어 게임 서버를 쉽게 구현하고 관리할 수 있게 합니다.
Amazon GameLift 서비스는 클라우드에서 게임 서버를 운영할 때 생기는 어려운 점을 해소합니다. 게임 서버를 개발한 이후에 이것을 배포하고 확장성 있게 운영하는 것은 쉬운 일이 아닙니다. 일반적으로 게임 서비스를 만들면 최초로 게임이 오픈 되었을 때, 예측 할 수 없는 트래픽으로 서버가 다운되는 경우가 많습니다. 게임 서버의 다운은 매우 빠르게 알려지고, 게임 커뮤니티 내에서 좋지 않은 평판이 만들어져서 게임 서비스에 치명적이 될 소지가 많습니다. GameLift는 AWS의 클라우드 서비스를 통해 이러한 문제를 해결할 수 있습니다.
또한, 멀티 플레이어 게임에 대한 기본적인 서버 메커니즘을 제공합니다. 그간에 축적된 게임 서비스 기술 지식에 기반해서 AWS 내부 전문가들에 의해 설계 및 개발되었고, 게임 디버깅이나 플레이어들의 상태를 쉽게 파악하기 위해 다양한 게임 텔리메트리(telemetry)를 지원합니다.
뿐만 아니라, 세션형 멀티 플레이어 게임에도 적합합니다. 즉, 오랜 시간동안 세션이 유지되면서 상호 데이터가 동기화 되는 형태 보다는 일정 시간 안에 여러 사용자가 플레이하면서 상호 데이터 동기화를 할 필요가 있는 게임에 적합합니다.
Amazon GameLift에 대한 추천 게임 종류는 아래 표와 같습니다.
적합한 게임 형식 | 게임 예 |
FPS | Call of Duty, Evolce |
MOBA(Multiplayer Online Battle Arena)s | Legue of Legends, Heroes of the Storm |
Survival/Sandbox | Minecraft, Ark |
Racing | Mario Kart, Kart Rider |
Sports | NBA2K, FIFA |
MMO나 모바일 소셜 게임 및 전용 서버가 없는 P2P 게임 등은 적합하지 않으며, Amazon GameLift를 사용해서 개발하기 적합한 게임은 전용 서버(dedicate server) 형식 게임이라고 할 수 있습니다.
GameLift에 예제 서비스 올리기
향후에는 GameLift에 다양한 게임 엔진과도 연동한다는 계획이지만, 현재는 Lumberyard만 지원하고 있습니다. Lumberyard에는 여러 샘플 프로젝트가 포함되어 있는데 멀티플레이어 샘플 게임도 존재합니다.
예제 게임 튜토리얼을 따라 하면 손쉽게 샘플 게임을 빌드하고 GameLift로 서비스를 올려 볼 수 있습니다.
이 글에서는 튜토리얼 그 자체 보다는 샘플을 올리는 과정에서 나오는 버그라던가 실수를 방지하는 기술 팁을 살펴보도록 할 예정입니다. 먼저 기술 팁을 설명하기 앞서서 샘플 프로그램을 GameLift에 올리는 단계를 간단히 살펴보겠습니다.
- Lumberyard의 설치
- Visual Studio 2013, update 4를 설치한다.
- Lumberyard를 풀고, 3rd 파티 툴들을 모두 설치한다.
- 예제 게임 튜토리얼대로 서버 예제를 선택한 이후에 프로젝트를 빌드한다.
- 빌드 패키지를 구성한다 예) install.bat 등을 적절히 수정한다.
- 빌드된 패키지를 서버로 업로드
- AWS CLI를 설치한다.
- GameLift를 위한 Policy를 생성하고, AWS IAM 유저를 붙인다.
- CLI 명령을 통해 GameLift에 빌드된 서버 패키지를 올린다.
- GameLift Fleet을 생성
- Fleet이름, 서버 빌드, 인스턴스 타입을 선택한다.
- EC2 포트 세팅을 한다.
- 런치 패스와 런치 파라미터를 지정한다.
- 게임 클라이언트 생성
- GameLiftClient.bat를 생성한다.
- 게임 세션을 생성한다.
- 플레이어가 게임 세션에 접근한다
흔히 발생하는 오류나 실수를 위한 기술 팁
위와 같이 GameLift에 샘플 게임을 올리는 과정에서 아래와 같은 문제가 발생할 수 있으며, 이를 위한 기술팁을 소개하고자 합니다.
Tip 1. Unicode 문제
앞서 설명한 단계 중 샘플 프로젝트를 컴파일 하는 와중에 에러가 발생하면서, 컴파일이 중단될 수 있습니다. 이것은 파일이 Unicode 파일 형식으로 저장이 되지 않아 주로 발생합니다.
에러 메시지를 보고 Visual Studio에서 해당 파일을 수정하면 됩니다. 아래는IntersectorSegment.cpp파일에 대한 수정 내역입니다.
[그림 1] 파일 인코딩 타입 변경
UTF-8 파일 타입으로 인한 오류는 게임 개발자에게 매우 익숙한 일이므로 쉽게 문제를 해결해서 다음 단계로 넘어 갈 수 있습니다.
Tip 2. Install.bat 등 배치 파일 오류
빌드 패키지를 구성할 때 흔한 오류는 배치 스크립트를 정확히 만들지 않는 것입니다. 예를 들어 Install.bat파일은 다음과 같이 설정해야 한다.
vcredist_x64.exe /q
만약 여기서 /q 옵션을 실수로 기술하지 않은 채 패키징을 하고, GameLift로 올렸다면 서버 그룹(Fleet)을 생성할 때 다음과 같은 에러 메시지가 발생합니다.
LEET STATUS changed sequentially like this: NEW DOWNLOADING ERROR.
배치 스크립트의 각종 오류로 인한 결과는 빌드를 GameLift로 올릴 때 발생하는 것이 아니라 서버 그룹(Fleet) 등을 생성할 때 나타날 수 있고, 또 에러 메시지가 직관적이지 않아 디버깅에 매우 어려움을 겪을 수 있습니다. 따라서, 꼭 배치 스크립트의 에러를 확인하시길 바랍니다.
Tip 3. EC2 포트설정
게임 서버 그룹(Fleet)을 생성할 때, EC2 port 에 대한 설정을 지정해야 합니다. 콘솔에서 작업할 때 포트 설정 저장이 되도록 하려면 아래 그림의 가장 오른 쪽의 작은 아이콘을 눌러서 저장을 해야 합니다.
흔히 그냥 값을 기록하면 자동으로 저장될 줄 알고 값만 넣은 다음 Initialize Fleet 버튼만 누를 수 있는데, 이렇게 되면 포트 설정이 되지 않아서 문제가 됩니다.
[그림 2] EC2 포트 설정
Fleet을 생성한 이후에는 각 설정 값을 확인 할 수 있습니다. 정확히 EC2 포트가 설정되었는지 그림 3에서 확인할 수 있습니다.
[그림 3] Fleet 의 설정 결과 확인
Tip 4. GameLiftClient.bat 수정하기
마지막으로 수정이 필요한 것은 게임 클라이언트 생성 시 GameLiftClient.bat를 생성한는 단계입니다. 튜토리얼 문서에는 아래와 같이 내용을 작성하면 된다고 했지만, 추가적으로 두 개의 정보가 더 필요합니다.
MultiplayerProjectLauncher.exe +sv_port 33435 +gamelift_endpoint gamelift.us-east-1.amazonaws.com +gamelift_aws_region us-east-1 +gamelift_fleet_id +gamelift_aws_access_key +gamelift_aws_secret_key +map gameliftlobby
아래와 같이 엔드포인트와 리전 정보를 추가해 주어야 합니다.
MultiplayerProjectLauncher.exe +sv_port 33435 +gamelift_endpoint gamelift.us-east-1.amazonaws.com +gamelift_aws_region us-east-1 +gamelift_fleet_id +gamelift_aws_access_key +gamelift_aws_secret_key +map gameliftlobby
배치 파일을 실행하면 아래와 같은 실행된 게임을 보실 수 있습니다.
이 글에서는 Amazon GameLift의 샘플 프로젝트를 세팅하면서 흔히 마주치게 되는 오류를 피하는 팁을 설명하였습니다. 다음에는 Amazon GameLift SDK를 이용해서 직접 클라이언트와 서버를 세팅하는 방법을 살펴보겠습니다.
본 글은 아마존웹서비스 코리아의 솔루션즈 아키텍트가 국내 고객을 위해 전해 드리는 AWS 활용 기술 팁을 보내드리는 코너로서, 이번 글은 박선용 솔루션즈 아키텍트께서 작성해주셨습니다.