

# CloudWatch RUM 웹 클라이언트에서 수집한 정보
<a name="CloudWatch-RUM-datacollected"></a>

이 섹션에서는 **PutRumEvents** 스키마 즉, CloudWatch RUM을 사용하여 사용자 세션에서 수집할 수 있는 데이터의 구조를 정의합니다.

**PutRumEvents** 요청은 다음 필드가 있는 데이터 구조를 CloudWatch RUM으로 보냅니다.
+ 이 RUM 이벤트 배치의 ID
+ 다음을 포함하는 앱 모니터 세부 정보:
  + 앱 모니터 ID
  + 모니터링된 애플리케이션 버전
+ 다음을 포함하는 사용자 세부 정보.** 이 정보는 앱 모니터에 쿠키가 활성화된 경우에만 수집됩니다.**
  + 웹 클라이언트에서 생성된 사용자 ID
  + 세션 ID
+ 이 배치의 [RUM 이벤트](#CloudWatch-RUM-datacollected-event) 배열

## RUM 이벤트 스키마
<a name="CloudWatch-RUM-datacollected-event"></a>

각 RUM 이벤트의 구조에는 다음 필드가 포함됩니다.
+ 이벤트 ID
+ 타임스탬프
+ 이벤트 유형
+ 사용자 에이전트
+ [Metadata](#CloudWatch-RUM-datacollected-metadata)
+ [RUM 이벤트 세부 정보](#CloudWatch-RUM-datacollected-eventDetails)

## RUM 이벤트 메타데이터
<a name="CloudWatch-RUM-datacollected-metadata"></a>

메타데이터에는 페이지 메타데이터, 사용자 에이전트 메타데이터, 지리적 위치 메타데이터 및 도메인 메타데이터가 포함됩니다.

### 페이지 메타데이터
<a name="CloudWatch-RUM-datacollected-metadata-page"></a>

페이지 메타데이터에는 다음이 포함됩니다.
+ 페이지 ID
+ 페이지 제목
+ 상위 페이지 ID입니다. – **이 정보는 앱 모니터에 쿠키를 사용하도록 설정한 경우에만 수집됩니다.**
+ 상호 작용 깊이 - **이 정보는 앱 모니터에 쿠키가 사용하도록 설정된 경우에만 수집됩니다.**
+ 페이지 태그 - 페이지 이벤트에 태그를 추가하여 페이지를 그룹화할 수 있습니다. 자세한 내용은 [페이지 그룹 사용](CloudWatch-RUM-page-groups.md) 섹션을 참조하세요.

### 사용자 에이전트 메타데이터
<a name="CloudWatch-RUM-datacollected-metadata-useragent"></a>

사용자 에이전트 메타데이터에는 다음이 포함됩니다.
+ 브라우저 언어
+ 브라우저 이름
+ 브라우저 버전
+ 운영 체제 이름
+ 운영 체제 버전
+ 디바이스 유형
+ 플랫폼 유형

### 지리적 메타데이터
<a name="CloudWatch-RUM-datacollected-metadata-geolocation"></a>

지리적 메타데이터에는 다음이 포함됩니다.
+ 국가 코드
+ 세분화 코드

### 도메인 메타데이터
<a name="CloudWatch-RUM-datacollected-metadata-domain"></a>

도메인 메타데이터에는 URL 도메인이 포함됩니다.

## RUM 이벤트 세부 정보
<a name="CloudWatch-RUM-datacollected-eventDetails"></a>

이벤트 세부 정보는 이벤트 유형에 따라 다음 유형의 스키마 중 하나를 따릅니다.

### 세션 시작 이벤트
<a name="CloudWatch-RUM-datacollected-sessionstart"></a>

이 이벤트에는 필드가 없습니다. **이 정보는 앱 모니터에 쿠키가 활성화된 경우에만 수집됩니다.**

### 페이지 보기 스키마
<a name="CloudWatch-RUM-datacollected-pageview"></a>

**페이지 보기(Page view)** 이벤트에는 다음과 같은 속성이 포함됩니다. 웹 클라이언트를 구성하여 페이지 보기 모음을 비활성화할 수 있습니다. 자세한 내용은 [ CloudWatch RUM 웹 클라이언트 설명서](https://github.com/aws-observability/aws-rum-web/blob/main/docs/cdn_installation.md)를 참조하세요.


| 이름 | Type | 설명 | 
| --- | --- | --- | 
|  **페이지 ID** |  문자열  |  애플리케이션 내에서 이 페이지를 고유하게 나타내는 ID. 기본적으로 URL 경로입니다.  | 
|  **상위 페이지 ID** |  문자열  |  사용자가 현재 페이지로 이동할 때 사용했던 페이지 ID. **이 정보는 앱 모니터에 쿠키가 활성화된 경우에만 수집됩니다.**  | 
|  **상호 작용 깊이** |  문자열  |  **이 정보는 앱 모니터에 쿠키가 활성화된 경우에만 수집됩니다.**  | 

### JavaScript 오류 스키마
<a name="CloudWatch-RUM-datacollected-JavaScriptError"></a>

에이전트에서 생성된 JavaScript 오류 이벤트에는 다음 속성이 포함됩니다. 웹 클라이언트는 오류 원격 측정을 수집하도록 선택한 경우에만 이러한 이벤트를 수집합니다.


| 이름 | Type | 설명 | 
| --- | --- | --- | 
|  **오류 유형** |  문자열  |  오류 이름(존재하는 경우). 자세한 내용은 [Error.prototype.name](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/name)을 참조하세요. 일부 브라우저는 오류 유형을 지원하지 않을 수 있습니다.  | 
|  **오류 메시지** |  문자열  |  오류 메시지 자세한 내용은 [Error.prototype.message](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/message)를 참조하세요. 오류 필드가 없으면 오류 이벤트 메시지입니다. 자세한 내용은 [ErrorEvent](https://developer.mozilla.org/en-US/docs/Web/API/ErrorEvent)를 참조하세요. 여러 브라우저에서 오류 메시지가 일관되지 않을 수 있습니다.  | 
|  **스택 추적** |  문자열  |  오류의 스택 추적이 있는 경우 150자로 잘립니다. 자세한 내용은 [Error.prototype.stack](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/Stack)을 참조하세요. 일부 브라우저는 스택 추적을 지원하지 않을 수 있습니다.  | 

### DOM 이벤트 스키마
<a name="CloudWatch-RUM-datacollected-DOMEvent"></a>

에이전트에서 생성된 문서 객체 모델(DOM) 이벤트에는 다음과 같은 속성이 포함되어 있습니다. 이러한 이벤트는 기본적으로 수집되지 않습니다. 상호 작용 원격 측정을 활성화하는 경우에만 수집됩니다. 자세한 내용은 [ CloudWatch RUM 웹 클라이언트 설명서](https://github.com/aws-observability/aws-rum-web/blob/main/docs/cdn_installation.md)를 참조하세요.


| 이름 | Type | 설명 | 
| --- | --- | --- | 
|  **Event** |  문자열  |  클릭, 스크롤 또는 마우스오버와 같은 DOM 이벤트의 유형. 자세한 내용은 [이벤트 참조](https://developer.mozilla.org/en-US/docs/Web/Events)를 참조하세요.  | 
|  **Element** |  문자열  |  DOM 요소 유형  | 
|  **ID 요소** |  문자열  |  이벤트를 생성한 요소에 ID가 있는 경우 이 속성은 해당 ID를 저장합니다. 자세한 내용은 [Element.id](https://developer.mozilla.org/en-US/docs/Web/API/Element/id)를 참조하세요.  | 
|  **CSSLocator** |  문자열  |  DOM 요소를 식별하는 데 사용되는 CSS 로케이터입니다.  | 
|  **InteractionId** |  문자열  |  사용자와 UI 간의 상호 작용을 위한 고유 ID입니다.  | 

### 탐색 이벤트 스키마
<a name="CloudWatch-RUM-datacollected-NavigationEvent"></a>

탐색 이벤트는 앱 모니터에 성능 원격 측정이 활성화된 경우에만 수집됩니다.

탐색 이벤트는 [탐색 타이밍 레벨 1](https://www.w3.org/TR/navigation-timing/#performancetiming) 및 [탐색 타이밍 레벨 2](https://w3c.github.io/navigation-timing) API를 사용합니다. 레벨 2 API는 모든 브라우저에서 지원되지 않으므로 이러한 최신 필드는 선택 사항입니다.

**참고**  
타임스탬프 지표는 [DOMHighResTimestamp](https://www.w3.org/TR/hr-time-2/#sec-domhighrestimestamp)를 기반으로 합니다. 레벨 2 API의 경우 모든 타이밍은 기본적으로 `startTime`과 관련되어 있습니다. 하지만 레벨 1의 경우 상대값을 얻기 위해 타임스탬프 지표에서 `navigationStart` 지표를 뺍니다. 모든 타임스탬프 값은 밀리초 단위입니다.

탐색 이벤트에는 다음 속성이 포함됩니다.


| 이름 | Type | 설명 | 참고 | 
| --- | --- | --- | --- | 
|  **initiatorType** |  문자열  |  성능 이벤트를 시작한 리소스 유형을 나타냅니다. |  **값:** "탐색" **레벨 1:** "탐색" **레벨 2:** entryData.initiatorType | 
|  **navigationType** |  문자열  |  탐색 유형을 나타냅니다.이 속성은 필수가 아닙니다. |  **값:** 값은 다음 중 하나여야 합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/monitoring/CloudWatch-RUM-datacollected.html) | 
|  **startTime** |  숫자  |  이벤트가 트리거되는 시점을 나타냅니다. |  **값:** 0 **레벨 1:** entryData.navigationStart - entryData.navigationStart  **레벨 2:** entryData.startTime | 
|  **unloadEventStart** |  숫자  |  창의 이전 문서가 `unload` 이벤트가 발생 후 언로드되기 시작한 시간을 나타냅니다. |  **값:** 이전 문서가 없거나 이전 문서 또는 필요한 리디렉션 중 하나가 동일한 원본이 아닌 경우 반환되는 값은 0입니다. **레벨 1:** <pre>entryData.unloadEventStart > 0<br />  ? entryData.unloadEventStart - entryData.navigationStart<br />  : 0<br /></pre> **레벨 2:** entryData.unloadEventStart | 
|  **promptForUnload** |  숫자  |  문서를 언로드하는 데 걸린 시간입니다. 즉, `unloadEventStart` 및 `unloadEventEnd` 사이의 시간에서 `UnloadEventEnd`는 언로드 이벤트 핸들러가 완료된 순간을 밀리초로 나타냅니다. |  **값:** 이전 문서가 없거나 이전 문서 또는 필요한 리디렉션 중 하나가 동일한 원본이 아닌 경우 반환되는 값은 0입니다. **레벨 1:** entryData.unloadEventEnd - entryData.unloadEventStart **레벨 2:** entryData.unloadEventEnd - entryData.unloadEventStart | 
|  **redirectCount** |  숫자  |  현재 탐색 컨텍스트에서 마지막으로 리디렉션되지 않은 탐색 이후의 리디렉션 수를 나타내는 숫자입니다. 이 속성은 필수가 아닙니다. |  **값:** 리디렉션이 없거나 대상 문서와 같은 원본이 아닌 리디렉션이 있는 경우 반환되는 값은 0입니다. **레벨 1:** 사용할 수 없음 **레벨 2:** entryData.redirectCount | 
|  **redirectStart** |  숫자  |  첫 번째 HTTP 리디렉션이 시작되는 시간입니다.  |  **값:** 리디렉션이 없거나 대상 문서와 같은 원본이 아닌 리디렉션이 있는 경우 반환되는 값은 0입니다. **레벨 1:** <pre>entryData.redirectStart > 0<br />  ? entryData.redirectStart - entryData.navigationStart<br />  : 0</pre> **레벨 2:** entryData.redirectStart | 
|  **redirectTime** |  숫자  |  HTTP 리디렉션에 걸린 시간입니다. `redirectStart` 및 `redirectEnd`의 차이점입니다.  |  **레벨 1:**: entryData.redirectEnd - entryData.redirectStart **레벨 2:**: entryData.redirectEnd - entryData.redirectStart | 
|  **workerStart** |  숫자  |  이것은 `PerformanceResourceTiming` 인터페이스 속성입니다. 작업자 스레드 작업의 시작을 표시합니다. 이 속성은 필수가 아닙니다. |  **값:** 서비스 작업자 스레드가 이미 실행 중이거나 서비스 작업자 스레드를 시작하기 직전에 이 속성은 `FetchEvent` 디스패치 직전의 시간을 반환합니다. 서비스 작업자가 리소스를 가로채지 않으면 0을 반환합니다. **레벨 1:** 사용할 수 없음 **레벨 2:** entryData.workerStart | 
|  **workerTime** |  숫자  |  서비스 작업자가 리소스를 가로채면 작업자 스레드 작업에 필요한 시간이 반환됩니다. 이 속성은 필수가 아닙니다. |  **레벨 1:** 사용할 수 없음  **레벨 2:** <pre>entryData.workerStart > 0<br />   ? entryData.fetchStart - entryData.workerStart<br />   : 0</pre>  | 
|  **fetchStart** |  숫자  |  브라우저가 HTTP 요청을 사용하여 문서를 가져올 준비가 된 시간입니다. 이는 애플리케이션 캐시를 확인하기 전입니다. |  **레벨 1:**  <pre>: entryData.fetchStart > 0<br />  ? entryData.fetchStart - entryData.navigationStart<br />  : 0</pre> **레벨 2:** entryData.fetchStart | 
|  **domainLookupStart** |  숫자  |  도메인 조회가 시작되는 시간입니다. |  **값:** 영구 연결이 사용되거나 정보가 캐시 또는 로컬 리소스에 저장되어 있는 경우 값은 `fetchStart`와 같습니다. **레벨 1:** <pre>entryData.domainLookupStart > 0<br />  ? entryData.domainLookupStart - entryData.navigationStart<br />  : 0</pre> **레벨 2:** entryData.domainLookupStart | 
|  **dns** |  숫자  |  도메인 조회에 필요한 시간입니다. |  **값:** 리소스 및 DNS 레코드가 캐시된 경우 예상 값은 0입니다. **레벨 1:** entryData.domainLookupEnd - entryData.domainLookupStart **레벨 2:** entryData.domainLookupEnd - entryData.domainLookupStart | 
|  **nextHopProtocol** |  문자열  |  리소스를 가져오는 데 사용되는 네트워크 프로토콜을 나타내는 문자열입니다. 이 속성은 필수가 아닙니다. |  **레벨 1:** 사용할 수 없음 **레벨 2:** entryData.nextHopProtocol | 
|  **connectStart** |  숫자  |  사용자 에이전트가 문서 검색을 위해 서버에 대한 연결 설정을 시작하기 직전의 시간입니다. |  **값:** RFC2616 영구 연결이 사용되거나 현재 문서가 관련 애플리케이션 캐시 또는 로컬 리소스에서 검색되는 경우 이 속성은 `domainLookupEnd` 값을 반환합니다. **레벨 1:** <pre>entryData.connectStart > 0<br />  ? entryData.connectStart - entryData.navigationStart<br />  : 0</pre> **레벨 2:** entryData.connectStart  | 
|  **connect** |  숫자  |  전송 연결을 설정하거나 SSL 인증을 수행하는 데 필요한 시간을 측정합니다. 또한 브라우저에서 실행한 동시 요청이 너무 많을 때 걸리는 차단된 시간도 포함됩니다.  |  **레벨 1:** entryData.connectEnd - entryData.connectStart **레벨 2:** entryData.connectEnd - entryData.connectStart | 
|  **secureConnectionStart** |  숫자  |  현재 페이지의 URL 스키마가 "https"인 경우 이 속성은 사용자 에이전트가 현재 연결을 보호하기 위해 핸드셰이크 프로세스를 시작하기 직전의 시간을 반환합니다. HTTPS를 사용하지 않으면 0을 반환합니다. URL 스키마에 대한 자세한 내용은 [URL 표시](https://url.spec.whatwg.org/#concept-url-scheme)를 참조하세요.  |  **공식:** entryData.secureConnectionStart | 
|  **tlsTime** |  숫자  |  SSL 핸드셰이크를 완료하는 데 걸린 시간입니다.  |  **레벨 1:** <pre>entryData.secureConnectionStart > 0<br />   ? entryData.connectEnd - entryData.secureConnectionStart<br />   : 0</pre> **레벨 2:** <pre>entryData.secureConnectionStart > 0<br />   ? entryData.connectEnd - entryData.secureConnectionStart<br />   : 0</pre>  | 
|  **requestStart** |  숫자  |  사용자 에이전트가 서버나 관련 애플리케이션 캐시 또는 로컬 리소스에서 리소스 요청을 시작하기 직전의 시간입니다.  | **레벨 1:** <pre>: entryData.requestStart > 0<br />  ? entryData.requestStart - entryData.navigationStart<br />  : 0<br /></pre> **레벨 2:** entryData.requestStart | 
|  **timeToFirstByte** |  숫자  |  요청 후 첫 번째 바이트 정보를 수신하는 데 걸린 시간입니다. 이 시간은 `startTime`을 기준으로 합니다.  | **레벨 1:** entryData.responseStart - entryData.requestStart **레벨 2:** entryData.responseStart - entryData.requestStart | 
|  **responseStart** |  숫자  |  사용자 에이전트의 HTTP 파서가 관련 애플리케이션 캐시 또는 로컬 리소스 또는 서버에서 응답의 첫 번째 바이트를 수신한 직후의 시간입니다.  | **레벨 1:** <pre>entryData.responseStart > 0<br />   ? entryData.responseStart - entryData.navigationStart<br />   : 0</pre> **레벨 2:** entryData.responseStart   | 
|  **responseTime** |  문자열  |  관련 애플리케이션 캐시, 로컬 리소스 또는 서버에서 바이트 형식으로 전체 응답을 수신하는 데 걸린 시간입니다.  | **레벨 1:** <pre>entryData.responseStart > 0<br />  ? entryData.responseEnd - entryData.responseStart<br />  : 0</pre> **레벨 2:** <pre>entryData.responseStart > 0<br />  ? entryData.responseEnd - entryData.responseStart<br />  : 0</pre>  | 
|  **domInteractive** |  숫자  |  파서가 기본 문서에서 작업을 완료하고 HTML DOM이 생성되는 시간입니다. 현 시점에서 `Document.readyState`가 "대화식"으로 바뀌며 해당 `readystatechange` 이벤트가 발생합니다.  | **레벨 1:** <pre>entryData.domInteractive > 0<br />  ? entryData.domInteractive - entryData.navigationStart<br />  : 0</pre> **레벨 2:** entryData.domInteractive  | 
|  **domContentLoadedEventStart** |  숫자  |  사용자 에이전트가 현재 문서에서 DOMContentLoaded 이벤트를 실행하기 직전의 시간과 동일한 시간 값을 나타냅니다. DomContentLoad 이벤트는 초기 HTML 문서가 완전히 로드되고 구문 분석되면 발생합니다. 이때 기본 HTML 문서의 구문 분석이 완료되고, 브라우저가 렌더 트리를 구성하기 시작하며, 하위 리소스는 여전히 로드되어야 합니다. 이는 스타일 시트, 이미지 및 하위 프레임이 로드될 때까지 기다리지 않습니다.  | **레벨 1:** <pre>entryData.domContentLoadedEventStart > 0<br />  ? entryData.domContentLoadedEventStart - entryData.navigationStart<br />  : 0<br /></pre> **레벨 2:** entryData.domContentLoadedEventStart  | 
|  **domContentLoaded** |  숫자  |  렌더 트리 구성의 시작 시간과 종료 시간은 `domContentLoadedEventStart` 및 `domContentLoadedEventEnd`로 표시됩니다. CloudWatch RUM이 실행을 추적할 수 있습니다. 이 속성은 `domContentLoadedStart` 및 `domContentLoadedEnd`의 차이점입니다. 이 기간 동안 DOM과 CSSOM이 준비됩니다. 이 속성은 비동기 및 동적으로 생성된 스크립트를 제외하고 스크립트 실행을 기다립니다. 스크립트가 스타일 시트에 의존하는 경우 `domContentLoaded`는 스타일 시트에서도 기다립니다. 이미지를 기다리지 않습니다.  `domContentLoadedStart`와 `domContentLoadedEnd`의 실제 값은 Google Chrome의 네트워크 패널의 `domContentLoaded`에 근접합니다. 페이지 로딩 프로세스의 시작부터 HTML DOM \$1 CSSOM 렌더링 트리 생성 시간을 나타냅니다. 탐색 지표의 경우 `domContentLoaded` 값은 시작 값과 끝 값의 차이를 나타냅니다. 이 값은 하위 리소스와 렌더링 트리 구성만 다운로드하는 데 필요한 시간입니다.   | **레벨 2:** entryData.domContentLoadedEventEnd - entryData.domContentLoadedEventStart  **레벨 2:** entryData.domContentLoadedEventEnd - entryData.domContentLoadedEventStart  | 
|  **domComplete** |  숫자  |  브라우저가 현재 문서 준비를 완료하도록 설정하기 바로 전의 시간입니다. 이때 이미지와 같은 하위 리소스의 로드가 완료됩니다. 여기에는 CSS 및 동기식 JavaScript와 같은 차단 콘텐츠를 다운로드하는 데 걸리는 시간이 포함됩니다. 이 시간은 Google Chrome 네트워크 패널의 `loadTime`에 근접합니다.  | **레벨 1:** <pre>entryData.domComplete > 0<br />  ? entryData.domComplete - entryData.navigationStart<br />  : 0<br /></pre> **레벨 2:** entryData.domComplete  | 
|  **domProcessingTime** |  숫자  |  응답과 로드 이벤트 시작 간 총 시간입니다.  | **레벨 1:** entryData.loadEventStart - entryData.responseEnd **레벨 2:** entryData.loadEventStart - entryData.responseEnd  | 
|  **loadEventStart** |  숫자  |  현재 문서의 `load` 이벤트 직전 시간입니다. |  **레벨 1:** <pre>entryData.loadEventStart > 0<br />  ? entryData.loadEventStart - entryData.navigationStart<br />  : 0<br /></pre> **레벨 2:** entryData.loadEventStart | 
|  **loadEventTime** |  숫자  |  `loadEventStart`와 `loadEventEnd`의 차이점. 이 로드 이벤트를 기다리는 추가 함수 또는 로직은 이 시간 동안 실행됩니다. |  **레벨 1:** entryData.loadEventEnd - entryData.loadEventStart **레벨 2:** entryData.loadEventEnd - entryData.loadEventStart | 
|  **duration** |  문자열  |  기간은 총 페이지 로드 시간입니다. 기본 페이지와 모든 동기식 하위 리소스를 다운로드하고 페이지를 렌더링하는 타이밍을 기록합니다. 스크립트와 같은 비동기 리소스는 나중에 계속 다운로드됩니다. 이는 `loadEventEnd` 및 `startTime` 속성 간 차이점입니다.  | **레벨 1:** entryData.loadEventEnd - entryData.navigationStart **레벨 2:** entryData.duration | 
|  **headerSize** |  숫자  |  `transferSize` 및 `encodedBodySize` 간 차이를 반환합니다. 이 속성은 필수가 아닙니다.  | **레벨 1:** 사용할 수 없음 **레벨 2:** entryData.transferSize - entryData.encodedBodySize **레벨 2:** entryData.transferSize - entryData.encodedBodySize | 
|  **compressionRatio** |  숫자  |  `encodedBodySize` 및 `decodedBodySize`의 비율. `encodedBodySize` 값은 HTTP 헤더를 제외한 리소스의 압축된 크기입니다. `decodedBodySize` 값은 HTTP 헤더를 제외한 리소스의 압축 해제된 크기입니다. 이 속성은 필수가 아닙니다.  | **레벨 1:** 해당 사항 없음. **레벨 2:**<pre>entryData.encodedBodySize > 0<br />  ? entryData.decodedBodySize / entryData.encodedBodySize<br />  : 0</pre>  | 
|  **navigationTimingLevel** |  숫자  |  탐색 타이밍 API 버전.  | **값:** 1 또는 2  | 

### 리소스 이벤트 스키마
<a name="CloudWatch-RUM-datacollected-ResourceEvent"></a>

탐색 이벤트는 앱 모니터에 성능 원격 측정이 활성화된 경우에만 수집됩니다.

타임스탬프 지표는 [The DOMHighResTimeStamp typedef](https://www.w3.org/TR/hr-time-2/#sec-domhighrestimestamp)를 기반으로 합니다. 레벨 2 API의 경우 모든 타이밍은 기본적으로 `startTime`과 관련됩니다. 하지만 레벨 1 API의 경우 상대값을 얻기 위해 타임스탬프 지표에서 `navigationStart` 지표를 뺍니다. 모든 타임스탬프 값은 밀리초 단위입니다.

에이전트에서 생성된 리소스 이벤트에는 다음 속성이 포함됩니다.


| 이름 | Type | 설명 | 참고 | 
| --- | --- | --- | --- | 
|  **targetUrl** |  문자열  |  리소스 URL을 반환합니다. |  **공식:** [entryData.name](http://entrydata.name/) | 
|  **initiatorType** |  문자열  |  성능 리소스 이벤트를 시작한 리소스 유형을 나타냅니다. |  **값:** "리소스" **공식:** entryData.initiatorType | 
|  **duration** |  문자열  |  `responseEnd` 및 `startTime` 속성 간 차이를 반환합니다.이 속성은 필수가 아닙니다.  | **공식:** entryData.duration | 
|  **transferSize** |  숫자  |  응답 헤더 필드와 응답 페이로드 본문을 포함하여 가져온 리소스 크기(옥텟 단위)를 반환합니다.이 속성은 필수가 아닙니다.  | **공식:** entryData.transferSize | 
|  **fileType** |  문자열  |  대상 URL 패턴에서 파생된 확장입니다.  |   | 

### 가장 큰 콘텐츠 페인트 이벤트 스키마
<a name="CloudWatch-RUM-datacollected-LargestPaintEvent"></a>

가장 큰 콘텐츠 페인트 이벤트에는 다음 속성이 포함됩니다.

이러한 이벤트는 활성화된 성능 원격 측정이 앱 모니터에 있는 경우에만 수집됩니다.


| 이름 | 설명 | 
| --- | --- | 
|  **값** |  자세한 내용은 [웹 바이탈](https://web.dev/vitals/)을 참조하세요. | 

### 첫 번째 입력 지연 이벤트
<a name="CloudWatch-RUM-datacollected-FirstInputDelayEvent"></a>

첫 번째 입력 지연 이벤트는 다음 속성을 포함합니다.

이러한 이벤트는 활성화된 성능 원격 측정이 앱 모니터에 있는 경우에만 수집됩니다.


| 이름 | 설명 | 
| --- | --- | 
|  **값** |  자세한 내용은 [웹 바이탈](https://web.dev/vitals/)을 참조하세요. | 

### 누적 레이아웃 시프트 이벤트
<a name="CloudWatch-RUM-datacollected-CumulativeShift"></a>

누적 레이아웃 시프트 이벤트에는 다음 속성이 포함됩니다.

이러한 이벤트는 활성화된 성능 원격 측정이 앱 모니터에 있는 경우에만 수집됩니다.


| 이름 | 설명 | 
| --- | --- | 
|  **값** |  자세한 내용은 [웹 바이탈](https://web.dev/vitals/)을 참조하세요. | 

### HTTP 이벤트
<a name="CloudWatch-RUM-datacollected-HTTP"></a>

HTTP 이벤트에는 다음 속성이 포함될 수 있습니다. `Response` 필드 또는 `Error` 필드 중 하나를 포함하되 두 필드 모두를 포함하지는 않습니다.

이러한 이벤트는 활성화된 HTTP 원격 측정이 앱 모니터에 있는 경우에만 수집됩니다.


| 이름 | 설명 | 
| --- | --- | 
|  **요청** |  요청 필드에는 다음이 포함됩니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/monitoring/CloudWatch-RUM-datacollected.html)  | 
|  **응답** |  응답 필드에는 다음 항목이 포함됩니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/monitoring/CloudWatch-RUM-datacollected.html)  | 
|  **오류** |  응답 필드에는 다음 항목이 포함됩니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/monitoring/CloudWatch-RUM-datacollected.html)  | 

### X-Ray 추적 이벤트 스키마
<a name="CloudWatch-RUM-datacollected-xraytraceEvent"></a>

이러한 이벤트는 앱 모니터에 X-Ray 추적이 활성화된 경우에만 수집됩니다.

X-Ray 추적 이벤트 스키마에 대한 자세한 내용은 [AWS X-Ray 세그먼트 설명서](https://docs.aws.amazon.com/xray/latest/devguide/xray-api-segmentdocuments.html)를 참조하세요.

# 단일 페이지 애플리케이션의 경로 변경 타이밍
<a name="CloudWatch-RUM-route-change-timing"></a>

기존의 다중 페이지 애플리케이션에서 사용자가 새 콘텐츠를 로드하도록 요청하면 실제로 서버에서 새 HTML 페이지를 요청하게 됩니다. 결과적으로 CloudWatch RUM 웹 클라이언트는 일반 성능 API 지표를 사용하여 로드 시간을 캡처합니다.

하지만 단일 페이지 웹 애플리케이션은 JavaScript와 Ajax를 사용하여 서버에서 새 페이지를 로드하지 않고도 인터페이스를 업데이트합니다. 단일 페이지 업데이트는 브라우저 타이밍 API에 의해 기록되지 않으며, 대신 경로 변경 타이밍을 사용합니다.

CloudWatch RUM은 서버의 전체 페이지 로드와 단일 페이지 업데이트에 대한 모니터링을 모두 지원하지만 다음과 같은 차이점이 있습니다.
+ 경로 변경 타이밍의 경우 `tlsTime`, `timeToFirstByte` 등과 같은 브라우저에서 제공하는 지표가 없습니다.
+ 경로 변경 타이밍의 경우 `initiatorType` 필드가 `route_change`입니다.

CloudWatch RUM 웹 클라이언트는 경로 변경을 유발할 수 있는 사용자 상호 작용을 수신하며, 이러한 사용자 상호 작용이 기록되면 웹 클라이언트는 타임스탬프를 기록합니다. 그리고 다음 두 가지 조건을 모두 만족할 때 경로 변경 타이밍이 시작됩니다.
+ 경로 변경을 수행하는 데 브라우저 기록 API(브라우저 앞으로 및 뒤로 버튼 제외)가 사용되었습니다.
+ 경로 변경 감지 시간과 최신 사용자 상호 작용 타임스탬프 간의 차이가 1,000ms 미만입니다. 이는 데이터 스큐를 방지합니다.

그런 다음 경로 변경 타이밍이 시작되면 진행 중인 AJAX 요청 및 DOM 변형이 없는 경우 해당 타이밍이 완료됩니다. 그리고 마지막으로 완료된 활동의 타임스탬프가 완료 타임스탬프로 사용됩니다.

10초 이상 진행 중인 AJAX 요청 또는 DOM 변형이 있는 경우 경로 변경 타이밍이 시간 초과됩니다(기본값). 이 경우 CloudWatch RUM 웹 클라이언트는 더 이상 이 경로 변경에 대한 타이밍을 기록하지 않습니다.

결과적으로, 경로 변경 이벤트의 기간이 다음과 같이 계산됩니다.

```
(time of latest completed activity) - (latest user interaction timestamp)
```