설정 및 서비스 상태 관리

Sophonz Browser SDK의 초기화 옵션 전체 레퍼런스와 서비스 상태 동적 제어 방법을 설명합니다.

SophonzSDK.init()에 전달할 수 있는 모든 옵션과, 서버 측에서 계측을 동적으로 제어하는 서비스 상태 관리 기능을 설명합니다.

설정 (Options)

옵션 이름타입필수 여부설명
collectorUrlstringoptional콜렉터 주소를 지정합니다. 기본값은 https://in.v0.sophonz.com입니다.
authorizationTokenstringoptional인증 토큰을 설정합니다.
appNamestringoptional앱 이름을 지정합니다. (서비스 등록할 때의 패키지명) 텔레메트리 데이터 저장에 필수적입니다.
appKeystringoptional앱 키를 설정합니다. 텔레메트리 데이터 저장에 필수적입니다.
appVersionstringoptional앱 버전을 지정합니다. 텔레메트리 데이터 저장에 필수적이며, 빈 문자열이나 비문자열일 경우 경고가 발생합니다. 웹뷰 환경에서는 네이티브 SDK에서 전달한 버전이 사용됩니다.
webVersionstringoptional웹 서비스 버전을 지정합니다. 웹뷰 환경에서 네이티브 앱 버전과 별도로 웹 콘텐츠의 버전을 추적할 때 사용됩니다. 일반 웹 환경에서는 appVersion과 동일한 값이 자동으로 설정됩니다.
projectstringoptional프로젝트를 설정합니다. 여러 서비스(Android, iOS, Web 등)를 통합하여 모니터링할 경우 필요하며 비어있는 경우 service.namespace를 보내지 않습니다.
deploymentEnvironmentstringoptional배포 환경을 설정합니다. setGlobalAttributes()를 통해 지속되는 environment 속성의 값을 설정할 수 있습니다.
defaultAttributesAttributesoptional기본 리소스 속성을 설정합니다. 모든 Span에 추가되는 전역 속성으로 사용됩니다.
samplingProbabilitynumber | stringoptional샘플링 확률을 설정합니다. 0에서 1 사이의 값으로 지정하며, 기본값은 1입니다.
advancedNetworkCapturebooleanoptional네트워크 요청 및 응답의 상세 추적을 활성화합니다. 기본값은 false입니다.
blockClassstringoptional세션 리플레이에서 가려야 할 요소의 CSS 클래스를 지정합니다.
consoleCapturebooleanoptional콘솔 캡처 기능을 활성화합니다. 기본값은 false입니다.
debugbooleanoptional디버깅 모드를 활성화합니다. 기본값은 false입니다.
disableIntercombooleanoptionalIntercom 연동을 비활성화합니다. 기본값은 false입니다.
disableReplaybooleanoptional세션 리플레이 기능을 비활성화합니다. 기본값은 true입니다.
ignoreClassstringoptional세션 리플레이에서 무시할 요소의 CSS 클래스를 지정합니다.
ignoreUrlsArray<string | RegExp>optional추적하지 않을 URL 패턴을 지정합니다. 정규식이나 문자열 배열로 설정할 수 있으며, 부분 일치 또는 정확히 일치하는 URL은 추적되지 않습니다.
instrumentationsInstrumentationsoptional사용자 지정 Instrumentations 설정을 지정합니다. 기본값은 빈 객체 {}입니다.
maskAllInputsbooleanoptional모든 입력 요소를 마스킹합니다. 기본값은 true입니다.
maskAllTextbooleanoptional모든 텍스트를 마스킹합니다. 기본값은 false입니다.
maskClassstringoptional텍스트 마스킹에 사용할 CSS 클래스를 지정합니다.
recordCanvasbooleanoptional캔버스 요소 기록 여부를 설정합니다. 기본값은 false입니다.
samplingnumberoptional세션 레코더 샘플링 설정을 지정합니다.
tracePropagationTargetsArray<string | RegExp>optionalTrace Header를 전파할 대상 도메인 또는 정규식 목록을 지정합니다.
webVitalsbooleanoptional웹 비탈을 활성화합니다. 기본값은 false입니다.
websocketbooleanoptional웹소켓 계측을 활성화합니다. 기본값은 false입니다.
socketiobooleanoptionalSocket.IO 계측을 활성화합니다. 기본값은 false입니다.
captureMetricbooleanoptional메트릭 수집을 활성화합니다. 기본값은 false입니다. (beta)
disablePreflightbooleanoptionalpreflight 요청 비활성화 여부 (기본값: false). preflight는 CORS 요청을 위한 OPTIONS 요청입니다.
exporterProtocoljson | protooptionalexporter 프로토콜을 설정합니다. 기본값은 json입니다.
screenNameOptionScreenNameOptionoptional화면 이름 옵션을 설정합니다. 기본값은 { screenNameType: "routeOnly", urlWithSearchParams: false }입니다.

서비스 상태 관리 (Service Status)

Sophonz Browser SDK는 서버와 통신하여 서비스의 계측 상태를 동적으로 관리할 수 있습니다. 이 기능을 통해 서버 측에서 계측을 활성화하거나 비활성화할 수 있으며, Exporter 실패 시 자동으로 계측을 중단하는 기능을 제공합니다.

Service Status API

Sophonz Browser SDK는 초기화 시 Service Status API (/v2/service/status)를 호출하여 서비스 상태를 확인합니다.

동작 방식

  1. 초기화 시 상태 확인: init() 호출 시 이전에 저장된 isCollecting 상태를 확인합니다.
  2. 계측 비활성화: 저장된 isCollectingfalse인 경우 계측이 비활성화됩니다.
  3. 백그라운드 업데이트: Service Status API를 백그라운드에서 호출하여 최신 상태를 localStorage에 저장합니다.
  4. 다음 세션 적용: 서버에서 isCollecting: false를 반환하면 다음 init() 호출 시 계측이 비활성화됩니다.

