콘텐츠로 이동

SDK 초기화

이 문서는 HarmonyOS SDK 초기화 및 런타임 기능에 대한 내용을 다룹니다.

기본 설정

EntryAbility.ets에서 SDK를 초기화합니다:

import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { FTSDK, FTSDKConfig, EnvType, SDKLogLevel, SyncPageSize} from '@guancecloud/ft_sdk/Index';

const DOMAIN = 0x0000;

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    this.initFTSDK();
  }

  private initFTSDK(): void {
    try {
      // 로컬 환경 배포 (DataKit)
      // const sdkConfig = FTSDKConfig.builder(datakitUrl);

      // 공용망 DataWay
      const sdkConfig = FTSDKConfig.builder(datawayUrl, clientToken)
        .setDebug(true)
        .setSdkLogLevel(SDKLogLevel.D)
        .setServiceName('Your-App-Name')
        .setEnv(EnvType.PROD) // 또는 문자열 사용: .setEnv('prod')
        .setAutoSync(true)
        .setSyncPageSize(SyncPageSize.MEDIUM)
        .setDataSyncRetryCount(5)
        .setSyncSleepTime(0)
        .setCompressIntakeRequests(true);
        // DB 캐시 크기 제한을 활성화하려면 .enableLimitWithDbSize()를 호출합니다. dbSize를 전달하지 않으면 기본값 100MB입니다.

      FTSDK.install(sdkConfig, this.context);
      hilog.info(DOMAIN, 'FTSDK', 'FT SDK initialized successfully');
    } catch (error) {
      const errorObj: object = error as object;
      hilog.error(DOMAIN, 'FTSDK', `Failed to initialize FT SDK: ${JSON.stringify(errorObj)}`);
    }
  }
}
메서드명 타입 필수 설명
datakitUrl string 로컬 환경 배포(DataKit)의 전송 URL 주소입니다. 예: http://10.0.0.1:9529, 포트는 기본 9529이며, SDK를 설치한 디바이스에서 접근 가능해야 합니다. 참고: datakitUrldatawayUrl 중 하나만 설정해야 합니다.
datawayUrl string 공용망 DataWay의 전송 URL 주소입니다. [RUM] 애플리케이션에서 가져옵니다. 예: https://open.dataway.url, SDK를 설치한 디바이스에서 접근 가능해야 합니다. 참고: datakitUrldatawayUrl 중 하나만 설정해야 합니다.
clientToken string 인증 토큰입니다. datawayUrl과 함께 설정해야 합니다.
setDebug boolean 아니요 SDK 내부 진단 로그 활성화 여부입니다. 기본값은 false입니다.
setSdkLogLevel SDKLogLevel 아니요 SDK 내부 로그 출력 레벨을 설정합니다. 자세한 내용은 문제 해결을 참조하세요.
setEnableInnerLogFile enable: boolean, config?: FTInnerLogFileConfig 아니요 SDK 내부 로그를 로컬 파일에 기록할지 여부입니다. 기본값은 false입니다. 자세한 내용은 문제 해결을 참조하세요.
setEnv string \| EnvType 아니요 환경입니다. 기본값은 prod입니다. EnvType 열거형 또는 문자열을 전달할 수 있습니다.
setServiceName string 아니요 속한 비즈니스 또는 서비스 이름입니다. 기본값은 df_rum_harmonyos입니다.
setAutoSync boolean 아니요 데이터 수집 후 서버에 자동으로 동기화할지 여부입니다. 기본값은 true입니다. false로 설정하면 FTSDK.flushSyncData()를 사용하여 데이터 동기화를 직접 관리할 수 있습니다.
setSyncPageSize SyncPageSize 아니요 미리 정의된 동기화 요청 항목 수를 설정합니다: MINI는 5개, MEDIUM은 10개, LARGE는 50개입니다. 기본값은 SyncPageSize.MEDIUM입니다.
setCustomSyncPageSize number 아니요 사용자 정의 동기화 요청 항목 수입니다. 범위는 [5, 500]이며, 소수점 이하는 버립니다. 기본값은 10입니다. setSyncPageSize와 함께 사용할 수 없습니다.
setDataSyncRetryCount number 아니요 단일 데이터 동기화의 최대 재시도 횟수입니다. 범위는 [0, 5]이며, 소수점 이하는 버립니다. 기본값은 5입니다.
setSyncSleepTime number 아니요 연속적인 동기화 요청 간의 대기 시간입니다. 범위는 [0, 5000]이며, 단위는 밀리초입니다. 기본값은 0입니다.
setCompressIntakeRequests boolean 아니요 업로드 데이터에 zlib 기반 deflate 압축을 사용할지 여부입니다. 기본값은 true입니다. 압축을 사용할 수 없으면 일반 텍스트로 업로드합니다.
setProxy FTProxyConfig \| null 아니요 SDK 데이터 업로드 요청에 사용할 HTTP 프록시를 설정합니다. null을 전달하면 프록시 설정을 제거합니다.
setProxyAuthenticator FTProxyAuthenticator \| null 아니요 업로드 프록시의 인증 정보를 설정합니다. null을 전달하면 별도 인증 설정을 제거합니다.
setDns FTDnsConfig \| null 아니요 SDK 데이터 업로드 요청에 사용할 DNS 서버 또는 DNS over HTTPS 주소를 설정합니다. null을 전달하면 DNS 설정을 제거합니다.
setDataModifier DataModifier \| null 아니요 개별 필드를 수정하거나 마스킹합니다. null을 반환하면 원래 값을 유지합니다. 자세한 내용은 데이터 수집 마스킹을 참조하세요.
setLineDataModifier LineDataModifier \| null 아니요 단일 데이터의 기존 필드를 일괄 수정하거나 마스킹합니다. 자세한 내용은 데이터 수집 마스킹을 참조하세요.
setEnableDataFilter boolean 아니요 DataKit과 호환되는 로컬 및 원격 블랙리스트 필터링 기능을 활성화할지 여부입니다. 기본값은 true입니다. Logging 및 RUM 데이터 필터링을 지원합니다. 자세한 내용은 블랙리스트 필터링을 참조하세요.
setDataFilters FTDataFilters \| null 아니요 로컬 블랙리스트 필터링 규칙을 설정합니다. logging, rum 두 가지 유형의 규칙을 지원합니다. null을 전달하면 로컬 규칙을 지웁니다. 자세한 내용은 블랙리스트 필터링을 참조하세요.
setEnableAccessDeviceID boolean 아니요 시스템 디바이스 식별자를 device_uuid로 사용할지 여부입니다. 기본값은 false입니다. 비활성화하면 SDK에서 유지 관리하는 개인 UUID를 사용합니다.
setRemoteConfiguration boolean 아니요 데이터 수집의 원격 설정 기능을 활성화할지 여부입니다. 기본값은 false입니다. 활성화하면 RUM 설정이 완료되고 유효한 전송 주소가 있을 때 SDK가 설정을 가져옵니다.
setRemoteConfigMiniUpdateInterval number 아니요 데이터 업데이트 최소 간격을 설정합니다. 단위는 초이며, 기본값은 12시간입니다.
setRemoteConfigurationCallBack FTRemoteConfigFetchResult \| null 아니요 원격 설정 결과 콜백입니다. 코드 예제를 참조하세요.
enableLimitWithDbSize number 아니요 DB 캐시 크기 제한을 활성화합니다. 기본값은 100MB이며, 단위는 Byte입니다. dbSize를 전달할 때 값의 범위는 [30MB,)입니다. 활성화하면 FTLoggerConfig.setLogCacheLimitCountFTRUMConfig.setRumCacheLimitCount가 작동하지 않습니다.
setDbCacheDiscard DBCacheDiscard 아니요 DB 캐시가 크기 제한에 도달했을 때의 폐기 전략입니다. 기본값은 DBCacheDiscard.DISCARD입니다. DISCARD는 추가되는 데이터를 폐기하고, DISCARD_OLDEST는 가장 오래된 캐시 데이터를 삭제합니다.

