콘텐츠로 이동

원격 서비스

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

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

리모트 컨피그레이션

리모트 컨피그레이션은 원래 앱 서버에서 수정해야 하는 서버 설정을 Hive 콘솔에서 원격으로 수정할 수 있는 기능입니다. 현재는 앱 서버 URL만 원격으로 수정하는 기능만을 지원합니다. 앱 서버 URL은 AppID, 앱 버전, 서버별로 다르게 수정할 수 있습니다. 리모트 컨피그레이션을 사용하려면 먼저 Hive 콘솔에서 서버 URL을 등록해야 합니다.

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

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

리모트 로깅

리모트 로깅은 원래 앱 서버에서 수집해야 하는 로그를 Hive SDK에서 원격으로 수집할 수 있는 기능입니다. 로그를 수집할 특정 사용자를 정하면, 이 사용자가 앱을 사용할 때 쌓이는 앱 로그와 Hive 로그를 수집해 구글 클라우드에 적재합니다. 개발사는 이렇게 원격으로 수집한 로그를 받아서 모니터링하고 디버깅에 사용할 수 있습니다. 리모트 로깅을 사용하려면 먼저 Hive 콘솔에서 로그를 수집한 사용자를 설정해야 합니다.

동작 방식

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


타겟 사용자 설정

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

수집하는 로그

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

Warning

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


Hive 로그

Hive 로그란, Hive 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("로깅 내용 입력"));