서버 응답 형식

interface ServiceStatusResponse {
  /** 계측 수집 활성화 여부 - false인 경우 다음 init 시 계측 비활성화 */
  isCollecting: boolean;
  /** Drop Policy 활성화 여부 */
  dropPolicy: boolean;
  /** Drop Policy 실패 임계값 - exporter가 이 횟수 이상 실패하면 계측 중단 */
  targetDropCount: number;
  /** 서버에서 발급한 토큰 */
  token: string;
}

Drop Policy (Exporter 실패 시 자동 중단)

Drop Policy는 Exporter가 연속으로 실패할 경우 자동으로 계측을 중단하는 기능입니다.

동작 방식

  1. 실패 추적: ExporterFailureTracker가 Exporter의 성공/실패를 추적합니다.
  2. 임계값 도달: 연속 실패 횟수가 targetDropCount에 도달하면 자동으로 deinit()이 호출됩니다.
  3. 실패 카운터 리셋: 실패 카운터는 init() 호출 시에만 리셋됩니다. 성공해도 리셋되지 않습니다.

Exporter 이벤트

Sophonz는 CustomEvent를 통해 Exporter의 성공/실패를 알립니다.

// Exporter 이벤트 리스닝 예시
window.addEventListener('sophonz:exporter', (event) => {
  const { type } = event.detail; // 'success' | 'failure'
  console.log(`Exporter ${type}`);
});

NOTE — Drop Policy 활성화 조건

Drop Policy는 서버의 Service Status API 응답에서 dropPolicy: true가 반환된 경우에만 활성화됩니다. dropPolicy가 활성화되면 Exporter는 XHR 방식으로 전환되어 실제 네트워크 실패를 감지할 수 있습니다.

WARNING — Drop Policy 사용 시 주의사항

Drop Policy가 활성화된 경우, 네트워크가 불안정한 환경에서 계측이 조기에 중단될 수 있습니다:

  • 영향받는 환경: 엘리베이터, 지하주차장, 터널, 지하철 등 네트워크 연결이 불안정한 장소
  • 데이터 손실 가능성: 네트워크 일시 단절로 인한 Exporter 실패가 targetDropCount에 도달하면 계측이 중단되어 세션 후반부의 데이터가 수집되지 않을 수 있습니다
  • 모바일 환경 주의: 모바일 기기는 이동 중 네트워크 전환(Wi-Fi ↔ LTE/5G)이 빈번하여 잦은 drop이 발생할 수 있으며, 이로 인해 데이터 정합성에 손실이 발생할 수 있습니다

Drop Policy는 서버 부하를 줄이고 불필요한 네트워크 요청을 방지하는 데 유용하지만, 위와 같은 환경에서 완전한 세션 데이터 수집이 필요한 경우에는 신중하게 사용해야 합니다.

옵션 상세 설명

collectorUrl

(string, 선택)

텔레메트리 데이터를 전송할 콜렉터의 URL을 지정합니다. 기본값은 https://in.v0.sophonz.com입니다.

CAUTION — URL 형식

collectorUrl은 반드시 http:// 또는 https://로 시작하는 완전한 URL 형식이어야 합니다. scheme이 포함되지 않은 URL (예: collector.yourdomain.com)을 입력하면 초기화가 실패합니다.

// ✅ 올바른 형식
collectorUrl: 'https://collector.yourdomain.com'
collectorUrl: 'http://192.168.1.100:4318'
 
// ❌ 잘못된 형식 (초기화 실패)
collectorUrl: 'collector.yourdomain.com'
collectorUrl: '//collector.yourdomain.com'

WARNING — Sophonz Mobile SDK와 연동

  • 웹 브라우저 환경을 계측할 경우에는 collectorUrl 값을 반드시 입력해야 합니다.
  • Android/iOS SDK에서 웹뷰 환경을 계측할 경우, 네이티브 SDK에서 collectorUrl을 자동으로 전달하므로 별도로 입력할 필요가 없습니다.
  • 웹뷰 환경과 웹 브라우저 환경을 모두 계측하려는 경우, 웹뷰에서는 네이티브 SDK가 자동으로 전달한 파라미터를 사용하고, 웹 브라우저에서는 직접 입력한 파라미터를 사용하게 됩니다.

authorizationToken

(string, 선택)

콜렉터에 인증할 때 사용할 토큰을 설정합니다. 보안이 필요한 경우 사용합니다.

project

(string, 선택)

프로젝트를 설정합니다. 여러 서비스(Android, iOS, Web 등)를 통합하여 모니터링할 경우 필요합니다. 비어있는 경우 service.namespace를 보내지 않습니다.

TIP — Sophonz v4.0.0 이상과 연동

Sophonz v4.0.0 이상에서는 project를 사용하여 동일한 프로젝트 내에서 여러 플랫폼(Android, iOS, Web 등)의 데이터를 통합하여 모니터링할 수 있습니다. 이를 통해 전체적인 서비스 상태를 한눈에 파악할 수 있습니다.

appName

(string, 선택)

Sophonz에서 관리하는 앱의 이름을 지정합니다. 서비스 등록할 때의 패키지명이며, 이 값은 서비스를 구분짓는 값으로 텔레메트리 데이터 저장 및 분석에 사용됩니다. appName서비스 등록 시 입력한 패키지명과 동일해야 하며 패키지 이름에는 a-z, A-Z, 0-9, -, _, .만 입력할 수 있습니다.