동적 설정 및 런타임 시 전송 주소 업데이트 사용 방법은 동적 설정 및 동적 주소 업데이트를 참조하세요.

업로드 네트워크 설정

setProxy(...), setProxyAuthenticator(...), setDns(...)는 SDK가 DataKit 또는 DataWay로 데이터를 업로드하는 요청에만 적용되며, 애플리케이션 비즈니스 요청의 네트워크 설정은 변경하지 않습니다.

import {
  FTSDK,
  FTSDKConfig,
  FTProxyConfig,
  FTProxyAuthenticator,
  FTDnsConfig
} from '@guancecloud/ft_sdk/Index';

const proxyConfig: FTProxyConfig = {
  host: 'proxy.example.com',
  port: 8080,
  exclusionList: ['localhost', '127.0.0.1']
};

const proxyAuthenticator: FTProxyAuthenticator = {
  username: 'proxy-user',
  password: 'proxy-password'
};

const dnsConfig: FTDnsConfig = {
  servers: ['1.1.1.1', '8.8.8.8'],
  overHttpsUrl: 'https://dns.example.com/dns-query'
};

const sdkConfig = FTSDKConfig.builder(datawayUrl, clientToken)
  .setProxy(proxyConfig)
  .setProxyAuthenticator(proxyAuthenticator)
  .setDns(dnsConfig);

