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

# 이벤트 기반 스탯 첫걸음

> Partner Center에서 XBOX Live 이벤트와 스탯을 구성한 다음 이벤트 전송 및 스탯 업데이트 코드를 추가하기 위한 첫걸음 가이드입니다.

이벤트 기반 스탯을 사용하여 Partner Center에서 구성된 타이틀의 경우, 이 항목에서는 Partner Center에서 이벤트와 스탯을 구성한 다음 이벤트를 전송하고 스탯을 업데이트하기 위해 타이틀에 코드를 추가하는 방법을 보여줍니다.

## Partner Center에 로그인

다음 예제에서는 Partner Center를 사용하여 XBOX 게임 경험을 구성합니다.

회사가 XBOX용 제품을 만들기 위한 계약이 있으면 Partner Center에서 콘텐츠를 구성합니다. 회사가 아직 Partner Center 액세스가 설정되어 있지 않고 게임을 개발 중이라면, Microsoft 계정 관리자에게 문의하세요. 앱을 개발 중이라면 XBOX 앱 파트너 요청([xboxapps@microsoft.com](mailto:xboxapps@microsoft.com))에 문의하세요. ID\@XBOX 프로그램과 함께 작업 중이라면 ID Setup([idsetup@microsoft.com](mailto:idsetup@microsoft.com))에 문의하세요.

