CrUX History API 사용 방법

이 가이드에서는 일련의 웹 성능 데이터를 제공하는 Chrome UX Report (CrUX) History API 엔드포인트를 소개합니다. 이 데이터는 매주 업데이트되며 1주일 간격으로 25개의 데이터 포인트가 있는 약 6개월 분량의 기록을 확인할 수 있습니다.

원래 CrUX API 엔드포인트의 일일 업데이트와 함께 사용하면 이제 가장 최근의 데이터와 이전에 발생한 상황을 모두 빠르게 확인할 수 있으므로, 시간에 따른 웹페이지의 변경사항을 확인할 수 있는 강력한 도구입니다.

일일 CrUX API 쿼리

CrUX API에 관한 이전 도움말을 요약하면 다음과 같은 방법으로 특정 출처의 현장 데이터 스냅샷을 가져올 수 있습니다.

API_KEY="[YOUR_API_KEY]"
curl "https://chromeuxreport.googleapis.com/v1/records:queryRecord?key=$API_KEY" --header 'Content-Type: application/json' --data '{"origin": "https://web.dev"}'

{
  "record": {
    "key": {
      "origin": "https://web.dev"
    },
    "metrics": {
      "largest_contentful_paint": {
        "histogram": [{
          "start": 0, "end": 2500, "density": 0.9192
        }, {
          "start": 2500, "end": 4000, "density": 0.0513
        }, {
          "start": 4000, "density": 0.0294
        }],
        "percentiles": {
          "p75": 1303
        }
      }
      // ...
    },
    "collectionPeriod": {
      "firstDate": { "year": 2022, "month": 12, "day": 27 },
      "lastDate": { "year": 2023, "month": 1, "day": 23 }
    }
  }
}

이 개요에는 특정 28일 수집 기간(이 경우 2022년 12월 27일부터 2023년 1월 23일)에 대한 히스토그램 밀도 값과 백분위수 값이 포함되어 있습니다.

CrUX History API 쿼리하기

기록 엔드포인트를 호출하려면 URL의 queryRecordcurl 명령어에서 queryHistoryRecord로 변경합니다. 이전 호출에서와 동일한 CrUX API 키를 사용하면 됩니다.

API_KEY="[YOUR_API_KEY]"
curl "https://chromeuxreport.googleapis.com/v1/records:queryHistoryRecord?key=$API_KEY" \
 --header 'Content-Type: application/json' \
 --data '{"origin": "https://web.dev"}'

응답의 전반적인 모양은 비슷하지만 더 많은 데이터가 있습니다. 이제 단일 데이터 포인트 대신 75번째 백분위수 (p75) 및 히스토그램 밀도 값을 포함하는 필드에 대한 시계열이 표시됩니다.

{
  "record": {
    "key": {
      "origin": "https://web.dev"
    },
    "metrics": {
      "largest_contentful_paint": {
        "histogramTimeseries": [{
            "start": 0, "end": 2500, "densities": [
              0.9190, 0.9203, 0.9194, 0.9195, 0.9183, 0.9187
            ]
          }, {
            "start": 2500, "end": 4000, "densities": [
              0.0521, 0.0513, 0.0518, 0.0518, 0.0526, 0.0527
            ]
          },  {
            "start": 4000, "densities": [
              0.0288, 0.0282, 0.0286, 0.0285, 0.0290, 0.0285
            ]
          }
        ],
        "percentilesTimeseries": {
          "p75s": [
            1362, 1352, 1344, 1356, 1366, 1377
          ]
        }
      }
      // ...
    },
    "collectionPeriods": [{
        "firstDate": { "year": 2022, "month": 7, "day": 10 },
        "lastDate": { "year": 2022, "month": 8, "day": 6 }
      }, {
        "firstDate": { "year": 2022, "month": 7, "day": 17 },
        "lastDate": { "year": 2022, "month": 8, "day": 13 }
      }, {
        "firstDate": { "year": 2022, "month": 7, "day": 24 },
        "lastDate": { "year": 2022, "month": 8, "day": 20 }
      }, {
        "firstDate": { "year": 2022, "month": 7, "day": 31 },
        "lastDate": { "year": 2022, "month": 8, "day": 27 }
      }, {
        "firstDate": { "year": 2022, "month": 8, "day": 7 },
        "lastDate": { "year": 2022, "month": 9, "day": 3 }
      }, {
        "firstDate": { "year": 2022, "month": 8, "day": 14 },
        "lastDate": { "year": 2022, "month": 9, "day": 10 }
      }
    ]
  }
}

