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

# Game Saves PlayStream 이벤트

> 버전 확정, 충돌 해결, 알려진 정상 롤백 원격 측정 필드를 다루는 PlayFab Game Saves PlayStream 이벤트 참조입니다.

PlayFab Game Saves는 플레이어가 게임 데이터를 저장, 동기화, 관리하는 방식을 추적하는 데 사용할 수 있는 PlayStream 이벤트를 내보냅니다. 이러한 이벤트를 사용하여 세이브 활동을 모니터링하고, 충돌을 감지하며, 플레이어 기반 전체에서 크로스 디바이스 사용 패턴을 이해할 수 있습니다.

모든 Game Saves 이벤트는 `playfab.gamesave` 네임스페이스에서 `title_player_account` 엔티티에 대해 내보내집니다.

## 이벤트

### `gamesave_version_finalized`

게임 세이브 버전이 확정될 때마다 내보내집니다. 모든 파일이 업로드되고 버전이 완성됩니다. 이 이벤트는 세이브 활동을 추적하기 위한 기본 신호입니다.

| 필드                       | 유형         | 설명                                                                                           |
| ------------------------ | ---------- | -------------------------------------------------------------------------------------------- |
| `Version`                | `long`     | 확정된 게임 세이브의 버전 번호                                                                            |
| `FinalizedAt`            | `DateTime` | 버전이 확정된 시점의 타임스탬프                                                                            |
| `TotalSizeBytes`         | `long`     | 모든 파일을 포함한 확정된 버전의 총 크기                                                                      |
| `TotalFileCount`         | `int`      | 확정된 버전의 총 파일 수                                                                               |
| `NewFileCount`           | `int`      | 이 버전에서 추가된 새 파일 수                                                                            |
| `NewFilesSizeBytes`      | `long`     | 이 버전에서 추가된 새 파일의 크기                                                                          |
| `PlayerIdentityProvider` | `string`   | 플레이어가 사용한 ID 공급자(예: Steam, XBOX Live)                                                        |
| `DeviceType`             | `string`   | 세이브가 업로드된 디바이스 유형                                                                            |
| `IsGeneratedByRollback`  | `bool`     | 이 버전이 이전 버전으로 롤백하여 생성된 경우 `true`                                                             |
| `Conflict`               | `Conflict` | 이 버전이 충돌 해결의 일부로 확정된 경우 존재합니다. 그렇지 않으면 `null`. [충돌 해결](#scenario-conflict-resolution)을 참조하세요 |

**Conflict** (중첩된 개체, 충돌 해결 중에만 존재):

| 필드                   | 유형     | 설명                                                                                                                                                                         |
| -------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `IsWinner`           | `bool` | 플레이어의 로컬 변경 사항이 충돌에서 이겼는지 여부. 이벤트는 항상 클라이언트의 로컬 데이터에서 생성된 새 매니페스트에 해당합니다. `true`는 그 매니페스트가 정규 버전이 되었음을 의미하며, `false`는 기존 클라우드 버전이 정규 상태로 유지되면서 매니페스트가 롤백 지점으로 보존되었음을 의미합니다 |
| `ConflictingVersion` | `long` | 충돌 중이던 기존 클라우드 버전의 버전 번호                                                                                                                                                   |

### `gamesave_version_marked_known_good`

게임 세이브 버전이 명시적으로 "알려진 정상(known good)"으로 표시될 때 내보내집니다. 알려진 정상 버전은 신뢰할 수 있는 복원 지점 역할을 합니다. 플레이어 또는 타이틀이 잘못된 세이브 상태에서 복구해야 할 때 시스템이 롤백하는 버전입니다.

| 필드         | 유형         | 설명                |
| ---------- | ---------- | ----------------- |
| `Version`  | `long`     | 알려진 정상으로 표시된 버전   |
| `MarkedAt` | `DateTime` | 버전이 표시된 시점의 타임스탬프 |

***

## 시나리오

### 시나리오: 표준 크로스 디바이스 사용

일반적인 크로스 디바이스 흐름은 플레이어가 한 디바이스에서 저장하고 다른 디바이스에서 재개하는 것과 같습니다. PlayStream에서 이 패턴은 `Version` 번호가 증가하는 `gamesave_version_finalized` 이벤트의 시퀀스로 나타납니다.

**보이는 것:**

* 플레이어가 저장할 때마다 `gamesave_version_finalized` 이벤트가 발생하며, `DeviceType`과 `PlayerIdentityProvider`가 사용된 디바이스와 ID 공급자를 나타냅니다.
* `NewFileCount`와 `NewFilesSizeBytes`는 이전 버전과 비교하여 얼마나 많은 데이터가 변경되었는지 보여줍니다. `NewFileCount`가 0인 버전은 플레이어가 새로운 파일 콘텐츠 없이 버전을 확정했음을 의미합니다(예: 메타데이터 전용 업데이트).
* 일반 세이브의 경우 `Conflict`는 `null`이고 `IsGeneratedByRollback`은 `false`입니다.

**주의해서 볼 사항:**

* **플레이어당 저장 빈도**: 확정 이벤트의 비율을 추적하여 플레이어 참여도와 저장 행동을 이해합니다.
* **시간 경과에 따른 세이브 크기**: `TotalSizeBytes`와 `NewFilesSizeBytes`를 모니터링하여 저장 비용이나 동기화 시간에 영향을 미칠 수 있는 세이브 데이터의 예기치 않은 증가를 감지합니다.
* **디바이스 분포**: `DeviceType`을 집계하여 플레이어가 가장 자주 저장하는 플랫폼을 파악합니다.

### 시나리오: 충돌 해결

두 디바이스가 동일한 기본 버전에 대해 게임 세이브 버전을 확정할 때 충돌이 발생합니다. 예를 들어, 플레이어가 콘솔과 PC에서 동시에 오프라인으로 플레이한 다음 온라인 상태가 되었을 때 두 디바이스 모두 동기화를 시도할 수 있습니다.

**보이는 것:**

* 충돌 해결 중 클라이언트는 항상 로컬 파일을 새 매니페스트에 업로드하고 매니페스트를 확정합니다. 이 프로세스는 null이 아닌 `Conflict` 개체를 가진 단일 `gamesave_version_finalized` 이벤트를 생성합니다. 기존 클라우드 버전(이전 이벤트에서 이미 확정됨)은 새 이벤트를 생성하지 않습니다.
* `Conflict.IsWinner`는 플레이어의 로컬 변경 사항이 충돌에서 이겼는지 여부를 알려줍니다:
  * `true` — 플레이어가 **로컬 유지**를 선택했습니다. 새 매니페스트가 정규 버전이 되고, 이전 클라우드 버전은 대체됩니다.
  * `false` — 플레이어가 **원격 유지**를 선택했습니다. 새 매니페스트는 롤백 지점으로 보존되고(거부된 로컬 데이터를 포함), 기존 클라우드 버전이 정규 상태로 유지됩니다.
* `Conflict.ConflictingVersion`은 충돌 중이던 기존 클라우드 버전을 가리킵니다.

**주의해서 볼 사항:**

* **충돌율** — `Conflict`가 있는 `gamesave_version_finalized` 이벤트를 필터링합니다. 충돌율이 증가하면 플레이어가 동기화 없이 디바이스를 자주 전환하거나 타이틀의 세이브 케이던스가 불필요한 버전 충돌을 유발한다는 신호일 수 있습니다.
* **로컬 대 원격 선호도** — `IsWinner = true`(로컬 유지) 대 `IsWinner = false`(원격 유지) 비율을 비교하여 플레이어가 충돌을 어떻게 해결하는지 이해합니다. 한쪽으로 강하게 치우친다면 충돌 프롬프트의 UX 문제를 나타낼 수 있습니다.
* **크로스 디바이스 충돌 패턴** — 충돌 이벤트에서 `DeviceType`과 `PlayerIdentityProvider`를 사용하여 어떤 플랫폼 조합이 충돌에 가장 취약한지 이해합니다.

### 시나리오: 알려진 정상 및 롤백

"알려진 정상" 메커니즘을 사용하면 특정 버전을 신뢰할 수 있는 복원 지점으로 표시할 수 있습니다. 플레이어의 세이브가 손상되었거나 복구해야 하는 경우, 시스템은 가장 최근의 알려진 정상 버전으로 롤백하고 이를 기반으로 새 버전을 생성할 수 있습니다.

**보이는 것:**

* 버전을 복원 지점으로 지정할 때 `Version` 번호와 `MarkedAt` 타임스탬프가 포함된 `gamesave_version_marked_known_good` 이벤트가 발생합니다.
* 롤백이 발생하면 시스템은 `IsGeneratedByRollback = true`인 새 `gamesave_version_finalized` 이벤트를 내보냅니다. 이 새 버전의 콘텐츠는 알려진 정상 버전을 기반으로 하지만, 새로운 증가된 버전 번호를 갖습니다.
* 롤백이 충돌 해결의 일부로 트리거된 경우, 롤백으로 생성된 버전도 `Conflict` 데이터를 가질 수 있습니다.

**주의해서 볼 사항:**

* **롤백 빈도** — `IsGeneratedByRollback = true`인 `gamesave_version_finalized` 이벤트를 추적합니다. 타이틀의 잦은 롤백은 세이브 손상 문제나 타이틀의 세이브 로직 문제를 나타낼 수 있습니다.
* **알려진 정상 최신성** — `gamesave_version_marked_known_good`의 `Version`을 동일한 플레이어의 최신 확정된 `Version`과 비교합니다. 큰 격차는 롤백이 필요한 경우 플레이어가 상당한 진행 상황을 잃게 됨을 의미합니다.
* **롤백과 충돌 상관관계** — 롤백으로 생성된 버전이 자주 충돌 데이터와 함께 나타난다면, 그 패턴은 충돌 해결 전략이 부작용으로 롤백을 트리거하고 있음을 시사할 수 있습니다.


## Related topics

- [PlayFab의 PlayStream 이벤트 모델 참조](/ko/services/playfab/api-references/events/index.md)
- [엔터티 이벤트가 있는 PlayStream](/ko/services/playfab/data-analytics/ingest-data/playstream-with-entity-events.md)
- [Leaderboards with PlayStream and Telemetry](/ko/services/playfab/community/leaderboards/leaderboards-with-playstream-and-telemetry.md)
- [사용자 지정 태그를 사용하여 이벤트 사용자 지정](/ko/services/playfab/data-analytics/ingest-data/playstream-custom-tags.md)
- [PlayStream 및 Telemetry와 함께 사용하는 통계](/ko/services/playfab/player-progression/statistics/statistics-with-playstream-and-telemetry.md)
