WebRTC 진단 로깅 API

커뮤니티 그룹 보고서 초안,

이 버전:
https://wicg.github.io/webrtc-diagnostic-logging/
이슈 추적:
GitHub
편집자:
Guido Urdaneta (Google)

초록

이 명세는 내부 WebRTC 진단 로그를 관리하는 API를 정의한다.

이 문서의 상태

이 명세는 웹 플랫폼 인큐베이터 커뮤니티 그룹에서 발행했다. 이 문서는 W3C 표준이 아니며 W3C 표준화 절차에 포함되지도 않는다. 다음 W3C 커뮤니티 기여자 라이선스 계약 (CLA)에 따라 제한적인 참여 철회가 가능하며 기타 조건이 적용된다는 점에 유의한다. W3C 커뮤니티 및 비즈니스 그룹에 대해 자세히 알아본다.

1. 소개

WebRTC 진단 로깅 API는 웹 애플리케이션이 사용자 에이전트가 수행하는 WebRTC 관련 작업의 내부 진단 로그 수집을 시작하고, 완료하고, 폐기할 수 있는 프로그래밍 인터페이스를 제공합니다. 이러한 진단 로그는 애플리케이션에 절대 노출되지 않습니다. 대신 사용자가 제어하는 위치에 저장되며 사용자 에이전트 공급업체와 공유될 수 있습니다. 진단 로그의 수집 및 저장에는 사용자의 명시적인 승인이 필요하며 애플리케이션은 진단 로깅 작업의 성공 또는 실패 여부를 알 수 없습니다. 진단 로그의 내용 또한 구현 세부 사항입니다. 이 API에서 지원하려는 사용 사례는 다음과 같습니다.

2. 보안 및 개인정보 보호

이러한 진단 로그는 WebRTC 관련 기능을 구현하기 위해 사용자 에이전트가 수행한 내부 작업에 관한 정보를 수집합니다. 이러한 진단 로그에는 웹 애플리케이션에 노출되지 않는 정보가 포함될 수 있으므로 API는 어떤 방식으로도 이러한 로그를 웹 애플리케이션에 노출할 수 없습니다. 로그는 사용자의 승인을 전제로 사용자 에이전트 공급업체와 공유될 수 있으며(예: 대역 외 업로드를 통해), 이를 통해 사용자 에이전트의 버그 수정이나 그 밖의 사용자 에이전트 개선을 지원하는 데 사용할 수 있습니다.

진단 로그의 수집, 저장 및 업로드에는 사용자의 명시적인 승인이 필요합니다. 이 승인을 위한 구체적인 메커니즘은 구현에서 정의됩니다. 승인을 구현하는 방법에는 전용 UI, 구성 파일, 엔터프라이즈 정책, 프롬프트 또는 이들의 조합 등이 포함될 수 있으나 이에 한정되지는 않습니다. 승인은 특정 출처로 제한될 수 있습니다. 이러한 승인 상태는 애플리케이션에 절대 노출되지 않습니다. 따라서 API는 성공을 보장하지 않습니다.

3. RTCPeerConnection 인터페이스 확장

이 API는 RTCPeerConnection 인터페이스의 정적 메서드 집합으로 노출됩니다.

[
  Exposed=Window
] partial interface RTCPeerConnection {
  static Promise<DOMString> startDiagnosticLogging(optional RTCDiagnosticLoggingOptions options = {});
  static Promise<undefined> finishDiagnosticLogging(optional RTCDiagnosticLoggingOptions options = {});
  static Promise<undefined> discardDiagnosticLogging();
};

3.1. 딕셔너리

RTCDiagnosticLoggingOptions는 로깅 세션을 위한 구성을 제공합니다.

dictionary RTCDiagnosticLoggingOptions {
  record<DOMString, DOMString> metadata;
};

3.2. 내부 슬롯

관련 전역 객체[[RTCDiagnosticLoggingSessionId]] 내부 슬롯이 있으며, 이 슬롯은 null로 초기화된다고 합니다.

3.3. 메서드

3.3.1. startDiagnosticLogging(options)

startDiagnosticLogging(options) 메서드는 진단 로깅 세션 시작을 시도합니다.

이 메서드가 호출되면 사용자 에이전트는 반드시 다음 단계를 실행해야 합니다.

  1. options를 이 메서드의 첫 번째 인수라고 합니다.

  2. metadataoptionsmetadata 멤버라고 합니다.

  3. metadata크기가 5보다 크거나, metadata의 어떤 항목 keyvalue길이가 100보다 크다면, TypeError거부된 프로미스를 반환합니다.

  4. p를 새 프로미스라고 합니다.

  5. 병렬로 다음 단계를 수행합니다.

    1. uuid를 무작위로 생성된 UUID [rfc4122]라고 합니다. 핑거프린팅을 방지하기 위해 구현은 UUID를 생성할 때 RFC 4122의 4.4절에 있는 형식을 사용하는 것이 좋습니다.

    2. doc관련 전역 객체와 연결된 문서라고 합니다.

    3. [[RTCDiagnosticLoggingSessionId]] 내부 슬롯이 null이 아니라면, DOMException 객체로 p거부합니다. 이 객체의 name 속성 값은 "InvalidStateError" 이며 이 단계들을 중단합니다.

    4. uuid[[RTCDiagnosticLoggingSessionId]] 내부 슬롯에 저장합니다.

    5. puuid이행합니다.

    6. uuid로 식별되는 내부 WebRTC 활동의 로깅 세션을 시작합니다.

  6. p를 반환합니다.

