본문으로 건너뛰기

브라우저 에이전트 수집 데이터

와탭 브라우저 에이전트는 사용자의 브라우저에서 발생한 이벤트를 수집하고, 수집한 데이터를 재가공해 모니터링에 활용합니다. 모든 수집 데이터는 사용자 세션에 종속적입니다.

타입(Type)

다음은 와탭 브라우저 에이전트가 수집하는 데이터 유형입니다.

  • Long : long to string32형식의 고유 ID 데이터 타입입니다.
  • TimeStamp : ms(millisecond) 단위, 측정 시각의 타임스탬프입니다.
  • HighResolutionTime : ms 단위의 소요된 시간입니다.
  • TimeSet : 타임라인 표시를 위해 시작 타임스탬프와 소요시간으로 표현합니다.
  • ResourceType : document, xhr, fetch, beacon, css, script, image, font, media, other 중 하나를 의미합니다.
  • ErrorType : console, onError, promiseRejection, fetchError, xhrError, messageError 중 하나를 의미합니다.

공통 수집 데이터

이벤트 발생 시 기본으로 수집 데이터는 다음과 같습니다.

데이터 이름타입설명예시
sessionIDLong웹 애플리케이션 사용자가 웹 페이지 탐색을 시작할 때 발급하는 고유 ID입니다. 세션의 유지 기간은 최대 4시간이며, 15분 동안 활동이 없으면 ID는 만료합니다. 브라우저 쿠키에 저장합니다.x7dbvq64ga80sd
userIDLong웹 애플리케이션 사용자가 처음 접속할 때 발급하는 고유 ID로 만료 시간이 없습니다. 브라우저 쿠키에 저장합니다.z7eqnnitlc19j9
sendEventIDLong이벤트 발생 후 수집 서버로 데이터 전송 시 발급하는 요청 고유 ID입니다.x4rp4tnuq25i0h
page.urlString이벤트가 발생한 페이지 URL입니다.https://site.whatap.io/8/dashboard?dataKey=abcd
page.hostString이벤트가 발생한 페이지 URL의 도메인 이름입니다.site.whatap.io
page.pathString이벤트가 발생한 페이지 URL의 경로입니다./8/dashboard
page.queryString이벤트가 발생한 페이지 URL의 parameter입니다.dataKey=abcd
page.protocolString이벤트가 발생한 페이지 URL의 프로토콜입니다.https
page.titleString이벤트가 발생한 페이지의 문서 제목입니다.SaaS 모니터링 No.1 와탭 모니터링 | 와탭
userAgentString이벤트가 발생한 브라우저의 useragent입니다.Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)
AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/103.0.0.0
Safari/537.36

페이지 로드 이벤트

사용자가 웹 애플리케이션에 접속 후 페이지의 콘텐츠를 완전히 불러오고 발생하는 이벤트입니다. 기본 수집 데이터는 다음과 같습니다.

데이터 이름타입설명예시
navigationTiming.startTimeStampTimeStampnavigationStart의 타임스탬프입니다. 페이지를 불러오기 시작하는 시간의 타임스탬프값입니다.1658057382311
navigationTiming.eventIDLong페이지를 불러오는 이벤트 발생 시 발급하는 고유 ID입니다.x7mkg24tags307
navigationTiming.redirectTimeSethttp 리디렉션의 소요 시간입니다.{duration: 10, start: 315}
navigationTiming.cacheTimeSetapp cache 리소스를 불러오는 소요 시간입니다.{duration: 5, start: 325}
navigationTiming.dnsTimeSet웹사이트 domain 탐색 소요 시간입니다.{duration: 5, start: 330}
navigationTiming.connectTimeSetTCP 연결 설정의 소요 시간입니다.{duration: 6, start: 335}
navigationTiming.sslTimeSetssl handshake 프로세스 소요 시간입니다.{duration: 5, start: 336}
navigationTiming.downloadTimeSetdocument 다운로드 소요 시간입니다.{duration: 100, start: 341}
navigationTiming.firstByteTimeSet브라우저가 서버에 document를 요청하고 첫 번째 바이트를 수신할 때까지의 소요 시간입니다.{duration: 10, start: 341}
navigationTiming.domInteractiveHighResolutionTimenavigationStart부터 브라우저가 document 파싱을 완료한 시각입니다. DOM이 준비된 상태입니다.441
navigationTiming.domContnentLoadedTimeSetDOM 트리를 생성하는데 걸린 소요 시간입니다.{duration: 50, start: 441}
navigationTiming.domCompleteHighResolutionTimenavigationStart부터 document 및 하위 리소스 불러오기를 완료한 시각입니다.491
navigationTiming.domLoadTimeSetonload 이벤트 소요 시간입니다.{duration: 1, start: 491}
navigationTiming.backendTimeHighResolutionTimenavigationStart부터 리소스 다운로드까지의 소요 시간입니다.126
navigationTiming.frontendTimeTimeSet브라우저가 파싱을 완료한 시각부터 load 이벤트가 완료될 때까지의 소요 시간입니다.{duration: 51, start: 441}
navigationTiming.loadTimeHighResolutionTimenavigationStart부터 loadEventEnd까지 소요 시간입니다.492
totalDurationHighResolutionTimenavigationStart부터 최종 페이지 불러오기를 완료한 시각입니다.550

