Amazon GameLift Local을 사용하여 통합 테스트 - 아마존 GameLift

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon GameLift Local을 사용하여 통합 테스트

참고

Amazon GameLift Server SDK 버전 4.x 또는 이전 버전을 사용하는 경우 이 테스트 절차를 사용합니다. Server SDK 패키지에는 호환 가능한 버전의 Amazon GameLift Local이 포함되어 있습니다. Server SDK 버전 5.x를 사용하는 경우 Amazon GameLift Anywhere 플릿을 사용한 로컬 테스트에 대해서는 Amazon GameLift Anywhere 플릿을 사용하여 통합 테스트 섹션을 참조하세요.

Amazon GameLift Local을 사용하여 로컬 디바이스에서 제한된 버전의 관리형 Amazon GameLift 서비스를 실행하고 이를 기준으로 게임 통합을 테스트합니다. 이 도구는 게임 통합에서 반복적 개발을 수행할 때 유용합니다. 대안(각각의 새 빌드를 Amazon GameLift에 업로드하고 게임을 호스팅하도록 플릿을 구성)은 매번 30분 이상 걸릴 수 있습니다.

Amazon GameLift Local을 사용하여 다음을 확인할 수 있습니다.

  • 게임 서버가 Server SDK와 올바르게 통합되며 Amazon GameLift 서비스와 적절히 통신하여 새 게임 세션을 시작하고 새 플레이어를 수락하며 상태를 보고합니다.

  • 게임 클라이언트가 Amazon GameLift용 AWS SDK와 올바르게 통합되며 기존 게임 세션에 대한 정보를 검색하고 새 게임 세션을 시작하며 플레이어를 게임에 참가시키고 게임 세션에 연결할 수 있습니다.

Amazon GameLift Local은 독립형 버전의 관리형 Amazon GameLift 서비스를 시작하는 명령줄 도구입니다. Amazon GameLift Local은 서버 프로세스 초기화, 상태 확인, API 호출 및 응답의 실행 중인 이벤트 로그도 제공합니다. Amazon GameLift Local은 Amazon GameLift에 대한 AWS SDK 작업의 하위 집합을 인식합니다. AWS CLI 또는 게임 클라이언트에서 호출할 수 있습니다. 모든 API 작업은 Amazon GameLift 웹 서비스에서와 마찬가지로 로컬에서 수행됩니다.

각 서버 프로세스는 단일 게임 세션만 호스팅해야 합니다. 게임 세션은 Amazon GameLift Local에 연결하는 데 사용하는 실행 파일입니다. 게임 세션이 완료되면 GameLiftServerSDK::ProcessEndning을 호출한 다음 프로세스를 종료해야 합니다. Amazon GameLift Local을 사용하여 로컬에서 테스트하는 경우 여러 서버 프로세스를 시작할 수 있습니다. 각 프로세스는 Amazon GameLift Local에 연결됩니다. 그런 다음 각 서버 프로세스마다 하나의 게임 세션을 생성할 수 있습니다. 게임 세션이 종료되면 게임 서버 프로세스가 종료되어야 합니다. 그런 다음 다른 서버 프로세스를 수동으로 시작해야 합니다.

Amazon GameLift Local은 다음 API를 지원합니다.

  • CreateGameSession

  • CreatePlayerSession

  • CreatePlayerSessions

  • DescribeGameSessions

  • DescribePlayerSessions

Amazon GameLift Local 설정

Amazon GameLift Local은 Server SDK 번들과 함께 .jar 실행 파일로 제공됩니다. 이는 Windows 또는 Linux에서 실행할 수 있으며 Amazon GameLift 지원 언어와 함께 사용할 수 있습니다.

Local을 실행하기 전에 다음이 설치되어 있어야 합니다.

  • Amazon GameLift Server SDK 버전 3.1.5~4.x의 빌드입니다.

  • Java 8

게임 서버 테스트