이 예에서 최대 콘텐츠 페인트 (LCP) 측정항목의 0~2500ms 버킷에 대한 densities 시계열은 [0.9190, 0.9203, 0.9194, 0.9195, 0.9183, 0.9187].입니다. 이러한 각 밀도는 상응하는 collectionPeriods 항목 중에 관찰되었습니다. 예를 들어 5번째 밀도인 0.9183은 2022년 9월 3일에 끝나는 5번째 수집 기간의 밀도였으며, 그 다음 주가 끝나는 기간의 밀도는 0.9187입니다.

즉, https://web.dev 예시의 마지막 시계열 항목을 해석하면 2022년 8월 14일부터 2022년 9월 10일까지 페이지 로드 중 91.87% 의 LCP 값이 2,500ms 미만, 5.27% 의 값이 2500ms~4000ms보다 크며 5.27% 의 값이 2500ms~4000ms보다 큰 것으로 확인되었습니다.

마찬가지로 p75 값에 대한 시계열도 있습니다. 2022년 8월 14일부터 2022년 9월 10일까지의 LCP p75는 1377였습니다. 즉, 이 수집 기간 동안 사용자 경험의 75% 는 LCP가 1,377ms 미만이며, 사용자 경험의 25% 는 LCP가 1,377ms보다 깁니다.

이 예에서는 6개의 시계열 항목과 수집 기간만 나열하지만, API의 응답은 25개의 시계열 항목을 제공합니다. 각 수집 기간의 종료일이 7일 간격의 토요일이므로 6개월이 포함됩니다.

어떤 응답에서든 히스토그램 빈 밀도 및 p75 값의 시계열 길이는 collectionPeriods 필드의 배열 길이와 정확히 일치합니다. 이러한 배열의 색인을 기준으로 일대일 대응 관계가 있습니다.

페이지 수준 데이터 쿼리

CrUX History API는 출처 수준의 데이터뿐만 아니라 과거 페이지 수준의 데이터에도 액세스할 수 있게 해줍니다. 이전에는 BigQuery의 CrUX 데이터 세트 (또는 CrUX 대시보드를 사용하여)를 사용하여 출처 수준 데이터를 사용할 수 있었지만 페이지 수준의 과거 데이터는 사이트가 직접 데이터를 수집하고 저장한 경우에만 사용할 수 있었습니다. 이제 새 API를 통해 이전 페이지 수준 데이터를 활용할 수 있습니다.

페이지 수준 데이터도 같은 방식으로 쿼리할 수 있지만 페이로드에서 origin 대신 url를 사용합니다.

API_KEY="[YOUR_API_KEY]"
curl "https://chromeuxreport.googleapis.com/v1/records:queryHistoryRecord?key=$API_KEY" \
 --header 'Content-Type: application/json' \
 --data '{"url": "https://web.dev/blog/"}'

페이지 수준 (및 출처 수준)의 이전 데이터에는 나머지 CrUX와 동일한 자격 요건이 적용되므로 특히 페이지에는 완전한 과거 기록이 없을 수 있습니다. 이러한 경우 '누락됨' 데이터는 histogramTimeseries 밀도의 경우 "NaN"로, percentilesTimeseries의 경우 null로 표시됩니다. 차이가 발생하는 이유는 히스토그램 밀도는 항상 숫자이고 백분위수는 숫자 또는 문자열일 수 있기 때문입니다 (CLS는 숫자처럼 보이지만 문자열을 사용함).

