> 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/ko/docs/tools-and-integrations/gamelift-to-arbitrium.md).

# Gamelift에서 전환

몇 가지 짧은 단계만 따라 AWS GameLift에서 Edgegap으로 게임 서버를 마이그레이션하고 빠르게 실행하세요.

현재 Amazon Gamelift 전용 서버 호스팅보다 더 쉬운 대안을 찾고 계신가요?

## 기능 비교

Gamelift의 서비스와 기능을 파악하고 Edgegap의 대응 기능으로 프로젝트를 활성화하세요:

<table><thead><tr><th width="250">AWS Gamelift 기능</th><th>Edgegap 기능</th></tr></thead><tbody><tr><td>서버 빌드 플러그인</td><td><p>엔진 기본 제공, 완전 자동화된 빠른 시작 플러그인:</p><ul><li><a data-mention href="/ko/unity.md">Unity</a> / <a data-mention href="/ko/unreal-engine.md">Unreal Engine</a> / <a data-mention href="/ko/godot.md">Godot</a>.</li></ul></td></tr><tr><td>서버 SDK</td><td><strong>SDK가 필요 없습니다!</strong> 관리 <a href="/ko/learn/orchestration/application-and-versions.md">앱 버전</a> 다시 빌드할 필요 없이.</td></tr><tr><td>자체 호스팅 Flexmatch</td><td><p><a href="/ko/learn/matchmaking.md">관리형 매치메이커</a>, <a href="/ko/learn/matchmaking/matchmaker-in-depth.md#hosting-cluster">무료로 테스트</a>.</p><p>또한 선택 가능한 경량 SDK도 확인하세요: <a href="/ko/unreal-engine/developer-tools.md#integration-kit">언리얼</a> 및 <a href="/ko/unity/matchmaking.md">유니티</a>.</p></td></tr><tr><td>SearchGameSessions API</td><td><p><a href="/ko/learn/server-browser.md">관리형 서버 브라우저 - 무료로 테스트해 보세요.</a></p><p>또한 선택 가능한 경량 SDK도 확인하세요: <a href="/ko/unreal-engine/developer-tools.md#integration-kit">언리얼</a> 및 <a href="/ko/unity/server-browser.md">유니티</a>.</p></td></tr><tr><td>게임 클라이언트 인증</td><td><p>세션 모델에 맞는 세분화된 접근 제어를 추가하세요:</p><ul><li><a href="/ko/learn/matchmaking/matchmaker-in-depth.md#authenticate">매치메이킹</a> / <a href="/ko/learn/server-browser.md#authenticate">서버 브라우저</a> / <a href="https://app.edgegap.com/user-settings?tab=tokens">맞춤형 DIY 세션</a>.</li></ul></td></tr><tr><td>플릿 - 수평 확장</td><td><a data-mention href="/ko/learn/orchestration/private-fleets.md">프라이빗 플릿</a> 및 <a data-mention href="/ko/learn/orchestration/persistence.md">지속성</a> 및 <a href="https://docs.edgegap.com/learn/orchestration/private-fleets#overflow-to-cloud">클라우드 오버플로</a>.</td></tr><tr><td>A/B 테스트, 별칭, 큐</td><td><a href="/ko/learn/matchmaking/matchmaker-in-depth.md#matchmaking-profiles">프로필(큐)</a> / <a href="/ko/learn/orchestration/private-fleets.md#overflow-to-cloud">인스턴스 메타데이터</a> / <a href="/ko/learn/matchmaking/matchmaker-in-depth.md#rolling-updates-and-ab-tests">롤링 업데이트</a>.</td></tr><tr><td>서버 분석</td><td><a href="/ko/learn/orchestration/deployments.md#analytics">배포 분석</a> 및 <a href="/ko/learn/matchmaking/matchmaker-in-depth.md#analytics">매치메이킹 분석</a>.</td></tr></tbody></table>

## AWS Gamelift SDK 제거

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

{% tabs %}
{% tab title="Unity (C#)" %}
{% code expandable="true" %}

```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();
    }
}
```

{% endcode %}
{% endtab %}

{% tab title="Unreal Engine (C++)" %}
{% code expandable="true" %}

```cpp
using UnrealBuildTool;

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

{% endcode %}

{% code expandable="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
}
```

{% endcode %}
{% endtab %}
{% endtabs %}

## Edgegap으로 시작하기

게임 엔진 플러그인을 지원하는 빠른 시작 가이드 중 하나를 사용해 보세요:

* [Unreal Engine](/ko/unreal-engine.md),
* [Unity](/ko/unity.md),
* [Godot](/ko/godot.md),
* 사용자 정의 런타임(곧 제공 예정).
