콘텐츠로 이동

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 아니요 사용자 모니터링 데이터 소스 구분을 위한 사용자 정의 태그를 추가합니다. 추적 기능을 사용해야 하는 경우 매개변수 keytrack_id, value는 임의의 숫자 값입니다. 추가 규칙 주의사항은 여기를 참조하세요
enableTrackNativeCrash boolean 아니요 Android Java CrashOC/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 사용자 데이터 추적

FTRUMConfigenableAutoTrackUserAction, 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 사용자 정의 규칙에 대한 자세한 내용은 데이터 수집 사용자 정의 규칙을 참조하세요.

문서 평가

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