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

# 커뮤니티 통계

> 타이틀의 모든 플레이어에 걸쳐 값을 집계하여 글로벌 목표, 이벤트 및 공유 마일스톤을 지원하는 PlayFab 커뮤니티 통계를 만듭니다.

커뮤니티 통계는 참여를 높이고 게임에 대한 플레이어의 투자를 촉진하는 강력한 도구입니다. 게임 타이틀 수준에서 통계를 집계함으로써 개발자는 플레이어 간의 협력을 장려하는 공유 목표와 도전 과제를 만들 수 있습니다. 이 접근 방식은 개별 플레이어 행동을 커뮤니티 전체 목표에 대한 기여로 변환하여 플레이어가 함께 협력하여 집단적 마일스톤을 달성할 때 지속적인 참여를 이끌어냅니다. 플레이어는 자신의 개별 기여가 더 큰 커뮤니티에 중요하다는 느낌을 받아 게임 및 다른 플레이어와의 유대감을 강화합니다.

예를 들어, 전체 플레이어 기반이 일주일 이내에 총 1,000만 킬을 집단적으로 기록해야 특별한 게임 내 이벤트를 잠금 해제할 수 있는 글로벌 보스전을 구현한다고 상상해 보세요. 플레이어는 각자의 기여로 커뮤니티 진행 표시줄이 움직이는 것을 보고 목표에 도달하려는 동기를 부여받습니다. 이러한 동작은 특히 실시간 진행 상황 업데이트와 마일스톤 보상이 함께 제공될 때 투자와 참여의 강력한 피드백 루프를 만듭니다.

PlayFab을 사용하면 두 가지 통계를 정의하여 커뮤니티 통계를 쉽게 관리할 수 있습니다. 하나는 플레이어 수준(집계 소스)에서, 다른 하나는 타이틀 또는 그룹 수준(집계 대상)에서 정의합니다. 플레이어 통계에 대한 업데이트는 대상 통계에 자동으로 집계됩니다. 현재 커뮤니티 점수를 검색하려면 대상 엔터티의 통계를 읽습니다.

PlayFab은 두 가지 유형의 커뮤니티 통계를 지원합니다.

* **타이틀 수준**: 모든 플레이어 업데이트를 단일 타이틀 전반 통계로 집계합니다. 전체 플레이어 기반 전체에 걸쳐 공유되는 글로벌 목표에 이상적입니다.
* **그룹 수준**: 플레이어 업데이트를 그룹 엔터티 통계로 집계합니다. 클랜 도전, 길드 목표 또는 플레이어의 하위 집합이 공유 목표를 향해 작업하는 팀 기반 목표에 이상적입니다.

## 타이틀 수준 커뮤니티 통계

### 소스 통계 정의 생성

먼저 집계 소스 역할을 하는 플레이어에 대한 통계 정의를 만듭니다.

```C# theme={null}
// Use the PlayFabAuthenticationContext to call the API
PlayFabProgressionInstanceAPI statsAPI = new PlayFabProgressionInstanceAPI(context);
CreateStatisticDefinitionRequest statDefinitionRequest = new CreateStatisticDefinitionRequest()
{
    Name = "sourceStat",
    AuthenticationContext = context,
    EntityType = "title_player_account",
    VersionConfiguration = new VersionConfiguration()
    {
        MaxQueryableVersions = 1,
        ResetInterval = ResetInterval.Manual,
    },
    Columns = new List<StatisticColumn>()
    {
        new StatisticColumn()
        {
            Name = "Eliminations",
            AggregationMethod = StatisticAggregationMethod.Sum,
        },
    },
};

PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> createStatDefResult = await statsAPI.CreateStatisticDefinitionAsync(statDefinitionRequest);
```

### 대상 통계 정의 생성

다음으로 집계 대상 역할을 하는 타이틀에 대한 통계 정의를 만듭니다. 타이틀 통계 정의의 집계 소스로 플레이어 통계 정의를 지정합니다.

