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 DOMString startDiagnosticLogging(optional RTCDiagnosticLoggingOptions options = {});
  static undefined stopDiagnosticLogging();
  static undefined cancelDiagnosticLogging();
};

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. metadata를 options의 metadata 멤버로 합니다.

  3. metadata의 크기가 5보다 크거나, 임의의 항목 key → value에 대해 metadata 내 해당 항목의 길이가 100보다 크면, 다음 예외로 거부된 프로미스를 반환합니다: TypeError.

  4. [[RTCDiagnosticLoggingSessionId]] 내부 슬롯이 null이 아니면, 다음 예외를 던집니다: "InvalidStateError" DOMException.

  5. sessionId를 무작위로 생성한 UUID [rfc4122]로 합니다. 핑거프린팅을 방지하기 위해, 구현체는 UUID를 생성할 때 RFC 4122의 4.4절에 제시된 형식을 사용하는 것이 좋습니다.

  6. [[RTCDiagnosticLoggingSessionId]] 를 sessionId로 설정합니다.

  7. 병렬로, 내부 WebRTC 활동의 로깅 세션을 시작하고, 문맥 정보로 metadata를 사용합니다. 로깅 세션은 sessionId로 식별합니다.

  8. sessionId를 반환합니다.

로깅 세션이 시작되면, 사용자 에이전트는 모든 WebRTC 관련 활동을 기록해도 됩니다. 로깅 세션은 sessionId로 식별되며, 이 값은 로그를 참조하는 데 사용할 수 있습니다(예: 버그 보고서에서).

3.3.2. stopDiagnosticLogging()

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

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

  1. [[RTCDiagnosticLoggingSessionId]] 내부 슬롯이 null이면, 다음 예외를 던집니다: "InvalidStateError" DOMException.

  2. sessionId를 [[RTCDiagnosticLoggingSessionId]]로 합니다.

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

  4. 병렬로, 로깅 세션을 중지하며, 이 세션은 [[RTCDiagnosticLoggingSessionId]]로 식별됩니다.

로깅 세션이 중지되면 사용자 에이전트는 어떠한 WebRTC 관련 활동도 기록해서는 안 됩니다.

3.3.3. discardDiagnosticLogging()

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

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

  1. [[RTCDiagnosticLoggingSessionId]] 내부 슬롯이 null이면, 다음 예외를 던집니다: "InvalidStateError" DOMException.

  2. sessionId를 [[RTCDiagnosticLoggingSessionId]]로 합니다.

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

  4. 병렬로, 로깅 세션을 취소하며, 이 세션은 [[RTCDiagnosticLoggingSessionId]]로 식별됩니다.

로깅 세션이 취소되면, 사용자 에이전트는 어떠한 WebRTC 관련 활동도 기록해서는 안 되며, 사용자 에이전트는 취소된 로깅 세션과 관련하여 기록된 모든 데이터를 제거한 상태여야 합니다.

적합성

문서 규칙

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

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

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

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

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

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

색인

이 명세에서 정의된 용어

참조를 통해 정의된 용어

참고 문헌

규범적 참고 문헌

[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 DOMString startDiagnosticLogging(optional RTCDiagnosticLoggingOptions options = {});
  static undefined stopDiagnosticLogging();
  static undefined cancelDiagnosticLogging();
};

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