

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

# FlexMatch 규칙 언어
<a name="match-rules-reference"></a>

이 섹션의 참조 주제에서는 Amazon GameLift Servers FlexMatch와 함께 사용할 매치메이킹 규칙을 구축하는 데 사용되는 구문과 의미를 설명합니다. 매치메이킹 규칙 및 규칙 세트 작성에 대한 자세한 도움말은 [FlexMatch 규칙 세트 빌드](match-rulesets.md) 섹션을 참조하세요.

**Topics**
+ [FlexMatch 규칙 세트 스키마](match-ruleset-schema.md)
+ [FlexMatch 규칙 세트 속성 정의](match-ruleset-property-definitions.md)
+ [FlexMatch 규칙 유형](match-rules-reference-ruletype.md)
+ [FlexMatch 속성 표현식](match-rules-reference-property-expression.md)

# FlexMatch 규칙 세트 스키마
<a name="match-ruleset-schema"></a>

FlexMatch 규칙 세트는 스몰 매치 및 라지 매치 규칙에 표준 스키마를 사용합니다. 각 섹션에 대한 자세한 설명은 [FlexMatch 규칙 세트 속성 정의](match-ruleset-property-definitions.md) 섹션을 참조하세요.

## 스몰 매치에 대한 규칙 세트 스키마
<a name="match-ruleset-schema-small"></a>

다음 스키마는 최대 40명의 플레이어로 구성된 매치를 구성하는 데 사용되는 규칙 세트의 가능한 모든 속성과 허용된 값을 문서화합니다.

```
{
    "name": "string",
    "ruleLanguageVersion": "1.0",
    "playerAttributes":[{ 
         "name": "string,
         "type": <"string", "number", "string_list", "string_number_map">,
         "default": "string"
    }],
    "algorithm": {
        "strategy": "exhaustiveSearch",
        "batchingPreference": <"random", "sorted">,
        "sortByAttributes": [ "string" ],
        "expansionAgeSelection": <"newest", "oldest">,
        "backfillPriority": <"normal", "low", "high">
    },
    "teams": [{
        "name": "string",
        "maxPlayers": number,
        "minPlayers": number,
        "quantity": integer
    }],
    "rules": [{
        "type": "distance",
        "name": "string",
        "description": "string",
        "measurements": "string",
        "referenceValue": number, 
        "maxDistance": number,
        "minDistance": number,
        "partyAggregation": <"avg", "min", "max">
        },{
        "type": "comparison",
        "name": "string",
        "description": "string",
        "measurements": "string",
        "referenceValue": number, 
        "operation": <"<", "<=", "=", "!=", ">", ">=">,
        "partyAggregation": <"avg", "min", "max">
        },{
        "type": "collection",
        "name": "string",
        "description": "string",
        "measurements": "string",
        "referenceValue": number,
        "operation": <"intersection", "contains", "reference_intersection_count">,
        "maxCount": number,
        "minCount": number,
        "partyAggregation": <"union", "intersection">
        },{
        "type": "latency",
        "name": "string",
        "description": "string",
        "maxLatency": number,
        "maxDistance": number,
        "distanceReference": number, 
        "partyAggregation": <"avg", "min", "max">
        },{
        "type": "distanceSort",
        "name": "string",
        "description": "string",
        "sortDirection": <"ascending", "descending">,
        "sortAttribute": "string", 
        "mapKey": <"minValue", "maxValue">,
        "partyAggregation": <"avg", "min", "max">
        },{
        "type": "absoluteSort",
        "name": "string",
        "description": "string",
        "sortDirection": <"ascending", "descending">,
        "sortAttribute": "string", 
        "mapKey": <"minValue", "maxValue">,
        "partyAggregation": <"avg", "min", "max">
        },{
        "type": "compound",
        "name": "string",
        "description": "string",
        "statement": "string"
        }
    }],
    "expansions": [{
        "target": "string",
        "steps": [{
            "waitTimeSeconds": number,
            "value": number
        }, {
            "waitTimeSeconds": number,
            "value": number
        }]
    }]
}
```

# 라지 매치에 대한 규칙 세트 스키마
<a name="match-ruleset-schema-large"></a>

다음 스키마는 40명 초과인 플레이어로 구성된 매치를 구성하는 데 사용되는 규칙 세트의 가능한 모든 속성과 허용된 값을 문서화합니다. 규칙 세트의 모든 팀에 대한 총 `maxPlayers` 값이 40을 초과하면 FlexMatch에서 이 규칙 세트를 사용하는 매치 요청을 라지 매치 지침에 따라 처리합니다.