WARNING — Sophonz Mobile SDK와 연동

  • 웹 브라우저 환경을 계측할 경우에는 appName 값을 반드시 입력해야 합니다.
  • Android/iOS SDK에서 웹뷰 환경을 계측할 경우, 네이티브 SDK에서 appName을 자동으로 전달하므로 별도로 입력할 필요가 없습니다.
  • 웹뷰 환경과 웹 브라우저 환경을 모두 계측하려는 경우, 웹뷰에서는 네이티브 SDK가 자동으로 전달한 파라미터를 사용하고, 웹 브라우저에서는 직접 입력한 파라미터를 사용하게 됩니다.

appKey

(string, 선택)

Sophonz에서 발급된 앱 키를 설정합니다. Sophonz 콘솔 로그인 후 글로벌 관리 > 서비스 관리에서 새로운 서비스를 등록하고 발급된 앱 키를 사용하여 설치하세요.

WARNING — Sophonz Mobile SDK와 연동

  • 웹 브라우저 환경을 계측할 경우에는 appKey 값을 반드시 입력해야 합니다.
  • Android/iOS SDK에서 웹뷰 환경을 계측할 경우, 네이티브 SDK에서 appKey을 자동으로 전달하므로 별도로 입력할 필요가 없습니다.
  • 웹뷰 환경과 웹 브라우저 환경을 모두 계측하려는 경우, 웹뷰에서는 네이티브 SDK가 자동으로 전달한 파라미터를 사용하고, 웹 브라우저에서는 직접 입력한 파라미터를 사용하게 됩니다.

appVersion

(string, 선택)

앱 버전을 지정합니다. 이 값은 앱 버전을 구분짓는 값으로 텔레메트리 데이터 저장 및 분석에 사용됩니다.

NOTE — 웹뷰 환경에서의 appVersion 분리 처리

웹뷰 환경에서는 appVersion이 네이티브 앱 버전과 웹 앱 버전을 분리하여 처리됩니다:

  • 웹뷰 환경:

    • appVersion: 네이티브 SDK에서 전달한 앱 버전
    • webVersion: init() 옵션에서 설정한 웹 버전 (내부적으로 별도 관리)
  • 일반 웹 브라우저 환경:

    • appVersionwebVersion이 동일한 값으로 설정됩니다.

이를 통해 웹뷰에서 네이티브 앱 버전과 웹 콘텐츠 버전을 모두 추적할 수 있습니다.

WARNING — Sophonz Mobile SDK와 연동

  • 웹 브라우저 환경을 계측할 경우에는 appVersion 값을 반드시 입력해야 합니다.
  • Android/iOS SDK에서 웹뷰 환경을 계측할 경우, 네이티브 SDK에서 appVersion을 자동으로 전달하므로 별도로 입력할 필요가 없습니다.
  • 웹뷰 환경과 웹 브라우저 환경을 모두 계측하려는 경우, 웹뷰에서는 네이티브 SDK가 자동으로 전달한 파라미터를 사용하고, 웹 브라우저에서는 직접 입력한 파라미터를 사용하게 됩니다.

TIP — 웹뷰 환경에서의 버전 관리

웹뷰 환경에서는 appVersionwebVersion이 분리되어 처리됩니다:

  • appVersion: 네이티브 SDK(Android/iOS)에서 전달한 앱 버전이 사용됩니다.
  • webVersion: Browser SDK 초기화 시 옵션으로 전달한 웹 콘텐츠 버전이 사용됩니다.

일반 웹 브라우저 환경에서는 옵션으로 전달한 appVersion 값이 appVersionwebVersion 모두에 동일하게 적용됩니다.

webVersion

(string, 선택)

웹 콘텐츠의 버전을 지정합니다. 이 옵션은 웹뷰 환경에서 네이티브 앱 버전(appVersion)과 별도로 웹 콘텐츠의 버전을 추적할 때 유용합니다.

동작 방식:

  • 웹뷰 환경: 옵션으로 전달한 appVersion 값이 webVersion으로 저장되고, 네이티브 SDK에서 전달한 버전이 appVersion으로 사용됩니다.
  • 일반 웹 환경: appVersion과 동일한 값이 자동으로 설정됩니다.
// 웹뷰 환경 예시: 네이티브 앱 버전 1.0.0, 웹 콘텐츠 버전 2.3.1
SophonzSDK.init({
  appVersion: '2.3.1', // 웹뷰에서는 webVersion으로 저장됨
  // appVersion은 네이티브 SDK에서 전달한 1.0.0이 사용됨
});

deploymentEnvironment

(string, 선택)

배포 환경을 설정합니다. 예를 들어, production, staging 등으로 설정하여 환경별로 데이터를 구분할 수 있습니다.

defaultAttributes

(Attributes, 선택)

모든 Span에 추가되는 전역 속성을 설정합니다. 사용자 정의 속성을 추가하여 텔레메트리 데이터를 보강할 수 있습니다.

samplingProbability

(number | string, 선택)

샘플링 확률을 설정합니다. 0에서 1 사이의 값으로 지정하며, 기본값은 1로 모든 트랜잭션을 샘플링합니다.

advancedNetworkCapture

(boolean, 선택)

네트워크 요청 및 응답의 상세한 추적을 활성화합니다. 기본값은 false이며, 활성화 시 네트워크 관련 데이터를 더 상세히 수집할 수 있습니다.

WARNING — 개인정보 보호

이 기능을 활성화할 경우 http.request.headerhttp.request.body의 정보가 포함됩니다. 민감한 정보가 포함될 수 있으므로 주의가 필요합니다.

blockClass

(string, 선택)

세션 리플레이에서 가려야 할 요소의 CSS 클래스를 지정합니다. 민감한 정보가 포함된 요소를 가릴 때 사용합니다.

consoleCapture

