Amazon Web Services 한국 블로그

Amazon GameLift 커스터마이징 가능한 매치메이킹 기능인 FlexMatch 소개

멀티 플레이어 게임의 중요한 부분 중 하나는 플레이어가 신속하고 일관되게 만족스러운 경기에 참여하도록 하는 것입니다.

Amazon GameLift는 이런 경험을 제공하기 위한 개발자들의 부담을 덜어주기 위해 효율적인 매치메이킹 시스템인FlexMatch를 제공합니다. 이 기능은 강력한 매치메이킹을 신속하게 처리하는 데 사용할 수 있는 강력한 사용자 정의 기능을 제공합니다. 당신이 게임 기획자이든 백엔드 엔지니어든 관계 없이 FlexMatch의 사용자 정의 가능한 규칙 기반 구문은 개발 과정을 단순화하고 원하는 방식으로 매치메이킹을 할 수 있도록 합니다.  또한, 관리 콘솔에서 분석과 GUI를 사용하여 여러 설정을 빠르게 실험하여 경기의 품질에 미치는 영향을 확인할 수도 있습니다. GUI를 사용하면 실험을 원하는 게임 기획자가 직접 분석 데이터에 접근 할 수 있습니다.

이 글에서는 FlexMatch가 게임 세션 대기열과 어떻게 상호 작용하는지, 유연한 규칙을 사용하여 매치메이킹 및 자동으로 게임 배치를 수행하는 방법에 대해 설명합니다. 또한 분석을 사용하여 게임 규칙을 추적하는 방법을 설명합니다. 마지막으로, 게임의 매치메이킹 과정을 더욱 커스터마이징 할 수 있는 고급 FlexMatch 설정에 대해서도 설명합니다.

매치메이킹 시스템 설계를 위한 요구 사항
매치메이킹의 과제는 얼마나 빨리 매치가 되고 그 매칭이 얼마나 최적인지의 균형을 맞추는 것입니다. 게임 개발자인 여러분들이 플레이어를 가장 잘 압니다. 어쩌면 당신의 플레이어는 가능한 한 작은 대기 시간을 원할 것입니다. 어쩌면 최선의 경기를 위해 오랜 시간을 기다릴 수도 있습니다. 아마, 매치메이킹 이런 두 가지 기준간 균형을 맞추어야 할지도 모릅니다.

플레이어들에게 일어나는 매치메이킹은 간단하게 보입니다. 개발자는 유연하고 효율적인 매치메이킹 시스템을 만들고 관리하는 것이 단순하다는 것을 알고 있습니다. 어디서부터 시작해야 할까요? 플레이어가 성공으로 간주 할 시스템을 어떻게 구축합니까? 다음은 매치메이킹 시스템 설계 시 묻는 몇 가지 질문입니다.

  1. 플레이어는 얼마나 오래 기다릴 수 있을까요? 여러분들은 게임 플레이어들의 속성을 잘 압니다. 그래서 여러분은 경기를 기다리는 그들의 의지에 대해 어떻게 생각하십니까? 어쩌면 그들은 빨리 매치하고 싶을 수도 있고, 아마도 가장 좋은 매치를 기다리고 싶을 수도 있습니다. 게임 세션 길이가 매치메이킹에 대해 어떤 의미를 가질까요? 짧은 세션의 게임의 경우 가능한 한 적은 시간 내에 가능한 한 많은 매치메이킹이 되는 방식으로 최적화 되기를 원할 것입니다. 더 긴 세션 시간을 가진 게임의 경우 플레이어는 더 나은 경기를 찾기 위해 더 오래 기다리는 것을 선호 할 수 있습니다. 여러분의 플레이어 기반은 서로 다른 요구를 가진 경쟁력 있는 캐주얼 게이머를 보유하고 있습니까? 이 경우, 빠른 매칭을 원하는 캐주얼 플레이어와 보다 균형 있고 경쟁적인 매치를 원하는 플레이어들을 위한 매치메이킹 로직을 여러 개 설정할 수 있습니다.
  2. 플레이어는 지연(latency) 시간에 얼마나 영향을 받습니까? 일반적으로 플레이어는 가능한 한 플레이어의 클라이언트와 서버 사이에서 가장 낮은 지연 시간을 원하며 동일한 낮은 지연 시간을 공유하는 플레이어와의 경기를 원합니다. 플레이어들의 지연 시간과 관련하여 그들이 허용하는 수준은 어떻습니까? 플레이어가 비슷한 지연 시간을 가진 플레이어와 더 긴 시간을 함께 기다릴 의향이 있습니까? 플레이어는 지연 시간에 관계없이 친구와 게임을 우선시합니까? 지연 시간과 관련하여 우선 순위가 다른 여러 플레이어가 있습니까? 여기서 답을 알고 있으면 플레이어를 구분하는 방법을 결정하는 데 도움이 됩니다.
  3. 플레이어의 숙련도(skill)얼마나 중요합니까? 플레이어는 게임을 재미있게 만드는 방법을 여러 가지 방법으로 정의하고 동일한 숙련도 수준을 가진 다른 플레이어와 함께 플레이 하는 것이 게임을 재미있게 유지하는 데 많은 도움이 됩니다. 비슷한 숙련도를 가진 플레이어와의 경기에 귀중한 가치를 부여합니까? 그들은 도전하는 것을 선호하고 그들이 가진 것보다 더 나은 플레이를 원하고 있습니까? 그들은 숙련도에 전혀 신경 쓰지 않고 가능한 한 빨리 매치하고 싶습니까? 플레이어의 숙련도가 당신의 매치메이킹에 어떻게 부합하는지 이해하면 생성 된 매치를 더 세분화하는 데 도움이 됩니다.
  4. 여러분의 매치메이킹은 얼마나 유연합니까? 대기 시간, 지연(latency) 시간 및 숙련도 레벨 모두가 매치메이킹에 영향을 미치므로 시스템이 얼마나 유연해야 하는지에 질문을 해야 합니다. 우선 순위를 결정하고 선택할 수 있습니까? 선택 사항이 플레이어에게 미치는 영향을 알려주는 분석 기능이 있습니까? 여러분의 시스템은 이상적인 상황에서도 게임을 찾기 위해 자동으로 매치메이킹 요구 사항을 자동으로 완화합니까? 시스템을 통해 플레이어를 분류하여 모든 사람에게 최고의 경험을 제공 할 수 있습니까?