데이터 시각화

그렇다면 데이터는 왜 이런 식으로 형성되는 것일까요? 이렇게 하면 그래프를 더 쉽게 그릴 수 있는 것으로 나타났습니다. 예를 들어 https://web.devInteraction To Next Paint (INP)에 관한 p75 값 그래프는 다음과 같습니다.

2022년 11월경의 회귀를 보여주는 p75 값의 시계열 그래프

이 선 차트에서 y축의 각 값은 p75s 시계열의 p75 값이고 x축은 각 수집 기간에 lastDate로 설정된 시간입니다.

다음은 히스토그램 빈 시계열(트라이빈 차트라고 함)에 대한 그래프입니다. 이러한 히스토그램에는 3개의 구간이 있기 때문입니다.

시간이 지남에 따라 좋음, 개선 필요, 좋지 않은 변화의 상대적 비율을 보여주는 누적 막대 그래프입니다.

x축은 각 수집 기간의 lastDate로 설정됩니다. 하지만 이번에는 Y축이 INP 측정항목의 특정 범위에 속하는 페이지 로드의 비율로 누적 막대 그래프를 통해 표시됩니다. P75 차트는 간단한 개요를 제공하며 단일 차트 내에서 여러 측정항목을 추가하거나 PHONEDESKTOP의 선을 표시하는 것이 비교적 쉽습니다. 트라이빈 차트를 통해 각 수집 기간 동안 측정된 측정항목 값의 분포를 파악할 수 있습니다.

예를 들어 p75 차트에서는 관찰 기간 동안 https://web.dev에 거의 허용되는 INP 값이 있었음을 시사하지만, 트라이빈 차트는 일부 페이지 로드에서는 실제로 INP가 낮았음을 보여줍니다. 두 차트 모두 10월 말에 시작해서 11월 중순에 해결된 실적 회귀가 있었음을 비교적 쉽게 추론할 수 있습니다.

이러한 차트를 직접 생성할 수 있도록 Colab 예시가 마련되어 있습니다. Colab 또는 'Colaboratory'를 사용하면 브라우저 내에서 Python을 작성하고 실행할 수 있습니다. CrUX History API Colab (소스)은 Python을 사용하여 API를 호출하고 데이터를 차트로 표시합니다.

Colab을 사용하면 간단한 양식을 작성하여 p75 차트 및 트라이빈 차트를 만들고, 데이터를 표 형식으로 가져오고, CrUX API의 요청 및 응답 쌍을 확인할 수 있습니다. 프로그래머가 아니더라도 Python 코드를 보고 멋지게 수정할 수 있습니다! 유용하게 사용하시고 발견한 내용에 대해 언제든지 의견을 보내주세요.

물론 Colab이나 Python뿐만 아니라 이 새로운 API를 사용하는 방법의 한 가지 예일 뿐입니다. JSON 기반 HTTP 엔드포인트인 이 API는 모든 기술에서 쿼리할 수 있습니다.

결론

CrUX History API 엔드포인트를 도입하기 전에는 사이트 소유자가 CrUX로부터 얻을 수 있는 과거 정보에 한계가 있었습니다. BigQuery 및 CrUX 대시보드를 사용하여 월별 오리진 수준 데이터를 사용할 수 있었지만, 주간 데이터는 제공되지 않았고 페이지 수준의 과거 데이터도 없었습니다. 사이트 소유자는 일일 API를 사용하여 이 데이터를 직접 기록할 수 있었지만, 그 필요성은 측정항목의 회귀 이후에야 파악된 경우가 많습니다.

이 CrUX History API는 사이트 소유자가 변화하는 사이트 측정항목을 더 잘 이해할 수 있게 해주고 문제가 발생했을 때 진단 도구로 사용할 수 있게 해줄 것으로 기대하고 있습니다. 새 API를 사용하는 경우 Chrome UX 보고서 (토론) Google 그룹에 의견을 보내주세요.

감사의 말씀

Unsplash데이브 헤링 히어로 이미지