```C# theme={null}
// Use the PlayFabAuthenticationContext to call the API
PlayFabProgressionInstanceAPI statsAPI = new PlayFabProgressionInstanceAPI(context);
CreateStatisticDefinitionRequest statDefinitionRequest = new CreateStatisticDefinitionRequest()
{
    Name = "communityStat",
    AuthenticationContext = context,
    EntityType = "title",
    Columns = new List<StatisticColumn>()
    {
        new StatisticColumn()
        {
            Name = "Eliminations",
            AggregationMethod = StatisticAggregationMethod.Sum,
        },
    },
    AggregationSources = new string[] { "sourceStat" };
};

PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> createStatDefResult = await statsAPI.CreateStatisticDefinitionAsync(statDefinitionRequest);
```

<Note>
  ***참고:*** 설정
</Note>

`EntityType`을 `title`로 설정하고 `AggregationSources`를 플레이어 수준에서 정의된 통계를 참조하도록 설정합니다.

커뮤니티 통계를 만든 후 플레이어 수준에서 이루어진 업데이트는 타이틀 수준에서 집계되기 시작합니다. 시스템은 새 업데이트만 집계합니다. 소스 통계가 잠시 동안 존재하는 경우 시스템은 해당 기록 값을 타이틀 수준에서 다시 채우지 않습니다.

### 타이틀 커뮤니티 통계 읽기

타이틀 수준의 통계에 대한 현재 점수를 가져오려면 타이틀 엔터티의 통계를 읽습니다.

```C# theme={null}
// Use the PlayFabAuthenticationContext to call the API
PlayFabProgressionInstanceAPI statsAPI = new PlayFabProgressionInstanceAPI(context);

GetStatisticsRequest request = new GetStatisticsRequest()
{
    AuthenticationContext = context,
    Entity = new PlayFab.LeaderboardsModels.EntityKey()
    {
        Id = "<title id in hex>",
        Type = "title"
    },
};

PlayFabResult<GetStatisticsResponse> result = await statsAPI.GetStatisticsAsync(request); 
```

## 그룹 수준 커뮤니티 통계

그룹 수준 커뮤니티 통계를 사용하면 클랜이나 길드와 같은 특정 그룹 내에서 플레이어 행동을 집계할 수 있습니다. 이 집계는 구성원이 공유 목표를 향해 집합적으로 작업하는 클랜 도전과 같은 시나리오에 유용합니다.

### 대상 통계 정의 생성

`EntityType`을 `group`으로 설정하여 통계 정의를 만듭니다. 플레이어 통계 정의를 집계 소스로 지정합니다.

```C# theme={null}
// Use the PlayFabAuthenticationContext to call the API
PlayFabProgressionInstanceAPI statsAPI = new PlayFabProgressionInstanceAPI(context);
CreateStatisticDefinitionRequest statDefinitionRequest = new CreateStatisticDefinitionRequest()
{
    Name = "groupCommunityStat",
    AuthenticationContext = context,
    EntityType = "group",
    Columns = new List<StatisticColumn>()
    {
        new StatisticColumn()
        {
            Name = "Eliminations",
            AggregationMethod = StatisticAggregationMethod.Sum,
        },
    },
    AggregationSources = new string[] { "sourceStat" }
};

PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> createStatDefResult = await statsAPI.CreateStatisticDefinitionAsync(statDefinitionRequest);
```

<Note>
  소스 통계 정의(플레이어 수준)는 타이틀 수준 커뮤니티 통계에 사용되는 것과 동일합니다. 기존 소스 통계 정의를 재사용할 수 있습니다.
</Note>

### 소스 통계 업데이트

그룹 수준 집계를 위해 플레이어의 소스 통계를 업데이트할 때는 `StatisticUpdate` 객체의 `AggregationTargetEntityKeys` 속성에서 대상 그룹 엔터티를 지정합니다. 이 속성은 PlayFab에 업데이트를 집계할 그룹 엔터티를 알려줍니다.

