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

# Manual Tier Leaderboards

> Learn how to build a manual tiering system on top of PlayFab leaderboards, ranking players into Bronze, Silver, Gold, Platinum, Diamond, and Savior tiers.

# 리더보드를 사용한 수동 계층

이 튜토리얼에서는 리더보드 서비스 내의 몇 가지 속성을 활용하여 플레이어를 위한 계층 시스템을 만드는 방법을 배웁니다. 서비스 속성에 기반한 수동 계층 시스템을 만드는 방법을 이해하기 위해 예시로 시작해 봅시다. 좀비를 처치하는 게임이 있다고 상상해 보세요. 이 게임에서 플레이어는 제한된 시간 안에 가능한 한 많은 점수를 얻어야 합니다. 더 많은 점수를 얻기 위해 다양한 전략을 사용할 수 있으며, 데미지를 받지 않는 것에도 점수가 부여됩니다.

이 예시에서 플레이어는 매치별 성과에 따라 경험치를 얻습니다. 최상위 플레이어는 “Saviors” 랭크로 식별하는 계층 시스템을 만들고, 나머지 플레이어는 Bronze, Silver, Gold, Platinum, Diamond와 같은 여러 랭크로 분포시키려 합니다.

## 리더보드 만들기

첫 번째 단계는 플레이어 순위를 매기기 위한 주요 요소를 포함하는 리더보드 정의를 만드는 것입니다. 좀비 게임에서는 여러 점수를 사용할 것입니다. 다음 예시는 C# SDK를 사용하여 리더보드 정의를 만드는 방법을 보여줍니다.

```C# theme={null}
public static async Task CreateLeaderboardDefinitionAsync(PlayFabAuthenticationContext context, string leaderboardName)
{
    PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
    CreateLeaderboardDefinitionRequest leaderboardDefinitionRequest = new CreateLeaderboardDefinitionRequest()
    {
        AuthenticationContext = context,
        Name = leaderboardName,
        SizeLimit = 10000,
        EntityType = "title_player_account",
        VersionConfiguration = new VersionConfiguration()
        {
            MaxQueryableVersions = 1,
            ResetInterval = ResetInterval.Manual,
        },
        Columns = new List<LeaderboardColumn>()
        {
            new LeaderboardColumn()
            {
                Name = "Eliminations",
                SortDirection = LeaderboardSortDirection.Descending,
            },
            new LeaderboardColumn()
            {
                Name = "SkillPoints",
                SortDirection = LeaderboardSortDirection.Descending,
            }
            new LeaderboardColumn()
            {
                Name = "Deaths",
                SortDirection = LeaderboardSortDirection.Ascending,
            }         
        }
    };

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

여기서는 세 개의 서로 다른 점수를 가진 리더보드가 정의되어 있습니다. 리더보드를 만들거나 동점 처리가 어떻게 작동하는지에 대한 자세한 내용은 다음 가이드를 확인하세요: [리더보드 더 활용하기](/services/playfab/community/leaderboards/doing-more-with-leaderboards).

## 수동 계층 구분

리더보드가 제대로 생성되었으므로 이제 계층을 어떻게 만들지 정의할 수 있습니다. 먼저 플레이어 집단을 어떻게 나눌지 정의해야 합니다. 일반적으로 랭크가 높아질수록 플레이어 수가 줄어듭니다. 이러한 개념을 바탕으로 계층을 다음과 같이 정의하겠습니다.

* Bronze: 플레이어의 0 - 35%.
* Silver: 플레이어의 35% - 60%.
* Gold: 플레이어의 60% - 80%.
* Platinum: 플레이어의 80% - 90%.
* Diamond: 플레이어의 90% - 99.5%.
* Saviors: 상위 0.05%의 플레이어.

이 과정은 계층 시스템에 대한 수동 접근 방식이므로, 플레이어의 분포는 개발자가 적절하다고 생각하는 방식으로 저장해야 합니다.

데이터를 검색하기 위해서는 다음 예시를 사용합니다.

```C# theme={null}
public static async Task<List<EntityLeaderboardEntry>> GetLeaderboard(PlayFabAuthenticationContext context, string leaderboardName)
{
    PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
    GetEntityLeaderboardRequest getLbRequest = new GetEntityLeaderboardRequest()
    {
        LeaderboardName = leaderboardName,
        StartingPosition = 1,
        PageSize = 20,
        AuthenticationContext = context,
    };

    PlayFabResult<GetEntityLeaderboardResponse> lbResponse = await leaderboardsAPI.GetLeaderboardAsync(getLbRequest);
    
    return lbResponse.Result;
}
```

이 예시는 리더보드에서 데이터를 검색하는 여러 방법 중 하나입니다. 응답의 Result 속성에서 리더보드에 현재 몇 개의 행이 있는지 알려주는 `EntryCount` 속성을 확인할 수 있습니다. 이 수치는 리더보드의 최대 행 수를 나타내는 `SizeLimit`과는 다릅니다.

플레이어의 계층을 결정하려면, 리더보드 내 위치를 `EntryCount` 속성으로 나누어 정의된 계층 중 어디에 속하는지 확인합니다.

간단한 예시:

* 하위 플레이어: 10,000명 중 8500위에 있는 플레이어는 인구의 85%에 속하며 Bronze 계층에 해당합니다.
* 중간 플레이어: 10,000명 중 3500위에 있는 플레이어는 상위 35% 내에 있으며 Gold 계층에 해당합니다.
* 상위 플레이어: 10,000명 중 50위에 있는 플레이어는 상위 0.5% 내에 있어 “Savior”가 됩니다.

## 결론

이 튜토리얼에서 우리는 다음 작업을 수행하는 방법을 배웠습니다.

* 리더보드 만들기.
* 리더보드에서 데이터를 쿼리하는 방법 학습.
* 백분위를 기반으로 한 수동 계층 분포 만드는 방법 학습.
* 플레이어의 위치 결과를 실제 계층에 매핑하는 방법 학습.

## 함께 보기

* [리더보드 더 활용하기](/services/playfab/community/leaderboards/doing-more-with-leaderboards).
* [기본 리더보드 만들기](/services/playfab/community/leaderboards/create-basic-leaderboard)
* [그룹 리더보드](/services/playfab/community/leaderboards/group-leaderboards).
* [제한 사항](/services/playfab/community/leaderboards/limits-leaderboards).
* [할당량](/services/playfab/community/leaderboards/quota-leaderboards).
* [통계로 플레이어 순위 매기기](/services/playfab/community/leaderboards/leaderboards-linked-to-stats)
* [리더보드에 상황 데이터 추가](/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)


## Related topics

- [PlayFab 리더보드 개요](/ko/services/playfab/community/leaderboards/index.md)
- [PFLeaderboardsCreateLeaderboardDefinitionAsync](/ko/services/playfab/api-references/c/pfleaderboards/functions/pfleaderboardscreateleaderboarddefinitionasync.md)
- [PFLeaderboardsUpdateLeaderboardDefinitionAsync](/ko/services/playfab/api-references/c/pfleaderboards/functions/pfleaderboardsupdateleaderboarddefinitionasync.md)
- [Accessing Archived Tournament results](/ko/services/playfab/community/leaderboards/tournaments-leaderboards/accessing-archived-tournament-results.md)
- [Using Prize Tables](/ko/services/playfab/community/leaderboards/tournaments-leaderboards/using-prize-tables.md)