```
{
    "name": "string",
    "ruleLanguageVersion": "1.0",
    "playerAttributes":[{ 
         "name": "string,
         "type": <"string", "number", "string_list", "string_number_map">,
         "default": "string"
    }],
    "algorithm": {
        "strategy": "balanced",
        "batchingPreference": <"largestPopulation", "fastestRegion">,
        "balancedAttribute": "string",
        "expansionAgeSelection": <"newest", "oldest">,
        "backfillPriority": <"normal", "low", "high">
    },
    "teams": [{
        "name": "string",
        "maxPlayers": number,
        "minPlayers": number,
        "quantity": integer
    }],
    "rules": [{
        "name": "string",
        "type": "latency",
        "description": "string",
        "maxLatency": number,
        "partyAggregation": <"avg", "min", "max">
    }, {
        "name": "string",
        "type": "batchDistance",
        "batchAttribute": "string",
        "maxDistance": number
    }],
    "expansions": [{
        "target": "string",
        "steps": [{
            "waitTimeSeconds": number,
            "value": number
        }, {
            "waitTimeSeconds": number,
            "value": number
        }]
    }]
}
```

# FlexMatch 규칙 세트 속성 정의
<a name="match-ruleset-property-definitions"></a>

이 섹션에서는 규칙 세트 스키마의 각 속성을 정의합니다. 규칙 세트 생성에 대한 추가 도움말은 [FlexMatch 규칙 세트 빌드](match-rulesets.md) 섹션을 참조하세요.

