한명의 사용자가 복수개의 케릭터를 생성하는 방법

안녕하세요.
뒤끝을 이용하여 사용자 정보를 구성할때
한명의 사용자가 복수개의 케릭터를 보유하는 방법이 궁금합니다.

예를들면
로엠, 팔라딘스토리 같은 게임들은 하나의 계정에 여러 케릭터들을 생성하는것이 가능합니다.

만들려고하는 게임의 테이블이 아래와 같고

// 케릭터 레벨, 닉네임등 기본정보
charater
// 케릭터 아이템 정보
character_inventory
// 케릭터 스킬 정보
character_skill

var characterBRO = Backend.GameInfo.GetPrivateContents(“character”);
이런식의 결과를 가져올시 원하지 않는 불필요한 모든 케릭터정보를 들고오는 구조입니다.

키를통해 읽어오는 기능이 없다보니 모든 정보를 들고오게되면 케릭터가 10개라면
1개의 케릭터정보를 읽어오기위해 10개의 모든 테이블정보를 읽어야하고,
테이블에 정보를 write 할때에도 특정키를 기준으로 하는 함수가 없기때문에 한개의 케릭터의 변경을 저장하기위해 10개의 정보를 모두 저장해야합니다.

Backend.GameInfo.GetContentsByIndate 함수를 이용해 특정 테이블을 불러오는게 가능하다는건 알지만.
해당함수가 public, private 무관하게 indate값을 가진다면 정보를 불러오는게 가능한지 궁금합니다.
또한 다른유저의 정보를 읽을수 있는지도 궁금합니다.
예를들자면 길드원으로 가입한 케릭터 A를 누를시 A 케릭터의 정보가 나오는 기능이며.
A 케릭터는 GoogleA라는 사용자의 케릭터중 하나일경우 GoogleB 사용자가 Backend.GameInfo.GetContentsByIndate 를사용해서 A 케릭터 정보를 읽어오는게 가능한지 입니다.

또한 읽는건 해당방식으로 된다고하더라도 쓰는처리는 어떤식으로 해야될지 문서가 필요합니다.

현재 쓰기처리는 TransactionParam 을 이용해서 AddUpdate로 담고있는데.
특정 사용자의 여러캐릭터중 특정 캐릭터 하나의 inventory정보와 skill정보를 동시에 Update 시킬수있는지 알려주시면 감사하겠습니다.

추가적으로 케릭터별 고유한 닉네임을 부여하고싶어도 닉네임 중복은 게임 유저정보에서만 지원하기때문에
그부분도 불가능한상태입니다.
이부분을 어떻게 해결해야될지도 조언이 필요합니다.

우편이라던가 뒤끝의 기능들이 유저정보를 기준으로 대상을 지정하는식인데.
그럼 케릭터 하나에 우편을 지급한다거나 하는 행위들이 불가능한지도 궁금합니다.

제가 알기로는 로엠또한 뒤끝을 이용해 서비스를 진행중인걸로알고있고
여러 케릭터를 생성할수있는 구조인걸로 알고있습니다.
그럼 키를통한 정보의 저장이 가능하다고 판단되는데 어떤방식으로 가능한지 알려주시면 감사하겠습니다.

안녕하세요. 개발자님.

예제로 주신 여러 캐릭터 생성이 가능한 게임들은 게임마다 코드가 적용되는 방식도 다르고 내부 로직을 자세히 알지못해 명확한 답을 드리기 어려운점 죄송합니다.

Backend.GameInfo.GetContentsByIndate 함수로는 public, private 테이블 무관하게 indate 값을 이용하여 데이터를 가져올 수 있고, public테이블일 경우 다른 유저의 데이터를 읽어올수도 있습니다.
허나 해당함수로 다른 캐릭터의 정보를 얻기 위해서는 데이터의 indate를 알아야하니, 이 경우에는GetPublicContentsByGamerIndate를 이용하여 다른 유저의 인데이트로 정보를 불러오는게 더 수월할듯 싶습니다.

쓰기 관련해서는 뒤끝은 현재 데이터(row)에 일부 값만을 변경하지 못하고 해당 로우 전체를 교체하는 방식만 제공하고 있습니다.
이부분은 새 캐릭터마다 데이터를 insert하여 한 데이터(row)에 여러 캐릭터가 아닌, 캐릭터만큼 여러 데이터(row)를 가지게 하는 등의 데이터를 분리하시는 방법을 이용하셔야 할 거 같습니다.

우편 및 닉네임 관련해서는 뒤끝은 유저정보를 통해 해당 기능을 제공하고 있으므로, 그 외의 사용법으로 해당 기능을 말씀드리기에는 다소 어려울 거 같습니다. 그러나 예를 들어 관리자 우편을 받고 어느 캐릭터가 해당 우편을 받을 조건이 됐는지등 로직을 잘 구성하시면 구현이 가능합니다.

추가적으로
key를 이용한 데이터 검색을 원하신다면 스키마 정의 게임 정보 관리의 where절을 참고해주시기 바랍니다.

