이 대시보드 및 알림 모음을 사용하면 Google Home 생태계와의 고품질 통합을 선제적으로 유지할 수 있습니다. Google은 모든 고객을 위해 고품질 생태계를 개발하는 파트너를 지원하기 위해 최선을 다하고 있습니다.
대시보드에는 전체 통합의 품질에 기여하는 주요 부분을 다루는 세 가지 섹션이 있습니다.
Google-파트너 측정항목 - Google에서 클라우드 백엔드로의 호출 상태를 측정합니다.
시스템 상태 - 파트너에서 Google로의 측정항목 - 시스템에서 Google로의 호출 상태를 측정합니다.
기기 상태 - 상태 정확도 - 사용자 쿼리를 제공하는 데 사용되는 Google 시스템에 저장된 상태의 정확도를 측정합니다.
측정항목이 목표 값을 충족하지 않으면 사용자 환경에 영향을 미칠 수 있는 문제를 나타내기 위해 빨간색으로 강조 표시됩니다. 다음 정보는 각 타겟과 타겟이 사용자에게 중요한 이유에 관한 세부정보를 제공합니다.
다음 버튼을 클릭해도 대시보드로 바로 이동하지 않으면 개요 페이지를 선택하고 대시보드를 선택한 다음 내 대시보드 목록에서 Google Home 생체 신호 대시보드 (클라우드)를 선택하여 대시보드를 볼 수 있습니다.
Google-파트너 측정항목
질의/실행 성공률 >= 99.5% 측정항목은 사용자의 명령어가 올바르게 실행되는 빈도를 측정하여 '기기에 연결할 수 없습니다'와 같은 어시스턴트 응답을 방지하거나 실행되지 않은 명령어를 잘못 확인하는 데 도움이 됩니다.
'성공'이란 무엇인가요?
의도한 작업이 실행되었거나 요청된 상태가 검색되었음을 나타내는 유효한 응답을 Google Home 플랫폼에서 수신하면 트랜잭션이 성공으로 표시됩니다.
실행을 차단하지 않는 예외 (예: lowBattery 예외가 수반되는 SUCCESS 상태)가 포함된 응답은 성공적인 트랜잭션으로 간주됩니다.
경고에도 불구하고 명령이 기기에 도달했고 의도가 충족되었습니다.
'실패'는 무엇으로 정의되나요?
일반적인 플랫폼 오류 코드에서 발견되고 파트너 조치 가능으로 표시된 오류는 쿼리 및 실행 성공률을 계산할 때 '실패'로 간주됩니다. 또한 오류 및 예외에서 발견된 오류도 '실패'입니다. 단, 다음은 예외입니다.
| 실패 예외 | ||
|---|---|---|
| aboveMaximumLightEffectsDuration | armLevelNeeded | inOffMode |
| alreadyArmed | bagFull | lockedToRange |
| alreadyAtMax | belowMinimumLightEffectsDuration | lowBattery |
| alreadyAtMin | binFull | maxSpeedReached |
| alreadyClosed | cancelArmingRestricted | minSpeedReached |
| alreadyDisarmed | deadBattery | notSupported |
| alreadyDocked | degreesOutOfRange | 오프라인 |
| alreadyInState | deviceJammingDetected | percentOutOfRange |
| alreadyLocked | deviceNotMounted | rangeTooClose |
| alreadyOff | deviceNotReady | relinkRequired |
| alreadyOn | deviceOffline | remoteSetDisabled |
| alreadyOpen | deviceTurnedOff | safetyShutOff |
| alreadyPaused | discreteOnlyOpenClose | targetAlreadyReached |
| alreadyStarted | functionNotSupported | tooManyFailedAttempts |
| alreadyStopped | inAutoMode | valueOutOfRange |
| alreadyUnlocked | inEcoMode |
쿼리/실행 지연 시간(p90) <= 1,000ms 측정항목은 요청된 작업 대기 시간을 측정하며 사용자가 너무 오래 기다리지 않도록 합니다(예: 조명이 꺼질 때까지 몇 초 동안 기다림).
지연 시간 측정항목
지연 시간은 통합이 최종 사용자에게 얼마나 빠르게 반응하는지 보여주는 중요한 지표입니다. 대시보드에서는 90번째 백분위수 (P90) 지연 시간을 추적합니다. 이는 '가장 느린' 사용자의 경험을 나타냅니다 (예: P90이 800ms인 경우 요청의 90% 가 800ms 이내에 승인됨).
Google에서는 기술적 정확성을 보장하기 위해 상태 확인과 기기 명령의 지연 시간을 다르게 측정합니다.
1. QUERY Latency (의문문)
이는 Google에서 기기의 현재 상태를 요청할 때 Cloud-to-cloud 왕복 시간을 측정합니다.
- 시작: Google에서
action.devices.QUERY요청을 이행 URL로 디스패치합니다. - 측정 기간: 클라우드가 전체 HTTP 응답을 수신, 처리, Google에 다시 전송하는 데 걸리는 시간입니다.
- 종료: Google이 서비스로부터 최종 응답 페이로드를 수신하고 이를 확인합니다.
2. 실행 지연 시간 (작업)
Google이 기기에 제어 요청을 전송할 때의 명령 확인 시간을 측정합니다.
- 시작: Google에서
action.devices.EXECUTE요청을 이행 URL로 디스패치합니다. - 측정 기간: 클라우드가 명령어를 수신하고 승인 응답을 반환하는 데 걸리는 시간입니다.
- 종료: Google에서
SUCCESS,PENDING또는OFFLINE상태 응답을 수신합니다. - 기술 범위: 이 측정항목은 Google 클라우드와 고객의 클라우드 간의 '응답 확인' 시간을 측정합니다. 물리적 하드웨어 (예: 전구)가 물리적 상태 변경을 완료하는 데 걸리는 시간은 측정하지 않습니다. 이는 클라우드 간 경로 외부의 로컬 메시 네트워크 지연 시간이 포함되는 경우가 많기 때문입니다.
지연 시간 감소 옵션
지역 라우팅을 위한 아키텍처 권장사항
Anycast IP 구현이 불가능한 경우 사용자가 가장 가까운 지역 데이터 센터에서 서비스를 받을 수 있도록 다음과 같은 비용 효율적인 대안을 사용하는 것이 좋습니다.
전역 부하 분산 (GLB)
정적 라우팅 대신 전역 애플리케이션 부하 분산기(대부분의 주요 클라우드 제공업체에서 제공)를 사용하세요.
작동 방식: 네트워크 가장자리에 있는 단일 전역 진입점 (URL)을 구성합니다. 부하 분산기는 Google의 처리 클러스터에서 요청의 지리적 출처를 자동으로 감지하고 트래픽을 가장 가까운 리전의 정상 백엔드로 라우팅합니다.
이점: 구성 복잡성과 비용이 크게 낮은 Anycast 성능을 제공합니다.
위치 인식 DNS (GeoDNS)
작동 방식: DNS 쿼리의 지리적 위치에 따라 주문 처리 URL이 다른 IP 주소로 변환되도록 DNS 제공업체를 구성합니다.
구현: DNS 제공업체가 Google의 이그레스 지점에 최적화되어 있는지 확인합니다. Google의 지역별 처리 서비스 (예: 미국, EU 또는 아시아)에서 도메인을 확인하면 해당 지역의 데이터 센터 IP 주소를 수신합니다.
애플리케이션 레이어의 최적화 전략
인프라 수준 라우팅 외에도 애플리케이션 레이어에서 다음 전략을 구현하여 요청 처리의 지연 시간을 줄일 수 있습니다.
'트램펄린' 프록시 메서드
기본 데이터 센터를 유지해야 하는 경우 리전 경량 프록시 서버 (트램펄린)를 사용하여 초기 핸드셰이크를 처리합니다.
Google이 글로벌 URL에 액세스합니다.
리전 프록시 (예: 경량 Nginx 또는 Lambda 함수)가 요청을 수신합니다.
프록시는 내부 고속 백본을 통해 페이로드를 기본 데이터베이스로 전달합니다.
이점: 이렇게 하면 원거리 요청의 지연 시간에 가장 큰 영향을 미치는 경우가 많은 'TCP 핸드셰이크' 시간이 단축됩니다.
액세스 토큰 리전 힌트
계정 연결 (OAuth) 프로세스 중에 시스템에서 사용자의 홈 지역을 식별할 수 있습니다.
구현: Google에 발급된
access_token에 지역 식별자를 인코딩합니다. Google에서 이행 요청을 보내면 게이트웨이가 토큰을 즉시 검사하고 데이터베이스 조회를 하지 않고도 올바른 지역 클러스터로 요청을 라우팅할 수 있습니다.
시스템 상태 - 파트너-Google 측정항목
성공률이 99.5%이상이면 Google Home에서 기기 상태가 올바르고, 기기가 추가 및 삭제되고, 자동화가 트리거되고, 기록 활동이 Google Home app (GHA)의 활동 탭에 표시됩니다.
성공률은 클라우드에서 상태 업데이트를 푸시할 때 Google에서 반환하는 HTTP 응답 코드를 기반으로 계산됩니다. 파트너가 Google 측 인프라 문제로 인해 불이익을 받지 않도록 이 측정항목은 실패 횟수에서 Google 내부 오류를 제외합니다. 계산에 포함된 API 호출은 HomeGraph API 참조에서 확인할 수 있습니다.
'성공'이란 무엇인가요?
2xx (성공): 상태 업데이트가 Home Graph에 의해 수신되고 처리되었습니다.
'실패'는 무엇으로 정의되나요?
4xx (파트너 오류)는 실패를 나타내며 클라우드에서 전송된 요청에 문제가 있음을 나타냅니다. 일반적인 코드는 다음과 같습니다.
400 잘못된 요청
원인: 서버에서 잘못된 문법으로 인해 요청을 처리할 수 없습니다. 일반적인 원인으로는 JSON 형식이 잘못되었거나 문자열 값에 '' 대신 null을 사용하는 경우가 있습니다.
해결 방법: 요청 본문이 유효한 JSON인지 (잘못된 구조나 문자열 필드의 null 값이 없음) 확인하고 agentUserId가 동기화 응답의 값과 일치하는지 확인합니다.
404 찾을 수 없음
원인: HomeGraph에서 deviceId 또는 agentUserId를 찾을 수 없습니다 (아직 동기화되지 않았거나, 이미 연결 해제되었거나, ID가 일치하지 않음).
해결책:
agentUserId이 SYNC 응답에 제공된 값과 일치하는지 확인합니다.- Home Graph 동기화 API를 사용하여 HomeGraph에 기기 또는 사용자가 누락되어 404 Not Found 오류가 발생하는지 확인합니다.
- 기기 또는 계정 추가, 삭제, 이름 변경, 업데이트 후
requestSync를 트리거하여 상태가 최신 상태로 유지되도록 합니다. - 오래된 기기 보고를 중지하기 위해
DISCONNECT인텐트를 적절히 처리DISCONNECT인텐트를 수신한 후 클라우드 서비스는 동기화 요청 및 상태 보고를 사용하여 Google에 변경사항을 게시하는 것을 중단해야 합니다.
429 리소스 소진
원인: 통합이 할당량을 초과했습니다.
해결 방법: 할당량 관리 대시보드의 '2a단계: 할당량 문제 디버그' 섹션에 있는 안내를 참고하세요. 스마트 홈 할당량 및 한도를 참고하여 자세한 내용을 확인할 수도 있습니다.
기기 상태 - 상태 정확성
상태 정확도 >= 99.5%를 충족하거나 초과하면 사용자가 기기 상태를 보거나 AI 기능(예: Home에게 물어보기)을 사용할 때 올바른 결과가 표시됩니다. 상태 정확도가 낮으면 자동화가 실행되지 않고 기록 항목이 GHA의 활동 탭에 적시에 표시되지 않을 수 있습니다. 자세한 내용은 상태 보고를 참고하세요.
품질 대시보드에서는 전체 정확도와 가장 낮은 유형/특성 조합이라는 두 가지 별도의 측정항목을 사용하여 시간별로 이를 추적합니다.
1. 정확도 구성요소
이 측정항목은 Google에서 알려진 인텐트 결과에 대해 보고된 상태를 확인할 수 있는 '샘플'에서 파생됩니다.
2. 대시보드 측정항목 (시간별 계산)
대시보드는 1시간 간격을 기준으로 정확도를 계산합니다. 한 시간의 총 샘플 수가 100개 미만 (S_Total < 100)이면 해당 시간의 정확도가 N/A로 설정됩니다.
뷰 1: 전체 정확도 (전체 평균)
이는 모든 기기 유형과 특성을 합한 통합의 총 정확도를 나타냅니다. 전체 생태계의 상태에 대한 가중 평균을 제공합니다.
- 계산: 모든 기기의 총 상태 정확도 / 모든 기기의 총 상태 합계
뷰 2: 가장 낮은 유형/특성 조합
통합에서 가장 신뢰할 수 없는 특정 카테고리를 식별합니다. 이를 통해 고품질의 대량 기기가 저품질의 소량 기기를 숨기는 것을 방지할 수 있습니다. 예를 들어 99.5% 이상의 상태 정확도를 가진 조명이 많지만 상태 정확도가 낮은 스위치가 적은 경우 평균값에서 누락될 수 있는 스위치의 개선이 필요함을 강조합니다.
- 계산: 모든 트레이트 / 기기 조합의 상태 정확성/상태 총계의 최솟값입니다.
3. 기기 상태 및 상태 정확도 개선
Home Graph에 저장된 상태가 실시간 QUERY 결과와 일치하지 않으면 불일치가 발생합니다.
'필드 누락' 오류
DETAILED_ACCURACY_RESULT_QUERY_STATE_MISSING_FIELD 예
reportStateLog: { accuracy: "INACCURATE" agentId: "abc" detailedAccuracyResult: "DETAILED_ACCURACY_RESULT_QUERY_STATE_MISSING_FIELD" deviceId: "curtain" deviceType: "action.devices.types.CURTAIN" isMissingField: true isOffline: false queriedTime: "2026-04-13T12:20:26Z" queryReportStateDifferences: { queryState: "open_close { open_percent: 0.0 missing open_direction }" reportState: "open_close { open_state { open_percent: 100.0 open_direction: "LEFT" } }" } reportedTime: "2022-05-13T07:14:35Z" requestId: "123" result: "INACCURATE" snapshotTime: "2026-04-13T12:20:26Z" stateName: "open_state" traitName: "TRAIT_OPEN_CLOSE" }
DETAILED_ACCURACY_RESULT_REPORT_STATE_MISSING_FIELD 예
reportStateLog: { accuracy: "INACCURATE" agentId: "abc" detailedAccuracyResult: "DETAILED_ACCURACY_RESULT_REPORT_STATE_MISSING_FIELD" deviceId: "sensor" deviceType: "action.devices.types.SENSOR" isMissingField: true isOffline: false queriedTime: "2026-04-28T10:40:33Z" queryReportStateDifferences: { queryState: "temperature_setting { thermostat_mode: "off" thermostat_temperature_ambient: 20.0 active_thermostat_mode: "none" }" reportState: "temperature_setting { thermostat_mode: "off" active_thermostat_mode: "none" }" } reportedTime: "2024-09-20T15:00:00Z" requestId: "123" result: "INACCURATE" snapshotTime: "2026-04-28T10:40:33Z" stateName: "thermostat_temperature_ambient" traitName: "TRAIT_TEMPERATURE_SETTING" }
원인: DETAILED_ACCURACY_RESULT_QUERY_STATE_MISSING_FIELD 또는 DETAILED_ACCURACY_RESULT_REPORT_STATE_MISSING_FIELD 오류가 발생하면 동일한 기기에 대한 QUERY 응답과 Report State 요청 간에 페이로드 필드 집합이 다릅니다.
해결 방법: 두 경로의 데이터 구조가 동일해야 합니다. 특성이 동기화에 포함된 경우 해당 필드는 사전 보고서와 사후 쿼리 모두에 있어야 하며 일관되어야 합니다.
'부정확함' 오류
DETAILED_ACCURACY_RESULT_INACCURATE 예시
reportStateLog: { accuracy: "INACCURATE" agentId: "abc" detailedAccuracyResult: "DETAILED_ACCURACY_RESULT_INACCURATE" deviceId: "outlet" deviceType: "action.devices.types.OUTLET" isMissingField: false isOffline: false queriedTime: "2026-04-12T16:02:58Z" queryReportStateDifferences: { queryState: "on_off { on: false }" reportState: "on_off { on: true }" } reportedTime: "2025-03-10T01:56:44Z" requestId: "abc" result: "INACCURATE" snapshotTime: "2026-04-12T16:02:58Z" stateName: "on" traitName: "TRAIT_ON_OFF" }
원인: DETAILED_ACCURACY_RESULT_INACCURATE 오류의 경우 QUERY 응답에서 반환된 값과 마지막 보고서 상태 값 간에 불일치가 있습니다.
해결 방법: 기기 상태가 변경될 때마다 Report State가 트리거되고 Report State와 QUERY가 항상 동일한 최신 값과 모든 필수 필드를 제공하여 데이터 일관성을 유지해야 합니다.
DETAILED_ACCURACY_RESULT_MISSING_REPORT_STATE 예시
"reportStateLog": { "isMissingField": false, "snapshotTime": "2026-04-13T07:56:21Z", "traitName": "TRAIT_ON_OFF", "detailedAccuracyResult": "DETAILED_ACCURACY_RESULT_MISSING_REPORT_STATE", "executionReportStateDifferences": { "expectedPostExecutionDeviceState": { "onOff": { "on": false } }, "preExecutionDeviceState": { "onOff": { "on": true } }, "executionCommand": { "requestId": "test001", "beginTimestamp": "2026-04-13T07:56:20Z", "action": { "trait": "TRAIT_ON_OFF", "actionType": "ONOFF_OFF" }, "status": { "statusType": "SUCCESS_STATUS" }, "endTimestamp": "2026-04-13T07:56:21Z", "executionType": "PARTNER_CLOUD" }, "reportState": {} }, "accuracy": "MISSING_REPORT_STATE", "deviceType": "action.devices.types.LIGHT", "agentId": "abc", "stateName": "on", "result": "MISSING_REPORT_STATE" }
원인: DETAILED_ACCURACY_RESULT_MISSING_REPORT_STATE 오류의 경우 파트너가 명령어를 성공적으로 실행했지만 업데이트된 기기 상태를 Google에 다시 보고하지 않았습니다.
해결 방법: 명령어가 실행된 후 항상 상태 보고 업데이트를 전송하여 Home Graph가 새 기기 상태를 수신하도록 합니다.
DETAILED_ACCURACY_RESULT_NO_STATE_REPORTED 예시
eportStateLog: { accuracy: "INACCURATE" agentId: "abc" detailedAccuracyResult: "DETAILED_ACCURACY_RESULT_NO_STATE_REPORTED" deviceId: "switch" deviceType: "action.devices.types.SWITCH" isMissingField: false isOffline: true queriedTime: "2026-04-13T13:53:26Z" queryReportStateDifferences: { queryState: "online { online: false } " reportState: "" } reportedTime: "1970-01-01T00:00:00Z" requestId: "test001" result: "INACCURATE" snapshotTime: "2026-04-13T13:53:26Z" stateName: "online" traitName: "TRAIT_ONLINE" }
원인: DETAILED_ACCURACY_RESULT_NO_STATE_REPORTED 오류의 경우 QUERY 결과에서 현재 상태를 제공함에도 불구하고 이 기기에 대해 Report State가 수신되지 않았습니다 (상태가 비어 있고 보고된 타임스탬프가 에포크에 있음).
이는 상태 업데이트가 트리거되지 않거나, HomeGraph에 도달하지 못하거나, 기기가 연결 또는 작동 상태의 전환을 성공적으로 보고하지 않음을 나타냅니다.
해결 방법: 모든 상태 변경에 대해 보고 상태가 트리거되고 전송되는지 확인합니다. 백엔드 로직이 상태 업데이트를 올바르게 처리하고, Google HomeGraph에 전송 성공을 확인하며, 기기가 상태를 일관되게 동기화하여 사용자 인터페이스와 자동화 엔진이 정확하도록 하는지 확인합니다.