> ## Documentation Index
> Fetch the complete documentation index at: https://docs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 전체 플레이어 세그먼트에 대한 일괄 작업

> 대상 세그먼트의 모든 플레이어에게 보상 지급과 같은 하나 이상의 일괄 작업을 실행하는 PlayFab 작업을 만드는 자습서입니다.

이 자습서에서는 세그먼트의 모든 플레이어에게 하나 이상의 작업을 수행하는 태스크를 만드는 데 필요한 단계를 안내합니다.

태스크는 모든 게임의 라이브 운영에서 매우 중요한 부분입니다. 태스크는 플레이어와 소통할 수 있는 강력한 도구 세트를 제공합니다.

예를 들면 다음과 같습니다.

* 지난 2주 동안 로그인한 모든 플레이어에게 특별한 새해 선물을 지급합니다.
* 지난주에 돈을 지출한 플레이어에게 지출 등급에 따라 보상을 지급합니다. 많이 지출할수록 더 가치 있는 선물을 받습니다.
* 최근 게임 버그의 영향을 받은 모든 플레이어의 손상된 플레이어 상태를 수정합니다.

이 자습서에서는 **Unicorn Battle Sample App**을 기반으로 **2,725 XP**를 초과하는 모든 플레이어에게 특별한 선물을 지급합니다.

## 필수 구성 요소

