RUM 구성¶
RUM 초기화 구성¶
let rumConfig: FTRUMConfig = {
androidAppId: Config.ANDROID_APP_ID,
iOSAppId: Config.IOS_APP_ID,
enableAutoTrackUserAction: true,
enableAutoTrackError: true,
enableNativeUserAction: true,
enableNativeUserView: false,
enableNativeUserResource: true,
errorMonitorType: ErrorMonitorType.all,
deviceMonitorType: DeviceMetricsMonitorType.all,
detectFrequency: DetectFrequency.rare,
};
await FTReactNativeRUM.setConfig(rumConfig);
| 필드 | 유형 | 필수 | 설명 |
|---|---|---|---|
| androidAppId | string | 예 | app_id입니다. 실제 사용자 모니터링(RUM) 콘솔에서 신청 |
| iOSAppId | string | 예 | app_id입니다. 실제 사용자 모니터링(RUM) 콘솔에서 신청 |
| sampleRate | number | 아니요 | 샘플링 비율, 범위 [0,1], 0은 수집 안 함, 1은 전체 수집, 기본값 1. 동일한 session_id 아래 모든 View, Action, LongTask, Error 데이터에 적용 |
| sessionOnErrorSampleRate | number | 아니요 | 오류 수집 비율 설정. 세션이 sampleRate에 의해 샘플링되지 않은 경우, 세션 중 오류가 발생하면 오류 발생 전 1분 범위의 데이터를 수집할 수 있습니다. 범위 [0,1], 0은 수집 안 함, 1은 전체 수집, 기본값 0. 동일한 session_id 아래 모든 View, Action, LongTask, Error 데이터에 적용. SDK 0.3.14 이상 지원 |
| enableAutoTrackUserAction | boolean | 아니요 | React Native 컴포넌트 클릭 이벤트를 자동 수집할지 여부. 활성화 후 accessibilityLabel을 함께 사용하여 actionName을 설정할 수 있음 |
| enableAutoTrackError | boolean | 아니요 | React Native Error를 자동 수집할지 여부. 기본값 false |
| enableNativeUserAction | boolean | 아니요 | Native Action을 추적할지 여부. 네이티브 Button 클릭 이벤트, 앱 시작 이벤트. 기본값 false |
| enableNativeUserView | boolean | 아니요 | Native View를 자동 추적할지 여부. 순수 React Native 앱은 비활성화를 권장. 기본값 false |
| enableNativeUserResource | boolean | 아니요 | Native Resource 자동 추적을 활성화할지 여부. React Native의 네트워크 요청은 iOS, Android에서 시스템 API를 사용하여 구현되므로, 활성화 시 모든 resource 데이터를 함께 수집할 수 있습니다. 기본값 false |
| errorMonitorType | enum ErrorMonitorType | 아니요 | 보조 모니터링 정보 설정. RUM Error 데이터에 추가 모니터링 데이터를 추가합니다. 기본적으로 비활성화 |
| deviceMonitorType | enum DeviceMetricsMonitorType | 아니요 | View 주기에 모니터링 데이터를 추가합니다. 기본적으로 비활성화 |
| detectFrequency | enum DetectFrequency | 아니요 | 뷰 성능 모니터링 샘플링 주기. 기본값 DetectFrequency.normal |
| enableResourceHostIP | boolean | 아니요 | 요청 대상 도메인 주소의 IP를 수집할지 여부. 적용 범위: enableNativeUserResource = true인 기본 수집에만 영향을 미칩니다. iOS: >= iOS 13 지원; Android: 동일 OkhttpClient에 IP 캐시 메커니즘 존재 |
| globalContext | object | 아니요 | 사용자 모니터링 데이터 소스 구분을 위한 사용자 정의 태그를 추가합니다. 추적 기능을 사용해야 하는 경우 매개변수 key는 track_id, value는 임의의 숫자 값입니다. 추가 규칙 주의사항은 여기를 참조하세요 |
| enableTrackNativeCrash | boolean | 아니요 | Android Java Crash 및 OC/C/C++ 크래시 모니터링을 활성화할지 여부. 기본값 false |
| enableTrackNativeAppANR | boolean | 아니요 | Native ANR 모니터링을 활성화할지 여부. 기본값 false |
| enableTrackNativeFreeze | boolean | 아니요 | Native Freeze를 수집할지 여부. 기본값 false |
| nativeFreezeDurationMs | number | 아니요 | Native Freeze 멈춤 임계값을 설정합니다. 범위 [100,), 단위 밀리초. iOS 기본값 250ms, Android 기본값 1000ms |
| rumDiscardStrategy | string | 아니요 | 폐기 전략: FTRUMCacheDiscard.discard 새 데이터 폐기(기본값), FTRUMCacheDiscard.discardOldest 오래된 데이터 폐기 |
| rumCacheLimitCount | number | 아니요 | 로컬 캐시 최대 RUM 항목 수 제한 [10_000,), 기본값 100_000 |
| enableTraceWebView | boolean | 아니요 | WebView 데이터 수집을 활성화할지 여부. 기본값 true. SDK 0.3.16 이상 지원 |
| allowWebViewHost | Array |
아니요 | 데이터 추적을 허용할 WebView host 주소를 설정합니다. null이면 전체 수집, 기본값 null. SDK 0.3.16 이상 지원 |
| iosCrashMonitoringType | enum IOSCrashMonitoringType | 아니요 | SDK 크래시 모니터링 유형 범위를 구성합니다. 기본값 IOSCrashMonitoringType.highCompatibility. SDK 0.3.16 이상 지원 |
RUM 사용자 데이터 추적¶
FTRUMConfig는 enableAutoTrackUserAction, enableAutoTrackError, enableNativeUserAction, enableNativeUserView, enableNativeUserResource 등의 구성을 통해 자동 수집을 구현할 수 있습니다. 수동 수집이 필요한 경우 아래 API를 사용할 수도 있습니다.
View¶
SDK 초기화 RUM 구성 시 enableNativeUserView를 구성하여 Native View 자동 수집을 활성화할 수 있습니다. React Native View는 React Native가 화면 네비게이션을 생성하는 다양한 라이브러리를 제공하므로 기본적으로 수동 수집만 지원합니다. React Native View를 자동 수집해야 하는 경우 아래 "React Native View 자동 수집"을 계속 읽어보세요.
사용 방법¶
/**
* view 로드 시간.
*/
onCreateView(viewName: string, loadTime: number): Promise<void>;
/**
* view 시작.
*/
startView(viewName: string, property?: object): Promise<void>;
/**
* view 종료.
*/
stopView(property?: object): Promise<void>;
사용 예시¶
import { FTReactNativeRUM } from '@cloudcare/react-native-mobile';
FTReactNativeRUM.onCreateView('viewName', duration);
FTReactNativeRUM.startView('viewName', { 'custom.foo': 'something' });
FTReactNativeRUM.stopView({ 'custom.foo': 'something' });
React Native View 자동 수집¶
React Native에서 react-native-navigation, react-navigation 또는 Expo Router 네비게이션 컴포넌트를 사용하는 경우, 아래 방법을 참고하여 React Native View를 자동 수집할 수 있습니다.
react-native-navigation¶
example의 FTRumReactNavigationTracking.tsx 파일을 프로젝트에 추가하세요.
FTRumReactNativeNavigationTracking.startTracking() 메서드를 호출하여 수집을 시작합니다.
import { FTRumReactNativeNavigationTracking } from './FTRumReactNativeNavigationTracking';
function startReactNativeNavigation() {
FTRumReactNativeNavigationTracking.startTracking();
registerScreens();
Navigation.events().registerAppLaunchedListener(async () => {
await Navigation.setRoot({
root: {
stack: {
children: [{ component: { name: 'Home' } }],
},
},
});
});
}
react-navigation¶
example의 FTRumReactNavigationTracking.tsx 파일을 프로젝트에 추가하세요.
- 방법 1:
createNativeStackNavigator();를 사용하여 네이티브 네비게이션 스택을 생성하는 경우, screenListeners를 추가하는 방식으로 수집을 시작하는 것을 권장합니다. 이렇게 하면 페이지 로드 시간을 통계할 수 있습니다. 자세한 사용법은 다음과 같습니다.
import { FTRumReactNavigationTracking } from './FTRumReactNavigationTracking';
import { createNativeStackNavigator } from '@react-navigation/native-stack';
const Stack = createNativeStackNavigator();
<Stack.Navigator
screenListeners={FTRumReactNavigationTracking.StackListener}
initialRouteName="Home"
>
<Stack.Screen name="Home" component={Home} options={{ headerShown: false }} />
<Stack.Screen name="Mine" component={Mine} options={{ title: 'Mine' }} />
</Stack.Navigator>;
- 방법 2:
createNativeStackNavigator();를 사용하지 않는 경우, NavigationContainer 컴포넌트에 자동 수집 메서드를 추가해야 합니다. 다음과 같습니다.
참고: 이 방법으로는 페이지 로드 시간을 수집할 수 없습니다.
import { FTRumReactNavigationTracking } from './FTRumReactNavigationTracking';
import type { NavigationContainerRef } from '@react-navigation/native';
const navigationRef: React.RefObject<
NavigationContainerRef<ReactNavigation.RootParamList>
> = React.createRef();
<NavigationContainer
ref={navigationRef}
onReady={() => {
FTRumReactNavigationTracking.startTrackingViews(navigationRef.current);
}}
>
<Stack.Navigator initialRouteName="Home">
<Stack.Screen name="Home" component={Home} options={{ headerShown: false }} />
<Stack.Screen name="Mine" component={Mine} options={{ title: 'Mine' }} />
</Stack.Navigator>
</NavigationContainer>;
자세한 사용 예시는 example을 참조하세요.
Expo Router¶
Expo Router를 사용하는 경우, app/_layout.js 파일에 다음 메서드를 추가하여 데이터를 수집합니다.
import { useEffect } from 'react';
import { useSegments, usePathname, Slot } from 'expo-router';
import { FTReactNativeRUM } from '@cloudcare/react-native-mobile';
export default function Layout() {
const pathname = usePathname();
const segments = useSegments();
const viewKey = segments.join('/');
useEffect(() => {
FTReactNativeRUM.startView(viewKey);
}, [viewKey, pathname]);
return <Slot />;
}
Action¶
사용 방법¶
/**
* RUM Action을 시작합니다.
*/
startAction(actionName: string, actionType: string, property?: object): Promise<void>;
/**
* Action 이벤트를 추가합니다.
*/
addAction(actionName: string, actionType: string, property?: object): Promise<void>;
사용 예시¶
import { FTReactNativeRUM } from '@cloudcare/react-native-mobile';
FTReactNativeRUM.startAction('actionName', 'actionType', { 'custom.foo': 'something' });
FTReactNativeRUM.addAction('actionName', 'actionType', { 'custom.foo': 'something' });
Error¶
사용 방법¶
/**
* 예외 캡처 및 로그 수집.
*/
addError(stack: string, message: string, property?: object): Promise<void>;
/**
* 지정된 오류 유형의 예외 캡처 및 로그 수집.
*/
addErrorWithType(type: string, stack: string, message: string, property?: object): Promise<void>;
사용 예시¶
import { FTReactNativeRUM } from '@cloudcare/react-native-mobile';
FTReactNativeRUM.addError('error stack', 'error message', { 'custom.foo': 'something' });
FTReactNativeRUM.addErrorWithType('custom_error', 'error stack', 'error message', {
'custom.foo': 'something',
});
Resource¶
사용 방법¶
/**
* 리소스 요청을 시작합니다.
*/
startResource(key: string, property?: object): Promise<void>;
/**
* 리소스 요청을 종료합니다.
*/
stopResource(key: string, property?: object): Promise<void>;
/**
* 리소스 데이터 메트릭을 전송합니다.
*/
addResource(key: string, resource: FTRUMResource, metrics?: FTRUMResourceMetrics): Promise<void>;
사용 예시¶
import { FTReactNativeRUM } from '@cloudcare/react-native-mobile';
async function getHttp(url: string) {
const key = Utils.getUUID();
FTReactNativeRUM.startResource(key);
const fetchOptions = {
method: 'GET',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
};
let res: Response;
try {
res = await fetch(url, fetchOptions);
} finally {
const resource: FTRUMResource = {
url: url,
httpMethod: fetchOptions.method,
requestHeader: fetchOptions.headers,
};
if (res) {
resource.responseHeader = res.headers;
resource.resourceStatus = res.status;
resource.responseBody = await res.text();
}
FTReactNativeRUM.stopResource(key);
FTReactNativeRUM.addResource(key, resource);
}
}
Action 사용자 정의 규칙에 대한 자세한 내용은 데이터 수집 사용자 정의 규칙을 참조하세요.