그룹 모범 사례 #

그룹(“클랜"이라고도 함)은 게임 내에서 사회적 상호작용의 기본 구성 요소입니다. 사용자들은 모일 때마다 다른 사용자 및 게임과 더 가까운 유대관계를 만들 수 있습니다. 게임에서 그룹 플레이를 지원하기 위해 Nakama는 데이터 모델 및 API를 포함하는 코어 그룹 시스템을 제공합니다.

추가 사항:

  • Nakama가 그룹 및 구성원 자격을 모델링하는 방법
  • Nakama가 해당 데이터를 효율적으로 저장하는 방법
  • 개발자가 그룹을 사용하여 게임을 구축하는 방법

그룹 사용 #

Nakama 그룹 시스템은 규범적이지 않습니다. 그룹은 클랜, 길드, 팀 및 파벌과 같은 모양, 크기 및 특성이 다양한 커뮤니티를 나타내는데 사용할 수 있습니다.

그룹은 사용자의 모음이지만 그 용도는 사용자가 결정합니다. 목표가 무엇이든 그룹 시스템을 사용하여 구성원 자격, 관계 상태 및 관련 메타데이터를 기록할 수 있습니다.

그룹 모델링 #

Nakama에서 그룹은 그룹 자체와 _그룹 엣지_라는 사용자에 대한 그룹의 연결 이 두 부분으로 표시됩니다.

_그룹_은 다음과 같이 그룹 전체에 대한 세부 정보를 나타냅니다.

  • 그룹이 새 구성원에게 공개 또는 비공개인지 여부
  • 그룹의 최초 생성자 ID(생성자의 현재 구성원 자격과 무관)
  • 그룹의 최대 구성원 수(기본값: 100)
  • 사용자 지정 메타데이터

_그룹 엣지_는 그룹과 사용자 간의 관계를 나타냅니다. 이러한 관계에 대해 Nakama는 방향 그래프의 개념을 기반으로 사용합니다. 방향 그래프의 엣지와 마찬가지로 그룹 엣지는 사용자와 그룹 간의 연결을 나타냅니다. 각 엣지에는 방향이 있기 때문에 그룹 구성원 자격은 쌍으로 표시됩니다. 즉, 사용자 대 그룹 간 엣지 및 그룹 대 사용자 간 엣지입니다.

그룹에서 사용자를, 사용자에서 그룹을 가리키는 엣지를 보여주는 방향 그래프
그룹에서 사용자를, 사용자에서 그룹을 가리키는 엣지를 보여주는 방향 그래프

사용자와 그룹 간의 새로운 관계가 시작될 때마다 Nakama는 한 쌍의 그룹 엣지를 만듭니다. Null 관계는 이 시스템에서 표시되지 않습니다.

또한 각 엣지는 관계 상태를 기록합니다.

  • 요청된 구성원 자격(또는 귀하의 관점에 따라 보류 중인 요청)
  • 구성원 자격 수락됨
  • 관리자 또는 총괄 관리자인 구성원 자격
  • 금지됨

그룹 및 그룹 엣지는 새 그룹이 생성되는 순간부터 함께 제공됩니다. 새로운 그룹을 만들기 위해 Nakama는 다음과 같이 그룹을 표현합니다.

  • 그룹 자체
  • 그룹과 그룹 생성자(그룹의 첫 번째 총괄 관리자) 사이의 엣지
  • 생성자와 그룹 간의 엣지

이 중 하나라도 익숙하다면 Nakama가 친구 관계를 나타내는 방식을 알고 있을 수 있습니다. 친구와 마찬가지로, 그룹은 게임에 필요한 가장 일반적인 그룹 관계를 지원하는 동시에 게임의 고유한 특성을 처리할 수 있을 정도로 유연하도록 모델링되었습니다.

그룹 모델에는 저장 및 쿼리가 효율적이라는 또 다른 이점이 있습니다.

그룹 저장 및 확장 #

데이터베이스에서 Nakama는 그룹 및 그룹 엣지를 간결하게 표현합니다. 이 표현은 그룹의 모든 구성원 또는 사용자의 모든 그룹을 쿼리하는 것과 같은 일반적인 작업을 빠르고 효율적이며 확장 가능하도록 조정되었습니다.

그룹에 대한 스키마의 경우 다음으로 구성된 기본 키를 사용합니다:

  • 그룹의 만료 시간 (disable_time)
  • 언어 (lang_tag)
  • 그룹과 연결된 엣지 수 (edge_count)
  • 고유 ID (id)

이 기본 키는 언어가 같은 큰 활성 그룹이 물리적으로 서로 가깝게 저장되도록 합니다. 이렇게 하면 사용자가 가입할 그룹을 찾을 때 사용하는 가장 일반적인 쿼리의 속도가 빨라집니다. 또한 Nakama는 가장 큰 그룹과 최근 활동이 있는 그룹에 대한 쿼리 속도를 높이기 위해 구성원 자격 번호와 마지막 업데이트 시간을 인덱싱합니다.

그룹 엣지의 경우 기본 키는 다음으로 구성됩니다.

  • 사용자 또는 그룹 ID
  • 목적지 ID
  • 구성원 자격 요청 보류 또는 관리자 구성원 자격과 같은 관계의 상태
  • 카운터

이 기본 키는 사용자의 그룹 구성원 자격이 구성원 자격 유형 및 보존 기간에 가깝게 함께 저장되도록 합니다. 그리고 사용자와 그룹 간 관계의 양방향이 별도의 행으로 저장되기 때문에 그룹의 모든 구성원이 구성원 자격의 유형과 보존 기간에 대해 함께 가깝게 저장됩니다.

모든 그룹에는 이러한 레코드가 있습니다. 새로 생성되는 그룹은 다음을 위해 각각 하나씩 최소 세 개의 데이터베이스 행으로 시작합니다.

  • 그룹 자체
  • 그룹과 생성자 간의 엣지
  • 생성자와 그룹 간 엣지

이것이 애플리케이션에 특정한 사회적 관계를 구축하는 기반이 됩니다.

그룹을 사용하여 개발 #

Nakama의 그룹 시스템은 다양한 소셜 활동에서 귀하와 귀하의 사용자를 지원합니다. 그룹 기능을 최대한 활용하려면 다음 모범 사례를 따르십시오.

기본값은 바꿀 수 있음 #

기본적으로 그룹은 100명의 구성원(max_count)으로 제한되지만 변경할 수 없는 제한은 아닙니다. 일반적으로 최대 사용자 수를 늘리거나 줄일 수 있을 뿐만 아니라 그룹별로도 늘리거나 줄일 수 있습니다.

따라서 목적에 따라 다양한 크기의 그룹을 사용할 수 있습니다. 예를 들어, max_count리그를 나타내는 그룹의 경우 늘리고 개별 팀 또는 분대를 나타내는 그룹의 경우 줄일max_count 수 있습니다. 특정 그룹의 경우 크기 제한을 동적으로 변경할 수도 있습니다. 예를 들어, 어려운 작업을 완료한 그룹의 경우 하나씩 max_count을(를) 늘려 보상할 수 있습니다.

메타데이터를 사용하여 새로운 기능 계층화 #

Nakama의 그룹은, Nakama의 그룹 구현이 아주 작은 것처럼 보이지만 재미있고 유능한 사회적 상호 작용을 개발하기 위한 출발점입니다. 자체 그룹 시스템을 구축하는 것보다 JSONB metadata 필드를 사용하여 정교한 그룹 기능을 더 빠르게 개발할 수 있습니다. 가시성 및 권한과 같은 몇 가지 예를 생각하십시오.

추가 메타데이터가 없는 경우 그룹에는 하나의 바이너리 개인 정보 설정만 있습니다. 새 구성원에게는 공개되고 새 구성원에게는 비공개입니다. 그러나 추가 메타데이터를 사용하면 더 미묘한 개인 정보 구분을 추가할 수 있습니다. 예를 들어, 단일 부울 visibility 필드를 메타데이터에 추가하면 더 넓은 범위의 그룹 개인정보 보호설정에 대한 기반을 만들 수 있습니다.

visibility
Visible (true)Invisible (false)
stateOpen (0)Public drop-in groupsJoin-by-secret-link groups
Closed (1)Invite-only groupsPrivate groups

가시성과 마찬가지로 그룹에 추가할 수 있는 또 다른 계층은 역할 또는 권한입니다. 기본적으로 Nakama는 그룹의 구성원에게 총괄 관리자, 관리자 및 구성원과 같은 대략적인 역할 집합을 제공합니다. 그러나 다른 사항이 있습니다.

메타데이터를 서버 런타임 코드에 연결하면 역할과 권한의 범위를 자유롭게 확장할 수 있습니다. 메타데이터를 사용하여 총괄 관리자, 관리자 또는 구성원 역할에 관계없이 등급, 권한 있는 구성원(예: 중재자) 또는 그룹 구성원에게 부여할 세분화된 권한을 생성할 수 있습니다. 이면에서, 서버 런타임 코드는 특수 nil ID를 사용하여 그룹 대신 작업을 수행하고 사용자 권한을 기반으로 작업을 트리거할 수 있습니다.

예를 들어, 그룹 메타데이터에는 그룹의 새 구성원을 수락하거나 기존 구성원을 쫓아낼(추방할) 수 있는 사용자를 위한 경비원 역할이 있을 수 있습니다. 이 역할에 대한 metadata 그룹은 다음과 같을 수 있습니다:

1
2
3
4
5
6
7
{
  "roles": {
    "2c0c8e80-fcbc-4b61-901a-dace129f45f5": ["bouncer"],
    "000d8152-3258-457b-905b-05a9223c5c8c": ["bouncer"],
    "b5f5d399-340c-460a-a29a-3720c711a82f": []
  }
}

이 메타데이터를 사용하면 경비원 역할이 있는 사용자에게만 표시되는 그룹 구성원을 관리할 수 있는 사용자 인터페이스를 구축할 수 있습니다. 서버에서 특정 이벤트(그룹 사용자 추가 또는 추방 이벤트) 전에 사용자 지정 동작을 등록할 수 있습니다. 이 이벤트는 경비원에 의해 시작된 경우에만 완료됩니다(즉, roles[userId].includes('bouncer')이(가) true인 경우).

metadata 필드는 현재 Nakama가 제공하는 지원 스캐폴드로 게임을 구축할 때 중요합니다.

다른 Nakama 시스템을 사용하여 그룹 구성 #

그룹 metadata 필드로 그룹을 확장할 수 있을 뿐만 아니라 다른 Nakama 시스템에 그룹을 연결할 수 있습니다.

일부 Nakama 시스템은 그룹 전용 채팅 대화와 같이 명확하게 정의된 방식으로 그룹과 함께 작동합니다. Nakama는 그룹 구성원 자격을 고려하여 그룹 채팅에 참여할 수 있는 사용자를 결정할 수 있습니다.

또한 다른 Nakama 시스템 및 게임 시스템을 사용하여 그룹을 구성할 수 있는 방법은 매우 많습니다. 몇가지 예:

  • 순위표 레코드에는 소유자 ID가 있습니다. 일반적으로 이것은 사용자 ID지만 대신 그룹 ID를 사용하여 팀 또는 파벌의 결과 순위를 지정할 수 있습니다.
  • 실시간 파티는 현재 온라인 상태인 그룹 구성원의 하위 집합으로 구성할 수 있습니다.
  • 매치메이킹 속성에는 임의의 필드가 포함될 수 있습니다. 사용자의 그룹 ID를 매치메이킹 속성으로 제출하고 상호 그룹 구성원을 포함하는 매치업을 우선하는 쿼리를 사용할 수 있습니다.

그룹 시스템을 고립시키지 마십시오. 이는 게임에서 그룹 상호 작용의 끝이 아니라 시작입니다.

추가 사항 #

실제 게임에서 그룹을 보려면 Pirate Panic 튜토리얼의 Clans 섹션을 참조하세요.