Amazon GameLift를 사용한 하이브리드 호스팅을 위한 개발 로드맵
이 로드맵은 멀티플레이어 게임을 위한 호스팅 솔루션을 개발하는 방법을 안내합니다. Amazon GameLift는 여러 게임 호스팅 옵션을 제공합니다. 이러한 옵션에 대한 자세한 내용은 Amazon GameLift 솔루션 페이지를 참조하세요.
하이브리드 솔루션은 Amazon GameLift에서 관리하는 클라우드 기반 리소스와 자체 관리형 호스팅 리소스를 비롯한 호스팅 리소스의 조합을 사용합니다. 하이브리드 호스팅에 대한 자세한 내용은 Amazon GameLift Anywhere를 사용한 하이브리드 게임 서버
하이브리드 아키텍처는 다음 구성 요소로 구성됩니다.
-
멀티플레이어 게임 호스팅에 최적화된 Amazon Elastic Compute Cloud(Amazon EC2) 컴퓨팅 인스턴스를 사용하는 하나 이상의 Amazon GameLift 관리형 플릿
-
구성 관리 및 배포 도구를 포함하여 기존 온프레미스 또는 기타 호스팅 리소스를 사용하는 하나 이상의 Amazon GameLift Anywhere 플릿 (선택 사항: AWS Systems Manager)
-
Amazon GameLift 서버 SDK와 통합되어 모든 플릿에 배포되는 단일 게임 서버 빌드
-
Amazon GameLift 서비스와 상호 작용하고 게임 세션을 요청할 수 있도록 AWS SDK와 통합된 단일 게임 클라이언트 및 백엔드 서비스
-
모든 플릿에서 사용 가능한 게임 서버와 로드 밸런서가 있는 새 게임 세션을 배치하는 Amazon GameLift 공유 대기열
-
Anywhere 플릿과 함께 배포되어 모든 플릿의 컴퓨팅 전반에서 서버 프로세스 관리 작업을 간소화하는 Amazon GameLift 에이전트
-
(선택 사항) 다중 플레이어 매치를 생성하고 해당 매치에 대한 게임 세션을 설정하는 FlexMatch 매치메이커
이 로드맵은 Amazon GameLift 하이브리드 호스팅을 통해 멀티플레이어 게임을 성공적으로 시작하고 실행할 수 있는 간소화된 경로를 제공합니다. 필요한 구성 요소가 준비되면 게임 개발을 계속 반복하고 호스팅 솔루션을 사용자 지정할 수 있습니다. 출시일이 가까워지면 프로덕션 수준 사용을 위한 호스팅 솔루션을 준비하는 데 필요한 Amazon GameLift 호스팅을 사용하여 게임 출시 준비 섹션을 참조하세요.
Amazon GameLift 플러그인으로 바로 시작
Unreal Engine 또는 Unity로 프로젝트를 개발 중이라면 Amazon GameLift 플러그인으로 호스팅할 게임 설정을 바로 시작할 수 있습니다. 플러그인을 사용하면 Amazon GameLift SDK를 게임 프로젝트에 추가하고 안내 워크플로를 사용하여 Amazon GameLift 플릿과 Amazon GameLift 관리형 플릿을 모두 사용하는 하이브리드 호스팅 솔루션의 간단한 작동 버전을 구축할 수 있습니다. 그런 다음 이러한 기본 사항을 기반으로 필요에 따라 빌드 및 사용자 지정이 가능합니다.
게임 서버가 호스팅을 위해 배포될 때 Amazon GameLift 서비스와 통신할 수 있도록 게임 서버에 기능을 추가합니다. 게임 서버가 Amazon GameLift 관리형 플릿 또는 Anywhere 플릿에서 실행 중인 경우 동일한 기능이 필요합니다.
-
게임 프로젝트에 대한 Amazon GameLift 서버 SDK(버전 5.x)를 가져옵니다. 서버 SDK는 C++, C# 및 Go로 지원됩니다. Amazon GameLift 서버 SDK를 다운로드합니다.
-
게임 서버 코드를 수정하여 서버 SDK 기능을 추가합니다. 자세한 지침은 사용자 지정 게임 서버와 게임 통합을 참조하세요. 최소한 다음 작업을 수행해야 합니다.
-
코드를 추가하여 Amazon GameLift SDK를 초기화하고 Amazon GameLift 서비스와 WebSocket 연결을 설정합니다. 서버 SDK 작업
InitSdk()
를 사용합니다. Anywhere 플릿 컴퓨팅에서 실행할 때 서버 파라미터를 지정하는 코드를 포함합니다. -
서버 프로세스가 게임 세션을 호스팅할 준비가 되면 Amazon GameLift 서비스에 보고하는 코드를 추가합니다. 서버 SDK 작업
ProcessReady()
를 사용합니다. -
필요한 콜백 함수
OnRefreshConnection()
,OnProcessTerminate()
,OnStartGameSession()
을 구현합니다. 이러한 함수를 사용하면 게임 서버 프로세스가 Amazon GameLift 서비스와의 연결을 유지하고, Amazon GameLift에서 메시지가 표시되면 게임 세션을 시작하고, 프롬프트에 응답하여 게임 서버 프로세스를 종료할 수 있습니다. -
서버 프로세스가 게임 세션을 종료하면 Amazon GameLift 서비스에 보고하는 코드를 추가합니다. 서버 SDK 작업
ProcessEnding()
을 사용합니다.
-
-
게임 서버 빌드를 패키징합니다. 빌드 파일, 종속 항목 및 지원 소프트웨어를 사용하여 설치 스크립트를 생성합니다. 게임 빌드 파일 패키징하기 섹션을 참조하세요. Amazon Simple Storage Service(Amazon S3) 버킷을 사용하여 게임 빌드 버전을 저장하는 것이 좋습니다.
-
게임 서버 통합을 테스트합니다. 이 작업의 경우 Amazon GameLift Anywhere를 사용하여 로컬 테스트 설정에 설명된 대로 로컬 워크스테이션을 사용하는 Amazon GameLift Anywhere 플릿을 설정하는 것이 좋습니다. 이 단계에서는 게임 서버 빌드를 테스트 디바이스에 수동으로 설치하고 서버 프로세스를 시작합니다. AWS CLI를 사용하여 새 게임 세션을 요청하고 Amazon GameLift 서비스가 서버 프로세스에 게임 세션을 시작하라는 메시지를 성공적으로 표시하는지 확인합니다.
게임 클라이언트가 게임 세션에 연결하도록 요청하고 연결 정보를 얻은 다음 호스팅된 게임 세션에 직접 연결할 수 있는 방법을 생성합니다. 가장 일반적인 접근 방식은 게임 클라이언트와 Amazon GameLift 서비스 간에 중간자 역할을 하는 백엔드 서비스 기능을 설정하는 것입니다. 이 접근 방식은 호스팅 리소스를 보호하고 플레이어가 게임 세션에 배치되는 방식을 더 잘 제어할 수 있도록 합니다.
-
호스팅을 위한 백엔드 서비스 기능을 구축합니다. 백엔드 서비스가 Amazon GameLift 서비스와 통신하고 게임 클라이언트에 연결 정보를 전송합니다. 이 기능에는 게임 세션 시작, 플레이어를 게임에 배치, 게임 세션 정보 검색이 포함됩니다. 자세한 지침은 사용자 지정 게임 서버와 게임 통합을 참조하세요. 최소한 다음 작업을 수행해야 합니다.
-
Amazon GameLift용 AWS SDK를 가져와 백엔드 서비스 프로젝트에 추가합니다. 클라이언트 서비스에 대한 Amazon GameLift SDK 리소스를 참조하세요.
-
Amazon GameLift 클라이언트를 초기화하고 키 설정을 저장하는 코드를 추가합니다. 백엔드 서비스에 Amazon GameLift 설정 섹션을 참조하세요.
-
AWS SDK 작업
CreateGameSession()
을 호출하고 게임 클라이언트에 게임 세션 연결 정보를 제공하는 기능을 추가합니다. 특정 플릿에서 게임 세션 생성 페이지를 참조하세요.CreateGameSession()
호출로 간편하게 새 게임 세션 요청을 시작할 수 있습니다. 게임 세션 배치 시스템을 설치한 후(3단계 참조) 이 코드를StartGameSessionPlacement()
에 대한 호출(또는 FlexMatch를 사용하는 경우StartMatchmaking()
코드)로 바꿉니다.백엔드 서비스 설계에 대한 지침은 게임 클라이언트 서비스 설계 페이지를 참조하세요.
-
-
플레이어가 호스팅된 게임 세션에 연결할 수 있도록 게임 클라이언트에 기능을 추가합니다. 게임 클라이언트가 Amazon GameLift가 아닌 백엔드 서비스에 직접 요청합니다. 백엔드 서비스가 게임 세션 연결 정보를 제공한 후 게임 클라이언트는 게임 세션과 직접 연결하여 게임을 플레이합니다.
-
게임 클라이언트 통합을 테스트합니다. 로컬 워크스테이션과 동일한 Amazon GameLift Anywhere 플릿을 사용하여 테스트할 수 있습니다.
개발 단계에서 게임 빌드가 Amazon GameLift 관리형 플릿에서 어떻게 작동하는지 테스트하려면 클라우드 기반 테스트 환경도 설정하는 것이 좋습니다. 이 Amazon GameLift Toolkit 솔루션은 관리형 플릿의 동작을 모방하지만 최소 처리 시간으로 게임 서버 빌드를 업데이트할 수 있습니다.
Amazon GameLift가 새 게임 세션에 대한 요청을 처리하고 호스팅할 사용 가능한 게임 서버를 찾는 방법을 사용자 지정합니다. Amazon GameLift는 모든 플릿에서 모든 게임 서버의 가용성을 자동으로 추적합니다. 게임 클라이언트가 게임 세션에 연결하라는 요청을 보내면 Amazon GameLift는 최소 지연 시간, 비용 및 가용성과 같이 정의된 우선 순위 집합을 기반으로 '최상의' 배치를 찾습니다.
-
사용 가능한 게임 서버가 있는 새 게임 세션을 배치하기 위한 게임 세션 대기열을 생성합니다. 대기열은 게임 세션 배치의 기본 메커니즘입니다. 자세한 지침은 게임 세션 대기열 생성을 참조하세요.
-
최소한 Anywhere 플릿을 대기열의 대상으로 추가합니다. 다른 모든 설정은 선택 사항입니다.
-
-
백엔드 서비스 코드에서
CreateGameSession()
호출을StartGameSessionPlacement()
로 변환합니다. 다중 위치 대기열에서 게임 세션 생성 페이지를 참조하세요. -
게임 세션에 연결할 준비가 되면 게임 클라이언트에 알리는 메커니즘을 생성합니다. 개발 중에 DescribeGameSessionPlacement에 대한 호출을 사용하여 게임 세션 상태를 폴링할 수 있습니다. 그러나 대기열을 사용하여 대용량을 처리하기 전에 이벤트 알림을 활성화해야 합니다. 게임 세션 배치의 이벤트 알림 설정 섹션을 참조하세요.
-
(선택 사항) FlexMatch 매치메이킹 구성 요소를 추가합니다. Amazon GameLift FlexMatch 개발자 안내서 지침을 참조하세요.
지금까지 로컬 디바이스(Anywhere 플릿 컴퓨팅으로 등록됨)로 작업하여 게임 구성 요소를 테스트하고 반복해 왔습니다. 다음 단계는 프로덕션 시스템에 필요한 플릿 유형을 설정하는 것입니다. Anywhere 플릿으로 시작하고 Amazon GameLift 에이전트를 추가하여 일부 주요 온컴퓨트 호스트 관리 작업을 관리합니다. 자세한 내용은 Amazon GameLift 에이전트 사용법를 참조하세요.
-
Amazon GameLift 에이전트를 가져와서 게임 서버 설치 패키지에 추가합니다. Amazon GameLift Agent GitHub 리포지토리
에서 사용할 수 있는 에이전트 소스 코드를 가져와 빌드합니다. 결과 JAR 파일 실행 파일을 게임 빌드 실행 파일과 동일한 디렉터리에 넣습니다. -
필요에 따라 에이전트에 대한 시작 스크립트를 수정합니다. 컴퓨팅 실행이 시작되는 즉시 에이전트 실행 파일이 시작되는지 확인합니다. 호스팅 컴퓨팅에서 에이전트를 설치하고 실행하는 방법에 대한 도움말은 에이전트 리포지토리의 readme 파일을 참조하세요. 시작 명령에는 최소한 Anywhere 플릿 ID와 AWS 리전, 사용자 지정 위치 및 컴퓨팅 이름을 지정하는 옵션이 포함되어야 합니다.
에이전트는 자동으로 다음 작업을 처리하므로 스크립트를 사용하여 이러한 작업을 처리한 경우 제거할 수 있습니다.
-
RegisterCompute()
를 호출하여 Anywhere 플릿에 컴퓨팅을 추가합니다. -
GetComputeAuthToken()
을 호출하여 Amazon GameLift 서비스에 연결할 때 게임 서버를 인증합니다. 에이전트는 인증 토큰 가져오기 및 새로 고침을 관리합니다. 인증 토큰은 컴퓨팅에서 실행 중인 모든 게임 서버 프로세스에서 사용할 수 있습니다. -
런타임 지침 세트를 기반으로 컴퓨팅에서 새 서버 프로세스를 시작합니다.
-
-
Anywhere 플릿의 컴퓨팅에 대한 런타임 구성을 생성합니다. 최소한 게임 서버 실행 파일의 시작 경로를 지정합니다. Amazon GameLift 콘솔 또는 AWS CLI를 사용하여 플릿에 대한 런타임 지침을 생성하거나 수정할 수 있습니다. 에이전트는 이러한 지침을 수행하고 Amazon GameLift 서비스에서 정기적으로 업데이트를 요청합니다.
-
필요에 따라 게임 세션 대기열을 설정하거나 수정합니다. 새 대기열을 생성(또는 기존 대기열 업데이트)하고 Amazon GameLift 에이전트와 함께 배포된 Anywhere 플릿의 대상을 지정합니다.
-
Anywhere 플릿과의 에이전트 통합을 테스트합니다. 에이전트가 런타임 구성을 기반으로 서버 프로세스를 올바르게 시작하는지 확인합니다.
Amazon GameLift 관리형 EC2 플릿을 생성하여 Anywhere 플릿을 보완합니다. 2단계에서 개발 속도를 높이기 위해 클라우드 기반 테스트 환경을 설정한 경우, 대부분의 게임 개발 및 테스트를 완료한 후 관리형 플릿을 생성하도록 계획합니다. 자동 용량 조정과 같은 추가 설정을 구성하고 테스트하려면 완전 관리형 플릿이 필요합니다.
-
게임 서버 빌드를 패키징하고 Amazon GameLift에 업로드합니다. 빌드 파일, 종속 항목 및 지원 소프트웨어를 사용하여 설치 스크립트를 생성합니다. Anywhere 및 관리형 플릿 모두에서 동일한 빌드 소프트웨어를 사용할 수 있습니다. Amazon GameLift 호스팅을 위한 사용자 지정 서버 빌드 배포 섹션을 참조하세요. 콘솔 또는 AWS CLI를 사용하여 Amazon GameLift에 빌드를 업로드할 수 있습니다.
빌드를 업로드하기 전에 관리형 플릿을 생성할 AWS 리전을 결정합니다. 빌드를 동일한 리전에 업로드해야 합니다. 플릿 위치 선택에 대한 자세한 내용은 플릿 위치 페이지를 참조하세요.
-
관리형 EC2 플릿을 생성합니다. Amazon GameLift 콘솔 또는 AWS CLI를 사용하여 관리형 플릿을 생성합니다. 플릿을 생성하면 Amazon GameLift가 호스팅을 위해 게임 서버 빌드 배포를 즉시 시작합니다. 관리형 플릿의 여러 부분을 구성할 수 있습니다. 자세한 지침은 Amazon GameLift 관리형 EC2 플릿 생성을 참조하세요. 최소한 다음 작업을 수행해야 합니다.
-
플릿에 이름을 지정하고 업로드된 게임 빌드 중 배포할 빌드를 지정합니다.
-
플릿의 온디맨드 인스턴스를 선택하고 플릿 위치에서 사용할 수 있는 인스턴스 유형을 선택합니다. 스팟 플릿은 중요한 옵션이지만 추가 설계 및 구성이 필요합니다.
-
Anywhere 플릿과 함께 사용한 것과 유사한 설정으로 런타임 구성을 생성합니다. 최소한 게임 서버 실행 파일의 시작 경로를 지정합니다.
-
인바운드 트래픽이 게임 서버에 액세스할 수 있도록 포트 설정을 지정합니다.
-
-
공유 게임 세션 대기열에 관리형 플릿을 추가합니다. Amazon GameLift 에이전트와 함께 배포된 관리형 플릿과 Anywhere 플릿의 대상을 모두 포함하도록 4단계에서 생성한 대기열을 업데이트합니다.
-
관리형 플릿으로 게임 호스팅을 테스트합니다. 이 시점에서 게임 클라이언트가 게임 세션을 요청하고, 연결 정보를 얻고, 게임 세션에 성공적으로 연결하여 전체 호스팅 주기를 테스트할 수 있어야 합니다.
게임 출시를 준비할 때 호스팅 솔루션을 미세 조정해야 합니다. 고려해야 할 몇 가지 결정 사항은 다음과 같습니다.
-
Anywhere 플릿의 경우, 게임 서버 소프트웨어 설치 및 실행을 포함하여 필요에 따라 컴퓨팅을 시작하고 종료하는 프로세스를 자동화합니다. 컴퓨팅 재활용은 컴퓨팅이 정기적으로 업데이트되도록 하는 데 유용하며 컴퓨팅을 종료하면 필요하지 않을 때 비용을 절감할 수 있습니다.
-
게임 서버가 다른 AWS 리소스와 통신해야 하는 경우 IAM 역할을 설정하여 액세스를 관리합니다. 플릿에서 다른 AWS 리소스와 통신 섹션을 참조하세요.
-
게임 서버를 위치시킬 지리적 위치를 결정합니다. 관리형 플릿에 원격 위치를 추가합니다. 관리형 플릿을 위한 설계 가이드 섹션을 참조하세요.
-
관리형 플릿의 경우 비용 절감을 위해 스팟 플릿을 사용하는 것이 좋습니다. 자습서: 스팟 인스턴스를 사용하여 Amazon GameLift 대기열 생성 섹션을 참조하세요.
-
컴퓨팅 리소스 구성을 선택하여 플릿 성능을 최적화한 다음 컴퓨팅당 최적의 서버 프로세스 수를 실행하도록 런타임 지침을 구성합니다. Anywhere 플릿과 관리형 플릿 모두에 대해 이 작업을 수행합니다. Amazon GameLift가 게임 서버를 시작하는 방법 관리 섹션을 참조하세요.
-
우선 순위 설정 사용자 지정을 포함하여 관리형 플릿에 대한 게임 세션 배치 옵션을 실험합니다. 게임 세션 대기열 설계 섹션을 참조하세요.
-
관리형 플릿의 경우 예상 플레이어 수요에 맞게 자동 용량 조정을 설정합니다. Amazon GameLift를 사용하여 게임 호스팅 용량 확장 섹션을 참조하세요.
-
Anywhere 플릿의 경우 예상 플레이어 수요에 맞게 수동 또는 자동 용량 조정을 처리하는 메커니즘을 생성합니다.
-
필요한 경우 다른 리소스에 대한 장애 조치를 설계하고 구현합니다. 다른 AWS 리전에서 대기 플릿을 설정하고 필요한 경우 장애 조치를 처리하도록 대기열 및 오토 스케일링을 수정합니다.
-
분석 및 로깅을 포함한 호스팅 관찰성 도구를 설정합니다. Amazon GameLift 모니터링 섹션을 참조하세요. 지표 그룹을 생성하여 모든 호스팅 리소스에 대한 분석을 집계합니다.
-
코드형 인프라(IaC)를 사용하여 배포를 자동화합니다. AWS CloudFormation을 사용하는 Amazon GameLift 호스팅 리소스 관리 섹션을 참조하세요.
Amazon GameLift는 모든 배포별 구성에 대한 AWS CloudFormation 템플릿 사용을 지원합니다. 또한 AWS Cloud Development Kit (AWS CDK)를 사용하여 Amazon GameLift 리소스를 정의할 수 있습니다. AWS CDK에 대한 자세한 내용은 AWS Cloud Development Kit (AWS CDK) 개발자 가이드 섹션을 참조하세요.
AWS CloudFormation 스택 배포를 관리하려면 AWS CodePipeline과 같은 지속적 통합 및 지속적인 전송(CI/CD) 도구와 서비스를 사용하는 것이 좋습니다. 이러한 도구를 사용해 게임 서버 바이너리를 빌드할 때마다 자동으로 배포하거나 승인을 받아 배포할 수 있습니다. CI/CD 도구 또는 서비스를 사용하면 다음과 같은 새 게임 서버 버전에 대한 리소스 배포가 가능합니다.
-
게임 서버 바이너리를 빌드하고 테스트합니다.
-
Amazon GameLift에 바이너리를 업로드합니다.
-
새 빌드로 새 플릿을 배포합니다.
-
게임 세션 대기열에 새 플릿을 추가하고 이전 빌드 버전의 플릿을 제거합니다.
-
이전 빌드의 플릿이 더 이상 활성 게임 세션을 호스팅하지 않는 경우 해당 플릿의 AWS CloudFormation 스택을 삭제합니다.
-