(boolean, 선택)

콘솔 로그를 캡처할지 여부를 설정합니다. 기본값은 false이며, 활성화 시 콘솔에서 발생하는 로그도 텔레메트리 데이터로 수집됩니다.

debug

(boolean, 선택)

디버깅 모드를 활성화합니다. 기본값은 false이며, 활성화 시 추가적인 로그가 출력되어 문제 해결에 도움이 됩니다.

disableIntercom

(boolean, 선택)

Intercom과의 연동을 비활성화합니다. 기본값은 false이며, 활성화 시 Intercom과의 통합 기능이 비활성화됩니다.

disableReplay

(boolean, 선택)

세션 리플레이 기능을 비활성화합니다. 기본값은 true이며, 비활성화 시 사용자 세션의 리플레이 기능이 동작합니다. 이 기능은 현재 개발 중이며 추후에 활성화될 예정입니다.

WARNING — 세션 리플레이 비활성화

이 기능은 현재 개발 중이며 추후에 활성화될 예정입니다.

sessionStorage

(StorageType, 선택)

type StorageType = 'cookie' | 'localStorage';

세션ID 저장소의 타입을 설정합니다. 기본값은 cookie이며, localStorage로 변경할 수 있습니다. 이 설정은 세션 데이터의 저장 방식을 결정합니다. 일반적으로 cookie를 사용하며, 브라우저 쿠키를 사용할 수 없는 하이브리드 앱의 웹뷰의 경우 localStorage를 사용합니다.

WARNING — 모바일 웹뷰 설정

localStorage 옵션을 사용할 경우 웹뷰 브라우저의 localStorage 저장소가 활성화되어 있어야 합니다.

안드로이드의 경우:

webview.settings.domStorageEnabled = true

iOS의 경우 기본적으로 활성화되어 있으나 명시적으로 허용해야 하는 경우:

let config = WKWebViewConfiguration()
config.websiteDataStore = WKWebsiteDataStore.default()
let webView = WKWebView(frame: .zero, configuration: config)

사용 방법:

SophonzSDK.init({
  collectorUrl: 'https://in.v0.sophonz.com',
  appName: '{{NAME_OF_YOUR_WEB_SERVICE}}',
  appVersion: '{{VERSION_OF_YOUR_WEB_SERVICE}}',
  appKey: '{{SERVICE_KEY}}',
  sessionStorage: 'localStorage' // or 'cookie'
});

ignoreClass

(string, 선택)

세션 리플레이에서 무시할 요소의 CSS 클래스를 지정합니다. 특정 요소를 기록하지 않으려는 경우 사용합니다.

ignoreUrls

(Array<string | RegExp>, 선택)

추적하지 않을 URL 패턴을 지정합니다. 정규식이나 문자열 배열로 설정할 수 있으며, 부분 일치하거나 정확히 일치하는 URL은 텔레메트리 데이터에 포함되지 않습니다.

maskAllInputs

(boolean, 선택)

모든 입력 요소를 마스킹합니다. 기본값은 true이며, 활성화 시 모든 입력 필드의 값이 마스킹되어 저장됩니다. 민감한 정보가 포함된 경우 사용합니다.

maskAllText

(boolean, 선택)

모든 텍스트를 마스킹합니다. 기본값은 false이며, 활성화 시 모든 텍스트가 마스킹되어 저장됩니다. 민감한 정보가 포함된 경우 사용합니다.

maskClass

(string, 선택)

텍스트 마스킹에 사용할 CSS 클래스를 지정합니다. 이 클래스를 가진 요소의 텍스트는 마스킹되어 저장됩니다. 민감한 정보가 포함된 경우 사용합니다.

recordCanvas

(boolean, 선택)

캔버스 요소 기록 여부를 설정합니다. 기본값은 false이며, 활성화 시 캔버스 요소의 내용이 기록됩니다.

sampling

(number, 선택)

세션 레코더 샘플링 설정을 지정합니다. 기본값은 1이며, 0에서 1 사이의 값을 설정할 수 있습니다. 이 값은 세션 레코더가 얼마나 많은 세션을 기록할지를 결정합니다.

tracePropagationTargets

(Array<string | RegExp>, 선택)

Trace Header를 전파할 대상 도메인 또는 정규식 목록을 지정합니다. 이 목록에 포함된 도메인으로 요청이 발생할 경우 Trace Header가 자동으로 전파됩니다. 정규식이나 문자열 배열로 설정할 수 있습니다.

webVitals

(boolean, 선택)

Web Vitals 계측을 활성화합니다. 기본값은 false이며, 활성화 시 Core Web Vitals 지표가 자동으로 계측됩니다. 이 기능은 웹 성능을 모니터링하는 데 유용합니다.

Web Vitals 데이터는 두 가지 형태로 전송됩니다:

  • Span: 개별 이벤트로 기록되어 상세한 추적 정보 제공
  • Histogram Metric: OpenTelemetry Metric으로 전송되어 분포도 및 백분위수 분석 지원

지원되는 메트릭:

  • FCP (First Contentful Paint)
  • TTFB (Time to First Byte)
  • FID (First Input Delay)
  • CLS (Cumulative Layout Shift)
  • LCP (Largest Contentful Paint)
  • INP (Interaction to Next Paint)

websocket

(boolean, 선택)

WebSocket 계측을 활성화합니다. 기본값은 true이며, 활성화 시 WebSocket 연결 이벤트가 자동으로 계측됩니다. 이 기능은 실시간 데이터 전송을 모니터링하는 데 유용합니다.

socketio

(boolean, 선택)

Socket.IO 계측을 활성화합니다. 기본값은 false이며, 활성화 시 Socket.IO 클라이언트의 이벤트가 자동으로 계측됩니다. 이 기능은 실시간 통신을 모니터링하는 데 유용합니다.

