

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

# 백엔드 서비스에서 수동 채우기 요청 생성
<a name="match-backfill-client"></a>

게임 서버에서 채우기 요청을 보내는 대신에 클라이언트 측 게임 서비스에서 채우기 요청을 보낼 수도 있습니다. 이 옵션을 사용하려면 클라이언트 측 서비스가 게임 세션 활동 및 플레이어 연결에 대한 현재 데이터에 액세스할 수 있어야 합니다. 게임에서 세션 디렉터리 서비스를 사용하는 경우 이 옵션은 적절한 선택일 수 있습니다.

이 주제에서는 필요한 FlexMatch 구성 요소를 이미 빌드했고 게임 서버 및 클라이언트 측 게임 서비스에 매치메이킹 프로세스를 성공적으로 추가했다고 가정합니다. FlexMatch 설정에 대한 자세한 내용은 [로드맵: Amazon GameLift Servers 호스팅 솔루션에 매치메이킹 추가](match-tasks.md) 섹션을 참조하십시오.

게임에 대해 매치 채우기를 활성화하려면 다음 기능을 추가합니다.
+ 매치메이킹 채우기 요청을 매치메이커에게 전송하고 요청 상태를 추적합니다.
+ 게임 세션에 대한 매치 정보를 업데이트합니다. [게임 서버의 매치 데이터 업데이트](match-backfill-server-data.md) 섹션을 참조하세요

다른 클라이언트 기능과 마찬가지로 클라이언트 측 게임 서비스는 Amazon GameLift Servers API와 함께 AWS SDK를 사용합니다. 이 SDK는 C\+\+, C\# 및 기타 여러 언어로 제공됩니다. 클라이언트 API의 일반적인 설명은 Amazon GameLift Servers API 참조를 살펴보세요. 여기에는 Amazon GameLift Servers 작업에 대한 서비스 API가 설명되어 있으며 언어별 참조 가이드의 링크가 포함되어 있습니다.

클라이언트 측 게임 서비스를 설정하여 매치 게임을 채우려면 다음 작업을 완료합니다.

