# 매치메이킹

매치메이킹을 빠르게 시작하고 다양한 장르의 예시 시나리오를 살펴보세요.

이 영상을 따라 우리의 매치메이커 서비스를 시작해 보세요:

{% embed url="<https://youtu.be/HxtvzvJ1FTk>" %}

## ✔️ 준비

### 매치메이킹 아키텍처

이 가이드는 다음에 초점을 맞춥니다 **매치메이킹 API 및 백필 API**.

<figure><img src="https://1562312210-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2Fp2QpL1MXYtwSWB2VJN2A%2Fimage.png?alt=media&#x26;token=ecc73799-c2e6-4884-965f-48e4c125659c" alt=""><figcaption></figcaption></figure>

매치메이킹이 관련될 때 중요한 데이터 흐름은 네(4) 가지가 있습니다:

1. [매치메이킹 API](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#matchmaking-api) **는 게임 클라이언트가 매치메이커와 통신하는 데 사용됩니다:**
   1. 그룹 관리, 서버 할당 및 모니터링을 위해,
   2. 다음을 사용한 ping 측정을 위해 [ping-beacons](https://docs.edgegap.com/docs.edgegap.com-ko/learn/orchestration/ping-beacons "mention").
2. [deployments](https://docs.edgegap.com/docs.edgegap.com-ko/learn/orchestration/deployments "mention") API는 매치메이커를 통해 전용 서버를 배포, 확장 및 관리하는 데 사용됩니다.
3. [넷코드 전송](https://docs.edgegap.com/docs.edgegap.com-ko/docs/sample-projects) 는 게임 클라이언트와 전용 서버 간 통신에 사용됩니다.
4. [#backfill-match](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#backfill-match "mention") **실행 중인 서버에서 플레이어를 교체하거나 추가하기 위해.**

{% hint style="info" %}
출시 후, **매치메이커는 24시간 연중무휴로 실행되어야 합니다** 전 세계의 플레이어가 서버에 참여할 수 있도록 보장하기 위해.
{% endhint %}

## 🍀 간단한 예시

간단한 예시부터 시작하여 기본적인 매치메이킹 플레이어 흐름을 테스트해 보세요:

* 공유된 환경에 매치메이커 인스턴스를 생성하고 [#hosting-cluster](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#hosting-cluster "mention"),
* 매치메이커에서 규칙과 설정을 정의하고 [#configuration](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#configuration "mention"),
* 다음을 사용하여 플레이어 흐름을 테스트하고 티켓을 관리합니다 [#matchmaking-api](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#matchmaking-api "mention").

### 1. 무료 티어에서 설정

☑️ [무료 Edgegap 계정에 등록하고](https://app.edgegap.com/auth/register) 다음을 엽니다 [매치메이커 대시보드 페이지](https://app.edgegap.com/matchmaker-management-v2/matchmakers/list).

☑️ 클릭 **매치메이커 생성** 을 먼저 누른 다음 다음을 입력하세요:

* 매치메이커 이름 - 참고용으로 사용, 예: `quickstart-dev` ,
* 우리의 간단한 예시 JSON 구성 파일을 업로드합니다.

🍀 **간단한 예시(최소 권장 구성):**

{% hint style="danger" %}
**애플리케이션을 변경해야 합니다** **`이름`**  **및** **`버전`**  **을 귀하의 것과 일치하도록** [application-and-versions](https://docs.edgegap.com/docs.edgegap.com-ko/learn/orchestration/application-and-versions "mention").
{% endhint %}

<pre class="language-json"><code class="lang-json">{
  "version": "3.2.2",
  "inspect": true,
  "max_deployment_retry_count": 3,
  "profiles": {
    "simple-example": {
      "ticket_expiration_period": "5m",
      "ticket_removal_period": "1m",
      "group_inactivity_removal_period": "5m",
      "application": {
        "name": "<a data-footnote-ref href="#user-content-fn-1">my-game-server</a>",
        "version": "<a data-footnote-ref href="#user-content-fn-2">2024.01.30-16.23.00-UTC</a>"
      },
      "rules": {
        "initial": {
          "match_size": {
            "type": "player_count",
            "attributes": {
              "team_count": 1,
              "min_team_size": 2,
              "max_team_size": 2
            }
          },
          "beacons": {
            "type": "latencies",
            "attributes": {
              "difference": 100,
              "max_latency": 200
            }
          }
        },
        "expansions": {}
      }
    }
  }
}
</code></pre>

**문제 해결 및 FAQ:**

☑️ 검증 오류가 나타나지 않으면 **생성 및 시작** 을 누르고 프로세스가 완료될 때까지 기다리세요. 그러면 새로운 무료 클러스터가 시작되며, 간단한 예시 매치메이커가 포함됩니다.

✅ 이제 다음 단계로 진행할 수 있습니다.

### 2. 구성 살펴보기

매치메이커 업데이트를 릴리스할 때마다, 각 새 버전은 [시맨틱 버전 관리](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#changelog) 를 사용하여 형식을 해석해 변경 사항의 영향을 명확히 전달합니다 `major.minor.patch`:

* 🔥 `주요` 버전은 호환성을 깨는 변경을 포함하며 통합 검토가 필요합니다,
* 🌟 `부` 버전은 상당한 하위 호환 개선을 포함합니다,
* 🩹 `패치` 버전은 버그 수정 및 소규모 개선을 포함합니다.

[티켓 검사](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#matchmaking-api) 개발 중 가능한 매치메이킹 흐름을 더 잘 이해하고 디버깅하기 위해 사용합니다. 실서비스 매치메이커에서는 inspect API를 비활성화하는 것을 권장합니다.

**일부** [**배포는 오류를 발생시킬 수 있습니다**](https://docs.edgegap.com/docs.edgegap.com-ko/orchestration/deployments#id-4.-deployment-error)**.** 이를 해결하기 위해 배포를 최대 `max_deployment_retry_count` 회까지 자동으로 재시도합니다(클라이언트 확인 없이).

예기치 않은 클라이언트 충돌이나 포기된 티켓이 남아 매치메이커 리소스를 점유하지 않도록, 매칭되지 않은 티켓은 `ticket_expiration_period` 이 지난 후 상태가 `CANCELLED` 로 변경되고, 이후 `ticket_removal_period` .

{% hint style="info" %}
[매치메이커가 어떻게 매칭 채움률을 극대화하고 대기 시간을 10초 미만으로 줄이는지 알아보세요.](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#find-match)
{% endhint %}

우리 매치메이킹 로직의 핵심은 [#matchmaking-profiles](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#matchmaking-profiles "mention")에서 구성됩니다. 각 프로필은 완전히 분리된 매치메이킹 대기열이며, [#app-versions](https://docs.edgegap.com/docs.edgegap.com-ko/orchestration/application-and-versions#app-versions "mention") 미리 정의된 필수 CPU 및 메모리(RAM) 리소스를 가진 상태를 가리킵니다.

[#matchmaking-rules](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#matchmaking-rules "mention") 초기 규칙 세트의 조건은 플레이어를 함께 그룹화하기 위해 충족되어야 하며, 각 항목은 세 가지 속성으로 정의됩니다:

* 임의로 지정한 이름, 예: - `매치 크기`,
* 규칙 유형, 연산자라고도 하며, 예: - `player_count`,
* 그리고 마지막으로 연산자 속성, 예: `team_count` 또는 `max_team_size`.

**플레이어 수 규칙**

이것은 할당을 시작하기 위해 몇 명의 플레이어가 일치해야 하는지 정의하는 특수 규칙입니다:

* `team_count` 팀 수를 의미하며, 1팀은 협동 또는 자유 대전 모드에 사용할 수 있습니다,
* `min_team_size` 는 팀당 최소 플레이어 수를 의미합니다.
* `max_team_size` 는 팀당 최대 플레이어 수를 의미합니다.

우리의 간단한 예시는 2명의 플레이어가 있는 협동 게임을 보여줍니다.

{% hint style="warning" %}
플레이어 수 규칙 **은 필수이며 한 번만 정의할 수 있습니다** 초기 구성 규칙에서.
{% endhint %}

**지연 시간 규칙**

✅ 이제 다음 단계로 진행할 수 있습니다.

### 3. 인스턴스 세부 정보 검토

☑️ 초기화가 완료되면 대시보드에서 새 매치메이커의 세부 정보를 검토하세요:

<figure><img src="https://1562312210-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FY4Byy46pgEoXXmrtH92n%2Fimage.png?alt=media&#x26;token=3fb5fd0e-526e-4f89-ac9a-9ee6809aeaf1" alt=""><figcaption></figcaption></figure>

* **상태** 서비스 상태를 나타내며 ONLINE, OFFLINE 또는 ERROR일 수 있습니다.
* **식별자** 문제 해결이 필요할 때 Edgegap 직원이 귀하의 매치메이커를 빠르게 찾는 데 도움이 됩니다.
* **시작 시간** 가장 최근 업데이트 시간을 추적하는 데 유용할 수 있습니다.
* **크기** 다음 중 하나에 해당합니다 [요금제 티어](https://edgegap.com/resources/pricing#matchmaker).
* **API URL** 는 게임 클라이언트와 게임 서버가 귀하의 매치메이커와 통신하는 데 사용됩니다.
* **Swagger URL** 은 API 스키마를 살펴볼 수 있게 제공하는 편리한 openAPI 명세 GUI입니다.
* **인증 토큰** 은 게임 클라이언트와 게임 서버가 인증에 사용하는 고유한 비밀 토큰입니다.

{% hint style="danger" %}
**Edgegap 직원은 귀하의 토큰을 절대 요청하지 않습니다. 보안 침해가 의심되면 토큰을 재생성하세요.**
{% endhint %}

새 매치메이커를 테스트하려면, **Swagger URL, API URL 및 인증 토큰이 필요합니다**.

✅ 이제 다음 단계로 진행할 수 있습니다.

{% hint style="info" %}
개발 중 매치메이커 규칙을 업데이트하려면 구성을 편집하고 다시 시작하세요.
{% endhint %}

{% hint style="success" %}
참조 [#rolling-updates-and-ab-tests](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#rolling-updates-and-ab-tests "mention") 라이브 게임 및 무중단 업데이트에 대해.
{% endhint %}

### 4. 티켓 API 테스트

{% hint style="info" %}
**최대 5분까지 기다려 주세요** 매치메이커를 시작한 후 DNS 전파가 완료될 시간을 주기 위해.
{% endhint %}

☑️ 먼저, **Swagger URL을 열어** swagger GUI에서 openAPI 스키마를 확인하세요:

<figure><img src="https://1562312210-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FyFErlc8rw9KHMOqloIUF%2Fimage.png?alt=media&#x26;token=5a806adf-d644-4af6-b65e-9af82232bfcd" alt=""><figcaption></figcaption></figure>

☑️ 클릭 **Authorize** 🔒, 귀하의 **인증 토큰**를 붙여넣고, **Authorize**.

<figure><img src="https://1562312210-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FWnFM0p4UwDuo6Z5IOiUf%2Fimage.png?alt=media&#x26;token=7cbdff75-7f6b-467c-8df3-fa568b846dac" alt=""><figcaption></figcaption></figure>

☑️ 아래로 스크롤하여 **티켓 API** **- POST /tickets**를 펼친 후 클릭 **Try it out**.

<figure><img src="https://1562312210-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FpxA3FxrxhlelzSWvb5CO%2Fimage.png?alt=media&#x26;token=8fc4fa97-44d5-48e3-8c02-c2dd49c6cd74" alt=""><figcaption></figcaption></figure>

☑️ 요청을 미리 보기:

* 주의 `player_ip` 값이 `null` 로 설정되어 있습니다 - 이렇게 하면 매치메이커가 요청에 자동으로 추가된 IP 주소를 사용합니다(대안은 [#server-to-server-api](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#server-to-server-api "mention") 참조),
* `profile` 은 귀하의 [#matchmaking-profiles](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#matchmaking-profiles "mention"),
* `속성` 을 의미하며, 매치메이커 규칙에 대한 값이 포함됩니다. 이 경우 `latencies` 규칙에 대한,
  * rule `player_count` 은 플레이어 티켓에서 어떤 속성도 요구하지 않는 유일한 규칙입니다.

☑️ 클릭 **Execute** 하고 플레이어 티켓 요청에 대한 응답을 검토하세요:

* `id` 는 고유한 매치메이킹 티켓 ID입니다. 나중에 티켓을 확인할 수 있도록 저장해 두세요,
* `profile` 다음 선택을 확인합니다 [#matchmaking-profiles](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#matchmaking-profiles "mention"),
* `group_id` 는 모든 티켓에 발급되는 고유한 [그룹 ID이며, 솔로 플레이어는 1개의 그룹으로 표시됩니다](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#group-up),
* `team_id` 는 각 플레이어에게 한 번씩 발급되는 고유한 팀 ID입니다 `TEAM_FOUND` 상태에 도달하면,
  * [각 팀은 구성된 팀 크기를 넘지 않는 여러 그룹을 포함할 수 있습니다](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#matchmaking-rules),
* `player_ip` 는 식별 방법과 관계없이 해결된 플레이어의 공개 IP 주소입니다,
* `assignment` 이(가) `null` 로 설정되어 있어 티켓이 서버에 매칭되거나 할당되지 않았음을 나타냅니다,
* `created_at` 은 게임 UI 사용을 위해 플레이어 티켓이 언제 생성되었는지에 대한 정보를 제공합니다,
* `status` 는 티켓의 현재 상태를 나타내며, 모든 티켓은 `SEARCHING` .

<figure><img src="https://1562312210-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FZauPhgT9t1roetX4yc7g%2Fimage.png?alt=media&#x26;token=7834faf8-ce73-42dc-bae0-0293f05f1ea1" alt=""><figcaption></figcaption></figure>

☑️ 다음을 눌러 두 번째 티켓을 생성하세요 **Execute** 다시 한 번 눌러 두 플레이어가 매칭되고 서버가 시작되도록 합니다.

☑️ POST /tickets를 접고 **GET /tickets/{ticketId}**&#xB97C; 연 다음 **Try it out**.

☑️ 이전 단계의 응답에서 티켓 ID를 입력하고 클릭 **Execute**.

<figure><img src="https://1562312210-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FNznf5aHqhWefs77SFbzJ%2Fimage.png?alt=media&#x26;token=1d04803c-fbe6-4a19-9ef7-f814ea87affe" alt=""><figcaption></figcaption></figure>

☑️ 플레이어 티켓의 업데이트된 할당을 검토하세요:

* 상태가 `MATCH_FOUND` 로 먼저 변경되고, `assignment` 값이 `null` 를 유지한 채 플레이어가 매칭되었고 서버가 할당 중임을 나타냅니다,

<figure><img src="https://1562312210-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FGzBkyUepbqP71lFWG052%2Fimage.png?alt=media&#x26;token=a0412446-cc4f-4070-a14c-fef79046f3f7" alt=""><figcaption></figcaption></figure>

☑️ 클릭 **Execute** 다시 눌러 티켓을 확인하고, 티켓의 업데이트된 할당을 검토하세요:

* 상태가 `HOST_ASSIGNED` 와 함께 `assignment` 할당된 서버의 세부 정보를 포함합니다.

<figure><img src="https://1562312210-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FWnbG4B1KFoxttkz5bALl%2Fimage.png?alt=media&#x26;token=12a10044-2117-4a6d-845a-76c243231552" alt=""><figcaption></figcaption></figure>

<details>

<summary>문제 해결 및 FAQ</summary>

내 티켓이 다음 상태에서 멈춰 있습니다 `SEARCHING` .

* 구성에 맞는 겹치는 조건으로 충분한 티켓을 생성했는지 확인해 주세요.

***

내 티켓이 다음 상태 사이를 계속 전환합니다 `MATCH_FOUND` 및 `TEAM_FOUND` 를 반복합니다.

* 무료 티어 계정은 한 번에 1개 배포로 제한됩니다. 업그레이드하거나 현재 배포를 중지한 후 새 배포를 시작하는 것을 고려해 주세요.

***

내 티켓이 곧바로 다음 상태가 됩니다 `CANCELLED`.

* 귀하의 티켓이 만료되었습니다. 새 티켓을 다시 만들거나 테스트 목적으로 구성에서 만료 기간을 늘리세요.

***

티켓을 확인할 때 HTTP 404 Not Found가 발생합니다.

* 귀하의 티켓은 DELETE 요청으로 삭제되었거나 제거 기간에 도달하여 삭제되었습니다(티켓 만료 후 시작되며, 구성에서 정의됨). 새 티켓을 다시 만들거나 테스트 목적으로 구성에서 만료/제거 기간을 늘리세요.

</details>

☑️ [대시보드에서 새 배포를 검토하세요](https://app.edgegap.com/deployment-management/deployments/list):

* 추적성을 높이기 위해 각 배포에는 모든 티켓 ID와 프로필이 태그로 지정되어 있습니다.

<figure><img src="https://1562312210-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FG4Ear9NrMHhgFH6T4ODB%2Fimage.png?alt=media&#x26;token=acc9831c-a9d2-4eb2-8c39-c81b8e61ddd2" alt=""><figcaption></figcaption></figure>

☑️ 게임 클라이언트에서 할당된 서버에 연결을 시도하세요.

{% hint style="warning" %}
지연 시간이 높게 발생한다면, 넷코드 통합이 네트워크 지연을 시뮬레이션하도록 구성되어 있을 수 있습니다. **테스트할 때 VPN을 비활성화하세요** 더 현실적인 조건을 위해 그리고 [저지연 배포](https://docs.edgegap.com/docs.edgegap.com-ko/orchestration/deployments#server-placement).
{% endhint %}

☑️ 문제 없이 배포에 연결할 수 있고 테스트를 마쳤음을 확인하면, **배포 중지** 를 눌러 다음 빌드를 위해 계정의 용량을 확보하세요.

✅ 이제 다음 단계로 진행할 수 있습니다.

{% hint style="info" %}
테스트용 openAPI 명세는 다음에서 찾을 수 있습니다 `{matchmaker-url}/swagger/v1/swagger.json`.
{% endhint %}

### 5. 게임 통합

매치메이커는 다음과 통합됩니다:

* **게임 클라이언트**, 다음을 위해 [그룹, 멤버십, 할당 및 티켓 관리](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#group-up),
* **전용 서버**, 다음을 위해 [#backfill-match](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#backfill-match "mention") 플레이어가 나간 후.

☑️ **게임 클라이언트**에서, 최상의 플레이어 경험을 위해 게임 내 UI를 사용하여 플레이어에게 티켓 상태 업데이트를 제공하는 것을 권장합니다. 다음을 참조하세요:

☑️ **게임 클라이언트**, 재시도 가능한 `429 Too Many Requests`  오류는 지수 백오프와 재시도로 처리하여, 갑작스러운 트래픽 급증 중에도 매치메이커가 복구할 시간을 주세요.

☑️ **게임 클라이언트**, 재시도 불가능한 오류를 처리하고 있는지 확인하세요:

* `404 Not Found` - 티켓이 삭제됨,
* `500 Internal Server Error` - 일시적인 서비스 중단.

☑️ **게임 서버**, 플레이어 선호도와 초기 서버 컨텍스트를 읽습니다:

1. [주입 변수(매치메이커)](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#injected-environment-variables) **초기 플레이어의 매치메이킹 데이터를 가져오기 위해.**
2. [주입 변수(앱 버전)](https://docs.edgegap.com/docs.edgegap.com-ko/orchestration/application-and-versions#other-parameters-optional) 버전 매개변수, 설정 및 비밀값을 위해.
3. [주입 변수(배포)](https://docs.edgegap.com/docs.edgegap.com-ko/orchestration/deployments#injected-environment-variables) 배포 정보, IP, 위치 등을 위해...

☑️ 플레이어가 연결하면, **게임 서버와 게임 클라이언트** 는 로딩 씬 - 3D 씬, 로비 같은 소셜 UI, 또는 진행 바가 있는 로딩 화면을 시작하여 초기화가 진행 중임을 나타냅니다.

☑️ 귀하의 [배포가 중지되도록](https://docs.edgegap.com/docs/deployment#stop-a-deployment) 매치가 종료되면 올바르게 처리되었는지 확인하세요.

🙌 축하합니다, 매치메이킹 통합을 완료했습니다! 더 알아보려면 계속 읽어 보세요.

## 🏁 고급 예시

다음을 포함한 모든 매치메이킹 기능을 활용하는 완전한 구성은 [#matchmaking-profiles](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#matchmaking-profiles "mention"), [#matchmaking-rules](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#matchmaking-rules "mention")및 [#rule-expansion](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#rule-expansion "mention") 다음과 같이 보일 수 있습니다:

## 🎾 커스텀 로비

커스텀 로비(비공개 로비, 샌드박스 레벨)는 소파 멀티플레이와 게임의 주요 모드에 들어가기 전에 새로운 기능을 테스트하는 데 매우 인기 있는 옵션입니다. 일반적으로 가장 적은 제한만 필요하지만, 플레이어가 [#group-up](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#group-up "mention").

{% hint style="info" %}
공개 접근이 없는 비공개 로비의 경우, 다음을 설정하세요 `"team_size": 1`  그리고 그룹 오너가 혼자 게임을 시작하도록 하세요. 오너는 그룹 및 호스트 할당 세부 정보를 여러 멤버와 공유하여 참여시킬 수 있습니다.
{% endhint %}

{% hint style="success" %}
다음을 추가하세요 `custom-lobby-example`  profile **기존 매치메이커에** 커스텀 로비를 지원하도록.
{% endhint %}

## 🥛 백필 쇼케이스

다음을 기반으로 [#simple-example](#simple-example "mention")이 구성은 다음을 보여줍니다 [백필](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#backfill-match) 와 함께 [그룹](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#group-up).

## ⚔️ 경쟁 게임

경쟁 게임은 개별 플레이어(모두를 위한 전투) 또는 팀으로서 승리를 달성하기 위해 서로 경쟁하는 데 초점을 맞춥니다. 비슷한 실력 수준의 플레이어나 팀을 짝지어 공정하고 균형 잡힌 매치를 보장하고, 공정한 경쟁을 빠르게 찾아 게임 진행 속도를 유지하세요.

당신은 **각각 1명 이상의 플레이어로 여러 팀을 정의할 수 있습니다**, 예를 들어:

<table><thead><tr><th width="300">게임 모드</th><th>팀 수</th><th>팀 크기</th><th>총 플레이어 수</th></tr></thead><tbody><tr><td>5v5 FPS</td><td>2</td><td>5</td><td><strong>10</strong></td></tr><tr><td>5v5 MOBA</td><td>2</td><td>5</td><td><strong>10</strong></td></tr><tr><td>20x3 배틀로얄</td><td>20</td><td>3</td><td><strong>60</strong></td></tr><tr><td>10명 자유 대전</td><td>1</td><td>10</td><td><strong>10</strong></td></tr></tbody></table>

여러 개의 [#matchmaking-profiles](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#matchmaking-profiles "mention") 를 정의하여 게임 모드별 규칙과 설정을 지정하고, [필요에 따라 확장하세요](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#rule-expansion).

* **모든 매치에 대해:**
  * 제한하세요 [매치메이킹 지연 시간](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#ping-optimization) 멀리 떨어진 플레이어와 매칭되는 것을 방지하기 위해,
  * [#group-up](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#group-up "mention") 사전 구성된 파티를 위해 그리고 팀 크기를 초과하지 않도록,
  * 더 많은 플레이어를 찾기 위해 시간에 따라 지연 시간 제한을 점차 완화하세요,
  * 더 많은 CPU 또는 메모리를 다른 [#app-versions](https://docs.edgegap.com/docs.edgegap.com-ko/orchestration/application-and-versions#app-versions "mention") 를 사용해 특정 프로필에 할당하세요,
* **캐주얼 매치의 경우:**
  * 매치 속도와 매치 채움률을 극대화하기 위해 랭크 제한을 생략하세요,
  * 모두에게 적합한 맵을 찾기 위해 플레이어가 선호하는 맵을 제공할 수 있게 하세요,
  * 팀 크기를 초과하지 않으면서 이탈자를 대체하기 위해 백필 그룹 크기를 지정하세요,
  * 대기 시간이 3분(180초)을 넘으면 매치를 보장하기 위해 지연 시간 제한을 제거하세요.
* **경쟁 매치의 경우:**
  * 비슷한 실력 수준의 상대만 허용하도록 랭크를 제한하세요,
  * 리그의 랭크 극단에 있는 플레이어를 매칭하기 위해 승급 또는 강등 랭크를 사용하세요.
* **상위 1% 고실력 매치(도전자)의 경우:**
  * 매치의 실력 분포를 세밀하게 제어하기 위해 수치형 실력 점수(ELO)를 사용하세요,
  * 플레이어 수가 적기 때문에 지연 시간 요구 사항을 완화하기 전에 더 오래 기다리세요.

{% hint style="success" %}
다중 프로필을 사용하여 **캐주얼 게임 모드, 경쟁 게임 모드, 최상위 도전자** 플레이어를 분리하면 각 플레이어 유형별로 규칙과 확장 설정을 개별적으로 맞춤화할 수 있습니다.
{% endhint %}

## 🤝 협동 게임

협동 게임은 플레이어가 공통 목표나 AI 상대를 향해 팀으로 협력해야 합니다. 비슷한 선호도와 플레이 습관을 가진 플레이어를 맞추세요. 이탈한 플레이어를 교체하고 [#connection-quality](https://docs.edgegap.com/docs.edgegap.com-ko/orchestration/ping-beacons#connection-quality "mention") 를 개선하여 반응성 높은 플레이어 경험을 제공하세요.

팀 수 1개 및 최대 팀 크기 4명으로, **매치당 최대 4명의 플레이어를 요구합니다**.

여러 개의 [#matchmaking-profiles](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#matchmaking-profiles "mention") 게임 모드별 규칙과 설정을 위해:

* 플레이어를 대기열에 유지하고 매치 채움률을 극대화하기 위해 최소 4명으로 시작하세요,
* 제한하세요 [매치메이킹 지연 시간](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#ping-optimization) 멀리 떨어진 플레이어와 매칭되는 것을 방지하기 위해,
* 모두의 실력 수준에 맞는 특정 게임 난이도를 선택하게 하세요,
* 모두에게 적합한 맵을 찾기 위해 플레이어가 선호하는 맵을 제공할 수 있게 하세요,
* 비슷한 정도의 게임 진행도를 요구하도록 플레이어 레벨 차이를 제한하세요,
* 서버 용량을 초과하지 않으면서 이탈자를 대체하기 위해 백필 그룹 크기를 지정하세요,
* 모더레이션 플래그를 사용하여 저카르마 플레이어와 치터를 일반 플레이어와 분리하세요,
* [#group-up](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#group-up "mention") 사전 구성된 파티를 위해 그리고 서버 용량을 초과하지 않으면서 팀을 채우기 위해,
* 다른 [#app-versions](https://docs.edgegap.com/docs.edgegap.com-ko/orchestration/application-and-versions#app-versions "mention") 프로필에 더 많은 CPU 또는 메모리를 할당하세요.

이상적인 조건에서 시작하고, [제한을 확장하여](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#rule-expansion) 빠른 매치를 보장하세요:

* 더 많은 플레이어를 찾기 위해 시간에 따라 지연 시간 제한을 완화하세요,
* 더 많은 플레이어를 찾기 위해 허용되는 플레이어 레벨 차이를 늘리세요,
* 필요한 플레이어 수를 줄이고 더 빨리 게임을 시작하기 위해 최소 팀 크기를 줄이세요,
  * 서버가 빈 슬롯을 AI 팀원으로 채울 수 있습니다,
  * 또는 [#backfill-match](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#backfill-match "mention") 나중에 플레이어를 추가하기 위해,
* 대기 시간이 150초가 지난 후 솔로로 게임을 시작하려면 최소 팀 크기를 1로 설정하세요

## 🎈 소셜 게임

소셜 게임은 협업, 소통 및 공유 경험을 통해 플레이어 간의 연결과 관계를 구축하는 데 중점을 둡니다. 많은 수의 플레이어를 지원하고, 매치 채움률을 극대화하며, 플레이어 선호도와 플레이 습관을 맞추세요. 이탈한 플레이어를 교체하고, 높은 [#connection-quality](https://docs.edgegap.com/docs.edgegap.com-ko/orchestration/ping-beacons#connection-quality "mention") 를 개선하여 반응성 높은 플레이어 경험을 제공하세요.

팀 수 1개(자유 대전) 및 최대 팀 크기 50명으로, **매치당 최대 50명의 플레이어를 요구합니다**.

다음을 정의하세요 [#matchmaking-profiles](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#matchmaking-profiles "mention") 게임 모드별 규칙과 설정을 위해:

* 제한하세요 [매치메이킹 지연 시간](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#ping-optimization) 멀리 떨어진 플레이어와 매칭되는 것을 방지하기 위해,
* 플레이어가 자신의 게임 모드 선호도를 제공하고 모두에게 적합한 모드를 찾을 수 있게 하세요,
* 서버 용량을 초과하지 않으면서 이탈자를 대체하기 위해 백필 그룹 크기를 지정하세요,
* 모더레이션 플래그를 사용하여 저카르마 플레이어와 치터를 일반 플레이어와 분리하세요,
* [#group-up](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#group-up "mention") 사전 구성된 로비를 위해 또는 서버 용량을 초과하지 않으면서 팀을 채우기 위해,
* 다른 [#app-versions](https://docs.edgegap.com/docs.edgegap.com-ko/orchestration/application-and-versions#app-versions "mention") 프로필에 더 많은 CPU 또는 메모리를 할당하세요.

이상적인 조건에서 시작하고, [제한을 확장하여](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#rule-expansion) 빠른 매치를 보장하세요:

* 더 많은 플레이어를 찾기 위해 시간에 따라 지연 시간 제한을 완화하세요,
* 필요한 플레이어 수를 줄이고 더 빨리 게임을 시작하기 위해 최소 팀 크기를 점차 줄이세요,
  * 서버가 빈 슬롯을 AI 플레이어로 채울 수 있습니다,
  * 또는 [#backfill-match](https://docs.edgegap.com/docs.edgegap.com-ko/learn/matchmaker-in-depth#backfill-match "mention") 나중에 플레이어를 추가하기 위해,
* 대기 시간이 150초가 지난 후 솔로로 게임을 시작하려면 최소 팀 크기를 1로 설정하세요.

[^1]: 자신의 애플리케이션 이름으로 바꾸세요

[^2]: 자신의 애플리케이션 버전으로 바꾸세요