captureMetric

(boolean, 선택)

메트릭 수집을 활성화합니다. 기본값은 false이며, 활성화 시 모든 span의 duration 데이터 포인트에 해당하는 메트릭 데이터가 자동으로 수집됩니다. 이 기능은 빠른 성능 모니터링에 유용합니다.

disablePreflight

(boolean, 선택)

WARNING — Preflight 요청

Preflight 요청을 비활성화할 경우, Content-Type: text/plain 형태로 전송하게 됩니다. 이 콘텐트 타입을 허용하지 않는 다른 도메인에서의 요청이 차단될 수 있습니다.

  • preflight 요청 비활성화 여부를 설정합니다. 기본값은 false이며, 활성화 시 preflight 요청이 비활성화됩니다. preflight는 CORS 요청을 위한 OPTIONS 요청입니다. 보안상 필요한 경우 사용합니다.
  • 이 설정은 exporterProtocolproto로 설정된 경우 자동으로 true로 설정됩니다. 이는 proto 프로토콜이 preflight 요청을 필요로 하지 않기 때문입니다.
  • 이 설정을 true로 설정한 경우 Sophonz 수집기 혹은 프록시에서 이 콘텐츠 타입을 허용해야 합니다.

exporterProtocol

(json | proto, 선택)

exporter 프로토콜을 설정합니다. 기본값은 json이며, proto로 설정할 경우 protobuf 프로토콜을 사용하여 데이터를 전송합니다.

  • 기본값은 json이며 json 프로토콜은 JSON 콘텐트 형식(application/json)으로 데이터를 전송하며, Beacon API를 통해 전송합니다.
  • proto로 설정할 경우 protobuf 프로토콜을 사용하여 프로토 형식(application/x-protobuf)로 데이터를 전송하며, Fetch API를 통해 전송합니다. proto를 설정하면 disablePreflight 옵션이 자동으로 true로 설정됩니다.

NOTE — Beacon API vs Fetch API

Beacon API

Beacon API는 브라우저가 페이지 언로드 시에도 데이터를 전송할 수 있도록 설계된 API입니다.

  • 페이지 언로드 시에도 데이터 전송 보장: 사용자가 페이지를 닫거나 이동할 때 sendBeacon은 브라우저가 백그라운드에서 전송을 끝까지 시도합니다.
  • 비동기적이고 빠름: 로그, 분석, 트레이스, 세션 종료 이벤트 등에 적합합니다.
  • CORS 지원: 다른 도메인 간의 요청을 처리할 수 있습니다.
  • 데이터 크기 제한: 일반적으로 64KB 이하의 데이터를 전송할 수 있습니다.
  • 단방향 통신: 서버로 데이터를 전송하는 단방향 통신 방식입니다.
  • 형식 제한: JSON, Text 형식의 데이터만 전송합니다.

Fetch API

Fetch API는 네트워크 요청을 수행하기 위한 현대적인 API로, Promise 기반으로 작동합니다.

  • 더 많은 기능: HTTP 요청에 대한 더 많은 제어를 제공합니다.
  • Promise 기반: 비동기 처리를 더 쉽게 할 수 있습니다.
  • CORS 지원: 다른 도메인 간의 요청을 처리할 수 있습니다.
  • 데이터 크기 제한 없음: 대용량 데이터 전송 시 유용합니다.
  • 양방향 통신: 서버로 데이터를 전송하고 응답을 받을 수 있습니다.
  • 형식 제한 없음: JSON, Text, Blob 등 다양한 형식을 전송할 수 있습니다.

screenNameOption

(ScreenNameOption, 선택)

화면이름 수집 옵션입니다.

type ScreenNameType = 'routeOnly' | 'titleOnly' | 'full';
 
type ScreenNameOption = {
  screenNameType?: ScreenNameType; // default: 'routeOnly'
  urlWithSearchParams?: boolean; // default: false
};
  • screenNameTyperouteOnly, titleOnly, full 중 하나를 선택할 수 있습니다.
    • routeOnly: URL 경로만 포함
    • titleOnly: 페이지 제목만 포함
    • full: 페이지 제목과 URL 경로 모두 포함. 기본값은 routeOnly입니다.
  • urlWithSearchParamstrue일 경우 URL에 쿼리 파라미터를 포함합니다. 기본값은 false입니다.

예시: 화면이름에 타이틀만 포함하고 쿼리 파라미터를 추가하려면 아래와 같이 설정합니다.

SophonzSDK.init({
  collectorUrl: 'https://in.v0.sophonz.com',
  appName: '{{NAME_OF_YOUR_WEB_SERVICE}}',
  appVersion: '{{VERSION_OF_YOUR_WEB_SERVICE}}',
  appKey: '{{KEY_OF_YOUR_WEB_SERVICE}}',
  screenNameOption: {
    screenNameType: 'titleOnly', // 타이틀만 포함
    urlWithSearchParams: true // 쿼리 파라미터 추가
  }
});

instrumentations

(Instrumentations, 선택)

사용자 지정 Instrumentations 설정을 지정합니다. 기본값은 빈 객체 {}이며, 필요에 따라 특정 트래픽 또는 특정 계측을 중단하거나 사용하도록 설정할 수 있습니다.

SophonzOtelWebOptionsInstrumentations 인터페이스는 다양한 계측 모듈의 활성화 여부 및 설정을 정의합니다. 각 속성은 특정 계측 기능을 활성화하거나 비활성화할 수 있으며, 추가적인 설정을 제공할 수 있습니다.

공통 옵션

모든 계측기에서 공통으로 사용되는 옵션입니다.

