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를 설치한 디바이스에서 접근 가능해야 합니다. 참고: datakitUrl과 datawayUrl 중 하나만 설정해야 합니다. |
datawayUrl |
string |
예 | 공용망 DataWay의 전송 URL 주소입니다. [RUM] 애플리케이션에서 가져옵니다. 예: https://open.dataway.url, SDK를 설치한 디바이스에서 접근 가능해야 합니다. 참고: datakitUrl과 datawayUrl 중 하나만 설정해야 합니다. |
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.setLogCacheLimitCount 및 FTRUMConfig.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 |
예 | 프록시 인증 비밀번호 |
FTProxyConfig와 FTProxyAuthenticator에 동시에 인증 정보를 설정하는 경우, 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 초기화 후 동기화 상태를 동적으로 변경하는 데 사용됩니다.
데이터 수동 동기화¶
자동 동기화가 비활성화된 경우, 데이터 동기화를 수동으로 트리거할 수 있습니다:
자동 동기화가 활성화된 경우, SDK는 10초 집계 윈도우를 사용하여 짧은 시간 내에 연속적으로 생성된 데이터를 병합한 후 업로드합니다. flushSyncData()는 이 집계 윈도우를 기다리지 않습니다. 먼저 현재 처리 중인 RUM 및 Log worker 큐를 최대한 로컬 동기화 캐시로 플러시한 다음, 즉시 업로드 작업을 예약합니다. 큐 플러시가 실패하더라도 업로드 트리거를 계속 시도합니다.
SDK 캐시 데이터 정리¶
clearAllData()는 아직 전송되지 않은 모든 캐시 데이터를 삭제합니다. 여기에는 다음이 포함됩니다:
- 동기화 데이터 테이블(
sync_data_flat)의 모든 데이터 - RUM 뷰 데이터 테이블(
rum_view)의 모든 데이터 - RUM 액션 데이터 테이블(
rum_action)의 모든 데이터