콘텐츠로 이동

원격 서비스

Hive SDK는 본래 게임 서버에서 해야할 작업을 하이브 콘솔을 통해 원격으로 할 수 있도록 하는 서비스인 원격 서비스를 제공합니다. 프로비저닝에서 제공하는 원격 서비스는 아래와 같습니다.

  • 리모트 컨피그레이션
  • 리모트 로깅

리모트 컨피그레이션

게임 앱을 운영하다보면 게임 서버 URL이 게임 앱 버전에 따라 달라질 수 있습니다. 리모트 컨피그레이션은 게임 서버에 접속하지 않고도 원격으로 서버 URL 설정을 변경하는 기능입니다. 게임사는 하이브 콘솔에 서버 URL 정보를 등록하고 게임 앱 버전별로 서버를 매핑, 관리할 수 있습니다.

Note

리모트 컨피그레이션은 게임 서버에서 수정해야 하는 서버 설정을 하이브 콘솔에서 원격으로 수정할 수 있는 기능으로, 현재는 게임 서버 URL만 원격으로 수정하는 기능만을 지원합니다. 다른 원격 설정 기능은 추후 추가할 예정입니다.

게임 서버 URL은 AppID, 게임 앱 버전, 서버별로 다르게 수정할 수 있습니다. 리모트 컨피그레이션을 사용하려면 먼저 하이브 콘솔에서 서버 URL을 등록해야 합니다.

게임 클라이언트에서 Configuration.getMetaData를 호출하면 하이브 콘솔에 등록 또는 하이브 콘솔에서 수정한 서버 URL을 String값으로 받을 수 있습니다. 다음은 서버 URL을 호출하는 예제 코드입니다.

API Reference: HiveConfiguration getMetaData

using hive;    
    // data key    
    String key = "game_server_url";    
    // Whether data is updated    
    Boolean forceReload = false;    
    // metadata call    
    Configuration.getMetaData(key, forceReload, (ResultAPI result, String value) => {    
    if (result.isSuccess()) {    
    // call successful    
    }    
});

API Reference: Configuration:: getMetaData

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    // data key    
    string key = "game_server_url";    
    // Whether data is updated    
    bool forceReload = false;    

    // metadata call    
    Configuration::getMetaData(key, forceReload, [=](ResultAPI const & result, string value) {    
         if (result.isSuccess()) {    
             // call successful    
         }    
});

API Reference: Configuration.getMetaData

import com.hive.Configuration;
import com.hive.ResultAPI;
// data key    
val key = "game_server_url"    
// Whether data is updated    
val forceReload = false    
// metadata call    
Configuration.getMetaData(key, forceReload, object : Configuration.GetMetaDataListener {    
        override fun onGetMetaData(result: ResultAPI, data: String) {    
            if (result.isSuccess) {    
                // call successful    
            }    
        }    
})

API Reference: Configuration.INSTANCE .getMetaData

import com.hive.Configuration;    
    import com.hive.ResultAPI;    
    // data key    
    String key = "game_server_url";    
    // Whether data is updated    
    boolean forceReload = false;    
    // metadata call    
    Configuration.INSTANCE.getMetaData(key, forceReload, (result, data) -> {    
         if (result.isSuccess()) {    
             // call successful    
         }    
});

API Reference: ConfigurationInterface.getMetaData

import HIVEService    
    // data key    
    let key = "game_server_url"    
    // Whether data is updated    
    let forceReload = false;    

    // metadata call    
    ConfigurationInterface.getMetaData(key, forceReload: forceReload) { result, value in    
         if result.isSuccess() {    
             // call successful    
         }    
}

API Reference: HIVEConfiguration getMegaData

#import <HIVEService/HIVEService-Swift.h>    
    // data key    
    NSString *key = @"game_server_url";    
    // Whether data is updated    
    BOOL forceload = NO;    
    // metadata call    
    [HIVEConfiguration getMegaData: key forceReload: forceReload handler: ^(HIVEResultAPI *result, NSString *value) {    
    if ([result isSuccess]) {    
    // call successful    
    }    
}];
#include "HiveConfiguration.h"

// 데이터 키
FString Key = TEXT("game_server_url");

// 데이터 갱신 여부
bool bForceReload = false;

// 메타 데이터 호출
FHiveConfiguration::GetMetaData(Key, bForceReload, FHiveConfigurationOnMetaDataDelegate::CreateLambda([this](const FHiveResultAPI& Result, const FString& Value) {
        if (Result.IsSuccess()) {
                // 호출 성공
        }
}));

캐싱값 사용

