503에러 발생, 이후 테이블 삭제 되는 버그

고객님의 문의에 답변하는 직원은 고객 여러분의 가족 중 한 사람일 수 있습니다.
고객의 언어폭력(비하, 조롱, 욕설, 협박, 성희롱 등)으로부터 직원을 보호하기 위해
관련 법에 따라 수사기관에 필요한 조치를 요구할 수 있으며, 형법에 의해 처벌 대상이 될 수 있습니다.

커뮤니티 이용 정책에 위배되는 게시물을 작성할 경우, 별도 안내 없이 게시물 삭제 또는 커뮤니티 이용이 제한될 수 있습니다.

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

  • 뒤끝 SDK 버전 : 5.11.9
  • 프로젝트명 : Dust Adventure
  • 스테이터스 코드 : 503
  • 에러 코드 : ServiceUnavailableService Unavailable
  • 에러 메시지 :

안녕하세요.
게임 접속시에 GetMyData 도중 해당 오류가 발생합니다.

그러다가 몇 분 뒤에 들어가지긴 하는데
문제는 이 오류가 일어나면 특정 테이블이 삭제되는 버그가 발생합니다.
실제로 유저분들도 데이터가 사라지면서 불편을 겪고 있습니다.

사라지는 테이블은 RuneInfos입니다.
테이블 데이터가 통채로 사라지는거 같습니다.

삭제가 되는 것인지 아니면 게임에서 불러올 때 503에러가 발생하면서 빈 데이터를 불러오고 그 데이터를 저장하는 것인지… 빠른 원인 파악과 조치가 필요합니다.

안녕하세요 개발자님,
초기화가 이루어졌다는 유저 정보를 공유해주실 수 있을까요?
요청 데이터를 통해 정확히 확인하여 안내드리고자 합니다.

우선 내부 아이디 위주로 안내드리겠습니다.

발생 시점은 이 글 올리기 5~10분전쯤 입니다.

좋아요 1

확인 시 에러 발생 이후 update 요청이 아닌 insert 요청이 이루어지며 초기화된 데이터를 삽입한 것으로 확인됩니다.
테이블의 row 데이터를 살펴보시면 해당 유저의 row가 다수 확인되실 것입니다.

데이터 조회에 실패하는 경우
데이터가 존재하지 않아 실패하는 경우는 insert 요청이 이루어지도록 구성해주시고,
그외의 에러 발생시에는 2~3회 가량 재조회가 이루어지도록 구성하시는 것을 추천드립니다.

해당 503 에러가 발생하는 원인이 필요합니다.