옵션타입기본값설명
screenNameOptionScreenNameOption{ screenNameType: 'routeOnly', urlWithSearchParams: false }화면 이름 수집 옵션

screenNameOption은 각 계측기의 설정 객체에서 개별적으로 설정할 수 있으며, 전역 screenNameOption 설정을 오버라이드합니다. 자세한 내용은 screenNameOption 옵션을 참조하세요.

instrumentations 속성 목록
속성 이름타입필수 여부설명
consolebooleanoptional콘솔 계측을 활성화하거나 비활성화합니다.
documentbooleanoptional문서 로드 계측을 활성화하거나 비활성화합니다.
errorsboolean | SophonzErrorInstrumentationConfigoptional오류 계측을 활성화하거나 비활성화합니다.
fetchbooleanoptionalFetch API 계측을 활성화하거나 비활성화합니다.
interactionsboolean | SophonzUserInteractionInstrumentationConfigoptional사용자 상호작용 계측을 활성화하거나 비활성화합니다.
longtaskbooleanoptional장시간 작업 계측을 활성화하거나 비활성화합니다.
visibilitybooleanoptional페이지 가시성 계측을 활성화하거나 비활성화합니다.
connectivitybooleanoptional네트워크 연결 상태 계측을 활성화하거나 비활성화합니다.
postloadbooleanoptional문서 로드 후 리소스 계측을 활성화하거나 비활성화합니다.
socketiobooleanoptionalSocket.io 클라이언트 계측을 활성화하거나 비활성화합니다.
websocketbooleanoptionalWebSocket 계측을 활성화하거나 비활성화합니다.
webvitalsbooleanoptionalWeb Vitals 계측을 활성화하거나 비활성화합니다.
xhrbooleanoptionalXMLHttpRequest 계측을 활성화하거나 비활성화합니다.
instrumentations 속성 상세 설명
console instrumentation

(boolean 또는 SophonzConsoleInstrumentationConfig, 선택)

콘솔 계측을 활성화하거나 비활성화합니다. true로 설정하면 기본 콘솔 계측이 활성화됩니다. SophonzConsoleInstrumentationConfig 객체를 제공하여 콘솔 계측의 세부 설정을 커스터마이즈할 수 있습니다.

WARNING — 순환객체 주의

이 기능을 활성화할 경우 console의 정보를 계측하기 위해 JSON.stringify()를 통해 직렬화됩니다. 만약 순환 객체가 포함되어 있다면 직렬화 과정에서 순환 참조가 발생할 수 있습니다. 순환 참조가 포함된 객체를 로깅할 경우 주의가 필요합니다.

interface SophonzConsoleInstrumentationConfig
  extends InstrumentationConfig {
  betaMode: boolean;
  loggerOptions: LoggerOptions;
  contextManager?: MutableAsyncLocalStorageContextManager;
}
  • betaMode: 콘솔 계측의 베타 모드를 활성화합니다. 기본값은 false입니다.
  • loggerOptions: 콘솔 계측의 로거 옵션을 설정합니다. LoggerOptions 인터페이스를 사용하여 세부 설정을 지정할 수 있습니다.
  • contextManager: MutableAsyncLocalStorageContextManager를 사용하여 비동기 컨텍스트를 관리합니다. AsyncHooksContextManager 참조
document instrumentation

(boolean 또는 SophonzDocLoadInstrumentationConfig, 선택)

문서 로드 계측을 활성화하거나 비활성화합니다. true로 설정하면 문서 로드 이벤트가 계측됩니다. SophonzDocLoadInstrumentationConfig을 제공하여 계측의 세부 설정을 조정할 수 있습니다.

interface SophonzDocLoadInstrumentationConfig
  extends InstrumentationConfig {
  ignoreUrls?: (string | RegExp)[];
}
  • ignoreUrls: 계측하지 않을 URL 패턴을 지정합니다. 정규식이나 문자열 배열로 설정할 수 있으며, 부분 일치 또는 정확히 일치하는 URL은 계측되지 않습니다.

자세한 계측 정보는 @sophonz/instrumentation-document-load 참조

errors instrumentation

(boolean 또는 SophonzErrorInstrumentationConfig, 선택)

브라우저에서 발생하는 오류 계측을 활성화하거나 비활성화합니다. true로 설정하면 전역 오류 핸들러가 활성화되어 애플리케이션에서 발생하는 오류가 자동으로 계측됩니다. SophonzErrorInstrumentationConfig 객체를 제공하여 오류 계측의 세부 설정을 커스터마이즈할 수 있습니다.

interface SophonzErrorInstrumentationConfig extends InstrumentationConfig {
  /**
   * Whether to capture console.error calls as exceptions.
   * @default true
   */
  captureConsoleError?: boolean;
  /**
   * A callback function for adding custom attributes to the span/log when an error is recorded.
   * @param error - The error object or string that is being recorded.
   * @returns Attributes to add to the span and log.
   */
  applyCustomAttributes?: (error: Error | string | Event) => Attributes;
}
  • captureConsoleError: console.error 호출을 exception으로 캡처할지 여부를 설정합니다. 기본값은 true입니다.
    • true (기본값): console.error 호출이 exception으로 캡처됨
    • false: console.error 계측이 비활성화되어 exception으로 캡처되지 않음
  • applyCustomAttributes: 에러가 기록될 때 span/log에 커스텀 속성을 추가하는 콜백 함수입니다. 에러 객체를 인자로 받아 추가할 속성 객체를 반환합니다.

applyCustomAttributes 사용 예시:

SophonzSDK.init({
  // ... 기본 설정
  instrumentations: {
    errors: {
      applyCustomAttributes: (error) => {
        if (error instanceof Error) {
          return {
            'error.category': error.name === 'TypeError' ? 'type-error' : 'general',
            'error.component': 'frontend',
          };
        }
        return {};
      },
    },
  },
});

