AWS를 사용하는 게임 고객사를 대상으로 ‘Amazon GameLift 세션’ 을 준비했습니다.
GameLift는 클라우드에서 세션 기반 멀티플레이 게임 서버를 배포, 운영, 조정하는 데 사용되는 완전 관리형 서비스로, 본 행사에서는 Amazon GameLift를 이용한 세션형 1:1 게임 배포 실습을 진행합니다.
Anti cheat – 서버에서 게임
클라이언트 패킷의 유효성을
검사하고 플레이어들의 행동을
모니터링 할 수 있습니다.
복잡한 백앤드의 구축을 단순화 -
서버에서 복잡한 게임 로직 처리
더 큰 규모의 게임 세션 운영 – 배틀
로얄 스타일 게임에 적합합니다.
개선된 지연시간 – 서버들을
플레이어들과 더 가까운 곳에 둘 수
있습니다.
게임 개발 가속 - P2P 구성시 필요한
NAT Punch와 같은 복잡한
요구사항을 구현하지 않아도
됩니다.
Why use the cloud for multiplayer games?
GameLift가 사용 가능한 모든 리전에서
Linux/Windows 모두 사용 가능합니다.
Spot 인스턴스의 가격은 수요/공급
추이에 따라 조정됩니다.
Spot 가격은 On-Demand 가격을
초과하지 않습니다.
GameLift는 추가적으로 FleetIQ
기능으로 Spot 인스턴스 사용 여부를
결정합니다.
Amazon GameLift Spot
UNREAL SUMMIT 2019
Amazon GameLift Unreal Engine 4 integration
UE4 적용 편의를 위해 Amazon GameLift Server SDK는 UE4 plugin 을
제공합니다.
1. GameLift 홈페이지에서 Amazon GameLift Server SDK를 다운로드합니다.
2. Amazon GameLift Server SDK는 UE4 버전별 Plugin을 포함하고 있습니다.
3. 버전에 맞는 Plugin을 UE4 프로젝트에 Plugins 폴더를 만들어서 복사합니다.
UNREAL SUMMIT 2019
Amazon GameLift UE4 integration
4. 에디터 실행 후에 “플러그인” 에디터를 실행합니다.
5. “프로젝트” -> “Other”에서 GameLiftServerSDK를 활성화합니다.
6. 에디터 재시작 및 빌드가 완료되면 적용이 완료됩니다.
UNREAL SUMMIT 2019
Amazon GameLift Unity Integration
1. 개발하고자 하는 .Net 버전에 따른 Amazon GameLift SDK 라이브러리를
다운로드 받고 빌드
2. Unity Editor에서 Scripting runtime version 체크
3. Unity Editor에서 1번에서 빌드한 라이브러리를 import
UNREAL SUMMIT 2019
GameLift – new features
Realtime Servers – New!
플레이어 데이터 동기화, 주기적인 서버로직 실행, 상태 관리
Node.js 기반, javascript로 customize
수백만 플레이어 규모까지 자동확장
GameLift의 기존 Matchmaking 및 전용 게임 서버 호스팅 서비스와 통합
GameLift Server SDK update
GameLift Server SDK 3.3.0 부터 최신 버전 Unreal 4.21, Visual Studio 15 2017 등 주요 최신 게임
엔진 및 IDE와 호환
Unreal Engine plugin으로 FlexMatch backfill 기능 지원
에러메시지 개선
GameLift IAM role 지원
VPC peering 외에도 IAM role을 GameLift fleet에 적용하여 AWS resource 접근 제어 가능
Step 1: DynamoDB, ElastiCache, SQS
DynamoDB Table
• 플레이어 정보 테이블
• PlayerName, Password, ELO점수, 승패 카운트
ElastiCache – Redis
• 플레이어 ELO 점수기반 랭킹 저장
• Sorted Set 자료구조
SQS
• 게임 결과 정보 임시 저장용
• GameServer로부터 결과를 받아 DynamoDB에 반영하기
전까지 Queueing용
Step 2: Lambda, Lambda, Lambda
Game-Rank-Reader (Get Rank)
• ElastiCache로 부터 플레이어의 랭킹 정보를 읽는 함수
Game-Rank-Update (Scoring)
• DynamoDB 스트림으로부터 점수 업데이트 정보를 읽어서
Redis에 적재하는 함수
Game-SQS-Process (Game Result Processing)
• SQS에 있는 게임 결과 정보(ELO 점수)를 읽어서 DynamoDB
테이블에 반영하는 함수
Step 3: API-GW, S3 Static Website
Ranking Website
• 웹페이지를 통하여 플레이어들의 랭킹 정보를 확인할 수
있는 웹사이트 구축
• API-Gateway를 통하여 Game-Rank-Reader 람다 호출
• S3에 웹페이지를 위한 HTML 및 Javascript 저장
• S3의 Static website hosting 기능 사용
• Javascript에서 API-GW를 호출하여 랭킹정보 읽어옴
Step 4: GameLift 기본 구성
GameLift에 게임 서버 통합
• 게임 서버 호스팅 및 스케일링
• GameLift Server SDK 연동된 서버 업로드 및 플릿 생성
• ALIAS 생성후 플릿과 연결
Step 5: Serverless FlexMatch 구성
GameLift에 FlexMatch를 위한 구성
• GameLift Queue 구성
• FlexMatch Rule set 구성
• FlexMatch configuration 구성
API Gateway 및 Lambda 구성
• Match request 람다 구성
• Match status 람다 구성
• API Gateway로 위의 람다와 연동
Step 6: Play Test
클라이언트를 2개 실행
• 서로 다른 ID 설정 (config.ini)