> ## 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.

# Lobby SDK 빠른 시작

> 사전 요구 사항, 통합 및 초기 API 호출을 다루는 이 빠른 시작으로 PlayFab Multiplayer C/C++ SDK를 설정하고 첫 번째 PlayFab Lobby를 만드세요.

이 문서에서는 PlayFab Lobby용 개발 환경을 설정하고 PlayFab Multiplayer C/C++ SDK를 사용하여 첫 번째 로비를 만드는 방법에 대해 설명합니다.

<Note>
  PlayFab Multiplayer SDK는 PlayFab Matchmaking용 API도 제공합니다. \* C++ API에 대한 자세한 내용은 [Matchmaking SDK 빠른 시작](/services/playfab/multiplayer/matchmaking/quickstart-client-sdk)을 참조하세요. \* Unity API에 대한 자세한 내용은 [Unity용 빠른 시작](/services/playfab/multiplayer/lobby/lobby-matchmaking-sdks/multiplayer-unity-sdk-getting-started)을 참조하세요. \* Unreal API에 대한 자세한 내용은 [Unreal용 빠른 시작](/services/playfab/multiplayer/networking/party-unreal-engine-oss-quickstart)을 참조하세요.
</Note>

## 사전 요구 사항

PlayFab Lobbies를 사용하려면 [PlayFab 계정](https://developer.playfab.com)이 필요합니다. 계정 생성 지침은 [빠른 시작: Game Manager](/services/playfab/live-service-management/gamemanager/quickstart)를 참조하세요.

## PlayFab Multiplayer SDK 다운로드 및 설정

플랫폼용 [C/C++ SDK](/services/playfab/multiplayer/lobby/lobby-matchmaking-sdks/lobby-matchmaking-sdks)를 다운로드하고 제공된 헤더 및 라이브러리 파일을 빌드에 통합합니다.

<Note>
  이 빠른 시작은 C/C++ SDK 사용에 초점을 맞춥니다. Unity 및 Unreal 인터페이스는 다음 문서를 참조하세요. \* [Unity용 빠른 시작](/services/playfab/multiplayer/lobby/lobby-matchmaking-sdks/multiplayer-unity-sdk-getting-started) \* [Unreal용 빠른 시작](/services/playfab/multiplayer/networking/party-unreal-engine-oss-quickstart)
</Note>

## PlayFab 엔티티에 로그인

PlayFab Lobby SDK를 사용하려면 PlayFab 엔티티 키와 엔티티 토큰을 사용하여 클라이언트를 인증해야 합니다. [LoginWithCustomId](https://learn.microsoft.com/en-us/rest/api/playfab/client/authentication/login-with-custom-id) REST API로 로그인하여 PlayFab 엔티티 키와 토큰 쌍을 획득합니다. 이 API는 [PlayFab Services SDK](/services/playfab/sdks/playfab-sdk-intro)를 통해 C/C++ 프로젝션으로도 제공됩니다.

<Note>
  LoginWithCustomId는 PlayFab 기능을 빠르게 시작할 수 있는 방법이지만, 배포하는 로그인 메커니즘으로 의도된 것은 아닙니다. 로그인 지침은 [로그인 기본 사항 및 모범 사례](/services/playfab/identity/player-identity/login/login-basics-best-practices)를 참조하세요.
</Note>

## PlayFab Multiplayer SDK 초기화

다음 기본 단계에 따라 PlayFab Multiplayer SDK를 초기화합니다.

1. [PFMultiplayerInitialize](/services/playfab/multiplayer/lobby/playfabmultiplayerreference-cpp/pfmultiplayer/functions/pfmultiplayerinitialize)를 호출하여 SDK를 초기화합니다.
2. [PFMultiplayerSetEntityToken](/services/playfab/multiplayer/lobby/playfabmultiplayerreference-cpp/pfmultiplayer/functions/pfmultiplayersetentitytoken)을 호출하여 플레이어를 대신하여 라이브러리에서 사용할 엔티티 키와 토큰을 설정합니다.

```cpp theme={null}
static PFMultiplayerHandle g_pfmHandle = nullptr;
...
...
HRESULT hr = S_OK;

// Initialize the PFMultiplayer library.
hr = PFMultiplayerInitialize(titleId, &g_pfmHandle);
if (FAILED(hr))
{
    // handle initialize failure
    printf("PFMultiplayerInitialize failed! %s\n", PFMultiplayerGetErrorMessage(hr));
    return hr;
}

// Set an entity token for a local user. The token is used to authenticate PlayFab operations on behalf of this user. 
// Tokens can expire, and this API token should be called again when this token is refreshed.
hr = PFMultiplayerSetEntityToken(g_pfmHandle, localUserEntity, entityToken);
if (FAILED(hr))
{
    // handle set entity token failure
    printf("PFMultiplayerSetEntityToken failed! %s\n", PFMultiplayerGetErrorMessage(hr));
    return hr;
}
```

## 로비 만들기

마지막으로, 다음 기본 단계에 따라 로비를 만듭니다.

1. [PFMultiplayerCreateAndJoinLobby](/services/playfab/multiplayer/lobby/playfabmultiplayerreference-cpp/pflobby/functions/pfmultiplayercreateandjoinlobby)를 호출합니다.
2. [PFLobbyCreateAndJoinLobbyCompletedStateChange](/services/playfab/multiplayer/lobby/playfabmultiplayerreference-cpp/pflobby/functions/pfmultiplayerstartprocessinglobbystatechanges)에 대해 [PFMultiplayerStartProcessingLobbyStateChanges](/services/playfab/multiplayer/lobby/playfabmultiplayerreference-cpp/pflobby/functions/pfmultiplayerstartprocessinglobbystatechanges)를 주기적으로 폴링하여 비동기 완료를 확인합니다.

```cpp theme={null}
PFLobbyCreateConfiguration lobbyConfiguration{};
lobbyConfiguration.maxMemberCount = 16;
lobbyConfiguration.ownerMigrationPolicy = PFLobbyOwnerMigrationPolicy::Automatic;
lobbyConfiguration.accessPolicy = PFLobbyAccessPolicy::Public;

PFLobbyJoinConfiguration memberConfiguration{};

PFLobbyHandle lobby;
HRESULT hr = PFMultiplayerCreateAndJoinLobby(g_pfmHandle, localUserEntity, &lobbyConfiguration, &memberConfiguration, nullptr, &lobby);
if (FAILED(hr))
{
    // handle immediate create failure
    printf("PFMultiplayerCreateAndJoinLobby failed! %s\n", PFMultiplayerGetErrorMessage(hr));
    return hr;
}

// NOTE: to simplify this quickstart, we'll synchronously block waiting for the CreateAndJoinLobby operation
// to finish. In a real implementation, this polling would be done asynchronously on a background thread/worker.
bool createAndJoinLobbyFinished = false;
while (!createAndJoinLobbyFinished)
{
    uint32_t lobbyStateChangeCount;
    const PFLobbyStateChange * const * lobbyStateChanges;
    HRESULT hr = PFMultiplayerStartProcessingLobbyStateChanges(m_pfmHandle, &lobbyStateChangeCount, &lobbyStateChanges);
    if (FAILED(hr))
    {
        // handle the failure
        printf("PFMultiplayerStartProcessingLobbyStateChanges failed! %s\n", PFMultiplayerGetErrorMessage(hr));
        return hr;
    }

    for (uint32_t i = 0; i < lobbyStateChangeCount; ++i)
    {
        const PFLobbyStateChange* stateChange = lobbyStateChanges[i];
        switch (stateChange->stateChangeType)
        {
            case PFLobbyStateChangeType::CreateAndJoinLobbyCompleted:
            {
                auto createAndJoinStateChange = 
                    static_cast<const PFLobbyCreateAndJoinLobbyCompletedStateChange*>(stateChange);

                if (SUCCEEDED(createAndJoinStateChange->result))
                {
                    // lobby successfully created!
                    printf("Lobby 0x%p successfully created!\n", createAndJoinStateChange->lobby);
                }
                else
                {
                    // report asynchronous failure
                    printf("Failed to create lobby 0x%p! %s\n",
                        createAndJoinStateChange->lobby,
                        PFMultiplayerGetErrorMessage(createAndJoinStateChange->result));
                }
                createAndJoinLobbyFinished = true;
                break;
            }
        }
    }

    hr = PFMultiplayerFinishProcessingLobbyStateChanges(m_pfmHandle, lobbyStateChangeCount, lobbyStateChanges);
    if (FAILED(hr))
    {
        printf("PFMultiplayerFinishProcessingLobbyStateChanges failed! %s\n", PFMultiplayerGetErrorMessage(hr));
        return hr;
    }
}
```

로비 만들기에 대한 자세한 내용은 [로비 만들기](/services/playfab/multiplayer/lobby/create-a-lobby)를 참조하세요.

비동기 작업 처리에 대한 자세한 내용은 [비동기 작업 및 알림](/services/playfab/multiplayer/lobby/lobby-and-matchmaking-client-sdk-async)을 참조하세요.

## 다음 단계

* [로비 찾기 및 참여](/services/playfab/multiplayer/lobby/join-lobbies)
* [다른 플레이어를 로비에 초대](/services/playfab/multiplayer/lobby/lobby-invites)
* [로비 속성을 사용하여 게임 세션 조정](/services/playfab/multiplayer/lobby/lobby-properties)

## 참고

* [로비 만들기](/services/playfab/multiplayer/lobby/create-a-lobby)
* [비동기 작업 및 알림](/services/playfab/multiplayer/lobby/lobby-and-matchmaking-client-sdk-async)
* [검색 가능한 로비 만들기](/services/playfab/multiplayer/lobby/define-search-keywords)
* [Lobby properties](/services/playfab/multiplayer/lobby/lobby-properties)
* [Lobby SDK 참조](/services/playfab/multiplayer/lobby/playfabmultiplayerreference-cpp/pflobby/pflobby_members)
* [Lobby SDK](/services/playfab/multiplayer/lobby/lobby-matchmaking-sdks/lobby-matchmaking-sdks)
* [Matchmaking SDK 빠른 시작](/services/playfab/multiplayer/matchmaking/quickstart-client-sdk)


## Related topics

- [PlayFab Lobby 및 Matchmaking SDK](/ko/services/playfab/multiplayer/lobby/lobby-matchmaking-sdks/lobby-matchmaking-sdks.md)
- [빠른 시작](/ko/services/playfab/economy-monetization/economy-v2/quickstart.md)
- [빠른 시작 Android](/ko/services/playfab/sdks/c/quickstart-android.md)
- [빠른 시작 iOS](/ko/services/playfab/sdks/c/quickstart-ios.md)
- [빠른 시작 Win32](/ko/services/playfab/sdks/c/quickstart-win32.md)
