설정 및 서비스 상태 관리
Sophonz Browser SDK의 초기화 옵션 전체 레퍼런스와 서비스 상태 동적 제어 방법을 설명합니다.
SophonzSDK.init()에 전달할 수 있는 모든 옵션과, 서버 측에서 계측을 동적으로 제어하는 서비스 상태 관리 기능을 설명합니다.
설정 (Options)
| 옵션 이름 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
collectorUrl | string | optional | 콜렉터 주소를 지정합니다. 기본값은 https://in.v0.sophonz.com입니다. |
authorizationToken | string | optional | 인증 토큰을 설정합니다. |
appName | string | optional | 앱 이름을 지정합니다. (서비스 등록할 때의 패키지명) 텔레메트리 데이터 저장에 필수적입니다. |
appKey | string | optional | 앱 키를 설정합니다. 텔레메트리 데이터 저장에 필수적입니다. |
appVersion | string | optional | 앱 버전을 지정합니다. 텔레메트리 데이터 저장에 필수적이며, 빈 문자열이나 비문자열일 경우 경고가 발생합니다. 웹뷰 환경에서는 네이티브 SDK에서 전달한 버전이 사용됩니다. |
webVersion | string | optional | 웹 서비스 버전을 지정합니다. 웹뷰 환경에서 네이티브 앱 버전과 별도로 웹 콘텐츠의 버전을 추적할 때 사용됩니다. 일반 웹 환경에서는 appVersion과 동일한 값이 자동으로 설정됩니다. |
project | string | optional | 프로젝트를 설정합니다. 여러 서비스(Android, iOS, Web 등)를 통합하여 모니터링할 경우 필요하며 비어있는 경우 service.namespace를 보내지 않습니다. |
deploymentEnvironment | string | optional | 배포 환경을 설정합니다. setGlobalAttributes()를 통해 지속되는 environment 속성의 값을 설정할 수 있습니다. |
defaultAttributes | Attributes | optional | 기본 리소스 속성을 설정합니다. 모든 Span에 추가되는 전역 속성으로 사용됩니다. |
samplingProbability | number | string | optional | 샘플링 확률을 설정합니다. 0에서 1 사이의 값으로 지정하며, 기본값은 1입니다. |
advancedNetworkCapture | boolean | optional | 네트워크 요청 및 응답의 상세 추적을 활성화합니다. 기본값은 false입니다. |
blockClass | string | optional | 세션 리플레이에서 가려야 할 요소의 CSS 클래스를 지정합니다. |
consoleCapture | boolean | optional | 콘솔 캡처 기능을 활성화합니다. 기본값은 false입니다. |
debug | boolean | optional | 디버깅 모드를 활성화합니다. 기본값은 false입니다. |
disableIntercom | boolean | optional | Intercom 연동을 비활성화합니다. 기본값은 false입니다. |
disableReplay | boolean | optional | 세션 리플레이 기능을 비활성화합니다. 기본값은 true입니다. |
ignoreClass | string | optional | 세션 리플레이에서 무시할 요소의 CSS 클래스를 지정합니다. |
ignoreUrls | Array<string | RegExp> | optional | 추적하지 않을 URL 패턴을 지정합니다. 정규식이나 문자열 배열로 설정할 수 있으며, 부분 일치 또는 정확히 일치하는 URL은 추적되지 않습니다. |
instrumentations | Instrumentations | optional | 사용자 지정 Instrumentations 설정을 지정합니다. 기본값은 빈 객체 {}입니다. |
maskAllInputs | boolean | optional | 모든 입력 요소를 마스킹합니다. 기본값은 true입니다. |
maskAllText | boolean | optional | 모든 텍스트를 마스킹합니다. 기본값은 false입니다. |
maskClass | string | optional | 텍스트 마스킹에 사용할 CSS 클래스를 지정합니다. |
recordCanvas | boolean | optional | 캔버스 요소 기록 여부를 설정합니다. 기본값은 false입니다. |
sampling | number | optional | 세션 레코더 샘플링 설정을 지정합니다. |
tracePropagationTargets | Array<string | RegExp> | optional | Trace Header를 전파할 대상 도메인 또는 정규식 목록을 지정합니다. |
webVitals | boolean | optional | 웹 비탈을 활성화합니다. 기본값은 false입니다. |
websocket | boolean | optional | 웹소켓 계측을 활성화합니다. 기본값은 false입니다. |
socketio | boolean | optional | Socket.IO 계측을 활성화합니다. 기본값은 false입니다. |
captureMetric | boolean | optional | 메트릭 수집을 활성화합니다. 기본값은 false입니다. (beta) |
disablePreflight | boolean | optional | preflight 요청 비활성화 여부 (기본값: false). preflight는 CORS 요청을 위한 OPTIONS 요청입니다. |
exporterProtocol | json | proto | optional | exporter 프로토콜을 설정합니다. 기본값은 json입니다. |
screenNameOption | ScreenNameOption | optional | 화면 이름 옵션을 설정합니다. 기본값은 { screenNameType: "routeOnly", urlWithSearchParams: false }입니다. |
서비스 상태 관리 (Service Status)
Sophonz Browser SDK는 서버와 통신하여 서비스의 계측 상태를 동적으로 관리할 수 있습니다. 이 기능을 통해 서버 측에서 계측을 활성화하거나 비활성화할 수 있으며, Exporter 실패 시 자동으로 계측을 중단하는 기능을 제공합니다.
Service Status API
Sophonz Browser SDK는 초기화 시 Service Status API (/v2/service/status)를 호출하여 서비스 상태를 확인합니다.
동작 방식
- 초기화 시 상태 확인:
init()호출 시 이전에 저장된isCollecting상태를 확인합니다. - 계측 비활성화: 저장된
isCollecting이false인 경우 계측이 비활성화됩니다. - 백그라운드 업데이트: Service Status API를 백그라운드에서 호출하여 최신 상태를 localStorage에 저장합니다.
- 다음 세션 적용: 서버에서
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가 연속으로 실패할 경우 자동으로 계측을 중단하는 기능입니다.
동작 방식
- 실패 추적:
ExporterFailureTracker가 Exporter의 성공/실패를 추적합니다. - 임계값 도달: 연속 실패 횟수가
targetDropCount에 도달하면 자동으로deinit()이 호출됩니다. - 실패 카운터 리셋: 실패 카운터는
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()옵션에서 설정한 웹 버전 (내부적으로 별도 관리)
-
일반 웹 브라우저 환경:
appVersion과webVersion이 동일한 값으로 설정됩니다.
이를 통해 웹뷰에서 네이티브 앱 버전과 웹 콘텐츠 버전을 모두 추적할 수 있습니다.
WARNING — Sophonz Mobile SDK와 연동
- 웹 브라우저 환경을 계측할 경우에는
appVersion값을 반드시 입력해야 합니다. - Android/iOS SDK에서 웹뷰 환경을 계측할 경우, 네이티브 SDK에서
appVersion을 자동으로 전달하므로 별도로 입력할 필요가 없습니다. - 웹뷰 환경과 웹 브라우저 환경을 모두 계측하려는 경우, 웹뷰에서는 네이티브 SDK가 자동으로 전달한 파라미터를 사용하고, 웹 브라우저에서는 직접 입력한 파라미터를 사용하게 됩니다.
TIP — 웹뷰 환경에서의 버전 관리
웹뷰 환경에서는 appVersion과 webVersion이 분리되어 처리됩니다:
appVersion: 네이티브 SDK(Android/iOS)에서 전달한 앱 버전이 사용됩니다.webVersion: Browser SDK 초기화 시 옵션으로 전달한 웹 콘텐츠 버전이 사용됩니다.
일반 웹 브라우저 환경에서는 옵션으로 전달한 appVersion 값이 appVersion과 webVersion 모두에 동일하게 적용됩니다.
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.header와 http.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 = trueiOS의 경우 기본적으로 활성화되어 있으나 명시적으로 허용해야 하는 경우:
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 요청입니다. 보안상 필요한 경우 사용합니다. - 이 설정은
exporterProtocol이proto로 설정된 경우 자동으로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
};screenNameType은routeOnly,titleOnly,full중 하나를 선택할 수 있습니다.routeOnly: URL 경로만 포함titleOnly: 페이지 제목만 포함full: 페이지 제목과 URL 경로 모두 포함. 기본값은routeOnly입니다.
urlWithSearchParams는true일 경우 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 인터페이스는 다양한 계측 모듈의 활성화 여부 및 설정을 정의합니다. 각 속성은 특정 계측 기능을 활성화하거나 비활성화할 수 있으며, 추가적인 설정을 제공할 수 있습니다.
공통 옵션
모든 계측기에서 공통으로 사용되는 옵션입니다.
| 옵션 | 타입 | 기본값 | 설명 |
|---|---|---|---|
screenNameOption | ScreenNameOption | { screenNameType: 'routeOnly', urlWithSearchParams: false } | 화면 이름 수집 옵션 |
screenNameOption은 각 계측기의 설정 객체에서 개별적으로 설정할 수 있으며, 전역 screenNameOption 설정을 오버라이드합니다. 자세한 내용은 screenNameOption 옵션을 참조하세요.
instrumentations 속성 목록
| 속성 이름 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
console | boolean | optional | 콘솔 계측을 활성화하거나 비활성화합니다. |
document | boolean | optional | 문서 로드 계측을 활성화하거나 비활성화합니다. |
errors | boolean | SophonzErrorInstrumentationConfig | optional | 오류 계측을 활성화하거나 비활성화합니다. |
fetch | boolean | optional | Fetch API 계측을 활성화하거나 비활성화합니다. |
interactions | boolean | SophonzUserInteractionInstrumentationConfig | optional | 사용자 상호작용 계측을 활성화하거나 비활성화합니다. |
longtask | boolean | optional | 장시간 작업 계측을 활성화하거나 비활성화합니다. |
visibility | boolean | optional | 페이지 가시성 계측을 활성화하거나 비활성화합니다. |
connectivity | boolean | optional | 네트워크 연결 상태 계측을 활성화하거나 비활성화합니다. |
postload | boolean | optional | 문서 로드 후 리소스 계측을 활성화하거나 비활성화합니다. |
socketio | boolean | optional | Socket.io 클라이언트 계측을 활성화하거나 비활성화합니다. |
websocket | boolean | optional | WebSocket 계측을 활성화하거나 비활성화합니다. |
webvitals | boolean | optional | Web Vitals 계측을 활성화하거나 비활성화합니다. |
xhr | boolean | optional | XMLHttpRequest 계측을 활성화하거나 비활성화합니다. |
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은 다음 우선순위로 결정됩니다:
| captureText | captureId | innerText 있음 | id 있음 | Operation Name |
|---|---|---|---|---|
true | true | "Submit" | "formSubmit" | Submit [click] |
false | true | "Submit" | "formSubmit" | formSubmit [click] |
true | false | "Submit" | "formSubmit" | Submit [click] |
false | false | "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입니다.