Web Power Analyzer

Document

User manual

사용자 매뉴얼

관리자 화면은 웹 페이지를 불러올 때 사용한 에너지를 측정하고, 측정 조건을 조정하며, 단일 URL 또는 여러 URL의 측정 작업을 실행하는 도구입니다. 결과 에너지는 줄(J) 단위로 제공되며, 측정 레코드와 API를 통해 후속 분석에 사용할 수 있습니다.

처음 사용하는 경우먼저 측정 설정에서 반복 횟수와 대기 시간을 확인한 다음, URL 분석 화면에서 측정할 주소를 입력해 실행하세요. 상세 설정이 필요한 경우에만 각 시간·재시도 값을 조정하면 됩니다.

1. Measurement settings

측정 설정 화면

Measurement Settings에서는 측정의 반복 횟수, 페이지 로드 대기 시간, 시스템 안정화 시간, 실패 재시도 정책을 설정합니다. Save를 누르면 이후에 시작하는 측정에 적용됩니다.

입력 항목

화면 항목설명사용 시 참고
Repetitions같은 URL을 몇 번 반복해 측정할지 정합니다.값이 클수록 결과의 흔들림을 확인하기 좋지만 측정 시간이 길어집니다.
Settle delay seconds페이지를 연 뒤 추가로 기다리는 시간(초)입니다.애니메이션·추가 요청이 많은 페이지는 값을 늘리면 초기 로딩 영향이 줄어듭니다.
Navigation timeout ms페이지 로딩이 끝날 때까지 기다리는 최대 시간(밀리초)입니다.느린 페이지가 실패하면 값을 늘리고, 잘못된 URL을 오래 기다리지 않으려면 줄입니다.
Minimum cooldown seconds한 번의 측정이 끝난 뒤 다음 측정을 시작하기 전의 최소 대기 시간(초)입니다.연속 실행으로 인한 시스템 부하 영향을 줄입니다.
Idle stable seconds측정 시작 전에 시스템이 유휴 상태로 안정되어 있어야 하는 시간(초)입니다.다른 작업이 끝난 직후의 불안정한 측정을 피합니다.
Run retry count측정 실행 자체가 실패했을 때 다시 시도하는 횟수입니다.일시적인 네트워크 또는 브라우저 오류에 대비합니다.
URL drift retry count측정 중 페이지 주소가 다른 주소로 바뀌었을 때 다시 시도하는 횟수입니다.로그인 리디렉션 또는 페이지 이동이 잦은 사이트에서 사용합니다.

자동 표시 항목과 버튼

화면 항목설명
Repetitions / Baseline Duration / Baseline Reinterval / Idle Gate현재 서버에 적용된 핵심 측정 조건을 요약해 보여주는 읽기 전용 카드입니다.
baseline_duration_s기본 에너지 사용량을 한 번 관찰하는 실제 시간입니다.
baseline_reinterval_k하나의 기본 측정값을 몇 번의 페이지 측정에 적용하는지 보여줍니다.
idle_gate_seconds측정 전 시스템 유휴 상태를 기다리는 기준 시간을 보여줍니다.
URL Analysis / Modeling상단 버튼으로 URL 측정 화면 또는 모델 관리 화면으로 이동합니다.
Save현재 입력한 측정 설정을 저장합니다. 저장 후 새로 시작하는 작업부터 적용됩니다.
Runtime CheckAPI 연결 여부, 설정 저장소 연결 상태, 예상 샘플 수, 예상 소요 시간을 표시합니다.
용어 안내기본 에너지 사용량(baseline)은 페이지를 열지 않아도 시스템이 사용하는 전력입니다. 유휴 상태(idle)는 다른 작업이 거의 없어 시스템 부하가 안정된 상태를 뜻합니다.

2. URL analysis

URL 분석 화면

URL Analysis에서는 한 개의 URL을 바로 측정하거나, URL 목록 파일을 올려 여러 페이지를 순차적으로 측정할 수 있습니다.

단일 URL 측정

화면 항목설명사용 시 참고
URL측정할 웹 페이지 주소를 입력합니다.http:// 또는 https://로 시작해야 합니다.
Run FULL입력한 URL의 전체 페이지 측정 작업을 시작합니다.클릭 후 작업 상태와 결과가 아래 영역에 표시됩니다.
상태 배지측정 작업의 현재 상태를 표시합니다.대기·실행·완료·실패 여부를 먼저 확인하세요.
결과 영역작업 식별자, 처리 상태, 결과 또는 오류 정보를 보여줍니다.오류가 발생하면 메시지를 확인한 뒤 URL 또는 설정을 조정해 다시 실행합니다.

파일 기반 배치 측정