로깅 세션이 시작되면 p가 이행된 후 doc에서 생성된 모든 WebRTC 관련 활동을 사용자 에이전트가 로깅할 수 있습니다. 로그에는 metadata 또는 여기에서 파생된 정보가 포함될 수 있습니다. 로깅 세션은 uuid로 식별되며, 이는 로그를 참조하는 데 사용할 수 있습니다(예: 버그 보고서에서).

3.3.2. finishDiagnosticLogging(options)

finishDiagnosticLogging(options) 메서드는 진행 중인 진단 로깅 세션을 종료합니다.

이 메서드가 호출되면 사용자 에이전트는 반드시 다음 단계를 실행해야 합니다.

  1. options를 이 메서드의 첫 번째 인수라고 합니다.

  2. metadataoptionsmetadata 멤버라고 합니다.

  3. metadata크기가 5보다 크거나, metadata의 어떤 항목 keyvalue길이가 100보다 크다면, TypeError거부된 프로미스를 반환합니다.

  4. p를 새 프로미스라고 합니다.

  5. 병렬로 다음 단계를 수행합니다.

    1. [[RTCDiagnosticLoggingSessionId]] 내부 슬롯이 null이라면, DOMException 객체로 p거부합니다. 이 객체의 name 속성 값은 "InvalidStateError" 이며 이 단계들을 중단합니다.

    2. [[RTCDiagnosticLoggingSessionId]]로 식별되는 로깅 세션을 중지합니다.

    3. [[RTCDiagnosticLoggingSessionId]]null로 설정합니다.

    4. pundefined이행합니다.

  6. p를 반환합니다.

p가 이행된 후 사용자 에이전트는 doc에서 생성된 어떠한 WebRTC 관련 활동도 반드시 로깅해서는 안 됩니다.

3.3.3. discardDiagnosticLogging()

discardDiagnosticLogging() 메서드는 진행 중인 진단 로깅 세션을 폐기하고 해당 세션과 연결된 모든 로깅 데이터를 삭제합니다.

이 메서드가 호출되면 사용자 에이전트는 반드시 다음 단계를 실행해야 합니다.

  1. p를 새 프로미스라고 합니다.

  2. 병렬로 다음 단계를 수행합니다.

    1. [[RTCDiagnosticLoggingSessionId]] 내부 슬롯이 null이라면, DOMException 객체로 p거부합니다. 이 객체의 name 속성 값은 "InvalidStateError" 이며 이 단계들을 폐기합니다.

    2. uuid[[RTCDiagnosticLoggingSessionId]]의 값이라고 합니다.

    3. [[RTCDiagnosticLoggingSessionId]]로 식별되는 로깅 세션을 폐기합니다.

    4. [[RTCDiagnosticLoggingSessionId]]null로 설정합니다.

    5. pundefined이행합니다.

  3. p를 반환합니다.

p가 이행된 후에는 다음과 같습니다.

적합성

문서 규칙

적합성 요구 사항은 설명적 서술과 RFC 2119 용어를 조합하여 표현됩니다. 이 문서의 규범적 부분에서 사용하는 핵심 단어인 “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY” 및 “OPTIONAL”은 RFC 2119에 설명된 대로 해석해야 합니다. 그러나 가독성을 위해 이 명세에서는 이러한 단어를 모두 대문자로 표기하지 않습니다.

명시적으로 비규범적이라고 표시된 절, 예제 및 참고 사항을 제외한 이 명세의 모든 텍스트는 규범적입니다. [RFC2119]

이 명세의 예제는 “예를 들어”라는 단어로 시작하거나 다음과 같이 class="example"을 사용하여 규범적 텍스트와 구분됩니다.

이는 정보 제공 목적의 예제입니다.

정보 제공 목적의 참고 사항은 “참고”라는 단어로 시작하며 다음과 같이 class="note"을 사용하여 규범적 텍스트와 구분됩니다.

참고: 이는 정보 제공 목적의 참고 사항입니다.

색인

이 명세에서 정의된 용어

참조를 통해 정의된 용어

참고 문헌

규범적 참고 문헌

[DOM]
Anne van Kesteren. DOM 표준. 현행 표준. URL: https://dom.spec.whatwg.org/
[HTML]
Anne van Kesteren; et al. HTML 표준. 현행 표준. URL: https://html.spec.whatwg.org/multipage/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra 표준. 현행 표준. URL: https://infra.spec.whatwg.org/
[RFC2119]
S. Bradner. 요구 사항 수준을 나타내기 위해 RFC에서 사용하는 핵심 단어. 1997년 3월. 현행 최선의 관행. URL: https://datatracker.ietf.org/doc/html/rfc2119
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL 표준. 현행 표준. URL: https://webidl.spec.whatwg.org/
[WEBRTC]
Cullen Jennings; et al. WebRTC: 브라우저에서의 실시간 통신 . URL: https://w3c.github.io/webrtc-pc/

비규범적 참고 문헌

[RFC4122]
K. Davis; B. Peabody; P. Leach. 범용 고유 식별자(UUID). 2024년 5월. 제안 표준. URL: https://www.rfc-editor.org/info/rfc9562/

IDL 색인

[
  Exposed=Window
] partial interface RTCPeerConnection {
  static Promise<DOMString> startDiagnosticLogging(optional RTCDiagnosticLoggingOptions options = {});
  static Promise<undefined> finishDiagnosticLogging(optional RTCDiagnosticLoggingOptions options = {});
  static Promise<undefined> discardDiagnosticLogging();
};

dictionary RTCDiagnosticLoggingOptions {
  record<DOMString, DOMString> metadata;
};