게임정보 저장, 수정관련

문의 응대 : 평일 오전 10시 ~ 오후 6시
문의를 남기실 경우 다음 항목을 작성해 주세요.
정보가 부족하거나 응대시간 외 문의하는 경우 확인 및 답변이 지연될 수 있습니다.

  • 뒤끝 SDK 버전 :
  • 프로젝트명 :
  • 스테이터스 코드 :
  • 에러 코드 :
  • 에러 메시지 :

1


3

  1. 게임정보를 저장할때 GetInDate를 통해 얻어오는 indate 값이 유저가 정보를 저장,수정할때 쓰이는 건지요?

  2. 2번사진의 테이블에서 level (100) 정보를 불러오고싶은데 밑의 코드에서 “type” ,“level” 에 무엇이 들어가야하나요? 4번사진을 봐도 이해가 안가서 문의 드립니다.

     Where where = new Where();
     where.Equal("type", "level");
     var bro = Backend.GameData.GetMyData("PlayerInfo", where, 10);
     Debug.Log(bro.GetReturnValue());
    
  3. 게임 정보수정할때 3번 사진에서

Backend.GameData.UpdateV2(“PlayerInfo”, “inDate”, Backend.UserInDate, param);

(테이블이름, inDate, Backend.UserInDate , param) 이 값들중에 inDate, Bakend.UserinDate 이 값이 2번 사진에서 보면 inDate, owner_inDate 값이 있는데 어떤 값이 들어가야하나요?

튜토리얼을 보며 해보고있는데 이해가 잘 되지않아 문의 드립니다.

안녕하세요 개발자님.

순서대로 답변 도와드리겠습니다.

  1. inDate란 뒤끝에서 사용하는 키값으로, 말씀하신 것처럼 특정 값을 읽거나, 변경, 수정하고 싶을 때 inDate를 통해 해당 데이터를 특정할 수 있습니다.

  2. where절의 경우, indate로 특정 값을 지정하여 접근하는 것이 아닌 모든 데이터중 조건에 맞는 데이터를 가져올 때 조건을 지정하기 위한 클래스입니다.
    where.Equal(“level”, 1)일 경우, level이 1인 데이터만 불러와집니다.
    뒤끝 개발자

따라서 조건을 지정하지 않고 빈 Where절을 조건으로 대입할 경우 모든 데이터를 불러올 수 있으며, 해당 데이터안에 삽입한 type과 level이 포함되어있습니다.

var bro = Backend.GameData.GetMyData("tableName", new Where(), 10);

if (bro.GetReturnValuetoJSON()["rows"].Count <= 0)
{
    Debug.Log(bro);
    return;
}

int level = Int32.Parse(bro.Rows()[0]["level"]["S"].ToString());

4번 사진은 type이 weapon이고 name이 dragon으로 되어있는 내 데이터를 검색하는 것으로 이해하시면 될 것 같습니다.

  1. inDate는 데이터에 대한 row의 inDate(1번 그림의 playerInfoIndate), owner_indate는 유저에 대한 inDate(자신의 inDate를 가르키는 BackendUserInDate)을 대입해야 합니다.

5

    //검색한 데이터 중 첫번째 데이터의 name 컬럼 출력
    string name = bro.Rows()[0]["name"]["S"].ToString();
  1. name 컬럼의 값을 불러오는건 됐는데 [“S”]값은 무엇을 의미하나요 컬럼마다 값이 S,N 이처럼 다른것 같은데요

Backend.GameData.UpdateV2(“PlayerInfo”, “inDate”, Backend.UserInDate, param);

  1. (테이블이름, inDate, Backend.UserInDate , param) 이 값들중에
    inDate = 위의1번사진 의 playerInfoIndate 값
    Backend.UserInDate = 위의 2번사진의 owner_indate 값
    값을 밑에처럼 넣는것이 맞을까요?

Param param = new Param();
param.Add(“level”, 110);
Backend.GameData.UpdateV2(“PlayerInfo”, “2022-05-06T05:20:42.614Z”, “2022-05-03T07:21:37.741Z”, param);

  1. 뒤끝에서 리턴되는 모든 데이터는 string입니다 따라서 클라이언트에서 저장한 데이터타입을 구분하기 힘들어 N과 S등 데이터 타입이 함께 저장됩니다.
    [FAQ] 리턴되는 value에 존재하는 N, S 같은 문자들은 무엇인가요?

해당 값이 불편하시다는 분들이 많아 해당 값을 사용하지 않는 함수도 존재하므로 참고해주시기 바랍니다.
GetReturnValuetoJSON()[“row”][“inDate”]['S"].ToString() → GetFlattenJSON()[“row”][“inDate”].ToString()
Rows()[0][“inDate”][“S”].ToString() → FlattenRows()[0][“inDate”].ToString();

  1. inDate는 개발자님이 올려주신 대로 값을 입력하는 것이 맞습니다.

Backend.GameData.UpdateV2(“PlayerInfo”, “inDate”, Backend.UserInDate, param);
inDate = playerInfoIndate 값
Backend.UserInDate = owner_indate 값을 이용하여 컬럼의 data 값 수정은 했습니다.

owner_indate 값을 어떻게 가져와야되나요?

그리고 최초 정보를 입력할때
1
사진의 GetInDate 를 통해 얻게된 playerInfoIndate 값은 따로 로컬에 저장해 두어야 되는지요?

찾아보다가 해결했습니다.

6

위와같이 실패 처리를 하려는데
7

정보 수정할때에는 어떻게 처리해야 할까요?

안녕하세요 개발자님.

GetMyData의 에러케이스처럼 case로 업데이트 처리를 진행해주시면 될 것 같습니다.

statusCode : 404
errorCode : NotFoundException
message : gameInfo not found, gameInfo을(를) 찾을 수 없습니다
해당 에러 발생시에는 owner_inDate와 playerInfoIndate를 한번 더 Get하여 대입하는 로직을 구성해주시고,

업데이트시에는 공통 에러 케이스가 발생할 확률이 높으니 400 HttpRequestException, 502 BadGateway 에러에는 함수를 최대 3번까지 재호출해주시고, 그 외 에러는 에러 모달등을 띄워 예외처리를 진행해주시면 되겠습니다.(401 maintanance시에는 점검중입니다, 401 bad accesstoken시에는 리프레시 토큰, 403 forbidden시에는 5분간 함수 호출 멈추기등)