IsSuccess가 false일 경우 게임 진입 자체가 되지 않도록 했는데
그 이후로 저장하는 현상 자체가 이해되질 않습니다.

 SendQueue.Enqueue( Backend.GameData.GetMyData, eGameData.ToString(), new Where(), 1, _select =>
        {
            if( _select.IsSuccess() == false )
            {
                if( _select.GetMessage().Contains( "bad refreshToken" ) )
                {
                    // 중복 로그인
                    DupliLogin();
                    return;
                }

                ErrorManager.Ins.Show( _select.GetStatusCode(), _select.GetErrorCode() + _select.GetMessage() );
                Debug.LogErrorFormat( "LoadData Error.! ({0})", eGameData.ToString() );
                OnLoadData.OnNext( false ); // 해당 오류 처리 이후 클라에서 서버로 보내는 요청 전부 중지
                return;
            }

            var data = BackendReturnObject.Flatten( _select.Rows() );
            if( data.Count <= 0 )
            {
                Debug.LogFormat( "LoadData Warring.! GameData Count <= 0 ({0})", eGameData.ToString() );

               // 아직 해당 데이터가 없는 것일 수 있어서 성공 처리
               OnLoadData.OnNext( true );
                return;
            }

           // 각 데이터별 처리 진행..

    }

ServiceUnavailableService Unavailable 에러 발생과 관련하여 상세 확인 후 안내드리겠습니다.
답변까지 다소 시간이 소요될 수 있는 점 양해 부탁드립니다.

확인 내용 안내드립니다.
503에러는 서버 불안정으로 인해 발생하는 에러입니다.

SendQueue에서 뒤끝메서드를 여러개 Enqueue하여 등록하였을 때,
5.11.9 버전에서는 에러 발생 이후에 남은 모든 메서드의 실행 취소를 보장할 수 없는 것으로 확인됩니다.

작업실행 스레드와 응답스레드가 분리되어 있어 응답이 늦거나 작업 속도가 빠를 경우,
응답콜백에서 취소하기 전에 작업이 이미 진행되었을 수 있습니다.

5.14.1에서는 이 부분이 개선되어 하나의 스레드로 응답 후, 다음 등록된 메서드가 실행되도록 되어 있으므로
SDK를 업데이트 하여 이용해 주시는 것을 권장드립니다.
만약 업데이트를 할 수 없는 상황이라면 SendQueue를 사용하지 마시고 별도로 응답 상태를 보고 다음 메서드를 호출하도록 로직을 구성하여 사용해 주시면 감사하겠습니다.
이용에 불편을 드려 죄송합니다.

안녕하세요. 답변 주셔서 감사합니다.

관련 오류로 인해서 다른 오류들도 발생하는거 같습니다.
랭킹 저장이 간헐적으로 안된다던지, 테이블 저장이 누락된다던지 이러한 현상이 간헐적으로 있습니다.

5.14.1버전으로 업데이트 못하는 이유는
저희가 이미 BackendManager라는 클래스로 사용하고 있어서 이를 전부다 바꿔야하는 상황이라 변경하기 힘듭니다.
말씀 주신대로 SendQueue가 아닌 비동기식으로 변경해서 진행해보겠습니다.

좋아요 1

안녕하세요.
5.14.1 버전으로 sdk 업데이트 이후에도 특정 테이블의 데이터가 계속 사라졌다는 문의가 들어왔습니다.
이전과 다르게, indate가 없으면 insert를 하는 부분에서 한번 더 데이터를 가져오는 처리를 진행하고, 그럼에도 없으면 하도록 진행하고 있습니다.

여전히 테이블의 데이터를 못불러와서 새로 insert를 하면서 데이터가 사라지는 것 처럼 처리가 되는것 같습니다.

해당 발생 회원번호 작성해둡니다.

  • UID
    추정 발생 시각은 10월 08일 22시 28분 근처 시간대로 파악됩니다. (문의가 들어온 시간입니다.)

지속해서 이러한 현상이 발생하는 테이블은 RuneInfos 입니다.
혹시 이 테이블 내에 클래스 형태로 저장하는 방식이 있는데 이게 문제가 있는지도 궁금합니다.

똑같은 분이 3번이나 데이터 손실 오류가 발생했지만 아직도 추적을 하지 못해서 많이 당황스러운 상황입니다. 번거로우시겠지만 확인 한번 더 부탁드립니다.

감사합니다.

안녕하세요 개발자님,
문의해주신 유저의 내역 확인 시,
22시 23분 42초, 44초경 해당 테이블 데이터를 삽입한 이력이 확인됩니다.
로그인 직후 호출이 이루어진 내역으로, 바로 직전 호출로 자신의 테이블 데이터도 조회한 것으로 확인되지만
해당 호출을 포함하여 로그인 이후 호출 내역과 관련하여 에러가 발생한 이력은 전혀 확인되지 않습니다.
관련한 로직 정보를 확인하여 주시면 감사하겠습니다.

안녕하세요. 답변주셔서 감사합니다.

로그인 이후 몇초 사이에 저장 요청이 들어왔다는 말씀일까요?
로그인 → 게임 조회 → 전부 완료 이후 게임 씬 이동 → 게임 씬에서 데이터 확인 후 데이터 저장 가능 상태로 변환 → 이후 60초에 한 번 혹은 게임 종료/Pause 진행시 저장 진행

이런식으로 로직이 되어 있습니다.

번거로우시겠지만 로그인 시간, 조회 시간, 데이터 삽입 시간을 나열해주시면 감사하겠습니다.

삽입 요청 자체가 조회를 전부 완료해야 저장이 진행되도록 되어 있는데,
그럼에도 이런 현상이 발생해서 추적하기가 너무 힘듭니다.

그리고 혹시 해당 테이블을 조회하여 에러가 발생하지 않았다고 해주셨는데, 실제 무언가 있던 데이터를 조회한 것인지도 확인 가능하다면 확인 부탁드립니다.

감사합니다.

RuneInfos 테이블 신규 데이터 삽입 전후 요청내역을 DM으로 보내드렸습니다.
확인해 주시면 감사하겠습니다.

안녕하세요.
바쁘신 와중 상세하게 보내주셔서 대단히 감사드립니다.

해당 로그를 보니 이전 접속에서 저장한 이후, 그냥 다시 재접속해서 조회를 한 것으로 보이는데,
이 로그대로라면 이전 접속에서 그럼 빈 데이터가 저장되었다는 걸까요?

  1. 이후 접속에서 조회할 때 빈 데이터를 불러왔거나,
  2. 이후 접속에서 조회할 때 실패했거나

이렇게 좁혀서 생각하면 될 것 같은데 맞을까요?

저 로그를 봐도 로직대로 너무 잘 되고 있는거 같아서 너무 추적하기 힘드네요…
추적하기 편하게 할 방법의 조언을 듣고 싶습니다.

감사합니다.

트랜잭션을 통해 RuneInfos 테이블에 신규 데이터를 insert 한 상황으로,
로직에서 insert를 빈 데이터로 처리하도록 구성하셨다면 말씀해주신 것과 같이 빈 데이터가 저장되었을 것입니다.

말씀해주신 것과 같이 저장 후 재접속을 하는 과정이었다면,
로그인 => 데이터 조회 => 모든 데이터가 불러와지지 않은 상황에서 저장 => 재접속 의 상황일 것으로 예상됩니다.
새로운 데이터를 insert 하는 로직과 관련하여 확인 처리가 필요할 것 같습니다.

바쁘실텐데 친절한 설명 대단히 감사드립니다.
모든 데이터가 불러와지기 전에는 저장 및 insert가 이루어지지 않도록 해야한다는 답을 얻은 것 같습니다.
감사합니다.

좋아요 1

데이터 조회 과정에서 통신 장애 및 기타 사유들로 에러가 발생하는 경우도 고려하여
조회 실패 시 약 2~3회가량 재요청하는 방법으로 구성하시는 것을 권장드립니다. :D