> For the complete documentation index, see [llms.txt](https://docs.edgegap.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.edgegap.com/docs.edgegap.com-ko/docs/tools-and-integrations/ugs.md).

# UGS에서 배포

Unity Matchmaker를 계속 사용하면서 서버를 Edgegap에 배포하고 싶다면 이 가이드를 따르세요.

{% hint style="success" %}
대안을 찾고 계신가요? 저희의 관리형 [매치메이킹](/docs.edgegap.com-ko/learn/matchmaking.md) 과 [SDK 통합 및 예제](/docs.edgegap.com-ko/unity/matchmaking.md).
{% endhint %}

### 시작하기

이 가이드는 다음을 전제로 Edgegap 서버 호스팅을 호스팅 제공업체로 추가하는 방법에 중점을 둡니다:

* 작동하는 Unity 매치메이킹 설정이 있고,
* Edgegap에 등록했고 [Unity 서버 빌드를 업로드했으며](/docs.edgegap.com-ko/unity.md).

다음을 참조하세요 [Unity의 매치메이킹 문서](https://docs.unity.com/en-us/matchmaker) 에서 매치메이킹 관련 내용을 확인하세요.

{% hint style="info" %}
참조: [Multiplay에서 전환](/docs.edgegap.com-ko/docs/tools-and-integrations/multiplay.md) Multiplay 개념을 Edgegap 호스팅에 비교하고 매핑하는 방법은
{% endhint %}

[서버에 적절한 위치를 선택하면 평균적으로 지연 시간을 최대 58%까지 줄일 수 있습니다!](/docs.edgegap.com-ko/learn/orchestration/deployments.md#server-placement)

이 가이드에서는 다음을 다룹니다:

* 빌드 및 배포 `EdgegapAllocator` Matchmaker용 클라우드 스크립트 모듈,
* 최적의 서버 배치를 위해 사용되는 플레이어의 공인 IP 주소를 가져오는 방법,
* UGS 클라우드 스크립트에서 웹훅 리스너를 구현하고 서버 할당을 가져오는 방법.

### Edgegap 할당기

먼저 [호스팅 제공업체 저장소를 다운로드하는 것부터 시작하세요](https://github.com/Unity-Technologies/matchmaker-hosting-providers/tree/main) 과 `EdgegapAllocator` 소스 코드입니다.

이것은 [저희의 클라우드 스크립트](https://github.com/Unity-Technologies/matchmaker-hosting-providers/blob/main/modules/EdgegapAllocator/CONFIGURATION.md) 로, 매치가 구성되면 Unity matchmaker가 실행하여 새 서버를 시작하는 데 사용됩니다. 이는 Unity의 공식 승인 통합입니다.

#### 필수 비밀

먼저, 다음 위치에 이러한 비밀값을 추가하세요: [Unity 대시보드](https://cloud.unity.com/) 의 **관리** > **비밀**:

* `EDGEGAP_API_TOKEN` - Edgegap API 토큰입니다.

토큰은 다음에서 찾을 수 있습니다: [Edgegap 대시보드](https://app.edgegap.com/user-settings?tab=tokens).

#### 필수 코드 변경

편집 `Project/EdgegapAllocator.cs` 그리고 다음 상수를 업데이트하세요:

다음에서 Edgegap 애플리케이션 이름으로 바꾸세요: [애플리케이션 목록](https://app.edgegap.com/application-management/applications/list).

{% code title="ApplicationName(34행)" %}

```csharp
private const string ApplicationName = "MyApp"; // TODO: 실제 애플리케이션 이름으로 바꾸세요
```

{% endcode %}

사용하려는 Edgegap 애플리케이션의 버전 이름으로 바꾸세요.

{% code title="VersionName(35행)" %}

```csharp
private const string VersionName = "MyVersion"; // TODO: 실제 버전 이름으로 바꾸세요
```

{% endcode %}

플레이어가 연결할 때 사용할 Edgegap 애플리케이션 버전의 포트 이름으로 바꾸세요.

{% code title="PortName(36행)" %}

```csharp
private const string PortName = "gameport"; // TODO: 실제 포트 이름으로 바꾸세요
```

{% endcode %}

#### 모듈 배포

[CLI 또는 에디터를 사용하여 사용자 지정 모듈을 배포하려면 Unity의 공식 지침을 따르세요.](https://github.com/Unity-Technologies/matchmaker-hosting-providers/tree/main#deploy-the-module)

### 플레이어 IP 가져오기

{% hint style="warning" %}
**플레이어 IP 주소가 제공되지 않으면 배포는 Los Alamos 위치로 대체됩니다.**
{% endhint %}

각 매치에 대해 필요할 때 최적의 서버 위치를 제공하려면, Edgegap은 배포를 만들 때 플레이어 IP 주소를 제공하도록 요구합니다. Unity는 이 기능을 제공하지 않지만, 무료 서비스인 [ipify](https://ipify.org):

{% code title="PlayerNetworkBehaviour.cs" %}

```csharp
public class PlayerNetworkBehaviour : MonoBehaviour {
    public IEnumerator GetPublicIP(Action<string> callback)
    {
        UnityWebRequest request = UnityWebRequest.Get("https://api.ipify.org?format=json");
        yield return request.SendWebRequest();
    
        if (request.result == UnityWebRequest.Result.Success)
        {
            string responseText = request.downloadHandler.text;
            string clientIp = JObject.Parse(responseText)["ip"].ToString();
            callback(clientIp);
        }
        그렇지 않으면
        {
            Debug.LogError("공인 IP 주소를 가져오지 못했습니다.");
        }
        request.Dispose();
    }
}
```

{% endcode %}

모든 플레이어는 티켓의 사용자 지정 데이터를 사용하여 공인 IP 주소를 제공해야 합니다:

```csharp
CreateTicketOptions ticketOptions = new CreateTicketOptions(
    queueName: "my-queue", 
    attributes: new Dictionary<string, object>
    {
        { "player_ip": "<insert-ip>" },
    }
);
```

### 할당 받기

표준 Unity 매치메이킹 방법을 사용하여 할당을 가져올 수 있습니다.

저희 예제는 다음을 사용하여 할당을 처리합니다: [**초당 20 요청으로 제한되는 Status API**](https://docs.edgegap.com/docs/api/dedicated-servers#get-v1-status-deployment_id)**.**

대부분의 게임에는 충분합니다. 50,000 CCU를 초과할 것으로 예상되면 대체 방법을 고려하세요.

#### 대체 할당

{% hint style="info" %}
전 세계적으로 대규모 출시를 할 경우, 더 확장 가능한 대안인 [웹훅](/docs.edgegap.com-ko/learn/orchestration/deployments.md#webhooks) 을 사용할 수 있습니다.
{% endhint %}

매치가 성사되고 클라우드 스크립트가 새 배포를 요청하면, 응답에는 아직 연결 정보가 포함되지 않습니다. 대신 영수증 형태의 배포 ID를 받게 됩니다.

할당자 함수는 이 배포 ID를 매칭된 플레이어의 ID와 함께 UGS Game Data에 저장해야 나중에 플레이어를 조회하고 연결 정보를 제공할 수 있습니다.

이제 다른 클라우드 스크립트 함수를 만들어야 합니다 `AssignmentProcessor`  공개 URL이 있는. 이 URL은 Allocator의 배포 요청에 다음으로 포함되어야 합니다: `webhook_on_ready` .

Edgegap이 게임 서버를 배포하면, FQDN(URL) 및 클라이언트 연결용 외부 포트와 같은 모든 연결 정보가 포함된 웹훅 HTTP 이벤트를 새 클라우드 스크립트로 다시 전송합니다. 귀하의 `AssignmentProcessor`  는 배포 ID를 조회하고, 그와 함께 연결 정보를 저장해야 합니다.

게임 클라이언트는 이 게임 데이터를 폴링하고 FQDN과 외부 포트를 가져오는 즉시 연결을 시도해야 합니다.

<figure><img src="/files/f3270de151e8eceaa6d419ebf33f379d5efe98f7" alt=""><figcaption></figcaption></figure>
