문의 응대 : 평일 오전 10시 ~ 오후 6시
문의를 남기실 경우 다음 항목을 작성해 주세요.
정보가 부족하거나 응대시간 외 문의하는 경우 확인 및 답변이 지연될 수 있습니다.
- 뒤끝 SDK 버전 : 5.7.1
- 프로젝트명 : 미스테리 큐브
- 스테이터스 코드 :
- 에러 코드 :
- 에러 메시지 :
최근 유저들의 데이터 초기화 현상이 있어서 이것저것 알아보다보니…
[공지] 게임 데이터 유실(초기화/롤백) 방지, 대응 가이드
글을 보게 되었습니다.
해당 글에 따르면 rows 카운트가 0으로 반환된다고 하셨는데…
저같은 경우 해당 컬럼이 존재하는지 확인후 없으면 만들고, 있으면 데이터를 가져오는 방식으로 코드를 짰습니다.(Contains 이용)
문제없이 잘 돌아갔구요.
그런데 최근들어 데이터 초기화 현상이 있었고…일단 해당 글대로 바꾸긴 했습니다만…
추가로 컬럼을 만들고 싶을때는 어떻게 해야 하나요?
가져올 컬럼이 없으면 에러나면서 아무것도 안되는듯하던데…
===기존코드===
if (result.GetReturnValuetoJSON()[“row”].ContainsKey(“StageLevel”) == false)
{
param.Add(“StageLevel”, StageLevel.ToString());
}
else
{
returnValue = BackendReturnObject.Flatten(result.GetReturnValuetoJSON())[“row”][“StageLevel”];
StageLevel = Int32.Parse((string)returnValue);
}
이게 기존코드입니다. 위처럼 불러온 테이블에서 해당 키가 있는지 여부 확인 후
해당 키가 없으면 새로 쓰고, 해당 키가 있으면 값을 가져오는 방식이었습니다.
그런데 해당 칼럼의 일부값만 가져오니…그 일부값은 데이터가 그대로 유지되는 반면
가져오지 못한 칼럼값은 그대로 초기화가 되어버렸습니다.
======신규코드========
if (result.GetReturnValuetoJSON()[“row”].Count <= 10)
{
param.Add(“SafeMode”, Ability.SafeMode.ToString());
}
else
{
returnValue = BackendReturnObject.Flatten(result.GetReturnValuetoJSON())[“row”][“SafeMode”];
Ability.SafeMode= Convert.ToBoolean((string)returnValue);
}
이런식으로 해야 하더군요…
실제 신규 유저일 경우 반환되는 result.GetReturnValuetoJSON()[“row”].Count 의 값은 7이었습니다만
혹시 몰라서 10이하일경우로 해놨습니다.(indate값 등등때문에 7이 반환되더군요)
그런데 이렇게 할 경우…
데이터의 일부 칼럼만 가져와서 Count 값이 10을 넘어가버리면
else 구문에서 해당 칼럼이 존재하지 않는다며 에러가 나오고…그 뒤로는 데이터가 쓰여지지 않을게 자명합니다.
결론적으로 질문을 드리자면…
-
다 가져오든지, 아니면 안가져오든지…둘중 하나만 해야 하는데
일부만 가져오는 이런 현상은 대체 어떻게 대응해야 하나요? -
그리고 신규 코드의 경우 칼럼 추가를 할 경우는 어떻게 해야하나요?
※ 기존코드/신규코드 모두 불러오기 성공했을때의 코드입니다.
- 만약 기존 유저의 로딩이 성공하고 리턴되는 row의 값이 0으로 반환될 경우…에는
공지해주신 방법으로 처리해도 무조건 데이터 초기화되는거 아닌가요?