FTSDK.install(sdkConfig, this.context);

FTProxyConfig

필드 타입 필수 설명
host string 프록시 서버 주소
port number 프록시 서버 포트
exclusionList Array<string> 아니요 프록시를 사용하지 않는 호스트 목록입니다. NetworkKit의 프록시 예외 규칙을 따릅니다.
username string 아니요 프록시 사용자 이름입니다. setProxyAuthenticator(...)를 통해 별도로 설정할 수도 있습니다.
password string 아니요 프록시 비밀번호입니다. setProxyAuthenticator(...)를 통해 별도로 설정할 수도 있습니다.

FTProxyAuthenticator

필드 타입 필수 설명
username string 프록시 인증 사용자 이름
password string 프록시 인증 비밀번호

FTProxyConfigFTProxyAuthenticator에 동시에 인증 정보를 설정하는 경우, FTProxyAuthenticator의 설정이 우선 적용됩니다.

FTDnsConfig

필드 타입 필수 설명
servers Array<string> 아니요 사용자 정의 DNS 서버 주소입니다. 빈 문자열은 무시되며, 최대 처음 세 개의 유효한 주소가 사용됩니다.
overHttpsUrl string 아니요 DNS over HTTPS 서비스 주소

블랙리스트 필터링

ft-sdk 0.1.15부터 DataKit과 호환되는 블랙리스트 필터링을 지원합니다. 데이터가 로컬 캐시에 기록되기 전에 Logging 및 RUM 데이터를 필터링합니다. 이 기능은 기본적으로 활성화되어 있으며, setEnableDataFilter(false)로 비활성화할 수 있습니다.

블랙리스트 규칙은 로컬 규칙과 원격 규칙으로 나뉩니다:

  • 로컬 규칙은 setDataFilters를 통해 설정하며, logging, rum 두 가지 유형의 규칙을 지원합니다.
  • 데이터 필터링이 활성화되고 유효한 전송 주소가 있을 때, SDK는 /v1/datakit/pull?filters=true를 통해 DataKit 또는 DataWay에서 원격 logging, rum 규칙을 가져옵니다.
  • 로컬 규칙과 원격 규칙은 동시에 적용됩니다. 어느 한 규칙이라도 일치하면 해당 데이터는 폐기되어 로컬 캐시에 기록되거나 업로드되지 않습니다.
  • 블랙리스트 필터링은 LineDataModifier 이후, 로컬 캐시 기록 이전에 실행됩니다. setLineDataModifier와 블랙리스트 필터링이 동시에 설정된 경우, 필터링 규칙은 수정된 데이터를 기준으로 판단합니다.

규칙 표현식은 {} 안에 작성해야 하며, in, not in, match, not match 연산자를 지원합니다. 여러 조건은 and / or로 조합할 수 있습니다. 필드 출처에는 데이터 태그와 필드가 포함되며, source, measurement, class와 같은 데이터 타입 식별 필드도 지원합니다. match는 정규 표현식을 사용합니다.

import {
  FTSDK,
  FTSDKConfig,
  FTDataFilters
} from '@guancecloud/ft_sdk/Index';

const dataFilters: FTDataFilters = new Map<string, Array<string>>();
dataFilters.set('logging', [
  "{ source in ['df_rum_harmonyos_log'] and message match ['.*password.*'] }"
]);
dataFilters.set('rum', [
  "{ source in [resource] and resource_status in ['404', '503'] }"
]);

const sdkConfig = FTSDKConfig.builder(datawayUrl, clientToken)
  .setEnableDataFilter(true)
  .setDataFilters(dataFilters);

FTSDK.install(sdkConfig, this.context);

FTDataFilters에는 Map<string, Array<string>> 또는 동일한 구조의 객체를 전달할 수 있습니다. 분류 이름은 대소문자를 구분하지 않습니다. logging, rum 이외의 분류는 무시됩니다.

// 로컬 및 원격 블랙리스트 필터링을 비활성화하지만, 설정된 로컬 규칙은 유지합니다.
sdkConfig.setEnableDataFilter(false);