화면 항목설명사용 시 참고
URL file측정할 URL 목록이 담긴 TXT 또는 CSV 파일을 선택합니다.한 줄에 하나의 URL을 넣고, 최대 5,000개 URL을 등록할 수 있습니다.
Preview file파일에서 읽은 URL 목록을 미리 확인합니다.미리보기가 끝나야 Run batch 버튼이 활성화됩니다.
Run batch미리보기한 URL 목록으로 비동기 배치 측정 작업을 생성합니다.작업이 끝날 때까지 페이지를 열어둘 필요는 없습니다.
배치 상태 배지현재 배치 작업의 진행 상태를 표시합니다.실행 중에는 Refresh로 최신 상태를 다시 확인할 수 있습니다.
배치 결과 영역등록된 작업 정보와 처리 결과를 보여줍니다.실패한 항목이 있으면 Batch History에서 원인과 재시도 대상을 확인합니다.
Batch History / 개수 배지최근 배치 작업과 등록 건수를 표시합니다.작업을 선택하면 URL별 상태를 확인하고, 필요 시 실패 항목을 재시도할 수 있습니다.

URL 파일 작성 예시

TXT와 CSV 모두 URL을 한 줄에 하나씩 작성합니다. CSV는 헤더 없이 첫 번째 열에 URL만 넣으세요. 설명이나 주석 행은 넣지 않습니다.

https://www.example.com/
https://www.example.com/products
https://www.example.org/about
권장 흐름소수 URL은 Run FULL로 먼저 동작을 확인한 다음, 동일한 형식의 URL 목록을 파일로 만들어 Preview file과 Run batch를 순서대로 사용하세요.

Client API reference

클라이언트 API

URL에서 모델 입력값을 생성한 뒤 해당 입력값으로 페이지의 예상 에너지 사용량을 조회할 수 있습니다. 모든 요청은 Content-Type: application/json을 사용합니다.

MethodEndpoint클라이언트 사용 목적
POST/page-features/collectURL을 서버의 Chrome/CDP로 열어 예측 모델이 요구하는 25개 입력값을 생성합니다.
POST/page-energy/predictions생성된 25개 입력값으로 해당 페이지의 에너지 사용량을 예측합니다.

URL 입력값 생성 API

POST /page-features/collect는 전달받은 URL을 별도의 Chrome/CDP 브라우저에서 로드하고 네트워크, Resource Timing, DOM, JavaScript/CSS Coverage 정보를 수집해 모델 입력값을 생성합니다. URL은 http:// 또는 https://로 시작해야 합니다.

{
  "url": "https://www.example.com"
}

응답에는 요청한 url, 모델 입력 계약을 나타내는 featureSetId, 정확히 25개의 camelCase 정수 값이 담긴 features가 포함됩니다. Coverage 수집 상태는 jsCoverageStatuscssCoverageStatus로 확인하며, 부분 실패나 참고 사항은 coverageErrorCodewarnings에 표시됩니다.

처리 범위이 API는 URL의 모델 입력값만 생성합니다. RAPL 에너지를 측정하거나 에너지를 예측하지 않으며, 응답의 features를 사용해 예측 API를 별도로 호출해야 합니다.

에너지 예측 API

POST /page-energy/predictions/page-features/collect가 반환한 featureSetIdfeatureslabelScope: "PACKAGE_PLUS_DRAM"을 더한 요청을 받아 페이지의 예상 에너지 사용량을 반환합니다. 응답의 predictedEnergyJ가 클라이언트가 사용할 예측 결과이며 단위는 줄(J)입니다.

Canonical record schema

Schema

아래 필드는 정규 레코드 및 학습 데이터셋에서 사용하는 핵심 컬럼입니다. 기본 예측 대상(label)은 energy_package_dram_j입니다.