페이지 로드 시간

페이지 로드 시간은 웹 브라우저에서 특정 페이지의 URL을 요청한 순간부터 페이지의 모든 리소스(HTML, CSS, JavaScript, 이미지 등)가 다운로드 및 처리되고, 브라우저가 페이지를 완전히 렌더링하여 사용 가능한 상태가 되기까지의 총 시간을 의미합니다.

페이지 로드 시간을 수집하기 위해 브라우저 에이전트는 브라우저에서 제공하는 Web API 중 하나인 Navigation Timing API를 통해 수집합니다. 이 API를 통해 각 단계별 시간(예: 요청 시작, 응답, 렌더링 시작 및 완료)을 측정하여 제공합니다.

PerformanceTiming 인터페이스를 통해 접근할 수 있는 밀리초 단위의 측정 이벤트들이 있습니다. 다음은 이러한 이벤트들이 발생하는 순서대로 나열한 목록입니다.

Navigation timing

이벤트설명비고
navigationStart페이지 탐색 시작 시점입니다.-
redirectStart첫 번째 HTTP 리다이렉트 시작 시점입니다.리다이렉트가 없으면 값은 0입니다.
redirectEnd마지막 리다이렉트의 응답 수신 완료 시점입니다.리다이렉트가 없으면 값은 0입니다.
fetchStart브라우저가 리소스를 가져오기 위한 프로세스를 시작하는 시점입니다.캐시 조회가 시작되는 시점이기도 합니다.
domainLookupStart도메인 이름에 대한 DNS 조회 시작 시점입니다.브라우저가 URL의 호스트 이름을 IP 주소로 변환하기 시작합니다. 캐시된 DNS 정보가 있거나 로컬 hosts 파일에 정보가 있다면 fetchStart와 동일한 값을 가질 수 있습니다.
domainLookupEndDNS 조회 완료 시점입니다.브라우저가 도메인에 대한 IP 주소를 성공적으로 받아옵니다. DNS 조회를 실패하더라도 이 시점으로 기록합니다.
connectStart서버와의 연결 시작 시점입니다.TCP 연결을 시작합니다. 만약 지속적인 연결(persistent connection)을 재사용하는 경우라면 domainLookupEnd와 동일한 값을 가질 수 있습니다.
connectEnd서버와의 연결이 완전히 설정된 시점입니다.TCP 핸드셰이크를 완료합니다. HTTPS의 경우 SSL/TLS 핸드셰이크도 이 시점까지 완료합니다. 연결이 실패하더라도 이 시점으로 기록합니다.
secureConnectionStartHTTPS 연결 시작 시점입니다.해당하는 경우에만 기록합니다.
requestStart서버에 리소스를 요청하기 시작한 시점입니다.-
responseStart서버로부터 응답의 첫 바이트(byte)를 받기 시작한 시점입니다.HTTP 응답 헤더의 첫 바이트(byte)를 받은 시점으로 서버의 초기 응답 시간(Time to First Byte, TTFB)을 계산하는 데 사용합니다.
responseEnd서버로부터 마지막 바이트(byte)를 받은 시점전체 응답(헤더와 본문)을 모두 받은 시점입니다. 리다이렉트 응답이 있으면 최종 응답의 마지막 바이트(byte)를 받은 시점입니다.
domInteractiveDOM 파싱이 끝나고 스크립트 실행 준비가 된 시점입니다.-
domContentLoadedEventStartDOMContentLoaded 이벤트가 발생한 시점입니다.이 때는 HTML 문서의 로딩과 파싱이 완료되었으며 DOM 트리가 완전히 구축되었음을 의미합니다.
domContentLoadedEventEnd모든 DOMContentLoaded 이벤트 핸들러의 실행이 완료된 시점입니다.-
domCompleteDOM 로딩과 하위 리소스 로딩이 완료된 시점입니다.-
loadEventStartload 이벤트 발생 직전 시점입니다.DOM이 완전히 구성되고 모든 리소스를 로드한 직후입니다. window.onload 이벤트 핸들러가 실행되기 직전의 시점입니다.
loadEventEnd모든 load 이벤트 핸들러의 실행이 완료된 시점입니다.페이지와 모든 종속 리소스를 완전히 로드한 상태입니다.

라우터 변경 이벤트

사용자가 Single Page Application(SPA) 형태의 웹 애플리케이션에서 페이지 이동 시 발생하는 이벤트입니다. 기본 수집 데이터는 다음과 같습니다.