// 설정된 로컬 규칙을 지웁니다. 서버 측 원격 규칙에는 영향을 미치지 않습니다.
sdkConfig.setDataFilters(null);

원격 규칙의 가져오기 간격은 서버가 반환하는 pull_interval을 따릅니다. 서버가 유효한 값을 반환하지 않으면 SDK는 10초를 기본 간격으로 사용합니다. pull_interval은 초 단위 숫자 또는 단위가 포함된 문자열(예: 10, 30s, 2m, 1h)을 지원합니다. 런타임 중에 유효한 전송 주소로 전환하면 SDK는 이전 주소의 원격 규칙을 지우고 즉시 새 주소에서 다시 가져옵니다. 로컬 규칙은 계속 유지됩니다.

사용자 바인딩 및 해제

사용 방법

/**
 * 사용자 정보 바인딩 (사용자 ID만)
 * @param id 사용자 ID
 */
static bindRumUserDataById(id: string): void

/**
 * 사용자 정보 바인딩 (전체 사용자 데이터)
 * @param userData 사용자 데이터 객체
 */
static bindRumUserData(userData: UserData): void

/**
 * 사용자 정보 해제
 */
static unbindRumUserData(): void

UserData

메서드명 설명 필수 참고
setId 사용자 ID 설정 아니요
setName 사용자 이름 설정 아니요
setEmail 이메일 설정 아니요
setExts 사용자 확장 설정 아니요 추가 규칙은 사용자 정의 태그 및 글로벌 컨텍스트를 참조하세요.

코드 예제

import { FTSDK, UserData } from '@guancecloud/ft_sdk/Index';

// 방법 1: 사용자 ID만 바인딩 (빠른 바인딩에 권장)
FTSDK.bindRumUserDataById('user_001');

const userData = new UserData();
userData.setId('user_001');
userData.setName('test.user');
userData.setEmail('test@mail.com');
userData.setExts({
  'user_type': 'vip'
});
FTSDK.bindRumUserData(userData);

FTSDK.unbindRumUserData();

런타임 기능

자동 데이터 동기화 설정

SDK 초기화 후, FTSDK.setAutoSync(...)를 통해 캐시 데이터의 자동 동기화를 동적으로 활성화 또는 비활성화할 수 있습니다. 비활성화하면 SDK는 수집된 데이터를 로컬 캐시에 계속 기록하지만, 수집 후 자동으로 업로드를 트리거하지 않습니다. FTSDK.flushSyncData()와 함께 사용하여 데이터 동기화를 직접 관리할 수 있습니다.

import { FTSDK } from '@guancecloud/ft_sdk/Index';

// 자동 동기화 비활성화
FTSDK.setAutoSync(false);

// 자동 동기화 활성화
FTSDK.setAutoSync(true);

FTSDKConfig.setAutoSync(...)는 SDK 초기화 시 동기화 상태를 설정하는 데 사용됩니다. FTSDK.setAutoSync(...)는 SDK 초기화 후 동기화 상태를 동적으로 변경하는 데 사용됩니다.

데이터 수동 동기화

자동 동기화가 비활성화된 경우, 데이터 동기화를 수동으로 트리거할 수 있습니다:

import { FTSDK } from '@guancecloud/ft_sdk/Index';

FTSDK.flushSyncData();

자동 동기화가 활성화된 경우, SDK는 10초 집계 윈도우를 사용하여 짧은 시간 내에 연속적으로 생성된 데이터를 병합한 후 업로드합니다. flushSyncData()는 이 집계 윈도우를 기다리지 않습니다. 먼저 현재 처리 중인 RUM 및 Log worker 큐를 최대한 로컬 동기화 캐시로 플러시한 다음, 즉시 업로드 작업을 예약합니다. 큐 플러시가 실패하더라도 업로드 트리거를 계속 시도합니다.

SDK 캐시 데이터 정리

import { FTSDK } from '@guancecloud/ft_sdk/Index';

await FTSDK.clearAllData();

clearAllData()는 아직 전송되지 않은 모든 캐시 데이터를 삭제합니다. 여기에는 다음이 포함됩니다:

  • 동기화 데이터 테이블(sync_data_flat)의 모든 데이터
  • RUM 뷰 데이터 테이블(rum_view)의 모든 데이터
  • RUM 액션 데이터 테이블(rum_action)의 모든 데이터

문서 평가

이 페이지가 도움이 되었나요?