> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Matchmaking quickstart

> Unity에서 PlayFab Matchmaking의 전체 흐름을 다루는 빠른 시작 안내입니다. Multiplayer SDK를 사용하여 티켓을 만들고, 상태를 폴링하고, 매치 결과를 검색합니다.

# Matchmaking REST API 빠른 시작

<Note>
  Multiplayer SDK 사용을 강력히 권장합니다. 이 SDK는 실시간 메시지 지원을 포함하고 있어 폴링의 필요성을 줄여줍니다. 이는 매치메이킹 경험을 개선하고 지연을 줄여줍니다. [빠른 시작 - 클라이언트 SDK](/services/playfab/multiplayer/matchmaking/quickstart-client-sdk)
</Note>

이 빠른 시작 가이드는 매치메이킹 기능을 통합하는 전체 과정을 안내합니다. 이 빠른 시작의 모든 코드 예제는 Unity용이지만, 개념과 흐름은 (일반적으로) 다른 플랫폼에도 적용됩니다.

게임 디자인에 따라 [단일 사용자](#single-user-ticket-matchmaking) 및 [여러 사용자](#multiple-user-ticket-matchmaking) 매치메이킹 섹션을 참고하세요.

이 자습서는 게임을 찾기 위해 특정 큐에 티켓을 제출하는 방법을 설명합니다. 큐는 일반적으로 하나 이상의 게임 모드(예: 같은 큐 안의 깃발 뺏기 모드와 킹 오브 더 힐 모드)에 매핑됩니다.

매치메이킹 서비스는 큐 내 티켓들 사이에서 매치를 찾는 일을 처리합니다. 매치가 발견되면 타이틀은 게임 플레이를 위해 플레이어들을 서로 연결하는 것을 처리해야 합니다.

## Game Manager에서 매치메이킹 큐 구성

이 빠른 시작은 Game Manager에서 큐를 이미 구성했다고 가정합니다. 큐 설정 방법에 대한 자세한 내용은 [Configuring matchmaking queues](/services/playfab/multiplayer/matchmaking/config-queues)를 참조하세요.

## 단일 사용자 티켓 매치메이킹

게임이 1v1 게임 모드를 갖고 있거나, 한 명의 사용자가 혼자 매치메이킹에 진입하는 것을 지원한다면 단일 사용자 매치메이킹을 고려하세요. 단일 사용자 매치메이킹은 아래에 표시된 패턴을 따릅니다.

<img src="https://mintcdn.com/microsoft-4404708b/dqv53299jA1M-fNi/images/playfab/multiplayer/matchmaking/quickstart/matchmaking-single-user-flow.png?fit=max&auto=format&n=dqv53299jA1M-fNi&q=85&s=7a34b642c26c3ab073ca258bae379604" alt="Matchmaking Flow" width="708" height="460" data-path="images/playfab/multiplayer/matchmaking/quickstart/matchmaking-single-user-flow.png" />

### 매치메이킹 티켓 생성

사용자는 [CreateMatchmakingTicket](xref:titleid.playfabapi.com.multiplayer.matchmaking.creatematchmakingticket)을 사용하여 매치메이킹 티켓을 만듭니다. 티켓 생성이 성공하면 서비스는 `TicketId`를 반환합니다.

티켓 생성 시 `Creator`(사용자의 ID와 특성), `GiveUpAfterSeconds`(서비스가 티켓 매칭을 포기하기까지의 시간(초)), 매치를 찾을 `QueueName`을 지정해야 합니다.

`Creator` 필드는 `QueueName`과 일치하는 큐 구성이 요구하는 사용자 특성을 포함해야 합니다. `GiveUpAfterSeconds` 시간에 좋은 값은 120초로, 사용자가 스스로 포기하지 않도록 합니다.

```csharp theme={null}
PlayFabMultiplayerAPI.CreateMatchmakingTicket(
    new CreateMatchmakingTicketRequest
    {
        // The ticket creator specifies their own player attributes.
        Creator = new MatchmakingPlayer
        {
            Entity = new EntityKey
            {
                Id = "<Entity ID goes here>",
                Type = "<Entity type goes here>",
            },

            // Here we specify the creator's attributes.
            Attributes = new MatchmakingPlayerAttributes
            {
                DataObject = new
                {
                    Skill = 24.4
                },
            },
        },

        // Cancel matchmaking if a match is not found after 120 seconds.
        GiveUpAfterSeconds = 120,

        // The name of the queue to submit the ticket into.
        QueueName = "myqueue",
    },

    // Callbacks for handling success and error.
    this.OnMatchmakingTicketCreated,
    this.OnMatchmakingError);
```

### 매치메이킹 티켓 상태 확인

매치메이킹에서 티켓의 `Status`에 액세스하려면 `TicketId`로 서비스를 폴링해야 합니다. 이를 위해 타이틀에서 [GetMatchmakingTicket](xref:titleid.playfabapi.com.multiplayer.matchmaking.getmatchmakingticket)을 호출하세요. 1분당 최대 10번까지 폴링할 수 있습니다. 예를 들어 6초마다 티켓 상태를 폴링합니다. 폴링은 티켓 상태를 검색할 때 지연을 증가시킬 수 있습니다. 이러한 이유로 [Quickstart - Client SDK](/services/playfab/multiplayer/matchmaking/quickstart-client-sdk)에 설명된 Multiplayer SDK 방식 사용을 강력히 권장합니다. 이 방식은 실시간 메시지 기능을 사용하여 폴링이 필요하지 않게 합니다.

티켓 상태가 `Matched`로 변경되면 클라이언트는 티켓 폴링을 중지할 수 있습니다. 그 시점부터 티켓에는 `MatchId`가 포함됩니다.

```csharp theme={null}
PlayFabMultiplayerAPI.GetMatchmakingTicket(
    new GetMatchmakingTicketRequest
    {
        TicketId = "<ticket ID goes here>",
        QueueName = "myqueue",
    },
    this.OnGetMatchmakingTicket,
    this.OnMatchmakingError);
```

### 매치 가져오기

클라이언트에서 [GetMatchmakingTicket](xref:titleid.playfabapi.com.multiplayer.matchmaking.getmatchmakingticket)의 응답으로 제공된 `MatchId`와 함께 [GetMatch](xref:titleid.playfabapi.com.multiplayer.matchmaking.getmatch)를 호출합니다. 이 매치에는 함께 매치된 사용자 목록이 포함되어 있습니다.

```csharp theme={null}
PlayFabMultiplayerAPI.GetMatch(
    new GetMatchRequest
    {
        MatchId = "<match ID goes here>",
        QueueName = "myqueue",
    },
    this.OnGetMatch,
    this.OnMatchmakingError);
```

### 매치메이킹 티켓 취소

어떤 이유로든 클라이언트가 `GiveUpAfterSeconds`에 도달하기 전에 매치메이킹 프로세스를 취소하려는 경우, `TicketId`와 함께 [CancelMatchmakingTicket](xref:titleid.playfabapi.com.multiplayer.matchmaking.cancelmatchmakingticket)을 호출하세요. 매치가 아직 발견되지 않았다면 티켓은 매치메이킹 프로세스에서 제외되고 상태가 `Canceled`로 변경됩니다.

```csharp theme={null}
PlayFabMultiplayerAPI.CancelMatchmakingTicket(
    new CancelMatchmakingTicketRequest
    {
        QueueName = "myqueue",
        TicketId = "<ticket ID goes here>",
    },
    this.OnTicketCanceled,
    this.OnMatchmakingError);
```

## 여러 사용자 티켓 매치메이킹

게임이 플레이어 그룹이 함께 매치메이킹 큐에 들어가는 것을 허용하는 경우, 매치메이킹에 진입하기 위해 몇 가지 추가 작업을 수행해야 합니다. 불필요한 호출을 만들지 않도록 타이틀에서 그룹 리더(생성자)를 지정할 것을 권장합니다. 리더가 티켓을 만들지만, 그룹의 모든 구성원이 참가에 동의해야 합니다.

### 매치메이킹 티켓 생성(여러 사용자)

그룹은 타이틀에서 티켓 생성자를 선출해야 합니다. 생성자는 [CreateMatchmakingTicket](xref:titleid.playfabapi.com.multiplayer.matchmaking.creatematchmakingticket)을 사용하여 매치메이킹 티켓을 만들며, 이는 성공 시 `TicketId`를 반환합니다. 티켓 생성 시 `Creator`(사용자의 ID와 특성), `GiveUpAfterSeconds`(서비스가 티켓 매칭을 포기하기까지의 시간(초)), `MembersToMatchWith`(다른 그룹 구성원의 ID), 매치를 찾을 `QueueName`을 지정해야 합니다.

`Creator` 필드는 `QueueName`과 일치하는 큐 구성이 요구하는 사용자 특성을 포함해야 합니다. `GiveUpAfterSeconds` 시간에 좋은 값은 120초로, 사용자가 스스로 포기하지 않도록 합니다.

### 그룹 구성원이 매치 티켓에 참가

매치 티켓이 생성된 후에는 매치메이킹 프로세스를 진행하기 위해 그룹의 다른 구성원들이 참가해야 합니다. 이 시점에서 티켓 상태는 `WaitingForPlayers`입니다. 모든 `MembersToMatchWith`가 티켓에 참가할 때까지 다른 티켓과의 매칭이 시작되지 않습니다.

구성원들을 참가시키려면 `Creator`가 타이틀을 통해 `TicketId`를 다른 구성원들에게 공유해야 합니다. 그런 다음 각 구성원은 자신의 필수 특성을 제공하며 [JoinMatchmakingTicket](xref:titleid.playfabapi.com.multiplayer.matchmaking.joinmatchmakingticket)을 호출합니다. 모든 구성원이 티켓에 참가하면 티켓 상태가 `WaitingForMatch`로 변경됩니다.

```csharp theme={null}
PlayFabMultiplayerAPI.JoinMatchmakingTicket(
    new JoinMatchmakingTicketRequest
    {
        TicketId = "<ticket ID>",
        QueueName = "myqueue",
        Member = new MatchmakingPlayer
        {
            Entity = new EntityKey
            {
                Id = "<Entity ID goes here>",
                Type = "<Entity type goes here>",
            },
            Attributes = new MatchmakingPlayerAttributes
            {
                DataObject = new
                {
                    Skill = 19.3
                },
            },
        }
    },
    this.OnJoinMatchmakingTicket,
    this.OnMatchmakingError);
```

나머지 프로세스는 [단일 사용자 티켓 매치메이킹](#single-user-ticket-matchmaking)의 프로세스와 동일합니다.

### 플레이어를 서로 연결

플레이어들이 매치된 후에는 서버를 통해 또는 피어-투-피어 연결을 통해 서로 참가하도록 해야 합니다.

전용 서버를 사용하는 경우 매치 ID를 사용해 함께 있어야 하는 플레이어 그룹을 고유하게 식별할 수 있습니다. PlayFab의 멀티플레이어 서버를 사용하는 경우 `GetMatch`는 플레이어가 연결할 서버와 포트를 제공합니다.

자세한 내용은 [Integrating with PlayFab Multiplayer Servers](/services/playfab/multiplayer/matchmaking/multiplayer-servers)를 참조하세요.

이 릴리스 시점에서 매치메이킹은 피어-투-피어 연결을 공식적으로 지원하지 않습니다. 피어-투-피어가 필요한 경우 [PlayFab Party](/services/playfab/multiplayer/networking) 또는 [임시 해결책](/services/playfab/multiplayer/matchmaking/peer-to-peer) 사용을 고려하세요.
이에 대한 추가 지원이 필요하면 문의해 주세요.

## 결론

이 빠른 시작을 사용하여 이제 게임에 성공적인 매치메이킹 흐름을 갖추었을 것입니다. 또한 다음 사항을 고려해야 합니다.

* 타이틀이 그룹 형성을 처리하는 방식.
* 사용자가 매치를 기다리는 동안 타이틀에 표시되는 내용.
* 실패 및 재시도를 처리하는 방식.


## Related topics

- [Matchmaking SDK quickstart](/ko/services/playfab/multiplayer/matchmaking/quickstart-client-sdk.md)
- [PlayFab Online Subsystem (OSS) Quickstart](/ko/services/playfab/multiplayer/networking/party-unreal-engine-oss-quickstart.md)
- [Quickstart on leaderboards](/ko/services/playfab/community/leaderboards/quickstart-leaderboards.md)
- [Schemas quickstart](/ko/services/playfab/data-analytics/acting-data/schemas-quickstart.md)
- [PlayFab Party 개요](/ko/services/playfab/multiplayer/networking/index.md)