```C# theme={null}
// Use the PlayFabAuthenticationContext to call the API
PlayFabProgressionInstanceAPI statsAPI = new PlayFabProgressionInstanceAPI(context);

UpdateStatisticsRequest request = new UpdateStatisticsRequest()
{
    AuthenticationContext = context,
    Entity = new PlayFab.LeaderboardsModels.EntityKey()
    {
        Id = "<player entity id>",
        Type = "title_player_account"
    },
    Statistics = new List<StatisticUpdate>()
    {
        new StatisticUpdate()
        {
            Name = "sourceStat",
            Scores = new List<string> { "5" },
            AggregationTargetEntityKeys = new List<PlayFab.LeaderboardsModels.EntityKey>()
            {
                new PlayFab.LeaderboardsModels.EntityKey()
                {
                    Id = "<group entity id>",
                    Type = "group"
                }
            }
        }
    }
};

PlayFabResult<UpdateStatisticsResponse> result = await statsAPI.UpdateStatisticsAsync(request);
```

<Info>
  타이틀 수준 커뮤니티 통계의 경우 타이틀이 기본 집계 대상이므로 `AggregationTargetEntityKeys`가 필요하지 않습니다. 그룹 수준 커뮤니티 통계의 경우 그룹 엔터티 키를 지정해야 합니다. 현재 `AggregationTargetEntityKeys`에서는 하나의 엔터티 키만 지정할 수 있습니다.
</Info>

### 그룹 커뮤니티 통계 읽기

그룹 커뮤니티 통계에 대한 현재 점수를 가져오려면 그룹 엔터티의 통계를 읽습니다.

```C# theme={null}
// Use the PlayFabAuthenticationContext to call the API
PlayFabProgressionInstanceAPI statsAPI = new PlayFabProgressionInstanceAPI(context);

GetStatisticsRequest request = new GetStatisticsRequest()
{
    AuthenticationContext = context,
    Entity = new PlayFab.LeaderboardsModels.EntityKey()
    {
        Id = "<group entity id>",
        Type = "group"
    },
};

PlayFabResult<GetStatisticsResponse> result = await statsAPI.GetStatisticsAsync(request);
```

## 제한 사항

* 커뮤니티 통계에는 하나의 집계 소스만 지정할 수 있습니다.
* 커뮤니티 통계에 대한 버전 구성은 지정할 수 없습니다. 소스 통계에 대해 지정한 버전 구성은 커뮤니티 통계에도 적용됩니다.
* 커뮤니티 통계의 `EntityType`은 `title` 또는 `group`이어야 합니다.
* 어떤 열에도 `Last` 집계를 사용할 수 없습니다.
* 소스 통계를 업데이트할 때 `AggregationTargetEntityKeys`에서는 하나의 엔터티 키만 지정할 수 있습니다.

## 참고 항목

* [기본 통계 만들기](/services/playfab/player-progression/statistics/create-basic-statistics)
* [통계로 더 많은 작업 수행](/services/playfab/player-progression/statistics/doing-more-statistics)
* [시즌별 통계](/services/playfab/player-progression/statistics/seasonal-statistics)
* [통계에 컨텍스트 데이터 추가](/services/playfab/player-progression/statistics/metadata-statistics)
* [API 참조](/services/playfab/player-progression/statistics/api-reference)
* [제한](/services/playfab/player-progression/statistics/limits-statistics)
* [할당량](/services/playfab/player-progression/statistics/quota-statistics)
* [Statistics 미터](/services/playfab/pricing/meters/statistics-meters)


## Related topics

- [PlayFab 플레이어 진행도 문서](/ko/services/playfab/player-progression/index.md)
- [커뮤니티](/ko/services/xbox-services/community/index.md)
- [Godot & 커뮤니티 엔진 개요](/ko/paths/community-engines/overview.md)
- [PlayFab이란 무엇인가요?](/ko/services/playfab/get-started/what-is-playfab.md)
- [타이틀에서 평판 피드백 보내기](/ko/services/xbox-services/community/reputation/concepts/live-sending-reputation-feedback.md)