데이터 이름타입설명예시
loadTimeHighResolutionTime라우터 변경 소요 시간입니다.500
startTimeStampTimeStamp라우터 변경 시작 시각 타임스탬프입니다.1658057382311
endTimeStampTimeStamp라우터 변경 종료 시각 타임스탬프입니다.1658057382811
pageLocationString라우터 변경 이벤트가 발생한 페이지 URL입니다.https://site.whatap.io/8/dashboard?dataKey=abcd
hostString라우터 변경 이벤트가 발생한 페이지 URL의 도메인 이름입니다.site.whatap.io
pathString라우터 변경 이벤트가 발생한 페이지 URL의 경로입니다./8/dashboard
queryString라우터 변경 이벤트가 발생한 페이지 URL의 parameter입니다.dataKey=abcd
protocolString라우터 변경 이벤트가 발생한 페이지 URL의 프로토콜입니다.https
isCompleteBoolean라우터 변경이 완료되지 않은 상태에서 다른 페이지로 라우터를 변경하는 경우 구분하기 위한 값입니다.true

리소스 로드 이벤트

사용자가 웹 애플리케이션을 사용 중 리소스를 불러올 때 발생하는 이벤트입니다. 기본 수집 데이터는 다음과 같습니다.

데이터 이름타입설명예시
startTimeHighResolutionTimenavigationStart로 부터 리소스 요청 시작까지의 시간입니다.1000
startTimeStampTimeStamp리소스 요청 시작 타임스탬프입니다.1658057382321
eventIDLong리소스를 불러올 때마다 발급하는 고유 ID입니다.x280or4ok0kqo0
typeResourceType리소스 타입입니다.image
urlString리소스 URL입니다.https://unpkg.com/purecss@2.0.3/build/pure-min.css?dataKey=abcd
urlHostString리소스 URL의 도메인 이름입니다.unpkg.com
urlPathString리소스 URL의 경로입니다./purecss@2.0.3/build/pure-min.css
urlQueryString리소스 URL의 parameter입니다.dataKey=abcd
urlProtocolString리소스 URL의 프로토콜입니다.https
is3rdPartyBoolean3rd party로 요청한 리소스를 구분하기 위한 값입니다.false
timing.durationHighResolutionTime리소스 다운로드 완료까지 소요된 시간입니다.61
timing.sizeNumber리소스 인코딩 사이즈입니다.20
timing.redirectTimeSethttp 리디렉션의 소요시간입니다.{duration: 10, start: 315}
timing.cacheTimeSetapp cache 리소스를 불러오는 소요 시간입니다.{duration: 5, start: 325}
timing.dnsTimeSet리소스 도메인 탐색 소요시간입니다.{duration: 5, start: 330}
timing.connectTimeSetTCP 연결 설정의 소요 시간입니다.{duration: 6, start: 335}
timing.sslTimeSetssl handshake 프로세스 소요 시간입니다.{duration: 5, start: 336}
timing.firstByteTimeSet브라우저가 서버에 리소스를 요청하고 첫 번째 바이트를 수신할 때까지의 소요 시간입니다.{duration: 10, start: 341}
timing.downloadTimeSet리소스 다운로드 소요 시간입니다.{duration: 100, start: 341}
resourceInfo.methodString리소스 요청 메소드입니다.POST
resourceInfo.statusNumber리소스 요청 상태입니다.200

에러 이벤트

사용자가 웹 애플리케이션 사용 중 브라우저에서 발생한 에러입니다. 기본 수집 데이터는 다음과 같습니다.

데이터 이름타입설명예시
messageString에러 발생 시 메시지 정보입니다.SyntaxError: Unexpected end of JSON input
stackString에러 발생 시 스택 정보입니다.at printWarning (webpack-internal:///../node_modules/react-dom/cjs/react-dom.development.js:86:30)

at error (webpack-internal:///../node_modules/react-dom/cjs/react-dom.development.js:60:7)
timestampTimeStamp에러 발생 시점의 타임스탬프입니다.1658057382321
typeErrorType에러 타입입니다.onError
statusNumber에러 타입이 xhr, fetch의 경우 수집하는 에러 상태값입니다.501
urlString에러 타입이 xhr, fetch의 경우 AJAX 요청 URL입니다.https://site.whatap.io/yard/api?pcode=8&type=summary

코어 웹 바이탈 이벤트

코어 웹 바이탈(Core Web Vitals)은 웹 콘텐츠 이용자의 사용 경험에 영향을 미치는 다양한 측정값들 중 구글이 중요하다고 강조하는 3가지 지표입니다. 기본 수집 데이터는 다음와 같습니다.

데이터 이름타입설명예시
lcpHighResolutionTimeLargest Contentful Paint(LCP), 페이지를 처음 불러오기 시작한 시간을 기준으로 뷰포트 내에 있는 가장 큰 이미지 또는 텍스트 블록의 렌더링 시간을 보고합니다.12334
fidHighResolutionTimeFirst Input Delay(FID), 사용자가 페이지와 처음 상호 작용할 때(예: 링크를 클릭하거나 버튼을 탭할 때, 사용자 지정 JavaScript 기반 컨트롤을 사용할 때)부터 해당 상호 작용에 대한 응답으로 브라우저가 실제로 이벤트 핸들러 처리를 시작하기까지의 시간을 측정합니다.7
clsNumberCumulative Layout Shift(CLS)는 동적으로 불러온 콘텐츠로 예기치 못한 레이아웃 이동을 수치화하여 표현한 점수입니다.2