데이터 삽입과 수정

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

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

데이터 삽입과 수정을 진행 중에 문의드릴께 있어 남김니다.
유저의 재화 및 레벨 정보를 아래와 같이 입력후 변동시 마다 수정을 할려고 합니다…

  1. 데이터 삽입시 뒤끝 콘솔에 적용은 잘되지만 수정시 “404” 에러가 뜹니다…

  2. 아래 코드와 같이 데이터 삽입후 1개의 row에서 데이터 수정만 하면 요금부분에서는 많이 나오게 될까요?

    public void OnClickInsertData()
    {
    int stageLevel = GameManager.StageLevel;
    int waveLevel = GameManager.WaveLevel;
    int huntLevel = GameManager.HuntLevel;

     // string coin = (GameManager.CoinAmount).ToString();
     double gold = GameManager.GoldAmount;
     double soul = GameManager.SoulAmount;
     double key = GameManager.KeyAmount;
    
     // Param은 뒤끝 서버와 통신을 할 때 넘겨주는 파라미터 클래스 입니다. 
     Param param = new Param();
    
     // 값을 Dictionary 로 사용하기
     Dictionary<string, int> Level = new Dictionary<string, int>
     {
         { "stageLevel", stageLevel },
         { "waveLevel", waveLevel },
         { "huntLevel", huntLevel }
     };
    
     Dictionary<string, double> Money = new Dictionary<string, double>
     {
         { "gold", gold },
         { "soul", soul },
         { "key", key }
     };
    
     param.Add("Level", Level);
     param.Add("Money", Money);
    
     BackendReturnObject BRO = Backend.GameData.Insert("TestTable", param);
    
     if (BRO.IsSuccess())
     {
         Debug.Log("indate : " + BRO.GetInDate());
     }
     else
     {
         switch (BRO.GetStatusCode())
         {
             case "404":
                 Debug.Log("존재하지 않는 tableName인 경우");
                 break;
    
             case "412":
                 Debug.Log("비활성화 된 tableName인 경우");
                 break;
    
             case "413":
                 Debug.Log("하나의 row( column들의 집합 )이 400KB를 넘는 경우");
                 break;
    
             default:
                 Debug.Log("서버 공통 에러 발생: " + BRO.GetMessage());
                 break;
         }
     }
    

    }

public void OnClickGameInfoUpdate()
{
Param param = new Param();

    Dictionary<string, int> Level = new Dictionary<string, int>
    {
        { "stageLevel", GameManager.StageLevel },
        { "waveLevel", GameManager.WaveLevel },
        { "huntLevel", GameManager.HuntLevel }
    };

    Dictionary<string, double> Money = new Dictionary<string, double>
    {
        { "gold", GameManager.GoldAmount },
        { "soul", GameManager.SoulAmount },
        { "key", GameManager.KeyAmount }
    };

    param.Add("Level", Level);
    param.Add("Money", Money);


    BackendReturnObject BRO = Backend.GameData.Update("TestTable", "inDate", param);
    if (BRO.IsSuccess())
    {
        Debug.Log("수정 완료");
    }
    else
    {
        switch (BRO.GetStatusCode())
        {
            case "405":
                Debug.Log("param에 partition, gamer_id, inDate, updatedAt 네가지 필드가 있는 경우");
                break;

            case "403":
                Debug.Log("퍼블릭테이블의 타인정보를 수정하고자 하였을 경우");
                break;

            case "404":
                Debug.Log("존재하지 않는 tableName인 경우");
                break;

            case "412":
                Debug.Log("비활성화 된 tableName인 경우");
                break;

            case "413":
                Debug.Log("하나의 row( column들의 집합 )이 400KB를 넘는 경우");
                break;
        }
    }

}

안녕하세요 개발자님,
문의 내용에 순차적으로 답변드립니다.

  1. Update 코드에서 indate가 “indate” 와 같이 string으로 되어있어 에러가 발생하는 것으로 추척됩니다.
    Update 전에 indate를 debug.log를 통해서 확인해 주세요.

  2. dicionary 데이터 두개로 요금은 적게 발생될 것으로 추측되지만 상대적인 부분이기에,
    함수 실행 후 실제 DB 사용량과 요금이 얼마나 발생하는지 확인하여 이용해 주세요.
    DB요금과 이용량은 [콘솔 => 프로필 => 결제관리 => 현재요금 => 프로젝트 클릭 => DB요금 클릭] 경로를 통해 상세히 확인할 수 있습니다.

추가로 질문이 있습니다.
public void OnClickGetTableList()
{
BackendReturnObject BRO = Backend.GameInfo.GetTableList();

    if (BRO.IsSuccess())
    {
        JsonData publics = BRO.GetReturnValuetoJSON()["publicTables"];

        Debug.Log("public Tables-----------------------------------------");
        foreach (JsonData row in publics)
        {
            Debug.Log(row.ToString());
        }

        Debug.Log("private Tables-----------------------------------------");
        JsonData privates = BRO.GetReturnValuetoJSON()["privateTables"];
        foreach (JsonData row in privates)
        {
            Debug.Log(row.ToString());
        }
    }

    else
    {
        Debug.Log("서버 공통 에러 발생: " + BRO.GetMessage());
    }
}

해당 코드로 작성하였을때 서버에서 public table 을 가져오지 못합니다…
테이블 리스트를 받아오지 못하는 상황이며, 이전 문의 내용 처럼 업데이트시에는 테이블이 없다고 뜹니다…

Update에 사용되는 인자값 inDate를 owner_inDate로 사용하고 계신것으로 확인됩니다.

  • Backend.GameData.Insert 함수를 통해 데이터를 삽입한 경우 리턴값을 통해 확인되는 테이블의 inDate
  • Backend.GameData.GetMyData 함수를 통해 해당 유저가 테이블을 조회하였을때 리턴되는 데이터에 내에 해당 row의 inDate

위와 같이 확인되는 inDate를 사용하여 주세요.