얼마전 Amazon GameLift 및 기타 AWS 서비스를 사용하여 서버리스 매치메이킹 패턴을 만드는 방법을 설명했습니다. 이제는 FlexMatch의 강력하고 유연한 매치메이킹 기능을 통하여 다음 단계로 나아가 봅시다.

FlexMatch 사용법
표면적으로, FlexMatch는 상대적으로 단순해 보이지만 깊이와 유연성이 있습니다. FlexMatch의 기능 중 일부는 Amazon GameLift의 게임 세션 대기열에 직접 연결되어 있습니다. FlexMatch를 사용하면 선택한 기준에 따라 플레이어를 특정 항목으로 그룹화 할 수 있습니다. 그런 다음 대기열을 사용하여 모든 플레이어를 특정 플랫폼이나 특정 지역 또는 게임 모드/맵/언어에 따라 배치할 수 있습니다. FlexMatch와 대기열을 함께 사용하면 여러 지역의 플레이어들 심지어 여러 지역에서도 최적화된 저 지연(low latency)의 경험을 제공 할 수 있습니다. 대기열 기능과 함께 FlexMatch를 사용하는 방법을 더 잘 이해할 수 있도록 FlexMatch 구성부터 시작하는 예시를 살펴 보도록 하겠습니다.

세션 기반의 슈팅 대전 게임이 최소 4 명의 플레이어와 (팀당 최대 8 명의 플레이어) 동일한 팀 크기의 대전 상대를 필요로 한다고 가정 해 봅시다. 플레이어들은 경쟁적인 경기를 원하기 때문에 팀은 서로 평균 10 점 이내의 평균적인 플레이어 숙련도 점수를 가져야 합니다. 마지막으로, 플레이어가 경기를 찾기 위해 너무 오래 기다리는 것을 원하지 않으므로, 5 초 후 팀 간 50 포인트 이내의 평균 숙련도 점수와 15 초 후 팀 간 100 포인트로 규칙을 완화하려고 합니다.

다음은 위의 상황에 맞게 FlexMatch 규칙(Rule)을 구성하는 방법입니다.

{
    "name": "aliens_vs_cowboys",
    "ruleLanguageVersion": "1.0",
    "playerAttributes": [{
        "name": "skill",
        "type": "number",
        "default": 10
    }],
    "teams": [{
        "name": "cowboys",
        "maxPlayers": 8,
        "minPlayers": 4
    }, {
        "name": "aliens",
        "maxPlayers": 8,
        "minPlayers": 4
    }],
    "rules": [{
        "name": "FairTeamSkill",
        "description": "The average skill of players in each team is within 10 points from the average skill of players in the match",
        "type": "distance",
        // get skill values for players in each team and average separately to produce list of two numbers
        "measurements": [ "avg(teams[*].players.attributes[skill])" ],
        // get skill values for players in each team, flatten into a single list, and average to produce an overall average
        "referenceValue": "avg(flatten(teams[*].players.attributes[skill]))",
        "maxDistance": 10 // minDistance would achieve the opposite result
    }, {
        "name": "EqualTeamSizes",
        "description": "Only launch a game when the number of players in each team matches, e.g. 4v4, 5v5, 6v6, 7v7, 8v8",
        "type": "comparison",
        "measurements": [ "count(teams[cowboys].players)" ],
        "referenceValue": "count(teams[aliens].players)",
        "operation": "=" // other operations: !=, <, <=, >, >=
    }],
    "expansions": [{
        "target": "rules[FairTeamSkill].maxDistance",
        "steps": [{
            "waitTimeSeconds": 5,
            "value": 50
        }, {
            "waitTimeSeconds": 15,
            "value": 100
        }]
    }]
}

