# Gamelift에서 전환

AWS Gamelift에서 Edgegap으로 전환하려는 경우, 다음의 간단한 단계로 빠르게 실행할 수 있습니다. 시작하기 전에 다음을 기대합니다:

* 현재 AWS Gamelift를 사용 중입니다
* 현재 Gamelift에 작동하는 게임 서버 빌드가 있습니다
* 이미 [생성했습니다](/docs.edgegap.com-ko/learn/orchestration/application-and-versions.md) 그리고 [배포했습니다](/docs.edgegap.com-ko/learn/orchestration.md) Edgegap에 애플리케이션을

{% hint style="info" %}
Edgegap 솔루션으로 훨씬 더 많은 위치의 이점을 누릴 수 있습니다.
{% endhint %}

### AWS Gamelift SDK 제거

Edgegap으로 전환하는 첫 번째 단계는 게임 서버 내에서 AWS Gamelift를 초기화하는 코드를 제거하는 것입니다. 이는 오버헤드를 줄이고 오류를 방지하기 위함입니다. 제거하려는 코드는 다음과 비슷할 것입니다:

#### Unity (C#)

```cs
using UnityEngine;
using Aws.GameLift.Server;
using System.Collections.Generic;

public class GameLiftServerExampleBehavior : MonoBehaviour
{
    //이 코드는 GameLift 서버 SDK와의 간단한 통합 예제로, 게임 서버 프로세스를 GameLift에서 활성화 상태로 만듭니다!
    public void Start()
    {
        //플레이어 연결을 위해 게임 서버가 수신 대기하는 포트 번호를 식별합니다(간단히 하드코딩됨).
        var listeningPort = 7777;

        //InitSDK는 추가 통신을 가능하게 하기 위해 GameLift의 에이전트와 로컬 연결을 설정합니다.
        var initSDKOutcome = GameLiftServerAPI.InitSDK();
        if (initSDKOutcome.Success)
        {
            ProcessParameters processParameters = new ProcessParameters(
                (gameSession) => {
                    //게임 세션이 생성되면 GameLift는 게임 서버에 활성화 요청을 보내며 게임 속성 및 기타 설정을 포함한 게임 세션 객체를 전달합니다.
                    //여기서 게임 서버는 게임 세션 객체를 기반으로 조치를 취해야 합니다.
                    //게임 서버가 들어오는 플레이어 연결을 받을 준비가 되면 GameLiftServerAPI.ActivateGameSession()을 호출해야 합니다.
                    GameLiftServerAPI.ActivateGameSession();
                },
                (updateGameSession) => {
                    //게임 세션이 업데이트되면(예: FlexMatch 백필) GameLift는 업데이트된 게임 세션 객체를 포함한 요청을 게임
                    //서버로 보냅니다. 게임 서버는 제공된
                    //matchmakerData를 검사하고 새로 들어오는 플레이어를 적절히 처리할 수 있습니다.
                    //updateReason은 이 업데이트가 제공되는 이유입니다.
                },
                () => {
                    //OnProcessTerminate 콜백. GameLift는 이 게임 서버를 호스팅하는 인스턴스를 종료하기 전에 이 콜백을 호출합니다.
                    //이 콜백은 게임 서버가 상태를 저장하거나 서비스와 통신하는 등 종료 전에 작업을 수행할 기회를 제공합니다.
                    //이 경우 우리는 단순히 GameLift에 실제로 종료할 것이라고 알립니다.
                    GameLiftServerAPI.ProcessEnding();
                },
                () => {
                    //이것은 HealthCheck 콜백입니다.
                    //GameLift는 약 60초마다 이 콜백을 호출합니다.
                    //여기서 게임 서버는 종속성 등의 상태를 확인하고 싶을 수 있습니다.
                    //건강하면 true, 아니면 false를 반환하면 됩니다.
                    //게임 서버는 상태 응답을 위해 60초가 주어집니다. 게임 서버가 제때 응답하지 않으면 GameLift는 기본값으로 'false'를 사용합니다.
                    //이 경우, 우리는 항상 정상입니다!
                    return true;
                },
                listeningPort, //이 게임 서버는 들어오는 플레이어 연결을 위해 포트 7777에서 수신할 것이라고 GameLift에 알립니다.
                new LogParameters(new List<string>()
                {
                    //여기서 게임 서버는 게임 세션이 끝날 때 업로드할 파일 집합을 GameLift에 알려줍니다.
                    //GameLift는 개발자가 나중에 가져갈 수 있도록 여기에 지정된 모든 것을 업로드합니다.
                    "/local/game/logs/myserver.log"
                }));

            //ProcessReady를 호출하면 이 게임 서버가 들어오는 게임 세션을 받을 준비가 되었음을 GameLift에 알립니다!
            var processReadyOutcome = GameLiftServerAPI.ProcessReady(processParameters);
            if (processReadyOutcome.Success)
            {
                print("ProcessReady success.");
            }
            else
            {
                print("ProcessReady failure : " + processReadyOutcome.Error.ToString());
            }
        }
        else
        {
            print("InitSDK failure : " + initSDKOutcome.Error.ToString());
        }
    }

    void OnApplicationQuit()
    {
        //애플리케이션 종료 시 GameLiftServerAPI.Destroy()를 호출해야 합니다. 이는 GameLift 에이전트와의 로컬 연결을 재설정합니다.
        GameLiftServerAPI.Destroy();
    }
}
```