구분필드설명
식별/메타데이터record_id측정 레코드의 고유 식별자
식별/메타데이터url측정 대상 페이지 URL
식별/메타데이터page_domain페이지 URL의 도메인
식별/메타데이터created_at측정 레코드 생성 시각
예측 대상(label)energy_package_dram_jPackage와 DRAM을 합산한 페이지 에너지 측정값(J)
품질/검증 정보achieved_cv반복 측정값의 변동계수(CV)
품질/검증 정보unobserved_resource_types리소스 영향 분석에서 관측하지 못한 resource type 배열
품질/검증 정보runs_count페이지 측정 실행 횟수
품질/검증 정보resource_timings_countResource Timing 항목 수
Coverage 품질 정보js_coverage_aggregation_versionJavaScript Coverage 중첩 range 집계 규칙. 정정판은 innermost-wins-v1
Coverage 품질 정보js_coverage_statusJavaScript Coverage 수집 상태: SUCCESS, PARTIAL, FAILED
Coverage 품질 정보css_coverage_statusCSS Coverage 수집 상태: SUCCESS, PARTIAL, FAILED
Coverage 품질 정보coverage_error_codeCoverage 실패 또는 부분 실패 원인. 성공 시 null
모델 입력 featurerequest_count페이지 요청 수
모델 입력 featurethird_party_request_countPSL 기반 등록 가능 도메인(eTLD+1)이 페이지와 다른 요청 수
모델 입력 featuredistinct_domain_countPSL 기반 등록 가능 도메인(eTLD+1)의 고유 개수
모델 입력 featuretransfer_size_documentdocument 리소스 전송 크기 합계(bytes)
모델 입력 featuretransfer_size_scriptscript 리소스 전송 크기 합계(bytes)
모델 입력 featuretransfer_size_cssCSS 리소스 전송 크기 합계(bytes)
모델 입력 featuretransfer_size_imageimage 리소스 전송 크기 합계(bytes)
모델 입력 featuretransfer_size_fontfont 리소스 전송 크기 합계(bytes)
모델 입력 featuretransfer_size_mediamedia 리소스 전송 크기 합계(bytes)
모델 입력 featuretransfer_size_xhr_fetchXHR/fetch 리소스 전송 크기 합계(bytes)
모델 입력 featuretransfer_size_other기타 리소스 전송 크기 합계(bytes)
모델 입력 featuredecoded_body_size_documentdocument 리소스 압축 해제 후 크기 합계(bytes)
모델 입력 featuredecoded_body_size_scriptscript 리소스 압축 해제 후 크기 합계(bytes)
모델 입력 featuredecoded_body_size_cssCSS 리소스 압축 해제 후 크기 합계(bytes)
모델 입력 featuredecoded_body_size_imageimage 리소스 압축 해제 후 크기 합계(bytes)
모델 입력 featuredecoded_body_size_fontfont 리소스 압축 해제 후 크기 합계(bytes)
모델 입력 featuredecoded_body_size_mediamedia 리소스 압축 해제 후 크기 합계(bytes)
모델 입력 featuredecoded_body_size_xhr_fetchXHR/fetch 리소스 압축 해제 후 크기 합계(bytes)
모델 입력 featuredecoded_body_size_other기타 리소스 압축 해제 후 크기 합계(bytes)
모델 입력 featurejs_total_bytes_total대표 run에서 Coverage가 분석한 JavaScript 전체 바이트 합계
모델 입력 featurejs_unused_bytes_totalinnermost-wins-v1 규칙으로 계산한 미실행 JavaScript 바이트 합계
모델 입력 featurecss_total_bytes_total대표 run에서 Coverage가 분석한 CSS 전체 바이트 합계
모델 입력 featurecss_unused_bytes_total대표 run 측정 구간에서 사용되지 않은 CSS 바이트 합계
모델 입력 featuredom_node_countDOM 노드 수
모델 입력 featuredom_depthDOM 트리 최대 깊이
Coverage 숫자 소비 규칙js_coverage_status 또는 css_coverage_statusSUCCESS인 축만 정상 측정값으로 사용합니다. PARTIAL·FAILED의 숫자 0은 하위 호환 대체값일 수 있으므로 실제 값 0으로 해석하지 않습니다.

Input and output

INPUT JSON 형식

예측 API는 camelCase의 정확히 25개 정수 feature를 요구합니다. 모든 값은 0 이상 64-bit 정수여야 합니다.

{
  "labelScope": "PACKAGE_PLUS_DRAM",
  "featureSetId": "kepler-page-energy-b-v1",
  "features": {
    "requestCount": 120, "thirdPartyRequestCount": 12, "distinctDomainCount": 8,
    "transferSizeDocument": 12000, "transferSizeScript": 840000, "transferSizeCss": 120000,
    "transferSizeImage": 240000, "transferSizeFont": 0, "transferSizeMedia": 0,
    "transferSizeXhrFetch": 32000, "transferSizeOther": 0,
    "decodedBodySizeDocument": 25000, "decodedBodySizeScript": 2300000, "decodedBodySizeCss": 410000,
    "decodedBodySizeImage": 610000, "decodedBodySizeFont": 0, "decodedBodySizeMedia": 0,
    "decodedBodySizeXhrFetch": 80000, "decodedBodySizeOther": 0,
    "domNodeCount": 1800, "domDepth": 18,
    "jsTotalBytesTotal": 2400000, "jsUnusedBytesTotal": 630000,
    "cssTotalBytesTotal": 410000, "cssUnusedBytesTotal": 150000
  }
}

OUTPUT JSON 형식

{
  "status": "READY",
  "labelScope": "PACKAGE_PLUS_DRAM",
  "target": "energy_package_dram_j",
  "predictedEnergyJ": 18.42,
  "fallbackUsed": false,
  "fallbackReason": null,
  "modelKey": "page-energy-model-b",
  "modelRunId": "00000000-0000-0000-0000-000000000000"
}