Figure 1 – Example FlexMatch rules syntax.

이렇게 매치메이킹을 구성한 후, 대기열을 구성하도록 합니다.

아시아의 모든 플레이어가 서로 어우러지길 원한다고 가정 해 봅시다. 이를 위해 매치메이커를 서울 (ap-northeast-2) 또는 동경(ap-northeast-1) 리전에 설치 한 다음, GameLift Fleet을 위한 대기열은 서울 (ap-northeast-2), 동경 (ap-northeast-1), 싱가포르 (ap-southeast-1) 리전에 둘 수 있습니다.  이 대기열은 플레이어 지연 시간을 사용하여 매치된 플레이어 세트가 가장 낮은 지연 시간을 갖도록 구성 될 수 있습니다. 최저 지연 시간 기반 배치 방법은 기존 블로그 글을 참고하세요.

해외 리전에서 게임을 출시할 계획이라면 추가 매치메이커와 대기열을 만들고 각 리전 또는 리전 그룹마다 다른 매치메이킹 규칙을 설정할 수 있습니다. 이 접근 방식은 전 세계 다른 리전에서 다른 버전의 게임을 출시 할 때 특히 유용합니다. 또한 플레이어의 취향에 따라 정규전 (래더 게임) 대기열과 야생전 (캐주얼 게임) 대기열로 분리 할 수도 ​​있습니다.

즉, FlexMatch는 규칙(Rule)을 사용하여 매치 조건을 조합하고 대기열 구성을 사용하여 게임 서버에 매치된 플레이어들을 배치하는 구조입니다. 또한, 대기열의 깊이에 따라 GameLift의 자동 확장 기능을 연동할 수도 있습니다. 대기열에 있는 플레이어의 수에 따라 더 빠르게 게임 서버들을 자동으로 늘이거나 줄일 수 있습니다.

고급 규칙(Rule)
FlexMatch 규칙에는 플레이어 경험을 더욱 세밀하게 제어 할 수 있는 고급 기능도 있습니다. 예를 들어, 깃발 잡기 (Capture the Flag) 또는 특정 맵 종류 선호와 같은 특정 게임 모드를 선호하는 플레이어를 함께 그룹화 할 수 있습니다. 또한 플레이어 캐릭터의 여러 클래스 중 적어도 하나를 특징으로 하는 팀과의 경기를 만들 수도 있습니다. 예를 들어, 게임을 시작하기 전에 유효한 팀에게 전사가 1 명, 도적이 1 명, 마법사가 1 명 이상 필요하다고 결정할 수 있습니다. 새로운 게임 모드를 지원하기 위해 1 대 5대전과 같은 비대칭 매치메이킹을 허용 할 수도 있습니다. 간단히 말하면, FlexMatch의 다양한 옵션을 통해 세심한 컨트롤이 가능합니다.

규칙(Rule)어떻게 동작하는지 분석할 있는 기능 제공
FlexMatch 규칙을 모니터링하고 최적화하는 것은 게임 디자인을 섬세하게 조정하는 중요한 부분입니다. 규칙을 모니터링하기 위해 FlexMatch는 관리 콘솔을 통해 쉽게 액세스 할 수 있는 일련의 통계를 제공합니다. 게임을 테스트 할 때 이러한 통계 분석을 통하여 플레이어 환경의 균형을 맞출 수 있습니다. 측정할 수 있는 항목은 다음과 같습니다.

  • Match Success/Failure Rates: 예상되는 플레이어를 그룹화하여 게임에 신속하게 참여시킬 수 있는 매치메이커의 결과를 확인하세요. 매치메이커가 제안한 매치를 얼마나 잘 수용하는지 보기 위해 플레이어가 수락하거나 거절하는 비율을 추적합니다.
  • Player Demand: 현재 처리중인 매치 요청 수를 확인하십시오. 새로운 요청 및 새 플레이어의 비율을 추적하여 플레이어 수요 급등에 대한 사전 통지를 얻을 수 있습니다.
  • Time to Ticket Success: 새로운 매치를 성공적으로 생성하는 데 걸리는 평균 시간을 모니터링 합니다. 이 데이터를 사용하여 가능한 가장 최적의 매치 결과를 찾는 것과 플레이어를 게임으로 빠르게 매치하는 것 사이에서 균형을 찾는데 도움이 됩니다.
  • Matchmaking Rule Effectiveness: 매치메이커에서 개별 규칙의 성공/실패 비율을 추적합니다. 이 데이터를 사용하여 각각의 규칙을 미세 조정하여 매치메이킹 규칙을 전반적으로 최적화할 수 있습니다.

