Documentation index for AI agents

마스터 데이터 관리

GS2 마이크로서비스에 설정하는 마스터 데이터의 일반적인 사양에 대해

용어 정의

용어의미
모델 마스터마스터 데이터 에디터가 임시로 등록하는, 게임 플레이어별로 달라지지 않는 데이터
모델게임 내에서 사용하는, 게임 플레이어별로 달라지지 않는 데이터
프로퍼티모델을 바탕으로 작성한, 게임 플레이어별로 다른 데이터

게임을 구성하는 요소에는 소지 아이템의 파라미터나 퀘스트의 구성 데이터 등, 게임 플레이어별로는 달라지지 않는 데이터가 있습니다. 이러한 데이터를 GS2에서는 모델 이라고 부릅니다. 그리고 모델을 바탕으로 게임 플레이어가 소지하는 데이터가 된 것을 프로퍼티 라고 부릅니다.

일반적인 마스터 데이터는 GS2에서는 모델 에 해당하며, GS2에는 모델 마스터 라는 개념이 존재합니다. 모델 / 모델 마스터 의 차이는 데이터의 내용은 동일하지만, 실제로 게임에서 액세스되는 상태인지 여부에 있습니다.

graph TD
    subgraph "관리용 데이터"
        Master[모델 마스터]
    end
    subgraph "실행용 데이터"
        Model[모델]
    end
    subgraph "플레이어 데이터"
        Property[프로퍼티]
    end

    Master -- "내보내기/반영 (Current)" --> Model
    Model -- "인스턴스화" --> Property

GS2의 관리 화면에서 편집할 수 있는 데이터는 모델 마스터 이며, 이를 실제로 게임 내에서 사용할 수 있는 상태로 변환하면 모델 로 바뀝니다. 이 변환 공정이 필요한 이유는 모델 마스터 에 대한 변경을 일괄로 게임 내에 반영하기 위해서입니다. 이 공정이 없으면 관리 화면에서 데이터를 갱신해 나가는 과정에서, 중간 단계의 데이터가 게임 내에 반영되어 버리게 됩니다.

마스터 데이터 작성

이 변환 공정은 모든 모델 마스터 를 일단 JSON 형식의 파일로 내보내고, 그 JSON 파일을 업로드함으로써 일괄적으로 모델 로 반영하는 구조로 되어 있습니다. GS2의 관리 화면에서 모델 마스터 를 조작하여 JSON 형식의 파일로 내보내서 이용해도 되지만, Excel이나 자체 관리 도구를 만들어 GS2에 모델 마스터 를 전혀 등록하지 않고 모델 에 데이터를 반영하는 것도 가능합니다.

또한, GS2-Deploy 템플릿 내에서 마스터 데이터를 관리할 수도 있습니다. 이 경우 git 등의 버전 관리 도구 로 다루기 쉬워지므로, 이 방법도 검토해 보십시오.

운영상 편리한 방법으로 마스터 데이터를 관리하십시오.

GS2TemplateFormatVersion: "2019-05-01"
Description: GS2 master data template Version 2010-06-26

Globals:
  Alias:
    NamespaceName: inventory

Resources:
  Namespace:
    Type: GS2::Inventory::Namespace
    Properties:
      Name: ${NamespaceName}

  NamespaceSettings:
    Type: GS2::Inventory::CurrentItemModelMaster
    Properties:
      NamespaceName: ${NamespaceName}
      Settings:  # 이 아래의 데이터는 본래 JSON으로 지정하는 부분이지만, yaml로 작성해도 반영할 수 있습니다
        version: 2019-02-05
        inventoryModels:
          - name: item
            metadata: ITEM
            initialCapacity: 40
            maxCapacity: 60
            itemModels:
              - name: item-0001
                metadata: ITEM_0001
                maxCount: 99
                sortValue: 1
              - name: item-0002
                metadata: ITEM_0002
                maxCount: 99
                sortValue: 2
              - name: item-0003
                metadata: ITEM_0003
                maxCount: 99
                sortValue: 3
          - name: character
            metadata: CHARACTER
            initialCapacity: 30
            maxCapacity: 50
            itemModels:
             - name: character-0001
               metadata: CHARACTER_0001
               maxCount: 1
               sortValue: 1

    DependsOn:
      - Namespace

마스터 데이터 고정화

플레이어가 로그인 중에 마스터 데이터가 갱신되어도 불일치가 발생하지 않도록, 플레이어가 사용하는 마스터 데이터를 특정 일시 시점의 내용으로 고정화하는 구조가 마련되어 있습니다.

gs2 = await gs2.Distributor.Namespace(
    "namespace-0001"
).Me(
    _gameSession
).FreezeMasterDataAsync();

이처럼 GS2-Distributor 의 FreezeMasterData 를 호출함으로써, 이 API를 호출한 시점의 마스터 데이터 내용으로 이후의 API를 처리할 수 있습니다. 단, 고정 가능한 것은 30일 이내이며 각 마이크로서비스의 마스터 데이터에서 10세대 전까지의 내용입니다. 이 제한을 초과하면 최신 마스터 데이터를 사용하게 됩니다.

WebSocketSession 의 연속 접속 가능 시간은 2시간이므로, WebSocketSession 의 OnDisconnect 가 호출되었을 때 재접속 처리를 수행하는 시점에 재고정화할 것을 권장합니다. 재고정화할 때는 마스터 데이터의 갱신 여부를 GS2-Version 등으로 확인하고, 갱신이 있는 경우에는 타이틀 화면으로 되돌리는 등의 대응도 검토하십시오.


마스터 데이터의 CI/CD

GitHub Actions 등을 사용한 마스터 데이터 자동 업데이트