제가 원하는 답변과 완전 다른 답변을 받아서, 다시 정리해서 올리겠습니다.

  1. GetPublicContentsByGamerIndate를 이용하여 다른 유저의 인데이트로 정보를 불러오는게 더 수월할듯 싶습니다.
    이건 저도 압니다. 근데 저걸로 특정 Row만 가져오는건 불가능하지 않나요 ?
    즉 제가 원하는건 특정사용자의 특정 테이블의 특정 로우만 가져오는겁니다.
    (B유저의 character 테이블의 특정 로우를 A유저가 가져오는것)

  2. 쓰기 관련해서는 뒤끝은 현재 데이터(row)에 일부 값만을 변경하지 못하고 해당 로우 전체를 교체하는 방식만 제공하고 있습니다

특정 row만 바꿀수 있다고 하셨는데 어떻게 가능한건가요?
예시를 알려주실수 있나요 ?

또한그게 트랜잭션으로 가능한지가 궁급합니다.
가능하다면 어떻게하면 가능한지 알려주시면 감사하겠습니다.

예시 ) 유저 A의 테이블 character 의 특정 row와 유저 A의 테이블의 inventory 의 특정 row를 동시에 변경
(트랜잭션)

  1. 우편뿐만이 아니라 길드라던가 모든 시스템들이 유저정보를 기반으로 작동하는데
    그럼 이부분을 케릭터 기반으로 쓸수는 없다고 이해하면 되나요 ?

사실상 게임을 구현할때 다중케릭터는 기본적인 기능에 해당되는데 그부분에 대한 설명이 너무 부족합니다 ㅠ

  1. 이부분은 제가 잘못이해하고 있었습니다. 해당 함수로는 찾고 싶은 게이머의 rows를 불러오는 것은 가능하지만 그 게이머의 원하는 row에 대한 값만 불러오는 것은 불가능합니다. 혼란을 드려 죄송합니다.

스키마 미정의 테이블로는 원하시는 기능에 대해서는 현재 지원하지 않는 상태이며,
스키마 정의 테이블로는 where절을 이용하여 key값등을 설정해 불러오는 것이 가능합니다.

  1. 특정 Row 변경은 변경하고 싶은 row의 indate를 이용해서 업데이트하는 것입니다.
    https://developer.thebackend.io/unity3d/guide/gameData/update/

만약 2개를 동시에 수정하고 싶을 경우, 개발자님이 주신 프로세스처럼 쓰기 처리하시면 문제가 없을 거 같은데, 혹시 트랜잭션 기능외로 다른 원하시는 기능이 있나요?

   character, inventory에 자신의 데이터들 불러오기 - indate 가져오기
   TransactionParam tp = new TransactionParam();
   tp.AddUpdate("character","바꿀 row의 indate", "수정할 정보"); 
   tp.AddUpdate("inventory","바꿀 row의 indate", "수정할 정보"); 
   Backend.GameInfo.TransactionWrite(tp);
  1. 네 유저정보가 기반인 시스템들은 뒤끝시스템상으로는 캐릭터별로 구현하기 어려울 것 같습니다.

다중캐릭터에 관련해서는 설계된 뒤끝 시스템이 없어서 직접적인 해답을 드리기가 어려워 죄송합니다.
이부분은 피드백으로 검토해보겠습니다. 감사합니다.

먼저 답변 주셔서 감사합니다.
몇가지 궁금한부분이 추가로 있습니다.

스키마 미정의 테이블을 이용해 아래와같이 구성한다면 문제가 있을까요?

  1. indate_info 테이블을 생성

indate_info는 각 케릭터별 테이블의 row 의 indate정보를 보유.
ex ) table name , unique_key, indate
character, aaa, character 테이블의 aaa의 row의 indate
character_inventory, aaa, character_inventory 테이블의 aaa의 row의 indate
character_skill, aaa, character_skill 테이블의 aaa의 row의 indate
character, bbb, character 테이블의 bbb의 row의 indate
character_inventory, bbb, character_inventory 테이블의 bbb의 row의 indate
character_skill, bbb, character_skill 테이블의 bbb의 row의 indate

  1. last_charcter_info 테이블 생성
    ex) last_character_unique

aaa

이런식으로 구성후 케릭터 생성시 insert되는 table에 대해서 indate_info 를 추가하고.
last_character_info는 항상 마지막에 플레이한 character의 고유키를 집어넣은후
다른유저의 정보보기를 누를경우 last_character_info와 indate_info를 로드한후 정보를 보여주는 방식입니다.

이방식으로 문제가 있을까요 ?

혹은 해당방식으로 하는것과 스키마 정의 테이블을 이용해 구현하는방법중 db 콜수가 더적은방식이 무엇인지 알려주시면 감사하겠습니다.

네 그렇게 사용하셔도 될 거 같습니다.

비스키마와 스키마 정의 테이블이 전체 데이터의 수가 같을 경우, db 사용량은 차이가 없습니다.
개발자님 편하신 방법대로 선택해서 사용하시면 될 거 같습니다.