Amazon Web Services 한국 블로그

AWS .NET SDK를 통해 게임 개발 시작하기

국내외 많은 글로벌 게임 회사는 AWS가 제공하는 확장성을 통해 수백만 명의 동시 플레이어를 지원하고 언제 어디서나 낮은 지연 시간으로 최적의 게임 경험을 즐길 수 있습니다. 하지만, 다양한 AWS 서비스와 많은 유스 케이스로 인해 게임 개발자가 손 쉽게 게임 개발을 시작하는 방법은 여전히 쉽지 않습니다.

이 글에서는 게임 개발 시, AWS를 사용하는 첫 단계를 안내합니다. AWS 서비스를 안전하게 사용하는 방법에 대한 모범 사례를 제공하고, Unreal, Unity 및 Amazon Lumberyard와 같은 주요 3D 게임 엔진에 사용되는 언어 (C ++ 및 C #)로 SDK를 게임 클라이언트와 통합하는 방법을 소개합니다.

단계 1. 언어 플랫폼 선택하기

AWS SDK를 통합하는 단계는 C ++ 또는 C #로 작업 중인지 여부에 따라 다릅니다. 게임 언어에 대한 지침을 따르려면 클릭하십시오.

Unity와 같은 주요 게임 엔진에 사용되는 언어인 C#을 사용하여 SDK를 통합하는 방법을 빠르게 시작하는 샘플코드를 GitHub에서 다운로드할 수 있습니다.

단계 2. AWS .NET SDK 추가

샘플 코드 패키지는 AWS SDK를 프로젝트에 추가하는 데 필요한 단계는 보여주지 않기 때문에 이 글에서 그 내용을 다루려고 합니다. 이 문서에서는 Visual Studio 2017 이상 버전을 사용 중이라고 가정합니다. 이전 버전에서는 AWS .NET SDK를 통합하는 단계가 다를 수 있습니다.

Visual Studio에 내장된 NuGet 패키지 관리자가 .NET용 AWS SDK을 프로젝트에 추가하는 가장 좋은 방법입니다(Unity에 대한 특별 참고 사항은 아래 참조). 솔루션 탐색기에서 프로젝트를(솔루션이 아니라) 마우스 오른쪽 버튼으로 클릭하고 “Manage NuGet Packages…”를 선택하여 프로젝트에 패키지를 추가할 수 있습니다.

이 데모의 경우 AWSSDK.CognitoIdentity 및 AWSSDK.Lambda를 추가했습니다. 또한 Newtonsoft JSON.NET 라이브러리를 사용했습니다. 데모를 실행하면 NuGet으로 추가한 이러한 모든 라이브러리가 추가되고(사용되는 라이브러리를 보려면 프로젝트의 루트 폴더에 있는 packages.config 확인), 처음 빌드할 때 Visual Studio가 이를 가져옵니다.

패키지를 추가하려면 NuGet 패키지 관리자에서 “Browse” 탭을 클릭한 다음 라이브러리를 검색합니다 라이브러리를 찾으면 라이브러리를 클릭하고 오른쪽 패널에서 “Install”을 클릭합니다. 예를 들어 AWS Lambda SDK를 추가하는 방법은 다음과 같습니다.

NuGet 패키지 관리자는 다음과 같습니다.

단계 3. 게임 코드 작성

C#용 SDK를 명시적으로 초기화할 필요는 없습니다. 데이터 및 코드를 통해 구성 파라미터를 몇 가지 방법으로 설정할 수 있습니다. 이 데모에 대해서는 특정한 설정이 없지만, 로깅 수준이나 기본 리전과 같은 항목을 변경하려면 몇 가지 방법을 변경할 수 있습니다. 자세한 내용을 보려면 개발자 안내서를 참조하십시오.

C#에서 익명 자격 증명을 가져오려면 Amazon Cognito에서 코드를 생성하는 이점을 누릴 수 있습니다. 이전 게시글에서 언급한 것처럼 사용자가 로그인을 하거나 새 IAM 역할을 만들고 키를 전송할 필요 없이 사용자에게 AWS 리소스에 대한 액세스를 부여하는 편리한 방법은 Amazon Cognito입니다.

.NET SDK를 보면 앱에서 키를 더 쉽게 관리하도록 해주는 도구가 있음을 알 수 있습니다. 하지만 모든 IAM 역할을 직접 만들고, 키를 가져오고, 이를 입력하려면 추가 작업이 많이 필요할 수 있습니다. 익명 사용자를 설정하는 것이 훨씬 간편하며, 교차 플랫폼용 게임을 만들려는 경우 이 방식이 C++에서 잘 작동합니다.

자격 증명이 준비되었으면 이제 AWS를 호출할 Lambda 클라이언트를 만들어야 합니다. 이것이 AWS SDK를 사용하는 일반적인 패턴입니다. AWS를 호출하는 클라이언트를 만든 다음, 기본적으로 클라이언트를 통해 호출할 때 사용되는 파라미터인 요청을 만듭니다.

클라이언트 호출은 응답을 반환하는데, 이 응답은 호출을 통해 발생한 결과에 대한 정보를 알려 줍니다. 여기에 나오는 클라이언트 호출은 차단 호출입니다. 즉, 프로그램 실행은 클라이언트가 호출을 하고 ASW가 응답할 때까지 기다린 다음 다시 실행을 시작합니다. 대부분의 경우처럼 게임에서 이런 방식이 적합하지 않은 경우, 스레드에서 AWS 호출을 만들거나 클라이언트 호출의 “비동기” 버전을 사용하여 실행이 끝날 때 코드로 콜백할 수 있습니다. 이 코드에서는 샘플의 가독성을 위해 차단 호출을 사용합니다.

다음은 Amazon Cognito 자격 증명을 가져오고 이를 사용하여 Lambda 클라이언트를 만드는 데 사용한 코드입니다.

	using Amazon;
	using Amazon.CognitoIdentity;

	CognitoAWSCredentials credentials = new CognitoAWSCredentials(
        	    “us-east-1:xx0000x0-0x00-0000-0000-0x0000000xxx", // Identity pool ID
            RegionEndpoint.USEast1 // Region
        );
        IAmazonLambda lambdaClient = new AmazonLambdaClient(credentials, RegionEndpoint.USEast1);

이게 전부입니다. 이제 Lambda 클라이언트를 사용하여 AWS와 통신하고 함수를 호출할 수 있습니다.

Unity 참고 사항

현재 특별한 Unity용 SDK 빌드가 있습니다. 클라이언트로부터 호출할 수 있는 서비스가 한정되고 기타 몇 가지 제한 사항이 있습니다. 하지만 앞서 언급한 것처럼, 가장 중요한 두 서비스 Amazon Cognito 및 AWS Lambda가 포함되어 있으며 게임에 필요한 것은 모두 할 수 있습니다.

.NET용 AWS SDK 사용에 대한 추가 정보가 필요한 경우 문서를 참조하십시오. Amazon Cognito 설정에 대한 추가적인 도움이 필요한 경우 ‘Amazon Cognito로 플레이어 인증을 설정하는 방법’ 이라는 글을 참조하세요.

여러분의 의견을 기다립니다! 이 학습 리소스에 대한 문의 사항이나 의견이 있는 경우 Amazon GameDev 포럼을 방문해 주십시오.

– Chris Blackwell;

이 글은 AWS GameTech 블로그내 How to integrate the AWS .NET SDK for games using C#의 한국어 번역입니다.