자세한 계측 정보는 @sophonz/instrumentation-browser-exception 참조

WARNING — 오류 계측

이 기능은 브라우저에서 발생하는 오류를 계측합니다. 따라서 서버 혹은 엣지 환경(SSR을 사용하는 경우)에서 발생하는 오류는 계측되지 않습니다. 서버 측에서 발생하는 오류를 계측하려면 별도의 서버측 에이전트를 사용해야 합니다.

fetch instrumentation

(boolean 또는 SophonzFetchInstrumentationConfig, 선택)

Fetch API 계측을 활성화하거나 비활성화합니다. true로 설정하면 Fetch 요청이 자동으로 계측됩니다. SophonzFetchInstrumentationConfig을 제공하여 Fetch 계측의 세부 설정을 조정할 수 있습니다.

자세한 계측 정보는 @sophonz/instrumentation-fetch 참조

type SophonzFetchInstrumentationConfig = {
  advancedNetworkCapture?: () => boolean;
  clearTimingResources?: boolean;
  propagateTraceHeaderCorsUrls?: web.PropagateTraceHeaderCorsUrls;
  ignoreUrls?: Array<string | RegExp>;
  applyCustomAttributesOnSpan?: FetchCustomAttributeFunction;
  ignoreNetworkEvents?: boolean;
  measureRequestSize?: boolean;
}
  • advancedNetworkCapture: 고급 네트워크 캡처를 활성화합니다. 기본값은 false입니다.
  • clearTimingResources: 타이밍 리소스를 초기화합니다. 기본값은 false입니다.
  • propagateTraceHeaderCorsUrls: CORS 요청에 Trace Header를 전파할 URL 목록을 지정합니다.
  • ignoreUrls: 계측하지 않을 URL 패턴을 지정합니다. 정규식이나 문자열 배열로 설정할 수 있습니다.
  • applyCustomAttributesOnSpan: Span에 사용자 정의 속성을 추가하는 함수입니다. 기본값은 undefined입니다.
  • ignoreNetworkEvents: 네트워크 이벤트를 무시합니다. 기본값은 false입니다.
  • measureRequestSize: 요청 크기를 측정합니다. 기본값은 false입니다.
interactions instrumentation

(boolean 또는 SophonzUserInteractionInstrumentationConfig, 선택)

사용자 상호작용 계측을 활성화하거나 비활성화합니다. true로 설정하면 클릭, 입력 등 사용자 상호작용 이벤트가 자동으로 계측됩니다. SophonzUserInteractionInstrumentationConfig을 통해 상호작용 계측의 세부 설정을 커스터마이즈할 수 있습니다.

자세한 계측 정보는 @sophonz/instrumentation-user-interaction 참조

interface SophonzUserInteractionInstrumentationConfig extends InstrumentationConfig {
    eventNames?: EventName[];
    shouldPreventSpanCreation?: ShouldPreventSpanCreation;
    events?: UserInteractionEventsConfig;
    captureText?: boolean;
    captureId?: boolean;
}
  • eventNames: 계측할 이벤트 목록을 지정합니다. 기본값은 DEFAULT_AUTO_INSTRUMENTED_EVENTS입니다.
    • 포인터 이벤트: click, dblclick, mousedown, mouseup
    • Form 이벤트: submit, reset, change
    • Drag & Drop: dragend, drop
    • 미디어 이벤트: ended, pause, play
  • shouldPreventSpanCreation: Span이 생성될 때 호출되는 콜백 함수입니다. true를 반환하면 Span 기록을 방지합니다.
  • events: 사용자 상호작용 이벤트를 설정합니다. UserInteractionEventsConfig 인터페이스를 사용하여 세부 설정을 지정할 수 있습니다.
  • captureText: (boolean, 기본값: true) false로 설정하면 모든 이벤트 span attribute에서 target_element_text 값을 포함하지 않으며, Operation Name 폴백에서 innerText를 제외합니다.
  • captureId: (boolean, 기본값: true) false로 설정하면 모든 이벤트 span attribute에서 target_element_id 값을 포함하지 않으며, Operation Name 폴백에서 id를 제외합니다.
type UserInteractionEventsConfig = {
  [type: string]: boolean;
};
const DEFAULT_AUTO_INSTRUMENTED_EVENTS: UserInteractionEventsConfig = {
  // pointer
  click: true,
  dblclick: true,
  mousedown: true,
  mouseup: true,
 
  // form
  submit: true,
  reset: true,
  change: true,
 
  // drag & drop
  dragend: true,
  drop: true,
 
  // media
  ended: true,
  pause: true,
  play: true,
};
Ignore 설정

특정 요소를 계측 대상에서 제외하려면 HTML 요소에 data-sophonz="ignore" 속성을 추가합니다. 해당 요소에서 발생하는 이벤트는 span과 trace가 생성되지 않습니다.

<button data-sophonz="ignore">민감한 버튼</button>
<input data-sophonz="ignore" type="text" placeholder="개인정보 입력" />
Operation Name 폴백 로직

사용자 상호작용 이벤트의 Operation Name은 다음 우선순위로 결정됩니다:

captureTextcaptureIdinnerText 있음id 있음Operation Name
truetrue"Submit""formSubmit"Submit [click]
falsetrue"Submit""formSubmit"formSubmit [click]
truefalse"Submit""formSubmit"Submit [click]
falsefalse"Submit""formSubmit"button [click]
설정 예시
SophonzSDK.init({
  collectorUrl: 'https://in.v0.sophonz.com',
  appName: 'my-frontend-app',
  appVersion: '1.0.0',
  appKey: '<YOUR_SERVICE_KEY_HERE>',
  instrumentations: {
    interactions: {
      captureText: true,   // innerText 수집 여부 (기본값: true)
      captureId: true,     // id 수집 여부 (기본값: true)
      events: {
        click: true,
        dblclick: true,
        submit: true,
        change: true,
        mousedown: false,  // 비활성화
        mouseup: false,    // 비활성화
      }
    }
  }
});
longtask instrumentation

