자주 묻는 질문 (FAQ)

SDK 관련

게임을 업데이트할 때마다 텐투플레이 SDK 쪽도 업데이트해 줘야 하나요?

늘 필요한 건 아닙니다. 그렇지만 게임 업데이트에 비즈니스 모델 변경이 있다면 텐투플레이 기술팀에 연락하여 지원을 받는 것이 좋습니다.

SDK 말고 API를 통해 텐투플레이 서비스를 이용할 수 있나요?

가능합니다. 자세한 것은 텐투플레이 기술팀에 문의하십시오.

텐투플레이 SDK가 지원하는 게임 엔진에는 어떤 것이 있나요?

현재 유니티 엔진을 지원하고 있습니다.

SDK 구현이 제대로 되었는지 검증하는 QA 프로세스 같은 것이 있나요?

데이터 수집과 업로드 구현에 대한 디버그 작업이 있습니다. 그리고 저희 텐투플레이 기술팀이 서버에 문제가 없는지 지속적으로 점검하고 있습니다.

데이터 수집 디버깅하기

난독화 구현 시 예외 처리 되어야할 클래스는 무엇인가요?

com.sentience.tentuplay입니다.

현재 TPStashEvent 클래스 일부 파라미터의 자료형(예: currency)이 float인데 입력 데이터가 float의 범위를 넘게 되면 어떻게 해야 하나요? 데이터 업로드 관련하여 한 메소드에 이처럼 잘못된 데이터가 들어가면 다른 메소드의 데이터도 영향을 받나요?

내장 형변환이 제대로 작동하는 상황이라면 형변환을 쓰면 됩니다. 다만 이 경우 오버플로우가 발생하므로 다음과 같이 추가적 데이터 처리를 해주어야 합니다.

  • float 범위: 1.40129846432481707e-45 ~ 3.40282346638528860e+38

  • double 범위: 1.7e-308 ~ 1.7e+308

여기서 값이 10^38을 넘어가는 순간 오버플로우가 발생하고 값이 무한대로 인식되어 오류가 발생합니다. 이런 경우 입력 값의 로그를 취하는 방법이 있습니다만 이 방법에는 콘솔에서 값이 로그의 형태로 나타난다는 단점이 있습니다.

두번째 질문에 대해서는 가령 GetCurrency의 데이터 중 하나라도 데이터 타입 범위가 넘어가는 데이터가 있다면, GetCurrency 데이터는 텐투플레이 서버로 업로드 되지 않습니다. 하지만 다른 메소드(예: UseCurrency)에는 영향이 없고 정상적으로 데이터가 업로드 됩니다.

설정에서 Auto Upload가 체크된 상태에서 플레이어가 다음 업로드 시간 도달 전에 앱을 닫아버렸다면 직전까지 수집된 데이터는 어떻게 되나요?

이런 경우 업로드 시간 전까지 수집된 데이터는 플레이어의 장치에 보관되어 있다가 다음에 게임을 플레이할 때 다시 업로드됩니다. 물론 이를 방지하기 위해 업로드 간격을 줄일 수는 있지만 그만큼 잦은 업로드로 인한 영향(예: 데이터 전송 시 오버헤드 증가)이 있을 수 있으므로 각각 장단점이 있습니다.

TPStashEvent 클래스는 얼마나 자주 호출해야 하나요?

TPStashEvent 클래스가 사용되는 방식은 다음과 같습니다. Auto Upload가 선택되어 있다고 가정하고 호출이 잦은 이벤트에 대해 는 상태에서 new TPStashEvent() 클래스를 활용하여 필요한 메소드를 호출하면 업로드 간격에 따라 업로드가 자동으로 이루어집니다. (예: 재화의 획득과 사용 시 수집 메소드를 각각 new TPStashEvent().GetCurrency(), new TPStashEvent().UseCurrency()로 호출하기). 만약 new TPStashEvent()가 플레이 시작 시에만 호출된다면 플레이 도중 수집 데이터가 업로드되는 일은 일어나지 않습니다.

데이터 제대로 업로드되었는지 어떻게 확인할 수 있나요? 이를 위한 콜백이 있나요?

현재 그런 콜백 함수는 없습니다. 대신 업로드가 성공하면 텐투플레이 디버그 모드에서 "TPDebug||Upload successful"라는 메시지가 유니티 에디터나 Roblox Studio의 디버그 콘솔에 나타납니다.

업로드 실패시 수집된 데이터는 다음 게임 플레이시까지 플레이어의 장치에 남아 있습니다.

콘솔에서 SDK 상태를 보면 PlayerGetCharacter 이벤트가 Join 이벤트 후 항상 나타나는데 괜찮은건가요?

정상입니다. Join 직후 PlayerGetCharacter가 자동 호출되도록 설계되었습니다.

문서에는 TPStashEvent.Join이 사용자 등록에 쓰인다고 하는데 등록하려는 사용자가 이미 등록된 사용자인지 확인할 수 있는 방법이 있나요? (그래서 기등록 여부에 따라 JoinLogin을 모두 호출하거나 Login만 호출하길 원함)

텐투플레이는 호출하는 모든 것을 그냥 업로드하므로 텐투플레이를 사용 중 특정 사용자가 이미 등록했는지 확인하기는 어렵습니다. 대다수의 게임에서 TPStashEvent.Join은 최초 일회성으로 이루어지는 이벤트(예: 구글 사용자로 로그인)에 대해 호출됩니다.

서버 오류 발생 시 텐투플레이 SDK는 어떻게 대처하나요?

텐투플레이 SDK는 몇 차례 더 재시도한 후 마지막에는 스스로 셧다운합니다. 이런 일련의 절차가 게임플레이에는 영향을 미치지 않는데 이는 게임이 하나의 스레드만 사용한다는 가정하에 SDK는 별도의 스레드나 코루틴/콜백에서 돌기 때문입니다.

이후 3~5일 정도의 충분한 시간이 지난 후 SDK는 앱 시작 헬스 체크 과정에서 서버가 복구되었는지 확인합니다. 이 또한 게임 플레이에는 영향을 주지 않습니다.

텐투플레이 서버의 처리 능력은 어느 정도인가요?

우리 서버는 게임의 장르와 용량에 따라 RDB와 NoSQL을 모두 사용하여 다양한 용량에 유연하게 대처하고 있습니다. 많은 용량은 200,000 DAU, 80,000 concurrent connections 이상을 의미합니다. 가령 x00,000개(비밀유지협약에 의거 정확한 숫자는 비공개) DAU를 지닌 자사 MMORPG 클라이언트의 경우 이제껏 서버가 다운되거나 한 경우는 없었습니다.