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

# Ranking players by statistics

> Link a PlayFab leaderboard to a Statistic definition so updates to player stats automatically feed leaderboard entries, ranking players by tracked values.

이 튜토리얼에서는 리더보드와 통계 서비스를 함께 사용하는 방법을 배웁니다. 결과적으로 엔티티에서 통계가 업데이트되면 해당 리더보드에 자동으로 반영됩니다. PlayFab 통계에 대한 자세한 내용은 \[Statistics Overview]\([PlayFab Statistics overview](/services/playfab/player-progression/statistics))를 참조하세요.

두 서비스를 사용하는 슈터 게임의 예시로 시작해 봅시다. 여기서는 [기본 통계 만들기](/services/playfab/player-progression/statistics/create-basic-statistics) 튜토리얼을 활용하여, 게임에 대한 통계가 이미 생성되어 있다는 가정 하에 진행합니다. 이제 매치에서 플레이어가 장거리 슛을 성공할 때마다 이를 추적하려 합니다. 플레이어의 최고 장거리 슛을 기록하는 통계와, 장거리 슛에서 가장 뛰어난 플레이어를 담은 리더보드를 갖게 될 것입니다.

## 통계에 연결된 리더보드 만들기

첫 번째 단계는 통계 서비스에서 추적한 정보를 입력으로 받을 수 있는 리더보드 정의를 만드는 것입니다. 다음 예시는 C# SDK를 사용하여 리더보드 정의를 만드는 방법을 보여줍니다.

```C# theme={null}

public static async Task CreateStatLinkedLeaderboardDefinitionAsync(PlayFabAuthenticationContext context, string leaderboardName, string statName)
{
    PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
    CreateLeaderboardDefinitionRequest leaderboardDefinitionRequest = new CreateLeaderboardDefinitionRequest()
    {
        AuthenticationContext = context,
        EntityType = EntityType,
        Name = leaderboardName,
        SizeLimit = 1000,
        VersionConfiguration = new VersionConfiguration()
        {
            MaxQueryableVersions = 1,
            ResetInterval = ResetInterval.Manual,
        },
        Columns = new List<LeaderboardColumn>()
        {
            new LeaderboardColumn()
            {
                Name = "Distance",
                SortDirection = LeaderboardSortDirection.Descending,
                LinkedStatisticColumn = new LinkedStatisticColumn()
                {
                    LinkedStatisticName = statName,
                    LinkedStatisticColumnName = "Distance",
                }
            },
            new LeaderboardColumn()
            {
                Name = "Caliber of the bullet",
                SortDirection = LeaderboardSortDirection.Ascending,
                LinkedStatisticColumn = new LinkedStatisticColumn()
                {
                    LinkedStatisticName = statName,
                    LinkedStatisticColumnName = "Caliber",
                }
            }
        }
    };

    PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> createLbDefinitionResult = await leaderboardsAPI.CreateLeaderboardDefinitionAsync(leaderboardDefinitionRequest);
}
```

이제 이전에 만든 다른 리더보드 정의와의 주요 차이점을 설명하겠습니다. `LinkedStatisticColumn`이라는 속성을 가진 `LeaderboardColumn` 개체에 주목하세요. 이를 통해 통계와 리더보드 간에 연결을 만들 수 있습니다. 매핑을 위해서는 통계 이름과 해당 통계 내의 열 이름을 지정해야 합니다.

이렇게 하면 통계 서비스를 통해 플레이어의 진행 상황을 추적합니다. 그러면 리더보드 서비스가 이 정보를 사용하여 연결된 리더보드를 채웁니다.

## 리더보드에서 통계 연결 해제

이 서비스에는 필요할 경우 리더보드에서 통계를 연결 해제하는 메커니즘도 있습니다. 개발자가 이 작업을 수행하고 싶은 이유는 서로 다른 구성 테스트 또는 서로 다른 통계 매핑 등 여러 가지가 있을 수 있습니다. 다음 예시는 C# SDK를 사용하여 리더보드에서 통계를 연결 해제하는 방법을 보여줍니다.

```C# theme={null}
public static async Task UnlinkLeaderboard(PlayFabAuthenticationContext context, string statName, string leaderboardName)
{
    PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);

    UnlinkLeaderboardFromStatisticRequest unlinkLbRequest = new UnlinkLeaderboardFromStatisticRequest()
    {
        AuthenticationContext = context,
        Name = leaderboardName,
        StatisticName = statName,
    };

    PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> lbResponse = await leaderboardsAPI.UnlinkLeaderboardFromStatisticAsync(unlinkLbRequest);
}
```

이 정보를 통해 필요할 때마다 리더보드에서 통계를 연결하고 연결 해제할 수 있습니다. 유의해야 할 중요한 제약 사항이 몇 가지 있습니다.

* 리더보드는 직접 업데이트할 수 없으며, 자동 메커니즘을 활용하려면 항상 통계 업데이트를 통해야 합니다.
* 리더보드는 통계와 독립적으로 버전을 증가시킬 수 없습니다.
* 리더보드는 연결 해제 프로세스를 거치지 않는 한 삭제할 수 없습니다.

## 결론

이 튜토리얼에서는 통계로 구동되는 리더보드를 만드는 방법과 서비스를 연결 해제하는 방법을 배웠습니다. 다른 기능에 대한 자세한 내용은 다음 페이지를 참조하세요.

* [기본 리더보드 만들기](/services/playfab/community/leaderboards/create-basic-leaderboard).
* [시즌 리더보드](/services/playfab/community/leaderboards/seasonal-leaderboards).
* [그룹 리더보드](/services/playfab/community/leaderboards/group-leaderboards).
* [제한 사항](/services/playfab/community/leaderboards/limits-leaderboards).
* [할당량](/services/playfab/community/leaderboards/quota-leaderboards).
* [수동 계층](/services/playfab/community/leaderboards/manual-tiers).
* [리더보드 더 활용하기](/services/playfab/community/leaderboards/doing-more-with-leaderboards).
* [리더보드에 상황 데이터 추가](/services/playfab/community/leaderboards/metadata-leaderboards).
* [API 참조](/services/playfab/community/leaderboards/api-reference).
* [리더보드와 CloudScript](/services/playfab/community/leaderboards/leaderboards-cloudscript).
* [PlayStream과 함께 사용하는 리더보드](/services/playfab/community/leaderboards/leaderboards-with-playstream-and-telemetry)
