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

# 크로스 네트워크 멀티플레이어 구현 예시

> 매치메이킹, 전용 서버, 채팅 및 XR-007 준수를 다루는 MOBA 스타일 XBOX 타이틀의 크로스 네트워크 멀티플레이어 구현 예시입니다.

이 항목에서는 전통적인 멀티플레이어 온라인 배틀 아레나(MOBA) 게임의 크로스 네트워크 기능과 흐름을 보여 주는 예시 시나리오에 대해 설명합니다. 하나의 가능한 설계 및 구현 경로를 제시합니다. 이 항목은 [XR-007: 크로스 네트워크 플레이, 데이터 사용 및 컴패니언 앱 상호작용](https://developer.microsoft.com/en-us/games/xbox/docs/gdk/xr007)을 뒷받침합니다.

이 예시 시나리오에서 타이틀은 다음 멀티플레이어 기능을 지원합니다.

| 기능            | 설명                                                                                                                          |
| ------------- | --------------------------------------------------------------------------------------------------------------------------- |
| 사용자 지정 매치메이킹  | 이 타이틀은 사용자 지정 매치메이킹 서비스를 구현합니다. 이 서비스는 먼저 (선택적으로) 플레이어를 팀으로 매칭한 다음 팀과 플레이어를 함께 매칭합니다.                                       |
| 전용 서버         | 타이틀의 모든 게임플레이는 전용 서버에서 실행됩니다. 모든 트래픽(채팅 트래픽 포함)도 이 서버를 통해 라우팅됩니다.                                                           |
| 사용자 지정 순위표    | 타이틀 서비스는 플레이어 진행 상황에 대한 심층 정보를 포함하는 사용자 지정 순위표를 구현합니다.                                                                      |
| 여러 게임 모드 및 설정 | 이 타이틀은 협동 대 팀 기반과 같은 여러 게임 모드를 지원합니다. 플레이어는 이러한 모드에 대해 맵, 게임 크기, 규칙 및 기타 설정을 구성할 수 있습니다.                                    |
| 인게임 통화        | 이 타이틀은 구매 가능한(프리미엄) 인게임 통화가 있는 인게임 상점을 제공합니다. 플레이어는 이 통화를 사용하여 팀용 파워업을 구매할 수 있습니다. 플레이어는 또한 자신의 캐릭터를 위한 외형 아이템을 구매할 수 있습니다. |
| DLC           | 구매 가능한 다운로드 콘텐츠(DLC)에는 새로운 맵과 추가 캐릭터가 포함됩니다.                                                                                |

## 타이틀 서비스

이 예시 시나리오의 사용자 지정 타이틀 서비스 중 하나는 인증 서비스입니다. 이 인증 서비스는 XBOX Live(또는 기타 멀티플레이어 네트워크) 계정을 타이틀별 플레이어 계정에 연결하는 계정 연결에 사용됩니다. 플레이어가 처음 인증 서비스에 연결하면 계정 연결이 자동으로 수행되고 새로운 크로스 네트워크 플레이어 ID가 만들어집니다.

XBOX Live의 경우 플레이어의 XUID는 타이틀별 계정에 연결된 고유한 플레이어 식별자로 사용됩니다. XUID 액세스는 사용 전에 승인을 받아야 하며 developer account manager(DAM)와 논의해야 합니다. 타이틀별 계정에는 전역 고유 식별자(GUID)가 있어 모든 타이틀 서비스가 네트워크 원본 및 저장된 플레이어 메타데이터와 관계없이 플레이어를 처리할 수 있습니다. 이 예시 시나리오에서 멀티플레이어 네트워크 및 기본 게임플레이 플레이어 통계는 이 계정에 저장됩니다.

<Note>타이틀 서비스는 타이틀별 계정의 멀티플레이어 네트워크 정보를 사용하여 멀티플레이어 기능이 XBOX Live 플레이어에게만 제한될 수 있도록 합니다.</Note>

## 타이틀 흐름

일반적인 멀티플레이어 게임의 경우, 크로스 네트워크 기능에 대한 준수 흐름은 플레이어가 멀티플레이어 모드에 진입할 때 시작됩니다. 이 예시 시나리오에서 타이틀은 다음 단계를 수행합니다.

1. 권한 유효성 검사.

   멀티플레이어 세션을 시작하기 전에 타이틀은 멀티플레이어 권한(254 및 189)의 유효성을 검사합니다. 권한이 거부되면 타이틀은 멀티플레이어 모드에 진입하지 않습니다. 타이틀은 또한 통신 권한(252)을 확인하고 그에 따라 음성 및 텍스트 채팅을 종료하거나 비활성화해야 합니다.

2. 크로스 네트워크 권한 유효성 검사.

   이 예시 시나리오의 경우 타이틀은 크로스 네트워크 게임플레이를 기본 매치메이킹 경험에 통합합니다. 플레이어가 매치메이킹 경험에 진입하면 타이틀은 크로스 네트워크 플레이 권한(185)의 유효성을 검사합니다. 권한이 거부되면 XBOX Live 내에서의 매치메이킹만 가능합니다. 플레이어가 처음으로 크로스 네트워크 게임플레이에 배치될 때 타이틀은 크로스 네트워크 게임플레이가 활성 상태라는 알림을 표시합니다.

3. 팀 매치메이킹.

   타이틀 매치메이킹 서비스는 매치메이킹 규칙에 따라 크로스 네트워크 플레이어로 팀을 구성합니다.

4. 팀 또는 로비 Multiplayer Session Directory(MPSD) 세션 만들기 및 참가.

   타이틀 매치메이킹 서비스는 XBOX Live에 대한 서비스 간 호출을 통해 Multiplayer Session Directory(MPSD) 로비 세션을 만듭니다. 모든 XBOX Live 플레이어는 이 로비 세션에 참가합니다. 이 서비스는 사용자 지정 속성을 사용하여 XBOX Live를 사용하지 않는 세션 내 플레이어에 대한 힌트를 추가로 제공합니다. 그런 다음 이러한 힌트는 다음 단계에서 세션 상태를 설정하기 위한 클라이언트 논리에서 사용할 수 있습니다.

5. 팀 또는 로비 MPSD 세션 설정.

   XBOX Live 클라이언트는 로비 세션을 활동 세션으로 설정합니다. 세션 참가 가능 여부와 닫힘 상태는 크로스 네트워크 플레이어 상태에 따라 설정되어야 합니다. XBOX Live 플레이어는 크로스 네트워크 팀에 남아 있는 한 이 세션에 남아 있습니다. 세션이 가득 차면(또는 흐름에서 나중에 가득 차면) 서비스나 로비 중재자가 세션을 닫힘으로 설정해야 합니다. 더 이상 플레이어 슬롯이 없는 활동 세션은 절대 참가 가능해서는 안 됩니다.

6. 팀 로비.

   팀 로비에는 XBOX Live 플레이어와 다른 멀티플레이어 플랫폼의 플레이어가 모두 있습니다. 음성 채팅은 사용자 지정 타이틀 서비스를 통해 XBOX Live 플레이어 간에 활성화됩니다. 모든 플레이어(XBOX Live/XBOX Live 및 XBOX Live/XBOX Live를 사용하지 않는 플레이어) 간의 음성 채팅은 필요한 모든 개인 정보 보호 및 사용 권한 확인의 유효성 검사 후에만 활성화됩니다. XBOX Live를 사용하지 않는 친구 관계의 경우 타이틀은 XBOX Live를 사용하지 않는 친구의 네트워크 친구 관계 데이터를 사용합니다. 팀 로비에서 XBOX Live 플레이어와 XBOX Live를 사용하지 않는 플레이어는 타이틀 계정 ID로 고유하게 식별됩니다. 모든 플레이어 식별자에는 게이머태그와 다른 멀티플레이어 네트워크에 해당하는 플레이어 이름도 표시됩니다.

   다음 스크린샷은 로비 내 플레이어 명단 UI의 예시를 보여 줍니다.

   <img src="https://mintcdn.com/microsoft-4404708b/ktEik-YaZoen6Rhy/images/gdk/services/xr007-crossnetworkroster.png?fit=max&auto=format&n=ktEik-YaZoen6Rhy&q=85&s=19bdb24b8a41f698f6e8f56083dbac61" alt="크로스 네트워크 명단 UI를 보여 주는 스크린샷" width="482" height="678" data-path="images/gdk/services/xr007-crossnetworkroster.png" />

   로비 UI에서 팀 리더는 다음 단계를 위한 매치 속성(레벨 또는 사용자 지정 규칙 등)을 선택하여 다른 팀과의 게임 세션을 찾은 다음 매치를 시작합니다.

7. 게임 세션 매치메이킹.

   기존 크로스 네트워크 팀은 팀 리더가 설정한 추가 매치 속성과 함께 매치메이킹에 제출됩니다. 이러한 속성은 매치에 대한 두 팀의 새로운 세트에서 가장 적합한 매치 결과를 식별하는 데 사용됩니다. 이 시점에서 매치 서비스는 또한 두 팀에 대한 전용 서버를 식별합니다.

8. 게임 MPSD 세션 만들기 및 참가.

   익명 게임 세션 매치메이킹의 결과는 XBOX Live에 대한 서비스 간 호출을 통해 매치 서비스(또는 전용 서비스)가 만든 MPSD 게임 세션입니다. 모든 XBOX Live 플레이어는 이 게임 세션에 참가하고, 서비스는 사용자 지정 속성을 사용하여 XBOX Live를 사용하지 않는 세션 내 플레이어에 대한 힌트를 추가로 제공합니다. 그런 다음 이러한 힌트는 세션 상태를 설정하기 위한 클라이언트 논리에서 사용될 수 있습니다.

9. 전용 서버에 연결.

   마지막 단계에서 모든 클라이언트는 전용 서버에 안전하게 연결하여 크로스 네트워크 게임플레이를 시작합니다. 멀티플레이어 네트워크 간의 모든 트래픽은 전용 서버를 통해 라우팅되어야 합니다. 피어 투 피어 연결은 허용되지 않습니다.

10. 게임플레이 완료.

    게임플레이 매치가 완료된 후 팀은 다음 표에 표시된 작업을 수행하도록 선택할 수 있습니다.

    | 작업       | 설명                                                                                        |
    | -------- | ----------------------------------------------------------------------------------------- |
    | 매치 재시작   | 플레이어는 서버에 연결된 상태로 남아 있고 MPSD 게임 세션에 남아 있습니다. 플레이어는 새로운 게임플레이 매치를 시작합니다.                   |
    | 새 상대 찾기. | 플레이어는 서버에서 연결을 끊고 MPSD 게임 세션에서 나갑니다. 플레이어는 로비 세션에 남아 있으며 다음 라운드의 매치메이킹을 위해 로비 화면으로 돌아갑니다. |

## 세션 관리

모든 XBOX 요구 사항을 준수하기 위해 타이틀은 다음 표에 표시된 대로 XBOX Live 플레이어에 대해 두 개의 MPSD 세션을 만듭니다.

| 세션    | 설명                                                                                                                                                                                                                                               |
| ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| 로비 세션 | 이 세션은 XBOX Live에 대한 서비스 간 호출을 통해 매치메이킹 서비스에서 만들어집니다. 만들 때 세션에는 팀의 모든 XBOX Live 플레이어에 대한 예약이 포함됩니다. 플레이어가 초대를 보내거나 진행 중에 참가할 수 있는 세션입니다. 초대와 진행 중 참가는 XBOX Live 시스템을 사용해야 하며 네트워크 간에 이루어질 수 없습니다. 따라서 모든 XBOX Live 플레이어는 이 세션을 자신의 활동 세션으로 설정합니다. |
| 게임 세션 | 이 세션은 XBOX Live에 대한 서비스 간 호출을 통해 매치메이킹 서비스에서 만들어집니다. 여기에는 게임 세션의 모든 XBOX Live 플레이어(팀 전체)에 대한 예약이 포함되며 XBOX Live 플레이어의 멀티플레이어 활동을 추적하는 데 사용됩니다.                                                                                                   |

XBOX Live를 사용하지 않는 플레이어는 MPSD 세션에서 세션 구성원으로 직접 표시되지 않습니다. 타이틀은 다음 코드 예시에서 볼 수 있듯이 사용자 지정 세션 속성에서 그들의 존재만 추적합니다.

```
{{"name":"kumarplayer"},{"name":"spencerplayer"},{"name":"eliseplayer"}}
```

이 목록과 XBOX Live 세션 구성원을 사용하여 세션이 가득 찼는지 여부를 확인할 수 있습니다. 가득 찬 경우 올바른 동작을 위해 XBOX Live의 초대 및 진행 중 참가 기능을 비활성화해야 합니다. 플레이어(또는 서버)는 세션에서 `closed` 속성을 설정하여 이 기능을 비활성화합니다.

<Note>게임플레이에서 플레이어를 추적하는 데 사용되는 MPSD 세션은 XBOX 요구 사항을 준수하기 위해 `gameplay` 기능을 활성화해야 합니다.</Note>

## 플레이어 통신 차단 및 신고

타이틀의 플레이어 차단은 타이틀 수준에서 지원됩니다.

### XBOX Live 플레이어 차단

이 타이틀은 [XblPrivacyBatchCheckPermissionAsync](/reference/live/xsapi-c/privacy_c/functions/xblprivacybatchcheckpermissionasync)를 사용하여 멀티플레이어에 대한 권한을 확인합니다. 타이틀은 또한 이를 사용하여 다른 XBOX Live 플레이어와 채팅하고, XBOX Live를 사용하지 않는 플레이어/XBOX Live를 사용하지 않는 친구의 플레이어 클래스에 대해서도 사용합니다. 타이틀은 또한 [XGameUiShowPlayerProfileCardAsync](/reference/system/xgameui/functions/xgameuishowplayerprofilecardasync)를 통해 다른 플레이어의 프로필에 대한 액세스를 제공합니다. 플레이어는 플레이어 프로필 UI에서 다른 플레이어를 차단할 수 있습니다.

### XBOX Live를 사용하지 않는 플레이어 차단

이 타이틀은 XBOX Live를 사용하지 않는 플레이어와의 통신 차단을 지원하기 위해 인타이틀 차단 목록을 사용합니다. 이 목록은 타이틀 서비스에서 유지 관리되며 멀티플레이어 사용 권한을 확인합니다. 기본적으로 크로스 네트워크 채팅을 사용할 수 없습니다. XBOX Live를 사용하지 않는 플레이어는 다음 스크린샷에 표시된 대로 사용자 지정 타이틀 UI를 통해 타이틀에서 차단할 수 있습니다.

<img src="https://mintcdn.com/microsoft-4404708b/ktEik-YaZoen6Rhy/images/gdk/services/xr007-playercommblocking.png?fit=max&auto=format&n=ktEik-YaZoen6Rhy&q=85&s=a3e844b13d36e45906f7bbcb807d355c" alt="플레이어 통신 차단을 보여 주는 스크린샷" width="1300" height="731" data-path="images/gdk/services/xr007-playercommblocking.png" />

### XBOX Live 플레이어 신고

이 타이틀은 또한 플레이어 신고를 허용합니다. XBOX Live의 경우 플레이어는 플레이어 프로필 UI를 통해 다른 플레이어를 신고합니다. XBOX Live 시행 팀이 플레이어 신고를 처리합니다.

### XBOX Live를 사용하지 않는 플레이어 신고

XBOX Live를 사용하지 않는 플레이어의 경우 타이틀은 사용자 지정 신고 UI 흐름을 제공합니다. 타이틀은 타이틀에 대한 플레이어 신고를 그에 따라 처리하며 다른 멀티플레이어 네트워크의 지침을 기반으로 합니다.

## Microsoft Store

XBOX Live 및 기타 멀티플레이어 네트워크에서의 인게임 통화 구매는 타이틀 서비스에서 추적됩니다. 이 타이틀은 모든 타이틀 버전 간에 공유되는 가상 통화 지갑과 인게임 아이템 인벤토리를 제공합니다. 다음 표의 제한 사항은 XBOX Live가 아닌 타이틀 버전에 적용됩니다.

| 제한 사항        | 설명                                                                                                                                                                                                                 |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| 플레이어 스킨      | 플레이어는 인게임 통화를 통해서만 플레이어 스킨을 구매할 수 있습니다. 인게임 통화는 모든 네트워크에서 사용할 수 있는 통합 인게임 지갑에서 관리됩니다. 모든 플레이어 스킨은 모든 타이틀 버전에서 동일합니다.                                                                                               |
| 소모품          | 플레이어는 인게임 통화를 통해서만 소모품을 구매할 수 있습니다. 통화와 마찬가지로 소모품 아이템은 통합 인게임 인벤토리에서 관리됩니다.                                                                                                                                        |
| 다운로드 가능한 콘텐츠 | XBOX Live 플랫폼에서 다운로드 가능한 콘텐츠(새 맵 및 캐릭터 유형)는 Microsoft Store를 통해 관리됩니다. 다른 스토어의 사용 권한은 공유되지 않습니다. 모든 플레이어는 같은 맵에서 함께 플레이하려면 각각의 스토어에 유효한 사용 권한이 있어야 합니다. 일치하는 사용 권한이 없는 플레이어의 경우 구매되지 않은 캐릭터 유형은 표시되지만 플레이할 수 없습니다. |

## 도전 과제

이 타이틀은 플레이한 멀티플레이어 게임을 포함한 멀티플레이어 액션을 기반으로 하는 여러 도전 과제를 가지고 있습니다. 이(및 유사한) 도전 과제에 대한 도전 과제 진행에는 크로스 네트워크 멀티플레이어 게임 세션이 포함됩니다. 이 타이틀에는 크로스 네트워크 게임플레이에만 제한되는 도전 과제가 없습니다. XBOX One 제품군(또는 이후) 타이틀 도전 과제에 대한 도전 과제 진행은 다른 타이틀 버전의 게임플레이를 통해 가능합니다.

## 플레이어 진행 상황

플레이어 진행 상황은 모든 타이틀 버전 간에 공유됩니다. 사용자 지정 타이틀 계정에는 플레이어 진행 상황의 일부가 포함됩니다.

## 게임 DVR 및 방송

이 타이틀은 게임 DVR 및 스크린샷은 물론 크로스 네트워크 멀티플레이어 매치에서의 방송을 지원합니다.

## 순위표

이 타이틀의 순위표는 XBOX Live 순위표 이상의 광범위한 순위표 기능을 제공하는 타이틀 서비스를 통해 구현됩니다. 이 서비스는 여러 기본 순위표를 만들고 병렬로 업데이트합니다. 각 멀티플레이어 네트워크에 대한 순위표 하나와 모든 멀티플레이어 네트워크의 결과를 결합한 병합 순위표 하나입니다. 크로스 네트워크 멀티플레이어가 활성화되면 다음 스크린샷과 같이 병합 순위표가 표시됩니다.

<img src="https://mintcdn.com/microsoft-4404708b/ktEik-YaZoen6Rhy/images/gdk/services/xr007-leaderboard.png?fit=max&auto=format&n=ktEik-YaZoen6Rhy&q=85&s=eeecf23c0122c9a89fdd62c4762cc375" alt="병합된 순위표를 보여 주는 스크린샷" width="536" height="350" data-path="images/gdk/services/xr007-leaderboard.png" />

<Note>모든 플레이어는 멀티플레이어 로비에서와 같은 방식으로 표시됩니다.</Note>

플레이어가 크로스 네트워크 게임플레이 기능을 비활성화한 경우 XBOX Live만을 위한 순위표가 표시됩니다.

타이틀별 계정은 순위표 서비스에서 모든 플레이어를 내부적으로 식별하는 데 사용됩니다. XBOX Live 플레이어의 외부 식별자는 쿼리하는 타이틀 인스턴스에 따라 다릅니다.

* XBOX Live 타이틀 인스턴스에서는 XUID가 반환되고, 클라이언트는 조회를 수행하여 플레이어의 게이머태그 문자열을 결정합니다.

* XBOX Live가 아닌 타이틀 인스턴스에서는 플레이어의 게이머태그 또는 `DisplayName` 문자열이 반환됩니다. 서비스는 XBOX Live에 대한 서비스 간 호출에서 이 문자열을 검색하고 최대 4시간 동안 캐시합니다.


## Related topics

- [크로스 네트워크 멀티플레이어 구현 예시: MMO](/ko/services/xbox-services/multiplayer/concepts/live-console-xr007-mmo-example.md)
- [멀티플레이어 개념](/ko/services/xbox-services/multiplayer/concepts/live-multiplayer-concepts-nav.md)
- [XR-007 크로스 네트워크 플레이 — 멀티플레이어 구현](/ko/publishing/certification/xr/xr-007-multiplayer.md)
- [XR-007 크로스 네트워크 플레이 — MMO 구현 예제](/ko/publishing/certification/xr/xr-007-mmo.md)
- [크로스 플랫폼 멀티플레이어 설계 지침](/ko/services/xbox-services/multiplayer/overviews/multiplayer-design-guidance-cross-platform.md)
