사용자 상호작용 계측
@imqa/instrumentation-user-interaction
개요
사용자 상호작용 계측은 웹 애플리케이션에서 발생하는 사용자의 다양한 상호작용 이벤트를 자동으로 감지하고 추적하는 기능을 제공합니다. 클릭, 입력, 폼 제출, 스크롤 등의 사용자 행동을 실시간으로 모니터링하여 사용자 경험과 애플리케이션 사용 패턴을 분석할 수 있습니다.
주요 기능
자동 이벤트 추적
- 클릭, 더블클릭, 우클릭 이벤트 감지
- 키보드 입력 및 폼 상호작용 추적
- 터치 및 제스처 이벤트 지원
- 스크롤 및 페이지 탐색 추적
상세한 상호작용 정보
- 이벤트 발생 위치 및 타겟 요소
- 사용자 입력 값 및 변경 사항 (민감 정보 제외)
- 상호작용 시간 및 지속시간
- 디바이스 및 입력 방식 정보
사용자 경험 분석
- 상호작용 패턴 및 흐름 분석
- 사용자 참여도 측정
- UI/UX 개선점 도출을 위한 데이터 제공
계측 범위
사용자 상호작용 계측은 다음과 같은 이벤트를 추적합니다:
- 마우스 이벤트: 클릭, 더블클릭, 우클릭, 호버
- 키보드 이벤트: 키 입력, 키 조합, 포커스 변경
- 폼 이벤트: 입력 필드 변경, 폼 제출, 유효성 검사
- 터치 이벤트: 탭, 스와이프, 핀치, 회전 (모바일)
- 네비게이션 이벤트: 페이지 이동, 뒤로 가기, 새로고침
주요 속성
| 속성 | 설명 |
|---|---|
service.name | Telemetry를 생성하는 서비스의 이름 |
service.version | 서비스 버전 |
service.namespace | 서비스 네임스페이스 |
deployment.environment.name | 배포 환경 |
telemetry.sdk.language | Telemetry SDK의 프로그래밍 언어 |
telemetry.sdk.name | Telemetry SDK의 이름 |
telemetry.sdk.version | Telemetry SDK의 버전 |
process.runtime.name | 런타임 이름 (예: "browser") |
os.name | 운영체제 이름 |
os.version | 운영체제 버전 |
imqa.browser.device | 디바이스 타입 |
imqa.browser.name | 브라우저 이름 |
imqa.browser.version | 브라우저 전체 버전 |
imqa.browser.version_major | 브라우저 메이저 버전 |
service.key | 서비스 식별 키 |
imqa.agent.version | IMQA 에이전트 버전 |
rum.version | RUM (Real User Monitoring) 버전 |
rum.scriptInstance | RUM 스크립트 인스턴스 식별자 |
session.id | 사용자 세션 식별자 |
인스트루멘테이션 범위
사용자 상호작용 Telemetry는 주로 다음과 같은 인스트루멘테이션 범위를 통해 캡처됩니다:
@imqa/instrumentation-user-interaction: 사용자의 DOM 상호작용 이벤트 캡처
사용자 상호작용 범위
사용자 상호작용 범위는 클릭, 입력, 폼 제출과 같은 DOM 상호작용 이벤트를 캡처합니다.
범위 정의
"scope": {
"name": "@opentelemetry/instrumentation-user-interaction",
"version": "0.44.1"
}
사용자 상호작용 스팬
사용자 상호작용 스팬은 클릭과 같은 사용자 이벤트를 캡처합니다:
traceId: 트레이스의 고유 식별자spanId: 스팬의 고유 식별자name: 상호작용의 타입 (예: "click", "submit", "change")kind: 스팬의 타입 (INTERNAL = 1)startTimeUnixNano: 에포크 이후의 상호작용 시작 시간 (나노초)endTimeUnixNano: 에포크 이후의 상호작용 완료 시간 (나노초)status: 결과 상태 (OK = 0)
사용자 상호작용 스팬 속성
각 사용자 상호작용 스팬은 다음과 같은 속성을 포함합니다:
| 속성 | 타입 | 설명 |
|---|---|---|
event_type | string | 이벤트의 타입 (예: "click", "submit", "change") |
target_element | string | 상호작용된 HTML 요소 타입 |
target_xpath | string | 대상 요소의 XPath |
http.url | string | 현재 페이지 URL |
location.href | string | 현재 페이지 URL |
environment | string | 환경 이름 |
deployment.environment | string | 배포 환경 |
screen.name | string | 화면/페이지 이름 |
screen.type | string | 화면/페이지 타입 |
session.id | string | 사용자 세션 식별자 |
url.full | string | 요청 전체 URL (예: "https://example.com/articles/4?s=1&t1" ) |
component | string | 인스트루멘테이션 컴포넌트 이름 |
span.type | string | 스팬 타입 (예: "user-interaction") |
target_element_text | string | 상호작용된 요소의 텍스트 |
target_element_tag | string | 상호작용된 요소의 태그 (예: "button", "a", "span") |
target_element_class | string | 상호작용된 요소의 클래스 이름 |
target_element_id | string | 상호작용된 요소의 ID |
스키마 간의 관계
사용자 상호작용은 종종 다른 추적된 이벤트를 트리거합니다:
- 클릭이 싱글 페이지 애플리케이션의 라우트 변경을 트리거할 수 있습니다
- 사용자 상호작용은 오류 스키마에서 캡처되는 오류를 초래할 수 있습니다
- 사용자 상호작용은 일반적으로 라우트 변경과 오류의 부모 스팬으로 나타납니다
사용 방법
이 스키마는 IMQA 모니터링 시스템으로 Telemetry 데이터를 처리하고 저장하기 전에 사용자 상호작용을 위한 Telemetry 데이터를 검증하는 데 사용됩니다. 이는 모든 필수 필드가 올바르게 포함되어 있는지 확인합니다.
계측 설정
(
boolean또는IMQAUserInteractionInstrumentationConfig, 선택)
사용자 상호작용 계측을 활성화하거나 비활성화합니다. true로 설정하면 클릭, 입력 등 사용자 상호작용 이벤트가 자동으로 계측됩니다. IMQAUserInteractionInstrumentationConfig을 통해 상호작용 계측의 세부 설정을 커스터마이즈할 수 있습니다.
interface UserInteractionInstrumentationConfig extends InstrumentationConfig {
eventNames?: EventName[];
shouldPreventSpanCreation?: ShouldPreventSpanCreation;
events?: UserInteractionEventsConfig;
}
eventNames: 계측할 이벤트 목록을 지정합니다. 기본값은DEFAULT_AUTO_INSTRUMENTED_EVENTS입니다.- 포인터 이벤트:
click,dblclick,mousedown,mouseup - Form 이벤트:
submit,reset,change - Drag & Drop:
dragend,drop - 미디어 이벤트:
ended,pause,play
- 포인터 이벤트:
shouldPreventSpanCreation: Span이 생성될 때 호출되는 콜백 함수입니다.true를 반환하면 Span 기록을 방지합니다. 이 핸들러를 사용하여 생성된 Span에 추가 속성을 추가할 수 있습니다.events: 사용자 상호작용 이벤트를 설정합니다.UserInteractionEventsConfig인터페이스를 사용하여 세부 설정을 지정할 수 있습니다.
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,
// drap & drop
dragend: true,
drop: true,
// media
ended: true,
pause: true,
play: true,
};
예시
유효한 사용자 상호작용 Telemetry 객체는 다음과 같은 내용을 포함합니다:
- 서비스, 브라우저 및 환경을 식별하는 리소스 정보
- 클릭, 입력, 폼 제출과 같은 이벤트를 캡처하는 사용자 상호작용 스팬
- 상호작용된 요소에 대한 상세 정보
데이터는 다양한 Telemetry 수집 및 분석 도구와 호환되는 OpenTelemetry 프로토콜 형식을 따릅니다.