#### Unreal Engine (C++)

```cpp
using UnrealBuildTool;

public class MyAwesomeGame : ModuleRules
{
	public MyAwesomeGame(TargetInfo Target)
	{
		PublicDependencyModuleNames.AddRange(
            //GameLiftServerSDK 제거
            new string[] { "Core", "CoreUObject", "Engine", "InputCore", "GameLiftServerSDK" }
        );
        bEnableExceptions = true;
	}
}
```

```cpp
#include "GameLiftFPS.h"
#include "Engine.h"
#include "EngineGlobals.h"
#include "GameLiftFPSGameMode.h"
#include "GameLiftFPSHUD.h"
#include "GameLiftFPSCharacter.h"
#include "GameLiftServerSDK.h"

AGameLiftFPSGameMode::AGameLiftFPSGameMode()
	: Super()
{

//GAMELIFT가 활성화된 경우에만 이 코드를 실행합시다. 서버 대상에서만!
#if WITH_GAMELIFT

	//먼저 모듈을 가져옵니다.
	FGameLiftServerSDKModule* gameLiftSdkModule = &FModuleManager::LoadModuleChecked<FGameLiftServerSDKModule>(FName("GameLiftServerSDK"));

	//InitSDK는 추가 통신을 가능하게 하기 위해 GameLift의 에이전트와 로컬 연결을 설정합니다.
	gameLiftSdkModule->InitSDK();

	//게임 세션이 생성되면 GameLift는 게임 서버에 활성화 요청을 보내며 게임 속성 및 기타 설정을 포함한 게임 세션 객체를 전달합니다.
	//여기서 게임 서버는 게임 세션 객체를 기반으로 조치를 취해야 합니다.
	//게임 서버가 들어오는 플레이어 연결을 받을 준비가 되면 GameLiftServerAPI.ActivateGameSession()을 호출해야 합니다.
	auto onGameSession = [=](Aws::GameLift::Server::Model::GameSession gameSession)
	{
		gameLiftSdkModule->ActivateGameSession();
	};

	FProcessParameters* params = new FProcessParameters();
	params->OnStartGameSession.BindLambda(onGameSession);

	//OnProcessTerminate 콜백. GameLift는 이 게임 서버를 호스팅하는 인스턴스를 종료하기 전에 이 콜백을 호출합니다.
	//이 콜백은 게임 서버가 상태를 저장하거나 서비스와 통신하는 등 종료 전에 작업을 수행할 기회를 제공합니다.
	//이 경우 우리는 단순히 GameLift에 실제로 종료할 것이라고 알립니다.
	params->OnTerminate.BindLambda([=](){gameLiftSdkModule->ProcessEnding();});

	//이것은 HealthCheck 콜백입니다.
	//GameLift는 약 60초마다 이 콜백을 호출합니다.
	//여기서 게임 서버는 종속성 등의 상태를 확인하고 싶을 수 있습니다.
	//건강하면 true, 아니면 false를 반환하면 됩니다.
	//게임 서버는 상태 응답을 위해 60초가 주어집니다. 게임 서버가 제때 응답하지 않으면 GameLift는 기본값으로 'false'를 사용합니다.
	//이 경우, 우리는 항상 정상입니다!
	params->OnHealthCheck.BindLambda([](){return true; });

	//이 게임 서버는 들어오는 플레이어 연결을 위해 포트 7777에서 수신할 것이라고 GameLift에 알립니다.
	params->port = 7777;

	//여기서 게임 서버는 게임 세션이 끝날 때 업로드할 파일 집합을 GameLift에 알려줍니다.
	//GameLift는 개발자가 나중에 가져갈 수 있도록 여기에 지정된 모든 것을 업로드합니다.
	TArray<FString> logfiles;
	logfiles.Add(TEXT("aLogFile.txt"));
	params->logParameters = logfiles;

	//ProcessReady를 호출하면 이 게임 서버가 들어오는 게임 세션을 받을 준비가 되었음을 GameLift에 알립니다!
	gameLiftSdkModule->ProcessReady(*params);
#endif
}
```

### 게임 서버를 컨테이너화하세요

### 컨테이너를 저장소에 푸시하세요

컨테이너를 저장소에 푸시해야 합니다. Edgegap의 [프라이빗 저장소](/docs.edgegap.com-ko/learn/advanced-features/edgegap-container-registry.md) 또는 다른 옵션을 사용할 수 있습니다.

### Edgegap에 애플리케이션 생성

이제 컨테이너가 저장소에 있으므로, 당신은 [애플리케이션을 생성해야 합니다](/docs.edgegap.com-ko/learn/orchestration/application-and-versions.md) Edgegap에. 이 애플리케이션은 당신의 게임 서버를 나타냅니다. 이 애플리케이션으로 서버를 배포할 수 있습니다.

이제 [배포하세요](/docs.edgegap.com-ko/learn/orchestration/deployments.md) 플레이어를 위해 필요할 때 서버를 배포할 수 있습니다!


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.edgegap.com/docs.edgegap.com-ko/docs/tools-and-integrations/gamelift-to-arbitrium.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