게임 서버만 테스트하려면 AWS CLI를 사용하여 Amazon GameLift Local 서비스에 대한 게임 클라이언트 호출을 시뮬레이션하면 됩니다. 이는 게임 서버가 다음과 같은 점에서 예상대로 작동하고 있는지 확인합니다.

  • 게임 서버가 제대로 시작하고 Amazon GameLift Server SDK를 초기화합니다.

  • 시작 프로세스의 일환으로 게임 서버가 게임 세션을 호스팅할 준비가 되었음을 Amazon GameLift에 알립니다.

  • 실행 도중 게임 서버가 Amazon GameLift에 1분마다 상태를 전송합니다.

  • 게임 서버가 새 게임 세션 시작 요청에 응답합니다.

  1. Amazon GameLift Local을 시작합니다.

    명령 프롬프트 창을 열고 GameLiftLocal.jar 파일이 포함된 디렉터리로 이동하여 이 파일을 실행합니다. 기본적으로 Local은 포트 8080에서 게임 클라이언트의 요청을 수신 대기합니다. 다른 포트 번호를 지정하려면 다음 예제에 나온 것처럼 -p 파라미터를 사용합니다:

    java -jar GameLiftLocal.jar -p 9080

    Local이 시작되면 2개의 로컬 서버가 시작되었다는 로그가 표시됩니다. 이때 한 서버는 게임 서버를 수신 대기하고 다른 한 서버는 게임 클라이언트 또는 AWS CLI를 수신 대기하는 상태입니다. 로그는 게임 구성 요소와의 통신 등, 2개의 로컬 서버에서 실행되는 활동을 계속 보고합니다.

  2. 게임 서버를 시작합니다.

    Amazon GameLift 통합 게임 서버를 로컬에서 시작합니다. 게임 서버의 엔드포인트를 변경할 필요는 없습니다.

    Local 명령 프롬프트 창에서 게임 서버가 Amazon GameLift Local 서비스에 연결되었다는 로그 메시지가 표시됩니다. 이는 게임 서버가 Amazon GameLift Server SDK를 성공적으로 초기화했음을 의미합니다(InitSDK() 사용). 게임 서버는 표시된 로그 경로를 사용하여 ProcessReady()를 호출했고, 게임 세션을 호스팅할 준비가 되었습니다. 게임 서버가 실행되는 동안 Amazon GameLift는 게임 서버의 각 상태 보고서를 로깅합니다. 다음 로그 메시지 예는 성공적으로 통합된 게임 서버를 보여 줍니다.

    16:50:53,217 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - SDK connected: /127.0.0.1:64247 16:50:53,217 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - SDK pid is 17040, sdkVersion is 3.1.5 and sdkLanguage is CSharp 16:50:53,217 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - NOTE: Only SDK versions 3.1.5 and above are supported in GameLiftLocal! 16:50:53,451 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onProcessReady received from: /127.0.0.1:64247 and ackRequest requested? true 16:50:53,543 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onProcessReady data: logPathsToUpload: "C:\\game\\logs" logPathsToUpload: "C:\\game\\error" port: 1935 16:50:53,544 INFO || - [HostProcessManager] nioEventLoopGroup-3-1 - Registered new process true, true, 16:50:53,558 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onReportHealth received from /127.0.0.1:64247 with health status: healthy

    예상 오류 및 경고 메시지는 다음과 같습니다.

    • 오류: “ProcessReady가 pID: <process ID>인 프로세스를 찾지 못했습니다! InitSDK()가 호출됐습니까?”

    • 경고: “pID(<process ID>)로 처리되는 프로세스에 대한 Process 상태가 이미 존재합니다! ProcessReady(...)가 두 번 이상 호출됩니까?”

  3. AWS CLI를 시작합니다.

    게임 서버가 ProcessReady()를 성공적으로 호출하면 클라이언트 호출을 시작할 수 있습니다. 다른 명령 프롬프트 창을 열고 AWS CLI 도구를 시작합니다. AWS CLI는 기본적으로 Amazon GameLift 웹 서비스 엔드포인트를 사용합니다. 다음 요청 예제에 나온 것처럼 --endpoint-url 파라미터를 사용하여 모든 요청에서 Local 엔드포인트로 이를 재정의해야 합니다.

    AWS gamelift describe-game-sessions --endpoint-url http://localhost:9080 --fleet-id fleet-123

    AWS CLI 명령 프롬프트 창에서 AWS gamelift 명령을 호출하면 AWS CLI 명령 레퍼런스에 설명된 것과 같은 응답이 발생합니다.

  4. 게임 세션을 생성합니다.

    AWS CLI를 사용하여 CreateGameSession() 요청을 제출합니다. 요청은 필요한 구문에 따라야 합니다. Local의 경우, FleetId 파라미터는 어떤 유효한 문자열(^fleet-\S+)로도 설정이 가능합니다.

    AWS gamelift create-game-session --endpoint-url http://localhost:9080 --maximum-player-session-count 2 --fleet-id fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d

    Local 명령 프롬프트 창에서 Amazon GameLift Local이 게임 서버에 onStartGameSession 콜백을 전송했다는 로그 메시지가 표시됩니다. 게임 세션이 성공적으로 생성된 경우, 게임 서버는 ActivateGameSession을 호출하여 응답합니다.

    13:57:36,129 INFO || - [SDKInvokerImpl] Thread-2 - Finished sending event to game server to start a game session: arn:aws:gamelift:local::gamesession/fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/gsess-ab423a4b-b827-4765-aea2-54b3fa0818b6. Waiting for ack response.13:57:36,143 INFO || - [SDKInvokerImpl] Thread-2 - Received ack response: true13:57:36,144 INFO || - [CreateGameSessionDispatcher] Thread-2 - GameSession with id: arn:aws:gamelift:local::gamesession/fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/gsess-ab423a4b-b827-4765-aea2-54b3fa0818b6 created13:57:36,227 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onGameSessionActivate received from: /127.0.0.1:60020 and ackRequest requested? true13:57:36,230 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onGameSessionActivate data: gameSessionId: "arn:aws:gamelift:local::gamesession/fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/gsess-abcdef12-3456-7890-abcd-ef1234567890"

    AWS CLI 창에서 Amazon GameLift는 게임 세션 ID를 포함한 게임 세션 객체를 사용하여 응답합니다. 새 게임 세션 상태가 Activating임에 유의하십시오. 게임 서버가 ActivateGameSession을 호출하면 상태가 Active로 변경됩니다. 변경된 상태를 보려면 AWS CLI를 사용하여 DescribeGameSessions()를 호출합니다.

    { "GameSession": { "Status": "ACTIVATING", "MaximumPlayerSessionCount": 2, "FleetId": "fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d", "GameSessionId": "arn:aws:gamelift:local::gamesession/fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/gsess-abcdef12-3456-7890-abcd-ef1234567890", "IpAddress": "127.0.0.1", "Port": 1935 } }

