403에러 문의

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

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

안녕하세요
게임 진행중에 403에러로 게임이 튕긴 경우가 발생했습니다.

너무 과도하게 함수를 불러올 경우 403 에러가 발생하는것으로 알고 있습니다.

‘지성’ 이라는 유저인데 해당 유저가 어떤 함수를 많이 사용해서 403 에러가 발생한것인지 체크가 가능할까요

시간은 오후 8시50분경에 문의가 왔습니다.

안녕하세요 개발자님,
확인 시 20시 39분부터 초당 10회 이상의 많은 요청이 지속적으로 발생하였으며
그에따라 20시 42분 04초에 403 에러가 발생, 접속이 일시적으로 차단되었던 것으로 확인됩니다.

Backend.BMember.IsAccessTokenAlive
Backend.Utils.GetServerTime
Backend.GameLog.InsertLog

위 세 함수의 요청이 많이 발생하였으며,
다음으로 아래 함수 요청이 많이 발생하였습니다.

Backend.GameData.TransactionWrite
Backend.Utils.GetServerStatus

서버 데이터 불러오기 악용을 막기위해서 강화 후 특정 시간 이내에 다시 강화를 시도하지 않으면 서버 저장을 진행하는 로직때문인것으로 파악되는데요

중복 로그인을 체크하기 위해 강화 시도시 토큰을 체크하고 있구요 모든 강화 시도를 로그로 남기고 있었습니다.

강화 성공만 로그를 남기도록 하고 강화 후 서버 저장까지 딜레이를 늘리는 방향으로 수정을 진행했는데 어느정도 해결이 될 서버 요청량인가요? 아니면 다른 조치가 필요해 보이시나요ㅜㅜ

안녕하세요 개발자님.

해당 로직이라면 1초안에 3번정도 강화를 진행하면 1초에 10회정도의 서버 호출이 발생할 수 있다는 말씀이시군요.

해당 경우라면 강화를 연속으로 하는 구간에 문제가 발생할 수 있으므로 아래 호출을 줄이는 로직들을 참고하시며 현재 게임에 대입이 가능한지 생각해보시면 감사하겠습니다.

  1. 중복 로그인을 체크하기 위한 Backend.BMember.IsAccessTokenAlive 함수는 호출하시지 않으셔도 될 것 같습니다.
    중복 로그인이 감지되면 모든 함수 호출에서 bad accesstoken 에러가 발생하므로 해당 에러는 InsertLog에서 에러를 체크하는 것을 추천드립니다.(3번에서 참조)

  2. 서버 타임의 경우, 특정 시간을 감지하기 위해서라면 해당 함수를 호출하는 것 보다는 Stopwatch등의 로컬에서 시간을 감지하는 함수를 통해 구현하는 것을 추천드립니다.

var sw = new System.Diagnostics.Stopwatch();

public Upgrade()
{
  sw.Reset();
  sw.Start();
}

void Update()
{
   if(sw.ElapsedMilliseconds >= 10 * 1000) // 10초 이상이라면
   {
      //sw.Stop();
      //특정 시간 경과하여 서버 저장
   }
}
  1. 강화 로직을 작동시켜 강화 결과를 미리 가져와 InsertLog에 대입하여 호출합니다. 만약 InsertLog 호출 시에 bad accesstoken이 발생하면 액세스토큰 재발급 함수를 통해 재발급을 시도하고 안되면 에러가 중복 로그인의 가능성이 크므로 게임을 중단시킵니다. 만약 성공적으로 InsertLog가 호출되었다면 문제가 없으므로 그 후에 가챠 결과를 제공합니다.(만약 InsertLog전에 결과를 호출할 경우, 유저들이 빠르게 리셋을 하는 위험이 있을 수 있습니다.)