**`name`**  
규칙 세트를 설명하는 레이블. 이 값은 Amazon GameLift Servers [MatchmakingRuleSet 리소스](https://docs.aws.amazon.com/gamelift/latest/apireference/API_MatchmakingRuleSet.html)에 할당된 이름과는 관련이 없습니다. 이 값은 완료된 매치를 설명하는 매치메이킹 데이터에 포함되지만 Amazon GameLift Servers 프로세스에서는 사용되지 않습니다.  
허용된 값: 문자열  
필수 아니요

**`ruleLanguageVersion`**  
사용 중인 FlexMatch 속성 표현식 언어의 버전입니다.  
허용된 값: “1.0”  
필수 예

**`playerAttributes`**  
매치메이킹 요청에 포함되고 매치메이킹 프로세스에 사용되는 플레이어 데이터 모음입니다. 또한 매치메이킹 프로세스에 데이터가 사용되지 않더라도, 여기에서 속성을 선언하여 게임 서버로 전달되는 매치메이킹 데이터에 플레이어 데이터가 포함되도록 할 수 있습니다.  
필수 아니요    
**`name`**  
매치메이커가 사용하는 플레이어 속성의 고유한 이름입니다. 이 이름은 매치메이킹 요청에서 참조되는 플레이어 속성 이름과 일치해야 합니다.  
허용된 값: 문자열  
필수 예  
**`type`**  
플레이어 속성 값의 데이터 형식입니다.  
허용되는 값: “string”, “number”, “string\$1list”, “string\$1number\$1map”  
필수 예  
**`default `**  
플레이어에게 매치메이킹 요청이 제공하지 않을 때 사용할 기본값입니다.  
허용 값: 플레이어 속성에 허용되는 모든 값.  
필수 아니요 

**`algorithm`**  
매치메이킹 프로세스를 사용자 지정하기 위한 선택적 구성 설정.  
필수 아니요    
**`strategy`**  
매치를 구축할 때 사용할 메서드입니다. 이 속성을 설정하지 않으면 기본 동작인 “exhaustiveSearch”가 됩니다.  
허용된 값:   
+ “exhaustiveSearch” - 표준 매칭 메서드. FlexMatch는 일련의 사용자 지정 매치 규칙을 기반으로 풀에 있는 다른 티켓을 평가하여 가장 오래된 티켓을 중심으로 매치를 일괄적으로 구성합니다. 이 전략은 플레이어 40명 이하의 매치에 사용됩니다. 이 전략을 사용할 때는 `batchingPreference`를 “random” or “sorted”로 설정해야 합니다.
+ “balanced” - 라지 매치를 빠르게 형성하도록 최적화된 메서드입니다. 이 전략은 플레이어가 41\$1200명 정도인 매치에만 사용됩니다. 티켓 풀을 미리 정렬하고, 잠재적 매치를 구성하여, 플레이어를 팀에 배정한 다음, 지정된 플레이어 속성을 사용하여 각 팀의 밸런스를 맞추는 방식으로 매치를 구성합니다. 예를 들어, 이 전략을 사용하여 한 매치에 참가한 모든 팀의 평균 스킬 레벨을 동일하게 맞출 수 있습니다. 이 전략을 사용할 때는 `balancedAttribute`를 설정해야 하며 `batchingPreference`는 “largestPopulation” 또는 “fastestRegion”으로 설정해야 합니다. 대부분의 사용자 지정 규칙 유형은 이 전략에서 인식되지 않습니다.
필수 예  
**`batchingPreference`**  
매치 구성을 위해 티켓을 그룹화하기 전에 사용할 사전 정렬 메서드입니다. 티켓 풀을 미리 정렬하면 특정 특성에 따라 티켓이 일괄 처리되므로 최종 매치에서 플레이어 간의 균일성이 높아지는 경향이 있습니다.  
허용된 값:   
+ “random” - `strategy` = “exhaustiveSearch”인 경우에만 유효. 사전 정렬은 수행되지 않으며, 풀의 티켓은 무작위로 일괄 처리됩니다. 이는 전체 검색 전략의 기본 동작입니다.
+ “sorted” - `strategy` = “exhaustiveSearch”인 경우에만 유효. 티켓 풀은 `sortbyAttributes`에 나열된 플레이어 속성에 따라 사전 정렬됩니다.
+ “largestPopulation” - `strategy` = “balanced”인 경우에만 유효. 티켓 풀은 플레이어가 가장 짧은 지연 시간 레벨을 보고한 리전을 기준으로 사전 정렬됩니다. 이는 밸런스 전략의 기본 동작입니다.
+ “fastestRegion” - `strategy` = “balanced”인 경우에만 유효. 티켓 풀은 플레이어가 가장 짧은 지연 시간 레벨을 보고한 리전을 기준으로 사전 정렬됩니다. 결과 매치를 완료하는 데 시간이 더 오래 걸리지만 모든 플레이어의 지연 시간은 낮은 편입니다.
필수 예  
**`balancedAttribute`**  
밸런스 전략으로 라지 매치를 구성할 때 사용할 플레이어 속성의 이름입니다.  
허용되는 값: `type` = “number”로 `playerAttributes`에 선언된 모든 속성.  
필수 `strategy` = “balanced”인 경우, 예.  
**`sortByAttributes`**  
일괄 처리 전에 티켓 풀을 사전 정렬할 때 사용할 플레이어 속성 목록입니다. 이 속성은 전체 검색 전략을 사용하여 사전 정렬할 때만 사용됩니다. 속성 목록의 순서에 따라 정렬 순서가 결정됩니다. FlexMatch는 알파 및 숫자 값에 표준 정렬 규칙을 사용합니다.  
허용되는 값: `playerAttributes`에 선언된 모든 속성.  
필수 `batchingPreference` = “sorted”인 경우, 예.  
**`backfillPriority`**  
채우기 티켓을 매칭하기 위한 우선 순위 지정 메서드. 이 속성은 FlexMatch가 채우기 티켓을 일괄적으로 처리하는 시기를 결정합니다. 이는 전체 검색 전략을 사용하여 사전 정렬할 때만 사용됩니다. 이 속성을 설정하지 않으면 기본 동작인 “normal”이 됩니다.  
허용된 값:   
+ “normal” - 매치를 구성할 때 티켓의 요청 유형(채우기 또는 새 매치)은 고려되지 않습니다.
+ “high” - 티켓 배치가 요청 유형별로 정렬되고 (그런 다음, 연령별로 정렬되며) FlexMatch는 먼저 채우기 티켓을 매칭하려고 시도합니다.
+ “low” - 티켓 배치가 요청 유형별로 정렬되고 (그런 다음, 연령별로 정렬되며) FlexMatch는 먼저 비채우기 티켓을 매칭하려고 시도합니다.
필수 아니요  
**`expansionAgeSelection`**  
매치 규칙 확장을 위한 대기 시간을 계산하는 메서드입니다. 일정 시간이 지난 후에도 매치가 완료되지 않은 경우, 확장은 매치 요건을 완화하는 데 사용됩니다. 대기 시간은 부분적으로 채워진 매치에 이미 있는 티켓의 연령을 기준으로 계산됩니다. 이 속성을 설정하지 않으면 기본 동작인 “newest”가 됩니다.  
허용된 값:   
+ “newest” - 확장 대기 시간은 부분적으로 완료된 매치 중 가장 최근에 생성된 타임스탬프가 있는 티켓을 기준으로 계산됩니다. 신규 티켓 하나가 대기 시간 클록을 다시 시작할 수 있기 때문에 확장은 더 느리게 실행되는 경향이 있습니다.
+ “oldest” - 확장 대기 시간은 매치에서 가장 오래 전에 생성된 타임스탬프가 있는 티켓을 기준으로 계산됩니다. 확장은 더 빨리 실행되는 경향이 있습니다.
필수 아니요

**`teams`**  
매치 내 팀 구성. 각 팀의 팀 이름과 규모 범위를 제공합니다. 규칙 세트는 적어도 한 팀을 정의해야 합니다.    
**`name`**  
팀의 고유 이름입니다. 규칙 및 확장에서 팀 이름을 참조할 수 있습니다. 매치가 성공하면 매치메이킹 데이터에 있는 팀 이름을 기준으로 플레이어가 배정됩니다.  
허용된 값: 문자열  
필수 예  
**`maxPlayers`**  
팀에 할당할 수 있는 최대 플레이어 수입니다.  
허용된 값: 숫자  
필수 예  
**`minPlayers`**  
매치가 시작되기 전에 팀에 배정되어야 하는 최소 플레이어 수입니다.  
허용된 값: 숫자  
필수 예  
**`quantity`**  
매치에서 생성할 수 있는 이 유형의 팀 수입니다. 팀원이 1보다 큰 팀은 번호가 추가되어 지정됩니다(“Red\$11”, “Red\$12” 등). 이 속성을 설정하지 않을 경우 기본값은 “1”입니다.  
허용된 값: 숫자  
필수 아니요

**`rules`**  
매치에 대한 플레이어를 평가하는 방법을 정의하는 규칙 문 모음을 생성합니다.  
필수 아니요    
**`name`**  
역할의 고유한 이름입니다. 규칙 세트의 모든 규칙은 고유한 이름을 가져야 합니다. 규칙 이름은 규칙과 관련된 활동을 추적하는 이벤트 로그 및 측정치에서 참조됩니다.  
허용된 값: 문자열  
필수 예  
**`description`**  
규칙에 대한 텍스트 설명입니다. 이 정보는 규칙의 용도를 식별하는 데 사용할 수 있습니다. 매치메이킹 프로세스에는 사용되지 않습니다.  
허용된 값: 문자열  
필수 아니요  
**`type`**  
규칙 문 유형입니다. 각 규칙 유형에는 설정해야 하는 추가 속성이 있습니다. 각 규칙 유형의 구조 및 사용에 대한 자세한 내용은 [FlexMatch 규칙 유형](match-rules-reference-ruletype.md) 섹션을 참조하세요.  
허용된 값:   
+ “absoluteSort” - 지정된 플레이어 속성이 일괄적으로 가장 오래된 티켓과 비교되는지 여부를 기준으로 티켓을 일괄 정렬하는 명시적인 정렬 메서드를 사용하여 정렬합니다.
+ “collection” - 컬렉션의 값을 평가합니다(예: 컬렉션인 플레이어 속성 또는 여러 플레이어의 값 집합).
+ “comparison” - 두 값을 비교합니다.
+ “compound” - 규칙 세트에 있는 다른 규칙의 논리적 조합을 사용하여 복합 매치메이킹 규칙을 정의합니다. 플레이어가 40명 이하인 매치에만 지원됩니다.
+ “distance” - 숫자 값 간의 거리를 측정합니다.
+ “batchDistance” - 속성 값 간의 차이를 측정하고 이를 사용하여 매치 요청을 그룹화합니다.
+ “distanceSort” - 숫자값이 포함된 지정된 플레이어 속성을 가장 오래된 티켓과 일괄 처리로 비교하는 방법을 기준으로 티켓을 일괄 정렬하는 명시적인 정렬 메서드를 사용하여 정렬합니다.
+ “latency” - 매치메이킹 요청에 대해 보고된 리전별 지연 시간 데이터를 평가합니다.
필수 예

**`expansions`**  
매치를 완료할 수 없는 경우 시간이 지남에 따라 매치 요건을 완화하는 규칙. 매치를 더 쉽게 찾을 수 있도록 점진적으로 적용되는 일련의 단계로 확장을 설정합니다. 기본적으로 FlexMatch는 매치에 추가된 최신 티켓의 연령별로 대기 시간을 계산합니다. `expansionAgeSelection` 알고리즘 속성을 사용하여 확장 대기 시간을 계산하는 방식을 변경할 수 있습니다.  
확장 대기 시간은 절대값이므로 각 단계의 대기 시간이 이전 단계보다 더 길어야 합니다. 예를 들어, 점진적인 확장을 예약하려면 30초, 40초, 50초의 대기 시간을 사용할 수 있습니다. 대기 시간은 매치메이킹 구성에 설정된 매치 요청에 허용된 최대 시간을 초과할 수 없습니다.  
필수 아니요    
**`target`**  
규칙 세트 요소는 완화되어야 합니다. 팀 규모 속성이나 모든 규칙 문 속성을 완화할 수 있습니다. 구문은 “<component name>[<rule/team name>].<property name>”입니다. 예를 들어, 팀 최소 규모를 변경하려면: `teams[Red, Yellow].minPlayers`. “minSkill”이라는 비교 규칙 문에서 최소 스킬 요구 사항을 변경하려면: `rules[minSkill].referenceValue`.  
필수 예  
**`steps`**    
**`waitTimeSeconds`**  
대상 규칙 세트 요소에 새 값을 적용하기 전에 대기하는 시간(초)입니다.  
필수 예  
**`value`**  
대상 규칙 세트 요소의 새 값입니다.

# FlexMatch 규칙 유형
<a name="match-rules-reference-ruletype"></a>

## 배치 거리 규칙
<a name="match-rules-reference-ruletype-batchdistance"></a>

```
batchDistance
```

배치 거리 규칙은 두 속성값 간의 차이를 측정합니다. 라지 및 스몰 매치 항목 모두에 배치 거리 규칙 유형을 사용할 수 있습니다. 다음과 같은 두 가지 유형의 배치 거리 규칙이 있습니다.
+ *수치 속성 값을 비교합니다*. 예를 들어, 이 유형의 배치 거리 규칙을 통해 매치의 모든 플레이어들이 서로 두 스킬 레벨 내에 있어야 한다고 정할 수 있습니다. 이 유형의 경우 모든 티켓 `batchAttribute` 간의 최대 거리를 정의합니다.
+ *문자열 속성 값을 비교합니다*. 예를 들어, 이 유형의 배치 거리 규칙을 적용하면 매치에 참여하는 모든 플레이어가 동일한 게임 모드를 요청해야 할 수 있습니다. 이 유형의 경우 FlexMatch가 배치를 구성하는 데 사용하는 `batchAttribute` 값을 정의합니다.

**배치 거리 규칙 속성**
+ **`batchAttribute`** - 배치를 구성하는 데 사용되는 플레이어 속성 값입니다.
+ **`maxDistance`** - 성공적인 매치에 대한 최대 거리 값입니다. 수치 속성을 비교하는 데 사용됩니다.
+ **`partyAggregation`** - FlexMatch가 여러 플레이어(그룹)가 있는 티켓을 처리하는 방식을 결정하는 값입니다. 유효한 옵션에는 티켓 플레이어의 최소(`min`), 최대(`max`), 평균(`avg`) 값이 포함됩니다. 기본값은 `avg`입니다.

**Example**  
예제  

```
{
  "name":"SimilarSkillRatings",
  "description":"All players must have similar skill ratings",
  "type":"batchDistance",
  "batchAttribute":"SkillRating",
  "maxDistance":"500"
}
```

```
{
  "name":"SameGameMode",
  "description":"All players must have the same game mode",
  "type":"batchDistance",
  "batchAttribute":"GameMode"
}
```

## 비교 규칙
<a name="match-rules-reference-ruletype-comparison"></a>

```
comparison
```

비교 규칙은 또 다른 값과 플레이어 속성 값을 비교합니다. 다음과 같은 두 가지 유형의 비교 규칙이 있습니다.
+ *참조 값과 비교합니다*. 예를 들어, 이 유형의 비교 규칙을 적용하려면 매칭된 플레이어의 스킬 레벨이 특정 수준 이상이어야 할 수 있습니다. 이 유형의 경우 플레이어 속성, 참조 값, 비교 작업을 지정합니다.
+ *플레이어 간을 비교합니다*. 예를 들어, 이 유형의 비교 규칙을 적용하려면 매치에 참여하는 모든 플레이어가 서로 다른 캐릭터를 사용해야 할 수 있습니다. 이 유형의 경우 플레이어 속성을 지정하고 equal(`=`) 또는 not-equal(`!=`) 비교 연산을 지정합니다. 참조 값을 지정하지 마세요.

**참고**  
배치 거리 규칙은 플레이어 속성을 비교하는 데 더 효율적입니다. 매치메이킹 지연 시간을 줄이려면 가능하면 배치 거리 규칙을 사용합니다.

**비교 규칙 속성**
+ **`measurements`** - 비교할 플레이어 속성 값입니다.
+ **`referenceValue`** - 가능한 매치의 측정값과 비교할 값입니다.
+ **`operation`** - 측정값을 참조 값과 비교하는 방법을 결정하는 값입니다. 유효한 연산에는 다음이 포함됩니다. `<`, `<=`, `=`, `!=`, `>`, `>=`.
+ **`partyAggregation`** - FlexMatch가 여러 플레이어(그룹)가 있는 티켓을 처리하는 방식을 결정하는 값입니다. 유효한 옵션에는 티켓 플레이어의 최소(`min`), 최대(`max`), 평균(`avg`) 값이 포함됩니다. 기본값은 `avg`입니다.

## 거리 규칙
<a name="match-rules-reference-ruletype-distance"></a>

```
distance
```

거리 규칙은 플레이어 스킬 레벨 간의 거리와 같이 두 숫자 값 간의 차이를 측정합니다. 예를 들어 거리 규칙에 따라 모든 플레이어가 최소 30시간 이상 게임을 플레이해야 할 수 있습니다.

**참고**  
배치 거리 규칙은 플레이어 속성을 비교하는 데 더 효율적입니다. 매치메이킹 지연 시간을 줄이려면 가능하면 배치 거리 규칙을 사용합니다.

**거리 규칙 속성**
+ **`measurements`** - 거리를 측정할 플레이어 속성값입니다. 이 속성은 숫자 값이 있는 속성이어야 합니다.
+ **`referenceValue`** - 가능한 매치에 대한 거리를 측정하는 숫자 값입니다.
+ **`minDistance`/`maxDistance`** - 성공적인 매치에 대한 최소 또는 최대 거리 값입니다.
+ **`partyAggregation`** - FlexMatch가 여러 플레이어(그룹)가 있는 티켓을 처리하는 방식을 결정하는 값입니다. 유효한 옵션에는 티켓 플레이어의 최소(`min`), 최대(`max`), 평균(`avg`) 값이 포함됩니다. 기본값은 `avg`입니다.

## 수집 규칙
<a name="match-rules-reference-ruletype-collection"></a>

```
collection
```

수집 규칙은 플레이어 속성 값 그룹을 배치에 있는 다른 플레이어의 속성 값 또는 참조 값과 비교합니다. 속성 모음에는 여러 플레이어에 대한 속성 값, 한 플레이어에 대한 속성 값(문자열 목록), 또는 둘 모두가 포함될 수 있습니다. 예를 들어, 수집 규칙은 팀 내 플레이어가 선택한 캐릭터를 살펴볼 수 있습니다. 그러면 규칙에 따라 팀에 특정 캐릭터 중 한 명 이상이 있어야 할 수도 있습니다.

**수집 규칙 속성**
+ **`measurements`** - 비교할 플레이어 속성 값의 모음입니다. 속성 값은 반드시 문자열 목록이어야 합니다.
+ **`referenceValue`** - 가능한 매치에 대한 측정치를 비교하는 데 사용하는 값 (또는 값 모음)입니다.
+ **`operation`** - 측정값 모음을 비교하는 방법을 결정하는 값입니다. 유효한 작업에는 다음이 포함됩니다.
  + `intersection` - 이 작업을 통해 모든 플레이어의 모음에서 동일한 값의 수를 측정합니다. 교차 작업을 사용하는 규칙의 예는 [예제: 최선의 매치 검색을 위한 명시적 정렬 사용](match-examples-4.md) 섹션을 참조하세요.
  + `contains` - 이 작업을 통해 특정 참조 값을 포함하는 플레이어 속성 모음의 수를 측정합니다. 작업을 사용하는 규칙의 예는 [예제: 팀 레벨 요구 사항 및 지연 시간 제한 설정](match-examples-3.md) 섹션을 참조하세요.
  + `reference_intersection_count` - 이 작업을 통해 참조 값 모음에 항목을 매칭하는 플레이어 속성 모음의 항목 수를 측정합니다. 이 작업을 사용하여 다른 여러 플레이어 속성을 비교할 수 있습니다. 여러 플레이어 속성 모음을 비교하는 규칙의 예는 [예제: 복수 플레이어 속성 간의 교집합 찾기](match-examples-5.md) 섹션을 참조하세요.
+ **`minCount`/`maxCount`** - 성공적인 매치에 대한 최소 또는 최대 개수 값입니다.
+ **`partyAggregation`** - FlexMatch가 여러 플레이어(그룹)가 있는 티켓을 처리하는 방식을 결정하는 값입니다. 이 값의 경우 `union`을 사용하여 그룹에 있는 모든 플레이어의 플레이어 속성을 조합할 수 있습니다. 또는 `intersection`을 사용하여 그룹이 공통으로 가지고 있는 플레이어 속성을 사용할 수도 있습니다. 기본값은 `union`입니다.

## 복합 규칙
<a name="match-rules-reference-ruletype-compound"></a>

```
compound
```

복합 규칙은 논리적 문을 사용하여 40명 이하의 플레이어로 구성된 매치를 구성합니다. 단일 규칙 세트에 여러 복합 규칙을 사용할 수 있습니다. 여러 복합 규칙을 사용하는 경우 모든 복합 규칙이 true여야 매치를 구성할 수 있습니다.

[확장 규칙](match-rulesets-components-algorithm.md#match-rulesets-components-algorithm-expansion)을 사용하여 복합 규칙을 확장할 수는 없지만 기본 규칙 또는 지원 규칙을 확장할 수 있습니다.

**복합 규칙 속성**
+ **`statement`** - 개별 규칙을 결합하여 복합 규칙을 구성하는 데 사용되는 로직입니다. 이 속성에서 지정한 규칙은 규칙 세트에서 이전에 정의되어 있어야 합니다. 복합 규칙에는 `batchDistance` 규칙을 사용할 수 없습니다.

  이 속성은 다음과 같은 논리 연산자를 지원합니다.
  + `and` - 제공된 두 인수가 true인 경우 표현식은 true입니다.
  + `or` - 제공된 두 인수 중 하나가 true인 경우 표현식은 true입니다.
  + `not` - 표현식에서 인수 결과를 반대로 바꿉니다.
  + `xor` - 인수 중 하나만 true인 경우 표현식은 true입니다.

**Example 예제**  
다음 예제에서는 선택한 게임 모드에 따라 다양한 스킬 레벨의 플레이어를 매칭합니다.  

```
{
    "name": "CompoundRuleExample",
    "type": "compound",
    "statement": "or(and(SeriousPlayers, VeryCloseSkill), and(CasualPlayers, SomewhatCloseSkill))"
}
```

## 지연 규칙
<a name="match-rules-reference-ruletype-latency"></a>

```
latency
```

지연 규칙은 위치별 플레이어 지연 시간을 측정합니다. 지연 규칙은 지연 시간이 최대값보다 더 높은 모든 위치를 무시합니다. 지연 규칙이 허용되려면 플레이어의 최소 한 위치에서 지연 시간 값이 최대값보다 낮아야 합니다. `maxLatency` 속성을 지정하여 라지 매치에 이 규칙 유형을 사용할 수 있습니다.

**지연 시간 규칙 속성**
+ **`maxLatency`** - 위치에 허용 가능한 최대 지연 시간 값입니다. 티켓에 지연 시간이 최대값 미만인 위치가 없는 경우 티켓은 지연 시간 규칙과 일치하지 않습니다.
+ **`maxDistance`** - 각 티켓의 지연 시간과 거리 참조 값 사이의 최대값입니다.
+ **`distanceReference`** - 티켓 지연 시간을 비교할 지연 시간 값입니다. 거리 참조 값의 최대 거리 내에 있는 티켓은 매칭에 성공합니다. 유효한 옵션은 최소(`min`) 및 평균(`avg`) 플레이어 지연 시간 값을 포함합니다.
+ **`partyAggregation`** - FlexMatch가 여러 플레이어(그룹)가 있는 티켓을 처리하는 방식을 결정하는 값입니다. 유효한 옵션에는 티켓 플레이어의 최소(`min`), 최대(`max`), 평균(`avg`) 값이 포함됩니다. 기본값은 `avg`입니다.

**참고**  
대기열을 사용하면 지연 시간 규칙과 일치하지 않는 리전에 게임 세션을 배치할 수 있습니다. 대기열의 지연 시간 정책에 대한 자세한 내용은 [플레이어 지연 시간 정책 생성](https://docs.aws.amazon.com/gameliftservers/latest/developerguide/queues-design.html#queues-design-latency)을 참조하세요.

## 절대 정렬 규칙
<a name="match-rules-reference-ruletype-absolute"></a>

```
absoluteSort
```

절대 정렬 규칙은 배치에 추가된 첫 번째 티켓과 비교하여 지정된 플레이어 속성을 기준으로 매치메이킹 티켓 배치를 정렬합니다.

**절대 정렬 규칙 속성**
+ **`sortDirection`** - 매치메이킹 티켓을 정렬하는 순서입니다. 유효한 옵션은 다음과 같습니다. `ascending`, `descending`.
+ **`sortAttribute`** - 티켓 정렬 기준으로 사용할 플레이어 속성입니다.
+ **`mapKey`** - 맵인 경우 플레이어 속성을 정렬하는 옵션입니다. 유효한 옵션은 다음과 같습니다.
  + `minValue` - 값이 가장 낮은 키가 첫 번째입니다.
  + `maxValue` - 값이 가장 높은 키가 첫 번째입니다.
+ **`partyAggregation`** - FlexMatch가 여러 플레이어(그룹)가 있는 티켓을 처리하는 방식을 결정하는 값입니다. 유효한 옵션에는 최소(`min`) 플레이어 속성, 최대(`max`) 플레이어 속성, 그룹 내 플레이어에 대한 모든 플레이어 속성의 평균(`avg`)을 포함합니다. 기본값은 `avg`입니다.

**Example**  
예제  
다음 예제 규칙은 플레이어를 스킬 레벨별로 정렬하고 그룹의 스킬 레벨의 평균을 계산합니다.  

```
{
    "name":"AbsoluteSortExample",
    "type":"absoluteSort",
    "sortDirection":"ascending",
    "sortAttribute":"skill",
    "partyAggregation":"avg"
}
```

## 거리 정렬 규칙
<a name="match-rules-reference-ruletype-distancesort"></a>

```
distanceSort
```

거리 정렬 규칙은 배치에 추가된 첫 번째 티켓에서 지정된 플레이어 속성 거리를 기준으로 매치메이킹 티켓 배치를 정렬합니다.

**거리 정렬 규칙 속성**
+ **`sortDirection`** - 매치메이킹 티켓을 정렬하는 방향입니다. 유효한 옵션은 다음과 같습니다. `ascending`, `descending`.
+ **`sortAttribute`** - 티켓 정렬 기준으로 사용할 플레이어 속성입니다.
+ **`mapKey`** - 맵인 경우 플레이어 속성을 정렬하는 옵션입니다. 유효한 옵션은 다음과 같습니다.
  + `minValue` - 배치에 추가된 첫 번째 티켓의 경우 값이 가장 낮은 키를 찾습니다.
  + `maxValue` - 배치에 추가된 첫 번째 티켓의 경우 값이 가장 높은 키를 찾습니다.
+ **`partyAggregation`** - FlexMatch가 여러 플레이어(그룹)가 있는 티켓을 처리하는 방식을 결정하는 값입니다. 유효한 옵션에는 티켓 플레이어의 최소(`min`), 최대(`max`), 평균(`avg`) 값이 포함됩니다. 기본값은 `avg`입니다.

# FlexMatch 속성 표현식
<a name="match-rules-reference-property-expression"></a>

속성 표현식은 매치메이킹과 관련된 특정 속성을 참조하는 데 사용할 수 있습니다. 이를 통해 속성 값을 정의할 때 계산과 로직을 사용할 수 있습니다. 속성 표현식의 결과는 일반적으로 다음 두 가지 형식 중 하나를 취합니다.
+ 개별 플레이어 데이터.
+ 개별 플레이어 데이터의 계산된 컬렉션.

## 일반적인 매치메이킹 속성 표현식.
<a name="match-rules-reference-property-expression-common"></a>

속성 표현식은 플레이어, 팀 또는 매치의 특정 값을 식별합니다. 다음의 부분 표현식이 팀 및 플레이어 식별 방식을 설명합니다.


| Goal | Input | 의미 | 출력 | 
| --- | --- | --- | --- | 
| 매치에서 특정 팀을 식별하는 방법: | teams[red] | 레드 팀 | Team  | 
| 매치에서 특정 팀 집합을 식별하는 방법: | teams[red,blue] | Red 팀 및 Blue 팀 | List<Team> | 
| 매치에서 모든 팀을 식별하는 방법: | teams[\$1] | 모든 팀 | List<Team> | 
| 특정 팀에서 플레이어를 식별하는 방법: | team[red].players | Red 팀에 있는 플레이어  | List<Player> | 
| 매치의 특정 팀 집합에서 플레이어를 식별하는 방법: | team[red,blue].players | 매치에 속한 플레이어의 팀별 그룹화 | List<List<Player>> | 
| 매치에서 플레이어를 식별하는 방법: | team[\$1].players | 매치에 속한 플레이어의 팀별 그룹화 | List<List<Player>> | 

## 속성 표현식 예제
<a name="match-rules-reference-property-expression-examples"></a>

다음 표는 이전 예제를 바탕으로 구축되는 일부 속성 표현식을 나타낸 것입니다.


****  

| 표현식 | 의미 | 결과 유형 | 
| --- | --- | --- | 
|  `teams[red].players[playerId]`  | 레드 팀에 속한 모든 플레이어의 플레이어 ID | List<string> | 
| teams[red].players.attributes[skill] | 레드 팀에 속한 모든 플레이어의 "스킬" 속성 | List<number> | 
| teams[red,blue].players.attributes[skill] | Red 팀과 Blue 팀에 속한 모든 플레이어의 “skill” 속성(팀별로 그룹화) | List<List<number>> | 
| teams[\$1].players.attributes[skill] | 매치에 속한 모든 플레이어(팀별 그룹화)의 "스킬" 속성 | List<List<number>> | 

## 속성 표현식 집계
<a name="match-rules-reference-property-expression-aggregation"></a>

속성 표현식은 다음 함수 또는 함수 조합을 사용하여 팀 데이터를 집계하는 데 사용할 수 있습니다.


****  

| 집계 | Input | 의미 | 출력 | 
| --- | --- | --- | --- | 
| min | List<number> | 목록에 있는 모든 수의 최소값을 구합니다. | number | 
| max | List<number> | 목록에 있는 모든 수의 최대값을 구합니다. | number | 
| avg | List<number> | 목록에 있는 모든 수의 평균을 구합니다. | number | 
| median | List<number> | 목록에 있는 모든 수의 중간값을 구합니다. | number | 
| sum | List<number> | 목록에 있는 모든 수의 합계를 구합니다. | number | 
| count | List<?> | 목록에 있는 원소의 수를 구합니다. | number | 
| stddev | List<number> | 목록에 있는 모든 수의 표준편차를 구합니다. | number | 
| flatten | List<List<?>> | 중첩된 목록의 컬렉션을 모든 원소를 포함하는 단일 목록으로 변환합니다. | List<?> | 
| set\$1intersection | List<List<string>> | 모음에 있는 모든 문자열 목록에서 확인된 문자열의 목록을 가져옵니다. | List<string> | 
| 모두 해당 | List<List<?>> | 중첩된 목록 상의 모든 연산이 각 하위 목록에서 개별적으로 이루어져 결과 목록을 산출합니다. | List<?> | 

다음 표는 집계 함수를 사용하는 일부 유효한 속성 표현식을 나타낸 것입니다.


****  

| 표현식 | 의미 | 결과 유형 | 
| --- | --- | --- | 
| flatten(teams[\$1].players.attributes[skill]) | 매치에 속한 모든 플레이어(그룹화되지 않음)의 "스킬" 속성 | List<number> | 
| avg(teams[red].players.attributes[skill]) | 레드 팀 플레이어의 평균 스킬 | number | 
| avg(teams[\$1].players.attributes[skill]) | 매치에 속한 각 팀의 평균 스킬 | List<number> | 
| avg(flatten(teams[\$1].players.attributes[skill])) | 매치에 속한 모든 플레이어의 평균 스킬 레벨입니다. 이 표현식은 평면화된 플레이어 스킬 목록을 구한 다음 평균합니다. | number | 
| count(teams[red].players) | 레드 팀에 있는 플레이어의 수 | number | 
| count (teams[\$1].players) | 매치에 속한 각 팀의 플레이어 수 | List<number> | 
| max(avg(teams[\$1].players.attributes[skill])) | 매치에서 가장 높은 팀 스킬 레벨  | number | 