Web 애플리케이션 연동¶
이 페이지 구성을 완료하면 Browser RUM SDK가 페이지 View, 리소스 요청, 프런트엔드 오류, 사용자 작업을 자동으로 수집하여 Guance로 데이터를 전송합니다.
연동 경로 선택¶
먼저 애플리케이션 형태에 따라 진입 방식을 선택하여 View가 중복 구성되거나 서버 렌더링 단계에서 브라우저 API에 접근하는 것을 방지합니다.
| 애플리케이션 형태 | 권장 진입 방식 | 설명 |
|---|---|---|
| Webpack, Vite, Rollup 등 빌드 도구 사용 | NPM 연동 | 버전 관리와 필요에 따른 통합이 용이한 권장 방식 |
| 프런트엔드 빌드 프로세스 없음 | CDN 비동기 로드 | 페이지 파싱을 차단하지 않지만 초기화 전 요청과 오류를 놓칠 수 있음 |
| 페이지 초기 단계의 오류와 요청을 반드시 수집해야 하는 경우 | CDN 동기 로드 | 최대한 빨리 초기화하지만 페이지 로딩 시간을 차지함 |
| 기본 RUM만 필요하고 프런트엔드 번들 크기를 고려하는 경우 | 슬림 RUM SDK | 일반적인 RUM 수집은 유지하되 Session Replay와 전송 압축은 포함하지 않음 |
| React, Vue, Angular 단일 페이지 애플리케이션 | 프런트엔드 프레임워크 플러그인 연동 | Router View와 프레임워크 오류를 자동으로 관리 |
| Next.js, Nuxt | SSR 프레임워크 연동 | 서버와 브라우저 환경을 구분하여 View 중복 방지 |
| Electron | Electron 애플리케이션 연동 | renderer process에서만 초기화 |
연동 정보 준비¶
- 「실제 사용자 모니터링(RUM) > 애플리케이션 목록 > 애플리케이션 생성 > Web」으로 이동합니다.
- 애플리케이션을 생성하고 콘솔에서 생성된
applicationId,env,version등 구성을 확인합니다. -
데이터 전송 방식을 선택합니다:
-
공용 OpenWay:
site와clientToken을 획득하며 DataKit 배포가 필요 없습니다. - DataKit 직접 연결:
datakitOrigin을 준비합니다. DataKit에서 RUM 수집기를 활성화하고 공용망에서 접근 가능하며 IP 지리 정보 라이브러리가 설치된 상태로 구성합니다.
두 가지 전송 방식을 동시에 구성하지 마세요
공용 OpenWay는 site와 clientToken을 사용하고, DataKit 직접 연결은 datakitOrigin을 사용합니다. 현재 연동 방식에 필요한 필드만 유지하세요.
데이터 전송 방식¶
SDK 통합¶
연동 방식 |
설명 |
|---|---|
| NPM | SDK 코드를 프런트엔드 프로젝트에 번들링하여 버전 고정이 용이합니다. SDK 초기화 전의 요청과 오류는 놓칠 수 있습니다. |
| CDN 비동기 로드 | CDN을 통해 SDK 스크립트를 비동기로 불러와 페이지 로딩 성능에 영향을 주지 않습니다. 초기화 전의 요청과 오류 수집은 놓칠 수 있습니다. |
| CDN 동기 로드 | CDN을 통해 SDK 스크립트를 동기로 불러와 모든 오류와 성능 지표를 빠짐없이 수집할 수 있습니다. 다만 페이지 로딩 성능에 영향을 줄 수 있습니다. |
NPM 연동¶
프런트엔드 프로젝트에서 SDK를 설치하고 불러옵니다:
프로젝트에서 SDK를 초기화합니다:
import { datafluxRum } from "@cloudcare/browser-rum"
datafluxRum.init({
applicationId: "<APPLICATION_ID>",
site: "<PUBLIC_OPENWAY_URL>",
clientToken: "<CLIENT_TOKEN>",
service: "web-app",
env: "production",
version: "1.0.0",
sessionSampleRate: 100,
trackUserInteractions: true
})
CDN 동기 로드¶
HTML 파일에 스크립트를 추가합니다:
<script
src="https://static.guance.com/browser-sdk/v3/dataflux-rum.js"
type="text/javascript"
></script>
<script>
window.DATAFLUX_RUM &&
window.DATAFLUX_RUM.init({
applicationId: "<APPLICATION_ID>",
site: "<PUBLIC_OPENWAY_URL>",
clientToken: "<CLIENT_TOKEN>",
service: "web-app",
env: "production",
version: "1.0.0",
sessionSampleRate: 100,
trackUserInteractions: true
})
</script>
CDN 비동기 로드¶
HTML 파일에 스크립트를 추가합니다:
<script>
;(function (h, o, u, n, d) {
h = h[d] = h[d] || {
q: [],
onReady: function (c) {
h.q.push(c)
},
}
d = o.createElement(u)
d.async = 1
d.src = n
n = o.getElementsByTagName(u)[0]
n.parentNode.insertBefore(d, n)
})(
window,
document,
"script",
"https://static.guance.com/browser-sdk/v3/dataflux-rum.js",
"DATAFLUX_RUM"
)
DATAFLUX_RUM.onReady(function () {
DATAFLUX_RUM.init({
applicationId: "<APPLICATION_ID>",
site: "<PUBLIC_OPENWAY_URL>",
clientToken: "<CLIENT_TOKEN>",
service: "web-app",
env: "production",
version: "1.0.0",
sessionSampleRate: 100,
trackUserInteractions: true
})
})
</script>
위 예시는 공용 OpenWay를 사용합니다. DataKit 직접 연결을 사용할 때는 site와 clientToken을 제거하고 datakitOrigin을 구성하세요.
슬림 RUM SDK¶
RUM SDK 3.3.3부터 슬림 버전을 제공합니다. 슬림 버전은 전체 버전과 동일한 초기화 방식을 사용하며 View, Resource, Long Task, Error, Action, 사용자 및 글로벌 Context, 사용자 정의 이벤트, 분산 추적 등 일반적인 RUM 기능을 지원합니다. 페이지 녹화가 필요 없고 프런트엔드 번들 크기를 줄이려는 애플리케이션에 적합합니다.
NPM 연동¶
일반 RUM 패키지를 동일 버전의 슬림 패키지로 교체합니다:
import { datafluxRum } from "@cloudcare/browser-rum-slim"
datafluxRum.init({
applicationId: "<APPLICATION_ID>",
site: "<PUBLIC_OPENWAY_URL>",
clientToken: "<CLIENT_TOKEN>",
service: "web-app",
env: "production",
version: "1.0.0",
sessionSampleRate: 100,
trackUserInteractions: true
})
CDN 연동¶
동기 또는 비동기 로드 방식은 전체 버전과 동일하며, 스크립트 파일 이름만 슬림 버전에 해당하는 파일로 교체하면 됩니다. 다음은 동기 로드 예시입니다:
<script
src="https://static.guance.com/browser-sdk/v3/dataflux-rum-slim.js"
type="text/javascript"
></script>
<script>
window.DATAFLUX_RUM &&
window.DATAFLUX_RUM.init({
applicationId: "<APPLICATION_ID>",
site: "<PUBLIC_OPENWAY_URL>",
clientToken: "<CLIENT_TOKEN>",
service: "web-app",
env: "production",
version: "1.0.0",
sessionSampleRate: 100,
trackUserInteractions: true
})
</script>
전체 버전과의 기능 차이¶
슬림 버전에는 다음 기능이 포함되지 않습니다:
- Session Replay 및
startSessionReplayRecording(),stopSessionReplayRecording(),isRecording()등 녹화 API. - Canvas 2D, WebGL/WebGL2 녹화 및
snapshotCanvas()등 Canvas API. compressIntakeRequests전송 압축 및 해당 Worker.
슬림 버전은 sessionReplaySampleRate, sessionReplayOnErrorSampleRate, replayCanvasEnabled를 강제로 비활성화하고 compressIntakeRequests를 강제로 false로 설정합니다. 연동 시 이러한 구성을 전달하지 말고 workerUrl이나 replayCanvasWorkerUrl도 설정할 필요가 없습니다. 이후에 세션 리플레이, Canvas 녹화 또는 압축 전송이 필요하면 NPM 패키지 또는 CDN 파일을 전체 버전으로 다시 전환하면 되며, 다른 기본 초기화 파라미터는 계속 사용할 수 있습니다.
연동 확인¶
- SDK가 연동된 페이지를 열고 페이지 이동, 버튼 클릭, API 요청을 한 번씩 수행합니다.
- 브라우저 개발자 도구의 Network에서
/v1/write/rum을 필터링하여 성공한 전송 요청이 있는지 확인합니다. - Console에서
Application ID is not configured,datakitOrigin or site is not configured등 초기화 오류가 없는지 확인합니다. - 「RUM > 애플리케이션 목록」으로 이동하여 해당 Web 애플리케이션을 열고 탐색기에서
service,env,version으로 필터링하여 View, Resource 또는 Action 데이터가 있는지 확인합니다.
View 데이터가 보이면 기본 연동이 성공한 것입니다
Error, Resource, Action은 페이지에서 해당 이벤트가 실제로 발생해야 나타납니다. 데이터가 없으면 먼저 현재 Session이 sessionSampleRate에 포함되는지 확인한 후 FAQ를 참조하세요.
자주 사용하는 선택 구성¶
기본 데이터 확인이 끝나면 필요에 따라 다른 기능을 활성화합니다:
| 목표 | 구성 또는 API | 문서 |
|---|---|---|
| 프런트엔드·백엔드 분산 추적 연동 | allowedTracingUrls, traceType |
분산 추적 구성 |
| 익명 방문자 기준 API 요청 빈도 제한 | visitorId, resetVisitorId() |
방문자 식별자 Visitor ID |
| 수집 비율 제어 | sessionSampleRate, startSession() |
샘플링 구성 |
| 세션 리플레이 활성화 | startSessionReplayRecording() |
Web 세션 리플레이 |
| SPA Router View 자동 관리 | plugins |
프런트엔드 프레임워크 플러그인 연동 |
| WebGL/WebGL2 녹화 | plugins, Canvas 자동 녹화 |
Canvas 녹화 사용 설명서 |
| 로그인 사용자 식별 | setUser() |
사용자 지정 식별자 |
| 비즈니스 필드 또는 이벤트 추가 | Global Context, addAction(), addError() |
사용자 정의 데이터 및 이벤트 |
분산 추적 구성(선택)¶
NPM + TypeScript 연동 시 traceType는 해당 브랜드의 browser-core 패키지에서 가져온 TraceType 열거형을 사용해야 합니다:
import { TraceType } from "@cloudcare/browser-core"
import { datafluxRum } from "@cloudcare/browser-rum"
datafluxRum.init({
applicationId: "<APPLICATION_ID>",
site: "<PUBLIC_OPENWAY_URL>",
clientToken: "<CLIENT_TOKEN>",
allowedTracingUrls: ["https://api.example.com"],
traceType: TraceType.DDTRACE
})
TraceType.DDTRACE의 런타임 값은 여전히 "ddtrace"입니다. CDN 연동에는 모듈 임포트가 없으므로 명시적으로 구성할 때 해당 런타임 문자열을 사용합니다. 분산 추적을 활성화한 후에는 API 서버에서 해당 Trace Header도 허용해야 합니다. 자세한 내용은 APM과 RUM 연동을 참조하세요.
일반 Session이 샘플링에 포함되지 않았지만 Trace Header를 백엔드에 전달해야 하는 경우 allowTraceHeaderWithoutSession을 명시적으로 활성화할 수 있습니다:
datafluxRum.init({
applicationId: "<APPLICATION_ID>",
site: "<PUBLIC_OPENWAY_URL>",
clientToken: "<CLIENT_TOKEN>",
sessionSampleRate: 0,
sessionOnErrorSampleRate: 0,
allowedTracingUrls: ["https://api.example.com"],
allowTraceHeaderWithoutSession: true
})
활성화하면 SDK는 여전히 allowedTracingUrls에 해당하는 XHR 및 Fetch 요청에만 Trace Header를 주입합니다. 이 구성은 RUM Session을 생성하거나 강제로 활성화하지 않으며, 샘플링에 포함되지 않은 Session의 View, Error, Resource, Action 데이터도 전송하지 않습니다. API 서비스에서도 선택한 traceType에 해당하는 요청 헤더를 허용해야 하며, 크로스 오리진 요청에는 CORS도 올바르게 구성해야 합니다.
파라미터 구성¶
초기화 파라미터¶
| 파라미터 | 유형 |
필수 여부 |
기본값 |
설명 |
|---|---|---|---|---|
applicationId |
String | 예 | Guance에서 생성한 애플리케이션 ID. | |
datakitOrigin |
String | DataKit 직접 연결 시 | DataKit 데이터 전송 주소. 형식은 프로토콜(:// 포함) + 도메인 또는 IP + 선택적 포트이며, 예: https://datakit.example.com. |
|
clientToken |
String | 공용 OpenWay 시 | 공용 OpenWay 데이터 전송 토큰. Guance 콘솔에서 획득합니다. | |
site |
String | 공용 OpenWay 시 | 공용 OpenWay 데이터 전송 주소. Guance 콘솔에서 획득합니다. | |
env |
String | 아니요 | Web 애플리케이션의 현재 환경. 예: prod: 운영 환경, gray: 카나리 환경, pre: 사전 배포 환경, common: 일반 환경, local: 로컬 환경. | |
version |
String | 아니요 | Web 애플리케이션의 버전 번호. | |
service |
String | 아니요 | 현재 애플리케이션의 서비스 이름. 기본값은 browser이며 사용자 정의 구성이 가능합니다. |
|
sessionSampleRate |
Number | 아니요 | 100 |
메트릭 데이터 수집 비율: 100은 전체 수집을, 0은 수집하지 않음을 의미합니다. |
sessionOnErrorSampleRate |
Number | 아니요 | 0 |
오류 세션 보상 샘플링 비율: 세션이 sessionSampleRate에 포함되지 않았지만 세션 중 오류가 발생한 경우 해당 비율로 수집합니다. 이러한 세션은 오류 발생 시 이벤트 기록을 시작하여 세션이 종료될 때까지 계속 기록합니다. SDK 버전 요구 사항: >= 3.2.19 |
sessionReplaySampleRate |
Number | 아니요 | 100 |
Session Replay 데이터 수집 비율: 100은 전체 수집을, 0은 수집하지 않음을 의미합니다. |
sessionReplayOnErrorSampleRate |
Number | 아니요 | 0 |
Session Replay 오류 세션 리플레이 보상 샘플링 비율: 세션이 sessionReplaySampleRate에 포함되지 않았지만 세션 중 오류가 발생한 경우 해당 비율로 수집합니다. 이러한 리플레이는 오류 발생 전 최대 1분간의 이벤트를 기록하고 세션이 종료될 때까지 계속 기록합니다. SDK 버전 요구 사항: >= 3.2.19 |
trackSessionAcrossSubdomains |
Boolean | 아니요 | false |
동일한 도메인 아래 서브도메인 간에 세션 쿠키를 공유합니다. |
usePartitionedCrossSiteSessionCookie |
Boolean | 아니요 | false |
분할된 보안 크로스 사이트 세션 쿠키 활성화 여부 자세히 보기 |
useSecureSessionCookie |
Boolean | 아니요 | false |
보안 세션 쿠키를 사용합니다. 이 경우 보안되지 않은(비 HTTPS) 연결에서 전송되는 RUM 이벤트가 비활성화됩니다. |
traceType |
TraceType |
아니요 | TraceType.DDTRACE(런타임 값 ddtrace) |
분산 추적 도구 유형을 구성합니다. NPM 연동은 TraceType 열거형을, CDN 연동은 해당 런타임 문자열을 사용합니다. 현재 DDTRACE(ddtrace), ZIPKIN_MULTI_HEADER(zipkin), ZIPKIN_SINGLE_HEADER(zipkin_single_header), W3C_TRACEPARENT(w3c_traceparent), W3C_TRACEPARENT_64(w3c_traceparent_64bit), SKYWALKING_V3(skywalking_v3), JAEGER(jaeger)를 지원합니다.❗️ 1. OpenTelemetry는 zipkin_single_header, w3c_traceparent, zipkin, jaeger 4가지 유형을 지원합니다.2. 이 구성이 적용되려면 allowedTracingUrls가 설정되어야 합니다.3. 해당 유형을 구성할 때 API 서비스에 맞는 Access-Control-Allow-Headers를 설정해야 합니다. 자세한 내용은 APM과 RUM 연동을 참조하세요. |
traceId128Bit |
Boolean | 아니요 | false |
traceID를 128비트 모드로 생성할지 여부. traceType과 대응되며 현재 zipkin, jaeger를 지원합니다. |
allowedTracingUrls |
Array | 아니요 | [] |
Trace Header 주입을 허용하는 요청 URL 매칭 목록. 배열 항목은 전체 URL, 정규식, 매칭 함수 또는 match와 traceType을 포함하는 객체가 될 수 있습니다. 예: ["https://api.example.com/xxx", /https:\/\/.*\.my-api-domain\.com\/xxx/, (url) => url.includes("/api/")]. |
allowTraceHeaderWithoutSession |
Boolean | 아니요 | false |
현재 RUM Session이 샘플링에 포함되지 않은 경우에도 allowedTracingUrls에 해당하는 XHR 및 Fetch 요청에 Trace Header를 주입할지 여부. 활성화해도 Session이 생성되지 않으며 샘플링에 포함되지 않은 Session의 RUM 데이터도 전송하지 않습니다. |
allowedTracingOrigins |
Array | 아니요 | [] |
더 이상 사용되지 않으며 이전 버전 구성과의 호환성을 위해서만 유지됩니다. 신규 연동은 allowedTracingUrls를 사용하세요. 둘 다 구성하면 allowedTracingUrls가 이 구성을 덮어씁니다. |
trackUserInteractions |
Boolean | 아니요 | false |
사용자 행동 수집 활성화 여부. |
enablePrivacyForActionName |
Boolean | 아니요 | false |
자동 Action 이름이 DOM 개인정보 보호 수준을 따를지 여부. 활성화하면 마스킹된 이름은 고정 플레이스홀더를 사용하고, 숨겨진 요소의 클릭은 자동 Action을 생성하지 않습니다. 명시적으로 구성된 Action 이름 속성은 계속 사용할 수 있습니다. SDK 버전 요구 사항: >= 3.3.14 자세한 내용은 자동 Action 이름 보호를 참조하세요. |
trackViewsManually |
Boolean | 아니요 | false |
SDK의 자동 View를 비활성화하고 애플리케이션이 startView()를 호출하여 View를 수동으로 시작할지 여부. 프레임워크 Router 플러그인이 이 구성을 자동으로 관리하므로 비즈니스에서 중복 설정할 필요가 없습니다. 자세한 내용 참조 |
plugins |
Array | 아니요 | [] |
RUM 플러그인 등록. 반드시 init() 시 전달해야 합니다. 프레임워크 플러그인은 React, Vue, Angular, Next.js, Nuxt의 라우터 View와 프레임워크 오류를 수집할 수 있습니다. SDK 버전 요구 사항: >= 3.3.6 자세한 내용은 프런트엔드 프레임워크 플러그인 연동을 참조하세요. WebGL Replay는 SDK 3.3.7부터 제공되며 RUM 메인 패키지 버전 >= 3.3.7이 필요합니다. 플러그인과 메인 패키지는 동일한 SDK 릴리스 버전을 사용할 것을 권장합니다. 자세한 내용은 Canvas 녹화 사용 설명서를 참조하세요. |
enableExperimentalFeatures |
Array | 아니요 | [] |
실험 기능 활성화. ["track_websockets"]를 구성하면 네이티브 WebSocket 연결 수준의 Resource를 수집할 수 있습니다. SDK 버전 요구 사항: >= 3.3.6 자세한 내용 참조 |
actionNameAttribute |
String | 아니요 | 버전 요구 사항: >3.1.2. 요소에 사용자 정의 속성을 추가하여 Action 이름을 지정합니다. 자세한 사용 방법은 관련 문서를 참조하세요. |
|
beforeSend |
Function(event, context):Boolean | 아니요 | 버전 요구 사항: >3.1.2. 데이터 차단 및 데이터 수정. 자세한 내용 참조 |
|
storeContextsToLocal |
Boolean | 아니요 | 버전 요구 사항: >3.1.2. setUser, addGlobalContext API로 추가한 사용자 정의 데이터 등을 로컬 localStorage에 캐시할지 여부. |
|
storeContextsKey |
String | 아니요 | 버전 요구 사항: >3.1.18. localStorage에 저장할 key를 정의합니다. 기본값은 비어 있으며 자동 생성됩니다. 이 파라미터는 동일한 도메인에서 서로 다른 하위 경로가 store를 공유하는 문제를 구분하기 위한 것입니다. |
|
compressIntakeRequests |
Boolean | 아니요 | RUM 데이터 요청 내용을 압축하여 대량 데이터 전송 시 대역폭 사용량과 데이터 전송 요청 수를 줄입니다. 압축은 Web Worker 스레드에서 수행됩니다. CSP 보안 정책은 CSP 보안을 참조하세요. SDK 버전 요구 사항: >= 3.2.0. DataKit 버전 요구 사항: >= 1.60. 배포 플랜 요구 사항: >= 1.96.178 |
|
workerUrl |
String | 아니요 | Session Replay와 compressIntakeRequests 데이터 압축은 모두 Web Worker 스레드에서 수행됩니다. 따라서 기본적으로 CSP 보안 접근이 활성화된 경우 worker-src blob:를 허용해야 합니다. 이 구성은 자체 호스팅 Worker 주소를 지정할 수 있게 합니다. CSP 보안 정책은 CSP 보안을 참조하세요. SDK 버전 요구 사항: >= 3.2.0. |
|
remoteConfiguration |
Boolean | 아니요 | 데이터 수집 원격 구성 기능 활성화 여부. 기본적으로 비활성화됩니다. 원격 구성 기능은 새 버전을 배포하지 않고도 데이터 수집 구성 항목을 동적으로 수정할 수 있습니다. 예를 들어 원격 구성에서 샘플링 비율, 사용자 행동 수집 활성화 여부 등을 수정할 수 있습니다. 원격 구성 기능을 사용하려면 Guance 콘솔에서 환경 변수 설정을 활성화해야 합니다. SDK 버전 요구 사항: >= 3.2.20. DataKit 버전 요구 사항: >= 1.60. Guance 콘솔에서 환경 변수 기능 활성화 방법 |
|
replayCanvasWorkerUrl |
string |
아니요 | Canvas snapshot 인코딩 전용 Worker 주소이며 workerUrl을 대체하지 않습니다. 이 구성은 자체 호스팅 Worker 주소를 지정할 수 있게 합니다. CSP 보안 정책은 CSP 보안을 참조하세요. SDK 버전 요구 사항: >= 3.3.0. |
|
replayCanvasEnabled |
boolean |
아니요 | false |
Canvas 녹화 활성화 여부. 활성화하지 않으면 Canvas를 수집하지 않습니다. SDK 버전 요구 사항: >= 3.3.0. |
replayCanvasMode |
'manual' \| 'auto' |
아니요 | auto |
Canvas 녹화 모드. manual은 snapshotCanvas(canvas)를 수동으로 호출해야 하며 auto는 자동 녹화입니다. |
replayCanvasSampling |
number \| 'all' |
아니요 | 2 |
replayCanvasMode: 'auto'에서만 적용됩니다. 양수는 자동 snapshot 경로를 선택하며 2부터 시작할 것을 권장합니다. 값 자체는 Canvas 2D 수집 빈도를 제어하지 않습니다. 'all'은 Canvas 2D가 더 높은 재현도의 command capture를 시도하게 하며, 복잡한 시나리오에서는 여전히 snapshot으로 대체될 수 있습니다. WebGL 플러그인은 항상 예산이 있는 픽셀 스냅샷을 사용합니다. |
replayCanvasAutoInterval |
number |
아니요 | 250 |
Canvas별 자동 snapshot 목표 간격(밀리초). 여러 Canvas는 공정하게 순환되며 실제 속도는 cooldown, backoff, 페이지 표시 여부, 글로벌 런타임 예산 제한의 영향을 받습니다. |
replayCanvasQuality |
'low' \| 'medium' \| 'high' \| number |
아니요 | 0.4 |
Canvas snapshot 인코딩 품질. 문자열 프리셋은 sampling과 자동 스케줄링 예산도 함께 조정합니다. 이미지 품질만 변경하려면 0에서 1 사이의 숫자를 전달하세요. |
replayCanvasAutoCooldown |
number |
아니요 | 250 |
동일 Canvas의 자동 snapshot 최소 쿨다운 시간(밀리초). |
replayCanvasAutoUnchangedBackoff |
number |
아니요 | 3000 |
경량 서명이 계속 변경되지 않을 때 다음 전체 인코딩 검증을 트리거하는 간격(밀리초). 그 사이에도 제한되고 적응형인 속도로 변경 여부를 감지합니다. |
replayCanvasAutoFailureBackoff |
number |
아니요 | 5000 |
자동 수집 실패 후 백오프 시간(밀리초). |
replayCanvasAutoMaxPerRun |
number |
아니요 | 2 |
자동 스케줄링 1회당 최대 처리 Canvas 수. |
replayCanvasFlushImmediately |
boolean |
아니요 | manual: trueauto: false |
Canvas 프레임이 성공적으로 replay에 들어간 후 우선적으로 flush할지 여부. |
silentMultipleInit |
boolean |
아니요 | 중복 초기화를 조용히 무시할지 여부. |
low, medium, high 문자열 프리셋을 사용하지 않는 경우 Canvas 자동 스케줄링 기준은 sampling 2, Canvas별 목표 interval 250 ms, cooldown 250 ms, unchanged backoff 3000 ms, failure backoff 5000 ms, 라운드당 최대 2개 Canvas입니다. 문자열 프리셋은 이러한 예산과 인코딩 품질을 동시에 대체하며, 여러 Canvas는 공정한 순환과 글로벌 수집 예산에 의해 제한됩니다. 명시적인 개별 구성은 프리셋의 해당 값을 덮어씁니다. 전체 프리셋 매트릭스는 Canvas 녹화 사용 설명서에서 확인할 수 있습니다.
위의 고빈도 스케줄링 기준은 Canvas 2D에 적용됩니다. WebGL 플러그인은 interval/cooldown을 명시적으로 구성하지 않으면 더 보수적인 GPU readback 속도를 유지하며, 명시적인 개별 구성이 있을 때만 각각 덮어씁니다.
site 파라미터 처리¶
| 노드 이름 | 주소 |
|---|---|
| 중국 노드 1(항저우) | https://rum-openway.guance.com |
| 중국 노드 2(닝샤) | https://aws-openway.guance.com |
| 중국 노드 4(광저우) | https://cn4-openway.guance.com |
| 중국 노드 6(홍콩) | https://cn6-openway.guance.one |
| 국제 노드 1(오리건) | https://us1-openway.guance.com |
| 유럽 노드 1(프랑크푸르트) | https://eu1-openway.guance.one |
| 아시아 태평양 노드 1(싱가포르) | https://ap1-openway.guance.one |
| 아프리카 노드 1(남아프리카) | https://za1-openway.guance.com |
| 인도네시아 노드 1(자카르타) | https://id1-openway.guance.com |
런타임 Session 제어¶
RUM SDK 3.3.6에 startSession()이 추가되었습니다. 호출하면 현재 Session이 즉시 종료되고 현재 샘플링 구성에 따라 Session이 다시 시작되며, 다음 사용자 상호작용을 기다릴 필요가 없습니다:
런타임 sessionSampleRate도 함께 재정의할 수 있습니다:
샘플링 비율은 0에서 100 사이여야 합니다. 이 재정의 값은 현재 및 이후 자동으로 이어지는 Session에 적용됩니다. 전체 RUM 패키지와 슬림 RUM 패키지 모두 이 API를 지원합니다. 자세한 의미와 사용 사례는 런타임에서 Session 다시 시작을 참조하세요.
필요에 따라 고급 기능 활성화¶
오류 세션 이벤트만 수집¶
버전 요구 사항
SDK 버전 요구 사항: >= 3.2.19.
페이지에서 오류가 발생하면 SDK가 자동으로 다음을 수행합니다:
- 지속 기록: 오류 발생 시점부터 세션 전체 수명 주기 데이터를 완전하게 기록합니다.
- 정밀 보상: 독립적인 샘플링 채널을 통해 오류 시나리오가 누락되지 않도록 보장합니다.
구성 방식¶
window.DATAFLUX_RUM &&
window.DATAFLUX_RUM.init({
applicationId: "<APPLICATION_ID>",
site: "<PUBLIC_OPENWAY_URL>",
clientToken: "<CLIENT_TOKEN>",
sessionSampleRate: 0,
sessionOnErrorSampleRate: 100
})
위 예시는 공용 OpenWay를 사용합니다. DataKit 직접 연결 시 기본 연동 예시에 따라 전송 주소 필드를 교체하세요.
데이터 압축¶
JS, CSS, 이미지 등 많은 정적 리소스를 수집하면서 전체 수집을 활성화하면 SDK 초기화 후 데이터가 많아져 요청이 쌓이고 애플리케이션 스레드 상태에 영향을 줄 수 있습니다.
compressIntakeRequests: true로 설정하면 SDK는 Web Worker에서 deflate로 전송 데이터를 압축하여 요청 크기와 요청 수를 줄입니다.
구성 예시¶
window.DATAFLUX_RUM &&
window.DATAFLUX_RUM.init({
applicationId: "<APPLICATION_ID>",
site: "<PUBLIC_OPENWAY_URL>",
clientToken: "<CLIENT_TOKEN>",
compressIntakeRequests: true
})
주의 사항¶
- 데이터 압축 로직은 Web Worker에서 실행됩니다. CSP 보안 정책이 활성화된 경우
worker-src에서blob:을 허용해야 합니다. 자세한 내용은 CSP 보안 정책 설명을 참조하세요. - SDK는
workerUrl구성 항목을 통해 자체 호스팅 Worker 주소를 지정할 수 있습니다. - 이 기능을 사용하려면 SDK 버전이 >= 3.2 이상이어야 합니다.
사용자 정의 데이터 및 이벤트¶
기본 연동 페이지에서는 모든 공용 API를 다시 다루지 않습니다. 비즈니스 목표에 따라 해당 페이지로 이동하면 CDN, NPM 및 전체 파라미터 예시를 확인할 수 있습니다:
- 사용자 작업 추적: 클릭 자동 수집, Action 이름 정의, 사용자 정의 Action 추가.
- 사용자 지정 식별자: 로그인 후 사용자를 설정하고, 로그아웃하거나 계정을 전환할 때 사용자 정보를 제거합니다.
- 글로벌 컨텍스트: 이후 모든 RUM 이벤트에 안정적인 비즈니스 차원을 추가합니다.
- 사용자 정의 Action 추가: 페이지 클릭으로 표현할 수 없는 비즈니스 작업을 기록합니다.
- 사용자 정의 Error 전송: 이미 포착되었거나 비즈니스에서 직접 식별한 예외를 전송합니다.
Web 세션 리플레이¶
전제 조건
Session Replay가 포함된 전체 RUM 패키지를 사용하세요. 슬림 RUM 패키지에는 세션 리플레이 기능이 포함되지 않습니다.
녹화 활성화¶
SDK 초기화 후 startSessionReplayRecording() 메서드를 호출하여 세션 리플레이 녹화를 시작합니다. 사용자 로그인 후 세션 녹화 시작 등 특정 조건에서 활성화하도록 선택할 수 있습니다.
오류 관련 세션 리플레이 데이터만 수집¶
버전 요구 사항
SDK 버전 요구 사항: >= 3.2.19.
페이지에서 오류가 발생하면 SDK가 자동으로 다음 작업을 수행합니다:
- 역추적 수집: 오류 발생 전 1분간의 전체 페이지 스냅샷을 기록합니다.
- 지속 녹화: 오류 발생 시점부터 세션이 종료될 때까지 계속 기록합니다.
- 지능형 보상: 독립적인 샘플링 채널로 오류 시나리오가 누락되지 않도록 보장합니다.
구성 예시¶
window.DATAFLUX_RUM &&
window.DATAFLUX_RUM.init({
applicationId: "<APPLICATION_ID>",
site: "<PUBLIC_OPENWAY_URL>",
clientToken: "<CLIENT_TOKEN>",
sessionSampleRate: 100,
sessionReplaySampleRate: 0,
sessionReplayOnErrorSampleRate: 100
})
window.DATAFLUX_RUM && window.DATAFLUX_RUM.startSessionReplayRecording()
주의 사항¶
- 세션 리플레이는 iframe, 비디오, 오디오 재생 콘텐츠를 기록하지 않습니다. Canvas는 기본적으로 수집되지 않으므로
replayCanvasEnabled를 별도로 구성해야 합니다. WebGL/WebGL2는 SDK3.3.7부터 제공되며 RUM 메인 패키지 버전>= 3.3.7이 필요하고, 호환되는browser-rum-webgl플러그인을 추가로 설치하고 등록해야 합니다. 플러그인과 메인 패키지는 동일한 SDK 릴리스 버전을 사용할 것을 권장합니다. 자세한 내용은 Canvas 녹화 사용 설명서를 참조하세요. - 리플레이 시 폰트, 이미지 등 정적 리소스에 정상적으로 접근하려면 CORS 정책을 구성해야 할 수 있습니다.
- CSSStyleSheet 인터페이스로 CSS 규칙에 접근할 수 있어야 CSS 스타일과 마우스 호버 이벤트를 지원할 수 있습니다.
녹화 상태 확인¶
window.DATAFLUX_RUM.isRecording()을 호출하여 현재 페이지가 녹화 중인지 확인하고, 세션 리플레이 탐색기에서 해당 Session에 리플레이 데이터가 생성되었는지 확인합니다. 운영 환경에서는 비즈니스 요구에 따라 sessionReplaySampleRate를 조정하세요.