(boolean 또는 InstrumentationConfig, 선택)

브라우저 장시간 작업 계측을 활성화하거나 비활성화합니다. true로 설정하면 긴 시간 동안 실행되는 작업이 자동으로 계측됩니다.

자세한 계측 정보는 @sophonz/instrumentation-browser-longtask 참조

export interface InstrumentationConfig {
    enabled?: boolean;
}
  • enabled: 계측을 활성화할지 여부를 설정합니다. 기본값은 true입니다.
visibility instrumentation

(boolean 또는 InstrumentationConfig, 선택)

페이지 가시성 계측을 활성화하거나 비활성화합니다. true로 설정하면 페이지의 가시성 상태(포그라운드/백그라운드 변화)가 자동으로 계측됩니다.

자세한 계측 정보는 @sophonz/instrumentation-visibility 참조

export interface InstrumentationConfig {
    enabled?: boolean;
}
connectivity instrumentation

(boolean 또는 InstrumentationConfig, 선택)

네트워크 연결 상태 계측을 활성화하거나 비활성화합니다. true로 설정하면 네트워크 상태(온라인/오프라인 변화)가 자동으로 계측됩니다.

자세한 계측 정보는 @sophonz/instrumentation-connectivity 참조

export interface InstrumentationConfig {
    enabled?: boolean;
}
postdoc instrumentation

(boolean 또는 SophonzPostDocLoadResourceInstrumentationConfig, 선택)

문서 로드 후 리소스 계측을 활성화하거나 비활성화합니다. true로 설정하면 문서가 완전히 로드된 후 리소스 로딩 이벤트가 자동으로 계측됩니다. 이 계측은 SPA 형태의 웹에서 컴포넌트 단위의 리소스 계측에 유용합니다.

@sophonz/instrumentation-post-document-load 문서 참조

interface SophonzPostDocLoadResourceInstrumentationConfig
  extends InstrumentationConfig {
  allowedInitiatorTypes?: string[];
  ignoreUrls?: (string | RegExp)[];
}
  • allowedInitiatorTypes: 계측할 요청의 이니시에이터 타입을 지정합니다. 기본값은 ["script", "link"]입니다.
  • ignoreUrls: 계측하지 않을 URL 패턴을 지정합니다.
socketio instrumentation

(boolean 또는 SocketIoClientInstrumentationConfig, 선택)

Socket.io 클라이언트 계측을 활성화하거나 비활성화합니다. true로 설정하면 Socket.io 클라이언트의 이벤트가 자동으로 계측됩니다.

interface SocketIoClientInstrumentationConfig
  extends InstrumentationConfig {
  target?: string | SocketIOClient;
}
  • target: Socket.io 클라이언트의 타겟 객체를 지정합니다. 기본값은 undefined입니다.
websocket instrumentation

(boolean 또는 SophonzWebSocketInstrumentationConfig, 선택)

WebSocket 계측을 활성화하거나 비활성화합니다. true로 설정하면 WebSocket 연결 이벤트가 자동으로 계측됩니다.

interface SophonzWebSocketInstrumentationConfig extends InstrumentationConfig {
  ignoreUrls?: (string | RegExp)[];
}
  • ignoreUrls: 계측하지 않을 URL 패턴을 지정합니다.
webvitals instrumentation

(boolean, 선택)

Web Vitals 계측을 활성화하거나 비활성화합니다. true로 설정하면 Core Web Vitals 지표가 자동으로 계측됩니다.

자세한 계측 정보는 @sophonz/instrumentation-webvitals 참조

interface InstrumentationConfig {
  enabled?: boolean;
}
  • enabled: 계측을 활성화할지 여부를 설정합니다. 기본값은 true입니다.
xhr instrumentation

(boolean 또는 SophonzXMLHttpRequestInstrumentationConfig, 선택)

XMLHttpRequest 계측을 활성화하거나 비활성화합니다. true로 설정하면 XMLHttpRequest 요청이 자동으로 계측됩니다.

자세한 계측 정보는 @sophonz/instrumentation-xml-http-request 참조

interface XMLHttpRequestInstrumentationConfig extends InstrumentationConfig {
    clearTimingResources?: boolean;
    propagateTraceHeaderCorsUrls?: PropagateTraceHeaderCorsUrls;
    ignoreUrls?: Array<string | RegExp>;
    applyCustomAttributesOnSpan?: XHRCustomAttributeFunction;
    ignoreNetworkEvents?: boolean;
    measureRequestSize?: boolean;
    advancedNetworkCapture?: () => boolean;
}
  • clearTimingResources: 타이밍 리소스를 초기화합니다. 기본값은 false입니다.
  • propagateTraceHeaderCorsUrls: CORS 요청에 Trace Header를 전파할 URL 목록을 지정합니다.
  • ignoreUrls: 계측하지 않을 URL 패턴을 지정합니다.
  • applyCustomAttributesOnSpan: Span에 사용자 정의 속성을 추가하는 함수입니다. 기본값은 undefined입니다.
  • ignoreNetworkEvents: 네트워크 이벤트를 무시합니다. 기본값은 false입니다.
  • measureRequestSize: 요청 크기를 측정합니다. 기본값은 false입니다.
  • advancedNetworkCapture: 고급 네트워크 캡처를 활성화합니다. 기본값은 false입니다.