Hive SDK는 초기화 과정에서 하이브 콘솔에 미리 입력한 서버 URL을 읽어와 게임 클라이언트에 캐싱합니다. 따라서, 하이브 콘솔에서 서버 URL을 변경하지 않고 기존에 입력했던 값을 읽어오기만 하려면, 이 캐싱값을 사용해 네트워크 비용을 절감할 수 있습니다. 서버 URL을 읽어올 때 캐싱값을 사용하려면 Configuration.getMetaData 호출 시 forceReloadfalse로 합니다.

만약 하이브 콘솔에서 서버 URL을 수정했고 이 수정한 URL을 게임 앱에 반영해야 한다면, Configuration.getMetaData 호출 시 forceReloadtrue로 합니다. 이렇게 호출하면, 게임 클라이언트에 캐싱된 기존 서버 URL을 삭제하고 하이브 서버에서 최신 서버 URL을 가져옵니다. 이러한 호출 패턴은 일반적으로 게임 앱 재실행 시 사용합니다.

리모트 로깅

리모트 로깅은 게임 서버에서 수집해야 하는 로그를 Hive SDK에서 원격으로 수집할 수 있는 기능입니다. 리모트 로깅을 사용하면 디버그 로그를 원격에서 받아볼 수 있습니다. 예를 들어 특정 사용자를 하이브 콘솔에 등록해놓으면, 이 사용자 관련 문제가 발생했을 때 게임 서버가 아닌 원격 환경에서 디버그 로그를 확인할 수 있습니다.

로그를 수집할 특정 사용자를 정하면, 이 사용자가 게임 앱을 사용할 때 쌓이는 게임 앱 로그와 하이브 로그를 수집해 Google Cloud에 적재합니다. 게임사는 이렇게 원격으로 수집한 로그를 받아서 모니터링하고 디버깅에 사용할 수 있습니다. 리모트 로깅을 사용하려면 먼저 하이브 콘솔에서 로그를 수집할 사용자를 설정해야 합니다.

Note

리모트 로깅 기능은 Windows 타겟 Hive SDK에서는 제공하지 않습니다.

동작 방식

리모트 로깅 동작 방식은 다음과 같습니다.


타겟 사용자 설정

로그를 수집할 수 있는 사용자는, 게임 앱을 최소 한 번 이상 실행한(=SDK 초기화가 최소 한 번 이상 실행된) 상태에서 DID를 발급한 사용자입니다. 다만 게임 앱을 실행하는 과정에서 SDK를 초기화하기 전에 크래시나 오류가 발생했다면 이 사용자로부터 로그를 수집할 수 없습니다.

수집하는 로그

리모트 로깅을 활성화하면 하이브 콘솔에 입력한 로그 수집 시간 동안 하이브 로그와 게임 앱 로그를 수집합니다.

Warning

로그를 과도하게 많이 수집하면 자원이 네트워크 트래픽과 로그 처리에 집중되어 게임 앱 성능에 영향을 미칠 수 있습니다. 반복문 안에서 발생하는 반복적인 로그는 최대한 생략하거나 하나의 로그로 모아서 수집하는 것을 권장합니다.


하이브 로그

하이브 로그란, SDK 코드 내부에서 기본으로 수집하는 로그입니다. 게임 앱에서 제어할 수 없습니다.

게임 앱 로그

게임 앱 로그란, Hive SDK에서 제공하는 Logger.log 호출을 게임 클라이언트 코드에 삽입해서 얻는 로그입니다. 게임 클라이언트 코드에서 원하는 위치를 선택해 원하는 값을 수집할 수 있습니다. 원하는 위치에 아래 예시와 같은 코드를 삽입하세요.

API Reference: Logger.log

using hive;    
Logger.log("Enter logging contents");

API Reference: Logger::log

    #include <HIVE_SDK_Plugin/HIVE_CPP.h>    
        using namespace std;    
        using namespace hive;    
    Logger::log("Enter logging contents");

API Reference: Logger.i

import com.hive.Logger;    
Logger.INSTANCE.i("Enter logging contents");

API Reference: LogInterface.log

import HIVEBase    
LogInterface.log(sourceInfo: "Log source information (class, method name)", type: .Info, tag: "Log tag", msg: "Log message")

API Reference: Objective-C

#import <HIVEBase/HIVEBase-Swift.h>

[HIVELogger logWithSourceInfo:@"Log source information (class, method name)" type: LogTypeInfo tag: @"Log tag" msg: @"Log message"];
#include "HiveLogger.h"

FHiveLogger::Log(TEXT("로깅 내용 입력"));