어제 저녁 서버 문제에 대해서 확인부탁드립니다.

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

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

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

  • 뒤끝 SDK 버전 :
  • 프로젝트명 : 이블헌터 타이쿤
  • 스테이터스 코드 :
  • 에러 코드 :
  • 에러 메시지 :
    어제 저녁 11시경 전후로 뒤끝서버를 사용하는 컨텐츠들에 전반적으로 문제가 좀 있었는데, 원인이 무엇인지 확인 부탁드립니다.

안녕하세요, 개발자님.
말씀하신 내용 상세히 확인 후 안내드리도록 하겠습니다.

점검 이후로 뒤끝 채팅 (구버전) 길드채팅의 끊김 현상이 자주 발생한다는 제보가 유저님들에게 들어오고 있습니다 관련하여 확인을 진행해주시면 감사하겠습니다.

안녕하세요, 개발자님.
guildbattleteam publicTable 의 where절 조회 과정에서 DB 사용이 과도하게 이루어지며 발생한 문제로 확인됩니다.
최근의 SDK에서는 발생하지 않는 문제이니, SDK를 업데이트 해주시는 것을 추천드립니다.
추가로, DB 비용을 줄이기 위해서는 다음과 같은 로직으로 개선되어야하니 참고 부탁드립니다.

  1. 누적 랭킹 생성
  2. MMR로 랭킹 데이터 등록
  3. 자신의 랭킹 데이터 불러오기(offset은 10으로 줘서 내 랭킹 기준 -10 ~ +10위의 유저들 같이 불러오기)
  4. 불러온 20명의 유저들 중 내부에서 랜덤으로 하나 선택하기
  5. 해당 유저의 데이터 Backend.GameData.Get(“tableName”, new Where() {“owner_inDate”, 해당 유저 inDate}); 여러 ;유저일 경우에는 Transaction 기능 사용

안녕하세요, 개발자님.
문의하신 내용은 본문과 달리 별도의 확인이 필요합니다.
상세 확인을 위해 프로젝트 정보 공유를 요청드리겠습니다.

프로젝트 이름 SingleRPG 입니다

좋아요 1

그렇군요. 해당시간대가 유저들이 많이 몰리는 시간이다보니 DB 사용량이 많긴한데, 이전까지는 잘 운영되어왔거든요. 어제 저희가 DB를 얼마나 사용했는지 뒤끝서버가 감당하는 적정 사용량이 어느정도인지 알려주실 수 있나요? 그리고 SDK를 업데이트하면 확실히 개선될까요?

@alec1545
안녕하세요 개발자님,
확인 시 27일 13시 35분경 채팅 인스턴스의 재시작이 이루어졌던 것으로 확인됩니다.
참고하여 주시면 감사하겠습니다.

좋아요 1

@hoony0625
안녕하세요 개발자님,
앞선 안내 내용과 관련해 추가적으로 답변드립니다.

뒤끝 서버는 오토 스케일을 통해 자동적으로 확장이 되기 때문에 커버량의 제한은 없습니다,
다만 확장이 완료되지 않은 상태(진행되는 과정 중)에서 동일한 요청(where 절 검색)을 할 경우, 문제가 발생할 수 있습니다.
현재는 테이블에 데이터가 많이 쌓여있기에 1회의 호출로도 굉장히 많은 데이터의 읽기가 발생합니다.

따라서 Where 절을 이용하여 특정 컬럼을 검색하는 기능을 모두 제거하여야 하며, SDK 업데이트 만으로는 개선점이 크지 않습니다.
SDK를 버전을 크게 업데이트 하는 것은 각 기능마다 변경점이 많기에 많은 테스트가 필요합니다.

현재 사용하고 계신 버전에서는 다음과 같이 랭킹을 이용하여 구현하는 방법을 추천드립니다.

  1. 누적 랭킹 생성
  2. MMR로 랭킹 데이터 등록
  3. 자신의 랭킹 데이터 불러오기(offset은 10으로 줘서 내 랭킹 기준 -10 ~ +10위의 유저들 같이 불러오기)
  4. 불러온 20명의 유저들 중 내부에서 랜덤으로 하나 선택하기
  5. 해당 유저의 데이터 Backend.GameData.Get(“tableName”, new Where() {“owner_inDate”, 해당 유저 inDate}); 여러 ;유저일 경우에는 Transaction 기능 사용

안녕하세요. 답변 감사합니다. 읽기 최적화는 따로 고민해보겠습니다 :)
그리고, 쌓여있는 데이터가 문제라면, 혹시 guildbattleteam 테이블의 UpdateAt이 2023년 이하인 데이터들만 삭제가 가능할까요?

문의해주신 내용 관련해 DM 드렸으니 확인 요청드립니다.