1. **채우기 요청을 트리거합니다.** 일반적으로 게임은 매치 게임에 하나 이상의 빈 플레이어 슬롯이 있을 때마다 채우기 요청을 시작합니다. 중요한 캐릭터 역할을 수행하거나 팀의 균형을 맞추는 것과 같은 특정 상황에 채우기 요청을 연결하고 싶을 수 있습니다. 또한 게임 세션의 기간에 근거하여 채우기 작업을 제한하려고 할 수도 있습니다. 트리거에 어떤 것을 사용하든 최소한 다음 정보가 필요합니다. 이 정보는 게임 세션 ID로 [DescribeGameSessions](https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeMatchmaking.html)을 호출하여 게임 세션 객체([GameSession](https://docs.aws.amazon.com/gamelift/latest/apireference/API_GameSession.html))에서 가져올 수 있습니다.
   + *현재 비어 있는 플레이어 슬롯 수*. 이 값은 게임 세션의 최대 플레이어 한도와 현재 플레이어 수에서 계산할 수 있습니다. 현재 플레이어 수는 게임 서버가 Amazon GameLift Servers 서비스에 접속해서 새로운 플레이어 연결을 확인하거나 중단된 플레이어를 보고할 때마다 업데이트됩니다.
   + *정책 생성*. 이 설정은 게임 세션이 현재 새 플레이어를 수락하는지 여부를 나타냅니다.

    게임 세션 객체에는 게임 세션 시작 시간, 사용자 지정 게임 속성 및 매치메이커 데이터를 포함하여 잠재적으로 유용한 기타 정보가 포함됩니다.

1. **채우기 요청을 생성합니다.** FlexMatch 매치 채우기 요청을 생성하여 FlexMatch 매치메이커에 전송하는 코드를 추가합니다. 채우기 요청은 다음 클라이언트 API를 사용하여 처리됩니다.
   + [StartMatchBackfill](https://docs.aws.amazon.com/gamelift/latest/apireference/API_StartMatchBackfill.html)
   + [StopMatchmaking](https://docs.aws.amazon.com/gamelift/latest/apireference/API_StopMatchmaking.html)

   채우기 요청을 생성하려면 다음 정보를 이용해 `StartMatchBackfill`을 호출합니다. 채우기 요청은 매치메이킹 요청([플레이어에 대해 매치메이킹 요청](match-client-start.md) 참조)과 유사하지만 기존 게임 세션을 식별하기도 합니다. 채우기 요청을 취소하려면 채우기 요청의 티켓 ID를 이용해 `StopMatchmaking`을 호출합니다.
   + **티켓 ID** - 매치메이킹 티켓 ID를 제공합니다(또는 자동 생성되도록 선택). 동일한 메커니즘을 사용하여 매치메이킹 및 채우기 요청에 티켓 ID를 할당할 수 있습니다. 매치메이킹 및 채우기용 티켓은 동일한 방식으로 처리됩니다.
   + **매치메이커** - 사용할 매치메이킹 구성 이름을 식별합니다. 일반적으로 원본 매치를 만드는 데 사용한 매치메이커를 채우기용으로 사용하려고 할 것입니다. 이 정보는 매치메이킹 구성 ARN 아래 게임 세션 객체([GameSession](https://docs.aws.amazon.com/gamelift/latest/apireference/API_GameSession.html))인 `MatchmakerData` 속성에 있습니다. 이름 값은 ““matchmakingconfiguration/” 다음의 문자열입니다. (예를 들어, ARN 값 “arn:aws:gamelift:us-west-2:111122223333:matchmakingconfiguration/MM-4v4”에서 매치메이킹 구성 이름은 “MM-4v4”임.) 
   + **게임 세션 ARN** - 채우고 있는 게임 세션을 지정합니다. 게임 세션 객체의 `GameSessionId` 속성을 사용합니다. 이 ID는 사용자에게 필요한 ARN 값을 사용합니다. 채우기 요청에 대한 매치메이킹 티켓([MatchmakingTicket](https://docs.aws.amazon.com/gamelift/latest/apireference/API_MatchmakingTicket.html))은 처리되는 동안 게임 세션 ID를 갖습니다. 새로운 매치메이킹 요청 티켓은 매치가 완료될 때까지 게임 세션 ID를 갖지 않습니다. 게임 세션 ID의 존재는 새로운 매치 티켓과 채우기 티켓의 차이를 알 수 있는 방법 중 하나입니다.
   + **플레이어 데이터** - 채우고 있는 게임 세션의 모든 기존 플레이어에 대한 플레이어 정보([플레이어](https://docs.aws.amazon.com/gamelift/latest/apireference/API_Player.html))를 포함합니다. 이 정보를 통해 매치메이커는 현재 게임 세션에 있는 플레이어에게 가장 적합한 플레이어 매치를 찾을 수 있습니다. 모든 플레이어의 팀 멤버십을 포함해야 합니다. 채우기를 사용하지 않는 경우 팀을 지정하지 마세요. 게임 서버가 플레이어 연결 상태를 정확하게 보고한 경우 다음과 같이 이 데이터를 획득할 수 있어야 합니다.

     1. 게임 세션 ID를 통해 [DescribePlayerSessions()](https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribePlayerSessions.html)를 호출하여 게임 세션에 현재 연결되어 있는 모든 플레이어를 파악합니다. 각 플레이어 세션에는 플레이어 ID가 포함됩니다. 상태 필터를 추가하여 활성 플레이어 세션만 검색할 수 있습니다.

     1. 게임 세션 객체([GameSession](https://docs.aws.amazon.com/gamelift/latest/apireference/API_GameSession.html)), `MatchmakerData` 속성에서 플레이어 데이터를 가져옵니다([매치메이커 데이터 정보](match-server.md#match-server-data) 참조). 이전 단계에서 획득한 플레이어 ID를 사용하여 현재 연결되어 있는 플레이어의 데이터만 가져옵니다. 플레이어가 삭제되면 매치메이커 데이터가 업데이트되지 않으므로 현재 플레이어의 데이터만 추출해야 합니다.

     1. 플레이어 지연 시간의 경우 매치메이커가 지연 시간 데이터를 호출하면 모든 현재 플레이어의 새로운 지연 시간 값을 수집하고 해당 값을 `Player` 객체에 포함합니다. 지연 시간 데이터가 생략되고 매치메이커에 지연 시간 규칙이 있는 경우 요청이 일치되지 않습니다. 채우기 요청은 현재 게임 세션이 있는 리전에 대해서만 지연 시간 데이터를 필요로 합니다. `GameSession` 객체의 `GameSessionId` 속성에서 게임 세션의 리전을 얻을 수 있습니다. 이 값은 리전을 포함하는 ARN입니다.

1. **채우기 요청의 상태를 추적합니다.** 매치메이킹 티켓 상태 업데이트를 수신하기 위한 코드를 추가합니다. 이 메커니즘 설정을 이용하면 이벤트 알림(기본) 또는 폴링을 통해 새로운 매치메이킹 요청 티켓을 추적할 수 있습니다([매치메이킹 이벤트 추적](match-client-track.md) 참조). 채우기 요청으로 플레이어 수락 활동을 트리거할 필요가 없고 게임 서버에서 플레이어 정보가 업데이트되더라도, 계속 티켓 상태를 모니터링하여 요청 실패 및 재제출 작업을 처리해야 합니다.

   매치메이커는 한 번에 한 게임 세션의 매치 채우기 요청만 처리할 수 있습니다. 요청을 취소해야 하는 경우 [StopMatchmaking](https://docs.aws.amazon.com/gamelift/latest/apireference/API_StopMatchmaking.html)을 호출합니다. 요청을 변경해야 하는 경우 `StopMatchmaking`을 호출한 다음 업데이트한 요청을 제출합니다.

   매치 채우기 요청이 성공하면 게임 서버는 업데이트된 `GameSession` 객체를 수신하고 새 플레이어를 게임 세션에 참여시키는 데 필요한 작업을 처리합니다. 자세한 내용은 [게임 서버의 매치 데이터 업데이트](match-backfill-server-data.md)에서 확인하십시오.