게임 서버 및 클라이언트 테스트

플레이어와 게임 연결 등 전체 게임 통합을 확인하기 위해 게임 서버와 클라이언트를 모두 로컬에서 실행할 수 있습니다. 이렇게 하면 게임 클라이언트에서 Amazon GameLift Local로의 프로그래밍 방식 호출을 테스트할 수 있습니다. 다음과 같은 작업을 확인할 수 있습니다.

  • 게임 클라이언트가 게임 세션 생성, 기존 게임 세션에 대한 정보 검색, 플레이어 세션 생성 등을 위해 Amazon GameLift Local 서비스에 성공적으로 AWS SDK 요청을 수행합니다.

  • 플레이어가 게임 세션에 참가하려 할 때 게임 서버가 올바로 플레이어를 확인합니다. 확인된 플레이어의 경우, 게임 서버는 플레이어 데이터(구현된 경우)를 검색할 수 있습니다.

  • 플레이어가 게임에서 나갈 때 게임 서버는 끊긴 연결을 보고합니다.

  • 게임 서버가 게임 세션 종료를 보고합니다.

  1. Amazon GameLift Local을 시작합니다.

    명령 프롬프트 창을 열고 GameLiftLocal.jar 파일이 포함된 디렉터리로 이동하여 이 파일을 실행합니다. 기본적으로 Local은 포트 8080에서 게임 클라이언트의 요청을 수신 대기합니다. 다른 포트 번호를 지정하려면 다음 예제에 나온 것처럼 -p 파라미터를 사용합니다.

    ./gamelift-local -p 9080

    Local이 시작되면 2개의 로컬 서버가 시작되었다는 로그가 표시됩니다. 이때 한 서버는 게임 서버를 수신 대기하고 다른 한 서버는 게임 클라이언트 또는 AWS CLI를 수신 대기하는 상태입니다.

  2. 게임 서버를 시작합니다.

    Amazon GameLift 통합 게임 서버를 로컬에서 시작합니다. 메시지 로그에 대한 자세한 내용은 게임 서버 테스트 섹션을 참조하세요.

  3. Local에 대해 게임 클라이언트를 구성하고 시작합니다.

    Amazon GameLift Local 서비스와 함께 게임 클라이언트를 사용하려면 백엔드 GameLift 서비스에 Amazon 설정에 설명된 것처럼 게임 클라이언트의 설정을 다음과 같이 변경해야 합니다.

    • http://localhost:9080 등 Local 엔드포인트를 가리키도록 ClientConfiguration 객체를 변경합니다.

    • 대상 플릿 ID 값을 설정합니다. Local의 경우, 실제 플릿 ID는 필요하지 않습니다. 대상 플릿을 fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d와 같은 유효한 문자열(^fleet-\S+)로 설정하십시오.

    • AWS 자격 증명을 설정합니다. Local의 경우, 실제 AWS 자격 증명이 필요 없습니다. 액세스 키와 비밀 키를 어떤 문자열로도 설정할 수 있습니다.

    게임 클라이언트를 시작한 경우에는 Local 명령 프롬프트 창에서 게임 클라이언트가 GameLiftClient를 초기화했고 Amazon GameLift 서비스와 성공적으로 통신하고 있다는 로그 메시지가 표시되어야 합니다.

  4. Amazon GameLift 서비스로 게임 클라이언트 호출을 테스트합니다.

    게임 클라이언트가 다음 API 호출 중 하나 또는 전부를 성공적으로 하고 있는지 확인합니다.

    Local 명령 프롬프트 창에서 CreateGameSession()에 대한 호출만 로그 메시지를 발생시킵니다. 로그 메시지는 Amazon GameLift Local이 게임 서버에게 게임 세션을 시작하라고 하며(onStartGameSession 콜백) 게임 서버의 호출이 있을 때 성공적인 ActivateGameSession을 받으면 표시됩니다. AWS CLI 창에서, 모든 API 호출은 설명된 것과 같은 응답 또는 오류 메시지를 발생시킵니다.

  5. 게임 서버가 새 플레이어 연결을 검증하고 있는지 확인합니다.

    게임 세션과 플레이어 세션을 생성한 후 게임 세션과의 직접적인 연결을 설정합니다.

    Local 명령 프롬프트 창에서, 로그 메시지에는 게임 서버가 새 플레이어 연결을 검증하기 위해 AcceptPlayerSession() 요청을 전송했음이 표시되어야 합니다. AWS CLI를 사용하여 DescribePlayerSessions()를 호출하는 경우, 플레이어 세션 상태가 Reserved에서 Active로 변경되어야 합니다.

  6. 게임 서버가 게임 및 플레이어 상태를 Amazon GameLift 서비스에 보고하고 있는지 확인합니다.

    Amazon GameLift가 플레이어 수요를 관리하고 지표를 올바르게 보고하려면 게임 서버가 다양한 상태를 Amazon GameLift에 다시 보고해야 합니다. Local이 다음 작업과 관련된 이벤트를 로깅하고 있는지 확인합니다. AWS CLI를 사용하여 상태 변경을 추적할 수도 있습니다.

    • 플레이어가 게임 세션에서 연결 해제 - 게임 서버가 RemovePlayerSession()을 호출한다는 Amazon GameLift Local 로그 메시지가 표시되어야 합니다. AWS CLI가 DescribePlayerSessions()를 호출하면 Active에서 Completed로 상태 변경이 이루어져야 합니다. 또한 DescribeGameSessions()를 호출하여 게임 세션의 현재 플레이어 수가 한 명 줄었는지 확인할 수 있습니다.

    • 게임 세션 종료 - 게임 서버가 TerminateGameSession()을 호출한다는 Amazon GameLift Local 로그 메시지가 표시되어야 합니다.

      참고

      이전 지침은 게임 세션을 종료할 때 TerminateGameSession()을 호출하는 것이었습니다. 이 메서드는 Amazon GameLift Server SDK v4.0.1에서 더 이상 사용되지 않습니다. 게임 세션 종료 섹션을 참조하세요.

    • 서버 프로세스가 종료됨 - 게임 서버가 ProcessEnding()을 호출한다는 Amazon GameLift Local 로그 메시지가 표시되어야 합니다. AWS CLI가 DescribeGameSessions()를 호출하면 Active에서 Terminated(또는 Terminating)로 상태 변경이 이루어져야 합니다.

Local을 사용한 변형

Amazon GameLift Local을 사용할 때는 다음 사항을 명심해야 합니다.

  • Local은 Amazon GameLift 웹 서비스와 달리 서버 상태를 추적하거나 onProcessTerminate 콜백을 시작하지 않습니다. Local은 단순히 게임 서버의 상태 보고서 로깅을 중지합니다.

  • AWS SDK에 대한 호출의 경우, 플릿 ID는 검증되지 않으며 파라미터 요구 사항(^fleet-\S+)을 충족하는 어떤 문자열 값도 될 수 있습니다.

  • Local을 사용하여 생성된 게임 세션 ID는 다른 구조를 갖습니다. 여기서 보듯 여기에는 문자열 local이 포함됩니다.

    arn:aws:gamelift:local::gamesession/fleet-123/gsess-56961f8e-db9c-4173-97e7-270b82f0daa6