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 | 아니요 | RUM 데이터 소스 구분을 위한 사용자 정의 태그 추가. 추적 기능을 사용해야 하는 경우 매개변수 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¶
startAction과 addAction의 사용 차이
startAction은 내부적으로 Action 소요 시간을 자동 계산하며, 계산 기간 동안 주변에서 발생한Resource,LongTask,Error데이터와 최대한 연결하고 100ms 빈번 트리거 보호가 설정되어 있습니다. 사용자 작업 유형의 데이터에 권장됩니다.- 빈번한 호출이 필요하면
addAction을 사용하세요.addAction으로 전송된 Action은startAction과 충돌하지 않으며 현재Resource,LongTask,Error데이터와도 연결되지 않습니다.
사용 방법¶
/**
* 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 사용자 정의 규칙에 대한 자세한 내용은 데이터 수집 사용자 정의 규칙을 참고하세요.