ID\@XBOX 프로그램은 모든 규모의 자격을 갖춘 게임 개발자가 XBOX One(또는 이후 버전)에서 디지털 게임을 자체 게시하여 창의성을 발휘할 수 있도록 합니다. 이는 스튜디오에 성공을 극대화하는 데 필요한 도구와 지원을 제공합니다. 자세히 알아보려면 [https://www.xbox.com/Developers](https://www.xbox.com/Developers)를 참조하세요.

Partner Center에 액세스한 후에는 Microsoft가 게임에 대한 제품 그룹을 만들어야 합니다. Microsoft 계정 관리자가 이 프로세스를 지원할 수 있습니다.

Microsoft가 게임에 대한 제품 그룹을 만든 후에는 Partner Center를 사용하여 게임에 대한 XBOX 서비스를 구성합니다. 게임에 대한 XBOX 서비스 구성은 *서비스 구성* 이라고도 합니다.

다음 단계를 사용하여 게임에 대한 이벤트, 스탯, 업적, 리더보드를 추가할 수 있는 Partner Center의 위치로 이동합니다.

1. [Partner Center](https://developer.microsoft.com/dashboard/windows/overview)에서 계정에 로그인합니다.

2. 게임을 포함하거나 포함할 제품 그룹을 선택합니다.

3. **제품 그룹** 페이지에서 게임을 선택하거나 **새 제품 추가**를 선택하여 새 항목을 만듭니다.

4. 새 제품을 만드는 경우 제품의 이름을 입력합니다.

5. 리소스 액세스에 대해서는 **Exclusive Resource Access(ERA)** 를 선택합니다.

6. 게임에 대한 물리적 미디어를 생산해야 하는지 또는 디지털 다운로드만 될지 선택합니다.

7. **제품 만들기**를 선택합니다.

8. 왼쪽 창 하단에서 제품이 생성된 샌드박스를 확장합니다.

   서비스 구성은 샌드박스 수준에서 정의됩니다. 제품을 다른 샌드박스로 내보내는 경우 서비스 구성도 내보내야 합니다.

9. 샌드박스 하위 메뉴에서 **서비스 구성**을 선택합니다. 이 페이지를 사용하여 현재 샌드박스의 타이틀에 대한 XBOX 서비스를 구성합니다.

## 시나리오에 대한 이벤트 식별 및 정의

Partner Center에서 원하는 플레이어 경험을 구현하는 규칙을 정의하기 전에, 해당 경험을 구동할 이벤트를 식별하고 정의해야 합니다.

이벤트 기반 모델에서 업적과 리더보드는 플레이어 스탯을 기반으로 합니다. 따라서 우리가 정의할 스탯을 살펴봄으로써 타이틀이 어떤 이벤트를 보내야 하는지 알 수 있습니다.

이 예제에서 정의할 경험을 지원하기 위해 레이스에서 각 랩이 끝날 때 보내는 이벤트를 사용합니다.

이 이벤트를 `LapCompleted`라고 부르겠습니다. 이 이벤트를 사용하여 맞춤형 경험을 구동합니다. 이러한 경험을 지원하기 위해 `LapCompleted` 이벤트의 일부로 다음 필드도 정의합니다.

* **LapTime**: 랩을 완료하는 데 걸린 시간을 분 단위로 나타내는 필드.

* **CarModel**: 랩을 완료하는 데 사용된 자동차 모델을 나타내는 문자열 필드.

* **WeatherCondition**: 랩이 완료되었을 때 트랙의 날씨 조건을 식별하는 문자열 필드.

* **TrackId**: 랩이 완료된 트랙의 ID.

이제 이 이벤트를 Partner Center에서 정의합니다.

1. Partner Center의 왼쪽 창에서 **Test Sandbox** > **Service Configuration** > **Events & Stat Rules**를 선택합니다.

2. 새 이벤트를 만들려면 **New**를 선택합니다. **Add New Event** 대화 상자가 다음과 같이 나타납니다.

   <img src="https://mintcdn.com/microsoft-4404708b/gzrdvT5kpqAXKEQt/images/gdk/services/AddNewEvent-XDP.png?fit=max&auto=format&n=gzrdvT5kpqAXKEQt&q=85&s=d620d2ea30f73bfb53fcebfe7356f526" alt="Partner Center의 Add New Event 대화 상자 스크린샷." width="350" height="560" data-path="images/gdk/services/AddNewEvent-XDP.png" />

3. **Base Event**에서 **Base**를 선택합니다.

4. **Event Name**에 *LapCompleted* 를 입력합니다.

5. 선택적으로 **Description**에 이벤트에 대한 설명을 입력합니다.

6. **Add Event Field**를 선택합니다.

7. **Field Name**에 *LapTime* 을 입력한 다음 **Type**을 다음과 같이 **Double**로 지정합니다.

   <img src="https://mintcdn.com/microsoft-4404708b/gzrdvT5kpqAXKEQt/images/gdk/services/LapTimeField-XDP.png?fit=max&auto=format&n=gzrdvT5kpqAXKEQt&q=85&s=1ed0a8c599be8bd3551ce963df1945dd" alt="Partner Center의 Add New Event Field 대화 상자 스크린샷." width="352" height="439" data-path="images/gdk/services/LapTimeField-XDP.png" />

8. **Add Event Field**를 선택합니다.

9. 다음 이벤트 필드를 추가하는 프로세스를 반복합니다.

   * *CarModel*: **UnicodeString**

   * *WeatherCondition*: **UnicodeString**

   * *TrackId*: **Int32**

   이벤트는 다음 스크린샷과 같이 보여야 합니다.

   <img src="https://mintcdn.com/microsoft-4404708b/gzrdvT5kpqAXKEQt/images/gdk/services/LapCompletedEvent-XDP.png?fit=max&auto=format&n=gzrdvT5kpqAXKEQt&q=85&s=c30cfa0f508b2a7126abce03dccfda91" alt="Partner Center에서 새로 정의된 LapCompleted 이벤트 스크린샷." width="347" height="644" data-path="images/gdk/services/LapCompletedEvent-XDP.png" />

10. 샌드박스에 이벤트를 저장하려면 **Save Event**를 선택합니다.

## 스탯 규칙 설계

이제 플레이어 경험을 정의했으므로 이러한 경험을 구현하는 스탯 규칙을 만들 수 있습니다. 세 가지 시나리오(Featured Stats, 업적, 리더보드)에 모두 `LapTime`을 사용하므로 이를 먼저 구성합니다.

이 스탯은 Featured Stat(Hero Stat이라고도 함)로 표시되며 추가 메타데이터가 있는 글로벌 리더보드에도 사용됩니다.

게임은 게임에서 특정 작업이 발생할 때 게임 내 이벤트를 발생시키며, 이는 스탯을 만들기 위한 원시 데이터로 간주됩니다. 모든 이벤트에서 하나 이상의 스탯이 생성되거나 업데이트되어야 합니다.
(단일 이벤트에서 여러 스탯을 생성하는 방법에 대한 자세한 내용은 [이벤트 기반 스탯 개요](/services/xbox-services/player-data/stats-leaderboards/event-based/live-stats-eb-overview)를 참조하세요.)

1. **Events & Stat Rules** 페이지에서 이벤트 목록에서 **LapCompleted** 이벤트를 선택합니다.

2. 새 스탯 규칙을 만들려면 **Stat Rules** 오른쪽의 **New**를 선택합니다. 이는 선택된 이벤트를 기반으로 합니다. **Add Stat Rule** 대화 상자가 다음과 같이 나타납니다.

   <img src="https://mintcdn.com/microsoft-4404708b/gzrdvT5kpqAXKEQt/images/gdk/services/AddNewStatRule-XDP.png?fit=max&auto=format&n=gzrdvT5kpqAXKEQt&q=85&s=1f3c0e2cdfb3a9df22550c6a07a80d44" alt="Partner Center의 Add Stat Rule 대화 상자 스크린샷." width="473" height="474" data-path="images/gdk/services/AddNewStatRule-XDP.png" />

3. **Stat Rule Name**에 *FastestLap* 을 입력합니다.

4. 다른 앱과 타이틀이 이 규칙에 의해 생성된 스탯에 액세스할 수 있도록 하려면 **Open read access to any title** 확인란을 선택합니다.

   스탯 규칙에는 이벤트가 스탯을 만들거나 업데이트하는 방법을 정의하는 로직이 있습니다. 최단 랩을 추적하고 싶으므로 새 랩 타임이 기존 최단 랩 타임보다 낮은 경우에만 스탯 값을 업데이트하고자 합니다.

5. 이를 위해 **Operator**에서 **Min**을 선택하고 **Parameter**에서 **LapTime**을 다음과 같이 선택합니다.

   <img src="https://mintcdn.com/microsoft-4404708b/gzrdvT5kpqAXKEQt/images/gdk/services/MinLapTime-XDP.png?fit=max&auto=format&n=gzrdvT5kpqAXKEQt&q=85&s=93ff9ebb88b0843595386481e4ae455c" alt="Partner Center에서 스탯 규칙의 Operator 및 Parameter 선택 스크린샷." width="465" height="470" data-path="images/gdk/services/MinLapTime-XDP.png" />

마지막으로, 이 특정 스탯에 필요한 모든 추가 데이터(*스탯 컨텍스트* 또는 *메타데이터* 라고 함)가 이벤트에 포함되도록 해야 합니다. 즉, 플레이어의 자동차, 트랙, 날씨 조건입니다.

6. 필드를 메타데이터에 추가하려면 **CarModel**을 선택한 다음 **Add Event Field**를 선택합니다.

7. **WeatherCondition** 및 **TrackId** 필드에 대해 다음과 같이 이 작업을 반복합니다.

   <img src="https://mintcdn.com/microsoft-4404708b/gzrdvT5kpqAXKEQt/images/gdk/services/FastestLapStatRule-XDP.png?fit=max&auto=format&n=gzrdvT5kpqAXKEQt&q=85&s=9d517a1980e04cff73ff42bbc058a5b9" alt="Partner Center의 메타데이터가 있는 FastestLap 스탯 규칙 스크린샷." width="462" height="537" data-path="images/gdk/services/FastestLapStatRule-XDP.png" />

8. 스탯 규칙을 만들려면 **Add Stat Rule**을 선택합니다.

## Featured Stats, 리더보드, 업적 구성

### Featured Stats

이제 스탯 규칙이 완료되었으므로 스탯이 GameHub의 GameHub 업적 탭에 표시되기를 원합니다. 결과적으로 Featured Stat(Partner Center에서 Hero Stat이라고 함)를 구성해야 합니다.

1. Partner Center의 왼쪽 창에서 **Test Sandbox** > **Service Configuration** > **Hero Stats**를 선택합니다.

2. 새 Featured/Hero Stat을 추가하려면 **New**를 선택합니다.

3. **Hero Stat Display Name**에 *Fastest Lap* 을 입력합니다.

4. **Display Format**에서 **ShortTimespan**을 선택합니다. **Display Units**에서 **Seconds**를 선택합니다.

5. **Display Semantic**에서 **Best**를 선택합니다. 이는 값이 스탯의 최고 점수를 나타냄을 컴패니언 앱에 표시합니다.

6. **Select an Instance**를 선택한 다음 **Stat Instance**에서 **FastestLap**을 선택합니다. 이는 Featured Stat이 `FastestLap` 스탯 값을 기반으로 함을 나타냅니다.

7. **Ordinal**에 *1* 을 입력합니다. 이는 Featured Stats를 나열할 때 이 Featured Stat이 먼저 표시되어야 함을 나타냅니다.

8. **Sort Order**에서 **Ascending**을 선택합니다. 이는 다음과 같이 낮은 값이 높은 값보다 좋음을 나타냅니다.

   <img src="https://mintcdn.com/microsoft-4404708b/gzrdvT5kpqAXKEQt/images/gdk/services/FastestLapHeroStat-XDP.png?fit=max&auto=format&n=gzrdvT5kpqAXKEQt&q=85&s=10ef730c295cc621a9489e24dab801f1" alt="Partner Center의 Fastest Lap Hero Stat 스크린샷." width="462" height="422" data-path="images/gdk/services/FastestLapHeroStat-XDP.png" />

9. Featured/Hero Stat을 만들려면 **Add New Hero Stat**을 선택합니다.

### 글로벌 리더보드

동일한 랩 타임 스탯을 사용하여 리더보드를 구성하여 모든 플레이어가 전 세계의 다른 플레이어와 비교하여 자신의 랩 타임이 어떻게 순위가 매겨지는지 볼 수 있습니다.

1. Partner Center의 왼쪽 창에서 **Test Sandbox** > **Service Configuration** > **Leaderboards**를 선택합니다.

2. 새 글로벌 리더보드를 만들려면 **New**를 선택합니다.

3. **Leaderboard ID**에 *FastestLap* 을 입력합니다.

4. **Select an Instance**를 선택하고 앞서 만든 **FastestLap** 스탯 규칙을 선택한 다음 **Add Stat Instance**를 선택합니다.

5. **Sort**에서 다음과 같이 **Ascending**을 선택합니다. 이 선택은 낮은 시간이 더 좋음을 나타냅니다.

   <img src="https://mintcdn.com/microsoft-4404708b/gzrdvT5kpqAXKEQt/images/gdk/services/FastestLapLeaderboard-XDP.png?fit=max&auto=format&n=gzrdvT5kpqAXKEQt&q=85&s=397f88a12dc095812ec3f83a5da1c3ec" alt="Partner Center의 Fastest Lap 리더보드 스크린샷." width="462" height="321" data-path="images/gdk/services/FastestLapLeaderboard-XDP.png" />

6. 새 글로벌 리더보드를 만들려면 **Add New Leaderboard**를 선택합니다.

플레이어 스탯이 업데이트되면 리더보드도 업데이트되어 순위 변경 사항을 반영합니다.

리더보드를 만들 때 기존 플레이어 스탯이 있는 경우 이러한 스탯으로 새 리더보드를 업데이트하는 데 몇 시간이 걸릴 수 있습니다.

### 이벤트 기반 업적

타이틀 관리 업적을 사용하는 것을 권장합니다. 그러나 여전히 이벤트 기반 업적을 사용하는 타이틀의 경우, 다음과 같이 이벤트를 사용하여 서비스에서 업적 잠금 해제를 구동할 수 있습니다.

**이벤트를 사용하여 이벤트 기반 업적을 잠금 해제하려면**

1. Partner Center의 왼쪽 창에서 **Test Sandbox** > **Service Configuration** > **Achievements & Challenges**를 선택합니다.

2. 새 업적을 추가하려면 **New**를 선택합니다.

3. **Achievement Name**에 *Under 60 seconds* 를 입력합니다.

4. **Description**에 *Completed a lap in under 60 seconds* 를 입력합니다. 이 설명은 업적이 잠금 해제될 때 플레이어에게 표시됩니다.

5. **Not Achieved Description**에 *Complete a lap in under 60 seconds* 를 입력합니다. 이 설명은 업적이 여전히 잠겨 있을 때 플레이어에게 표시됩니다.

6. **Achievement Icon**으로 사용할 1920 × 1080 픽셀 .png 파일을 다음과 같이 업로드합니다.

   <img src="https://mintcdn.com/microsoft-4404708b/gzrdvT5kpqAXKEQt/images/gdk/services/Under60Achievement-XDP.png?fit=max&auto=format&n=gzrdvT5kpqAXKEQt&q=85&s=a5b278e08b2cb2ff9659f51e309cbcf6" alt="Partner Center의 Add New Achievement 대화 상자 스크린샷." width="338" height="595" data-path="images/gdk/services/Under60Achievement-XDP.png" />

7. 업적을 만들려면 **Add Achievement**를 선택합니다.

8. 업적 목록에서 **Under 60 seconds** 업적이 선택되어 있는지 확인합니다. 업적 잠금 해제에 대해 플레이어에게 보상을 제공하려면 **Rewards** 오른쪽의 **New**를 선택합니다.

9. 이 업적을 잠금 해제한 것에 대해 플레이어에게 20 게이머스코어 포인트를 제공합니다. **Reward Type**에서 **Gamerscore**를 선택합니다.

10. **Value**에 *20* 을 다음과 같이 입력합니다.

    <img src="https://mintcdn.com/microsoft-4404708b/gzrdvT5kpqAXKEQt/images/gdk/services/Under60AchievementReward-XDP.png?fit=max&auto=format&n=gzrdvT5kpqAXKEQt&q=85&s=470435fd47f489a6e962741d921d6be8" alt="Partner Center의 Add New Award 대화 상자 스크린샷." width="462" height="250" data-path="images/gdk/services/Under60AchievementReward-XDP.png" />

11. **Add Reward**를 선택합니다.

12. 업적 목록에서 **Under 60 seconds** 업적이 여전히 선택되어 있는지 확인합니다. 업적을 잠금 해제하는 조건을 정의하려면 **Rules** 오른쪽의 **New**를 선택합니다.

13. **Rule Name**에 *Under 60 seconds rule* 을 입력합니다. 이 값은 플레이어에게 보이지 않으므로 원하는 대로 이름을 지정할 수 있습니다.

14. **Action**에서 **Min**을 선택합니다. 이는 선택된 스탯 인스턴스가 임계값 값 이하일 때 업적이 잠금 해제됨을 나타냅니다.

15. **Threshold**에 *60* 을 입력합니다.

16. **Select an Instance**를 선택하고 **FastestLap** 스탯 규칙을 선택한 다음 **Add Stat Instance**를 선택합니다.

17. 다음과 같이 업적에 대한 규칙을 만들려면 **Add Rule**을 선택합니다.

    <img src="https://mintcdn.com/microsoft-4404708b/gzrdvT5kpqAXKEQt/images/gdk/services/Under60AchievementRule-XDP.png?fit=max&auto=format&n=gzrdvT5kpqAXKEQt&q=85&s=09ee171845326525664f12f8e2c8d58d" alt="Partner Center에서 업적을 위한 Add New Rule 대화 상자 스크린샷." width="462" height="338" data-path="images/gdk/services/Under60AchievementRule-XDP.png" />

### 게임에서 이벤트를 보내는 코드 추가

이제 XBOX 서비스가 플레이어 시나리오를 업데이트하기 위해 사용할 `LapCompleted` 이벤트를 정의했으므로, 플레이어가 게임에서 레이싱 랩을 완료할 때 이벤트를 보내는 코드를 게임에 추가해야 합니다.

이벤트를 작성하려면 이벤트 이름을 `LapCompleted`로 하여 [XblEventsWriteInGameEvent](/reference/live/xsapi-c/events_c/functions/xbleventswriteingameevent) 함수를 호출합니다.

**Flat C API**

```cpp theme={null}
    HRESULT hr = XblEventsWriteInGameEvent(
        xboxLiveContext,
        "LapCompleted",
        R"({"DifficultyLevelId":100, "GameplayModeId":"Adventure"})",
        R"({"LocationX":1,"LocationY":1})"
    );
```

## 참고 항목

[이벤트 개요](/services/xbox-services/player-data/stats-leaderboards/event-based/events/live-game-events)


## Related topics

- [이벤트 기반 스탯 및 리더보드 포털 구성](/ko/services/xbox-services/player-data/stats-leaderboards/event-based/config/live-statslb-eb-config-nav.md)
- [이벤트 기반](/ko/services/xbox-services/player-data/stats-leaderboards/event-based/index.md)
- [이벤트 기반 리더보드 포털 구성](/ko/services/xbox-services/player-data/stats-leaderboards/event-based/config/live-eb-leaderboards-portal.md)
- [스탯 및 리더보드](/ko/services/xbox-services/player-data/stats-leaderboards/index.md)
- [구성](/ko/services/xbox-services/player-data/stats-leaderboards/event-based/config/index.md)