이 자습서를 실행하려면 Unicorn Battle Sample App을 설치해야 합니다. 자세한 내용은 [블로그](https://blog.playfab.com/blog/check-out-unicorn-battle)에서 확인하거나, [GitHub 리포지토리](https://github.com/PlayFab/UnicornBattle)로 바로 이동하여 해당 지침을 따르세요.

![Unicorn Battle - 시작 화면](https://mintcdn.com/microsoft-4404708b/YzmQFdAfhA-NTCPa/images/playfab/data-analytics/acting-data/tutorials/unicorn-battle-launch-screen.webp?fit=max\&auto=format\&n=YzmQFdAfhA-NTCPa\&q=85\&s=682e9a99bb6293229a452095255ce2f2)

캐릭터를 최소 **레벨 2**까지 올리려면 전투를 *여러 번* 플레이해야 합니다. 레벨 2는 **2,725 XP**에 도달하면 달성됩니다.

![Unicorn Battle - 레벨 2](https://mintcdn.com/microsoft-4404708b/YzmQFdAfhA-NTCPa/images/playfab/data-analytics/acting-data/tutorials/unicorn-battle-level-two.webp?fit=max\&auto=format\&n=YzmQFdAfhA-NTCPa\&q=85\&s=0f47eb0af3bb618e2aa449df163305f0)

## 1단계 - 세그먼트 만들기

첫 번째 단계는 이 작업의 영향을 받을 플레이어 그룹을 정의하는 세그먼트를 만드는 것입니다. 이 경우 **2,725 XP**를 초과하는 모든 플레이어로 정의되는 **High XP Segment**를 만들어야 합니다.

* 왼쪽 메뉴에서 **PlayStream**을 선택합니다.
* **Segments** 탭을 선택합니다.
* 그런 다음 **New Segment** 버튼을 선택합니다.
* **Segment Name**을 **High XP Players**로 지정합니다.
* **Total\_XP Gained**라는 **Statistic Value**가 **2725**보다 큰 **Player**로 정의합니다.

> [!NOTE]
>
> **참고:** 현재 예약된 태스크 시스템은 세그먼트당 초당 10\~15개의 태스크를 처리할 수 있습니다. 세그먼트를 설계할 때는 세그먼트의 크기와 태스크 실행 시간을 미리 계획하세요. 태스크 실행 시간에는 제한이 없지만, 특정 기간 내에 태스크를 실행해야 하는 경우 세그먼트의 크기를 적절하게 조정해야 합니다.

![Game Manager - PlayStream - Segments - High XP Players](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/game-manager-segments-high-xp-players.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=277244d7f9813aa8821acc626b4a903a)

## 2단계 - 이 세그먼트에 대한 태스크 만들기

* **Segments** 탭을 선택합니다.
* 그런 다음 \*\*RUN TASK …\*\*를 선택합니다.

![Game Manager - PlayStream - Segments - Run Task](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/game-manager-segments-run-task.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=82870774c3122881a0419e880078401d)

그러면 **Servers**->**Tasks** 탭의 **Create Task** 보기로 이동하며, 선택한 세그먼트를 기반으로 다양한 필드가 미리 채워집니다.

![Game Manager - Servers - Task - Create Task](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/game-manager-servers-task-create-task.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=155bf1e0a504d077fc5aeea920791f65)

## 3단계 - 태스크에 작업 추가

다음으로 태스크 설정을 완료할 수 있습니다.

* 이름을 **Reward High XP Players**로 변경합니다.
* 설명을 추가합니다: **Give a gift to Players who are level 2 or higher**.
* **ADD ACTION**을 선택합니다.
  * 제공된 필드에 **Grant virtual currency**를 입력합니다.
  * **Virtual Currency** 코드: **GM**(**Gems**의 약어).
  * 금액: **20**
* 지금은 예약을 **Manually**로 설정된 상태로 둡니다.
* **SAVE AND RUN** 버튼을 선택하여 태스크를 실행합니다.

![Game Manager - Servers - Task - Add Action - Save and Run](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/game-manager-servers-task-add-action-save-and-run.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=88be2126823b5296a972acebe78fb0e8)

## 4단계 - 태스크 모니터링

**Tasks** 보기에 실행 중인 태스크가 표시됩니다. 처음에는 태스크 상태가 **InProgress**이지만, 세그먼트가 작기 때문에 곧 **Succeeded**로 변경됩니다.

![Game Manager - Servers - Tasks - Task Succeeded](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/game-manager-servers-tasks-task-succeeded.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=f947e3bac92c4b78e3dd01f55d9a1ca3)

이제 태스크 실행 세부 정보를 확인해 보겠습니다. 이전에 실행한 **Tasks** 목록에서 완료된 태스크를 선택합니다. 다음과 같은 중요한 정보를 확인할 수 있습니다.

* 처리된 플레이어 수
* 태스크가 시작된 시간
* 완료하는 데 걸린 시간
* 시작 시 사용된 매개 변수
* 태스크를 실행한 사람
* 수동으로 예약되었는지 여부 등

태스크가 아직 진행 중인 경우 **Task Instance Detail** 보기에서 진행률과 예상 남은 시간을 확인할 수 있습니다.

![Game Manager - Servers - Tasks - Task Instance Details](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/game-manager-servers-tasks-task-instance-details.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=6a29866408f6240c680cc1a48d0d0130)

태스크가 성공적으로 실행되었는지 확인하려면 다음을 수행합니다.

* **Players** 탭으로 이동합니다.
* **Player**를 선택합니다.
* 그런 다음 **Event History** 탭을 선택합니다.
* 목록의 가장 최근 이벤트는 **player\_virtual\_currency\_balance\_changed**여야 하며, **Player**의 젬이 **20**만큼 증가한 것으로 표시되어야 합니다.

> [!NOTE]
>
> 이 이벤트를 확장하여 세부 정보를 볼 수 있습니다.

![Game Manager - Event History - Event Detail](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/game-manager-event-history-event-detail.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=8f5be92d094f953e458edc23c05339b9)

## 다음 단계

이 자습서에서는 세그먼트의 모든 플레이어에게 작업을 수행하는 단계를 소개했지만, 태스크로 할 수 있는 일은 훨씬 더 많습니다.

시도해 볼 수 있는 몇 가지 아이디어는 다음과 같습니다.

### 태스크 예약

태스크를 수동으로 실행할 필요는 없습니다. 태스크가 *반복적으로* *자동* 실행되도록 예약할 수 있습니다. 예를 들어 지난 24시간 동안 게임을 플레이한 모든 플레이어의 세그먼트를 만든 다음, 매일 예약된 태스크를 실행하여 해당 플레이어에게 XP 부스트를 제공할 수 있습니다.

![Game Manager - PlayStream - Segments - 24시간 내 플레이어](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/game-manager-segments-players-in-24-hours.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=011c1636bdcf356fef0958937679cdb6)

![Game Manager - Servers - Tasks - 예약된 태스크](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/game-manager-servers-tasks-scheduled-task.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=b818b7055457a8d9e13d6128d9e0e31b)

### 각 플레이어에 대해 CloudScript 실행

일괄 작업의 가장 강력한 용도는 각 플레이어에 대해 임의의 CloudScript 함수를 실행하는 것입니다. 이 CloudScript는 아이템 및 통화 지급, 플레이어 데이터 검사 및 변경 등 PlayFab 서버 API가 할 수 있는 모든 작업을 수행할 수 있습니다.

예를 들어 매주 재설정되는 이벤트 순위표가 있고, 모든 플레이어를 대상으로 재설정 전 *마지막* 이벤트 값을 기준으로 보상을 지급하려고 한다고 가정해 보겠습니다. 아래 제공된 예제는 **Unicorn Battle**을 사용합니다.

1. 매주 재설정되고 집계 방법 **Last**를 사용하는 새 통계 **Event\_QuestsCompleted**를 만듭니다.

   ![Players - Leaderboards - Edit Leaderboard](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/players-leaderboards-edit-leaderboard.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=dc418906c884b0c685d0a4d05393dd7a)

2. `Total_QuestsCompleted`가 변경될 때마다 이 `Event_QuestsCompleted` 통계를 증가시키는 새 PlayStream 작업을 만듭니다.

   ![PlayStream - Event Actions - Edit Event Action](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/playstream-event-actions-edit-event-action.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=7f0d65c83146783af200454981eec9c6)

3. 일괄 작업 태스크에서 호출할 CloudScript 함수를 작성합니다. 이 함수는 플레이어를 순회하며 마지막 값을 기준으로 보상을 지급합니다.

```javascript theme={null}
// this function will be called as a bulk action by a scheduled task for players in a segment
handlers.GiveTieredReward = function (args, context) {
    var profile = context.playerProfile;

    var statVersion = 0;        // set to whatever version you need to use

    var getStatRequest = {};
    getStatRequest.PlayFabId = profile.PlayerId;
    getStatRequest.StatisticNameVersions = [{ "StatisticName": "Event_QuestsCompleted", "Version": statVersion }];

    try {
        getStatRequest.PlayerResult = server.GetPlayerStatistics(getStatRequest);
    } catch (e) {
    };

    if (getStatRequest.PlayerResult && getStatRequest.PlayerResult.Statistics.length > 0) {
        getStatRequest.lastScore = getStatRequest.PlayerResult.Statistics[0].Value
    }

    if (getStatRequest.lastScore && getStatRequest.lastScore > 2) {
        // give gift to all players with more than 2 quests completed in last event
        // in a real event we would want to use a lookup table of gifts
        // but here we are just hard-coding it
        var giftRequest = {};
        giftRequest.PlayFabId = profile.PlayerId;
        giftRequest.ItemIds = ["CrystalKey"];
        giftRequest.grantResult = server.GrantItemsToUser(giftRequest);
        return giftRequest;
    } else {
        return getStatRequest;
    }
}
```

4. 새 CloudScript 버전을 **Live**로 설정하고, 모든 플레이어에 대해 `GiveTieredReward` 함수를 호출하는 새 태스크를 만듭니다. 태스크를 **Save**하고 **Run**하는 것을 잊지 마세요.

   ![Servers - Tasks - New Scheduled Task](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/servers-tasks-new-scheduled-task.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=984b0ca050712fd0ad357ed1aa8365dd)

5. 이 태스크의 이벤트가 PlayStream 이벤트 디버거에 표시되는 것을 확인할 수 있습니다.

   ![PlayStream - Dashboard - Event Debugger](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/playstream-dashboard-event-debugger.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=aed7ba302609d3de83967a15e6ffaff4)

6. 플레이어 트리거 작업으로 실행된 CloudScript 이벤트를 선택하면(타임스탬프 선택) 각 플레이어에 대한 CloudScript 실행의 자세한 결과를 볼 수 있습니다. 여기에는 CloudScript 실행 시점의 플레이어 프로필 스냅숏과 같은 유용한 진단 정보가 포함됩니다.

   ![PlayStream - Dashboard - Raw Event JSON](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/playstream-dashboard-raw-event-json.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=02ea8cca957596e793448dfa583d7c0c)


## Related topics

- [플레이어 세그먼트](https://docs.xbox.com/ko/services/playfab/player-progression/player-data/player-segments.md)
- [세그먼트 구성](https://docs.xbox.com/ko/services/playfab/live-service-management/game-configuration/segmentation/segmentation-configuration.md)
- [플레이어 세그먼트 구성](https://docs.xbox.com/ko/services/playfab/player-progression/player-data/player-segment-configuration.md)
- [세그먼트의 플레이어 내보내기 자습서](https://docs.xbox.com/ko/services/playfab/live-service-management/game-configuration/segmentation/segmentation-export-players-in-a-segment.md)
- [Economy V2 타깃 오퍼](https://docs.xbox.com/ko/services/playfab/economy-monetization/economy-v2/player-segmented-monetization/targeted-offers.md)