매치메이킹 규칙에 대한 세부 정보는 개발자 가이드를 참고하세요.

예를 들어, 분석 결과 매치 요청의 80 %가 시간 초과되었다고 표시되면 규칙이 너무 엄격하기 때문에 규칙을 수정해야 할 필요가 있습니다. 좋은 플레이어 경험에 대한 정의에 따라 매치메이킹에 걸리는 시간이 초과되는 (Time Out) 경우를 10% 이내로 하기를 추천드립니다. 반대로, 여러분의 매치메이킹 요청 시간 중 2% 만 시간 초과 될 수 있습니다. FlexMatch 규칙이 완벽할 수 있지만, 또 다른 문제를 가질 수 있습니다. (지루하거나 대전하기 편한 상대와 일상적인 게임만 하게 될 수도 있습니다)  그래서, 분석 기능을 사용하여 이 같은 주요 문제를 다음과 같은 방식으로 추적할 수 있습니다.

이러한 분석 데이터를 AWS Lambda에 연결하여 특정 기능을 수행하거나 통지를 받을 수도 있습니다.

규칙 완화
예제 규칙에 표시된 것처럼 매우 유용한 FlexMatch 기능 중 하나는 규칙 완화입니다. 규칙 완화를 사용하면 플레이어가 경기를 기다릴 때 플레이어 기준을 완화하는 시기와 방법을 제어 할 수 있습니다. 규칙 기반 프레임 워크에서는 직관과 어긋나게 느낄 수도 있지만 규칙을 완화하면, 매치되기 어려운 플레이어가 다음 게임으로 빠르게 진입하는 데 도움이 됩니다. 예를 들어, 숙련도 레벨의 범위 내에 있는 플레이어들만을 포함 시키길 원할 수 있습니다. 숙련도 레벨 차이는 +/- 10 포인트를 초과해서는 안되길 원하더라도 플레이어 풀에 해당 범위 내의 플레이어가 충분하지 않으면 이 규칙을 완화해야 합니다. 어쩌면 플레이어가 +/- 15 포인트로 완화한 조건을 대신 사용하기를 기대할 수도 있습니다.

또 다른 예로, 플레이어가 적어도 90 초 동안 기다린 후에 더 먼 지역의 플레이어를 검색하기 위해 규칙을 완화해야 할 수도 있습니다. 즉, 남아시아 지역의 플레이어가 동아시아 지역에 배치 될 수 있음을 의미합니다. 대기 시간은 약간 더 높을 수 있지만, 매치메이킹을 더 기다리는 대신 플레이어가 바로 게임을 시작할 수 있습니다.

궁극적으로, 이러한 상황들은 (예를 들어, 언제 얼마나 어려운 경기를 펼칠 수 있는 플레이어를 규칙을 완화해야 하는지) 여러분이 대답 할 수 있는 질문입니다. FlexMatch를 사용하면 매치 조건에 잘 맞지 않는 경우도 허용 할 수 있도록 선택할 수 있습니다.

마무리하며
FlexMatch는 게임 관리의 중요한 부분을 자동화하는 동시에 깊이 맞춤식 멀티 플레이 환경을 만드는 데 필요한 강력한 기능과 유연성을 바탕으로 매치메이킹 프레임워크를 제공합니다. 이것은 멀티 플레이어 게임 관리를 강력하고 유연하고 빠르고 비용 통제 가능하도록 합니다. FlexMatch를 시작하려면 Amazon GameLift SDK를 다운로드하고 게임을 Amazon GameLift에 업로드 한 다음 규칙 구성을 시작하세요.

이 글은 Matchmaking, Your Way: Amazon GameLift FlexMatch and Game Session Queues의 한국어 번역으로, Amazon Game Services의 구승모 엔지니어가 번역하였습니다. 저자인 Justin Miles는 Amazon GameLift 팀의 소프트웨어 엔지니어이며 지난 3 년 동안 Amazon에서 근무했습니다. 그는 펜실베니아 주립 대학을 졸업했으며 전자 상거래, 건강 관리 및 게임을 비롯한 여러 산업 분야에서 10 년을 보냈습니다. 현재 그는 Hex TCG와 젤다: 야생의 숨결을 플레이하고 있습니다. 또한 마리오, 젤다의 전설, 볼펜 슈타인의 광팬입니다.