디바이스 자세 API

W3C 후보 권고안 스냅샷

이 문서에 대한 자세한 정보
이 버전:
https://www.w3.org/TR/2024/CR-device-posture-20241126/
최신 공개 버전:
https://www.w3.org/TR/device-posture/
최신 편집자 초안:
https://w3c.github.io/device-posture/
역사:
https://www.w3.org/standards/history/device-posture/
커밋 기록
테스트 스위트:
https://wpt.live/device-posture
구현 보고서:
https://wpt.fyi/results/device-posture
편집자:
Diego González (Microsoft, 이전에는 삼성 대표)
Kenneth Rohde Christiansen (인텔 코퍼레이션)
Alexis Menard (인텔 코퍼레이션)
피드백:
GitHub w3c/device-posture (풀 리퀘스트, 새 이슈, 오픈 이슈)
추가 자료
설명서
폴리필

요약

이 문서는 웹 애플리케이션이 디바이스의 자세 변화를 요청하고 알림을 받을 수 있도록 하는 API를 명세합니다.

이 문서의 상태

이 섹션은 문서가 발행될 당시의 상태를 설명합니다. 현재 W3C 발간 목록과 이 기술 보고서의 최신 판은 W3C 기술 보고서 색인에서 확인할 수 있습니다: https://www.w3.org/TR/

이 명세를 도입하려는 벤더는 후보 권고 단계에 진입하기 전이라도 GitHub 저장소를 구독하고 논의에 참여하는 것이 좋습니다.

이 문서는 디바이스 및 센서 작업 그룹에서 권고 트랙을 따라 후보 권고안 스냅샷으로 공개되었습니다.

후보 권고안으로 발표된다고 해서 W3C 및 회원의 승인이나 보증을 의미하지는 않습니다. 후보 권고안 스냅샷은 폭넓은 검토를 받았고, 구현 경험을 수집하며, 작업 그룹 구성원의 로열티 프리 라이선스 약속을 받았습니다.

이 후보 권고안은 2024년 12월 24일 이전에 제안 권고안으로 진전될 것으로 기대되지 않습니다.

이 문서는 W3C 특허 정책을 준수하는 그룹에서 작성되었습니다. W3C공개 특허 공개 목록을 관리하며, 그룹 산출물과 관련해 공개된 모든 특허 내역을 확인할 수 있습니다. 해당 페이지에는 특허 공개 방법도 안내되어 있습니다. 개별적으로 관련 특허를 알고 있는 경우 필수 청구가 포함된다고 생각되면, W3C 특허 정책 6절에 따라 정보를 공개해야 합니다.

이 문서는 2023년 11월 3일 W3C 프로세스 문서의 적용을 받습니다.

1. 소개

디바이스 자세(device posture)는 디바이스가 물리적으로 놓여 있는 위치로, 각도뿐만 아니라 센서에서 얻은 정보를 통해 유추될 수 있습니다. 새로운 유형의 모바일 디바이스들이 등장하고 있으며, 이들은 자세를 변경할 수 있는 기능을 가지고 있습니다. 가장 흔한 형태는 화면이나 화면 주변을 접을 수 있는(폴딩이 가능한) 디바이스로, 실제로 폼 팩터를 물리적으로 변경할 수 있습니다. 디바이스의 자세를 아는 주된 목적은 반응형 디자인을 통해 새로운 사용자 경험을 구현하는 데 있습니다.

언급된 "폴딩" 디바이스에는 주로 두 가지 물리적 폼 팩터가 있습니다: 하나는 하나의 유연한 화면(심리스), 또 하나는 두 개의 화면(이음새 있음)입니다. 두 종류 모두 경첩(hinge)을 중심으로 접을 수 있으며, 현재 명세는 두 유형 모두에 적용됩니다. 또한 심리스와 이음새 있는 디바이스 모두 모바일, 태블릿, 노트북 등 다양한 크기일 수 있습니다. 각 디바이스마다 기본 방향(세로/가로)이 다를 수 있으며, 접힘이 수직 또는 수평으로 일어날 수 있다는 점도 유의해야 합니다.

다양한 폴더블 디바이스 유형 그림

웹사이트에서 접힘 영역을 피해 가독성을 높이거나, 웹에서 혁신적인 사용 사례를 구현하기 위해 디바이스의 자세를 아는 것은 개발자가 다양한 디바이스에 맞춰 콘텐츠를 최적화하는 데 도움이 됩니다.

디바이스가 평평하지 않은 상태에서도 콘텐츠를 소비하고 탐색할 수 있으므로, 개발자는 디바이스의 자세 상태에 따라 다른 레이아웃을 제공하고자 할 수 있습니다.

2. Document 인터페이스 확장

다음 내부 슬롯이 Document 인터페이스에 추가됩니다.

내부 슬롯 설명
[[CurrentPosture]] 디바이스의 현재 자세.

3. Navigator 인터페이스 확장

[HTML] 명세는 Navigator 인터페이스를 정의하며, 본 명세는 이를 확장합니다:

WebIDL[SecureContext, Exposed=(Window)]
partial interface Navigator {
  [SameObject] readonly attribute DevicePosture devicePosture;
};

4. DevicePosture 인터페이스

WebIDL[SecureContext, Exposed=(Window)]
interface DevicePosture : EventTarget {
  readonly attribute DevicePostureType type;
  attribute EventHandler onchange;
};

enum DevicePostureType {
  "continuous",
  "folded"      
};

4.1 type 속성: 현재 디바이스 자세 가져오기

type 속성을 가져올 때, 사용자 에이전트는 MUST this관련 글로벌 객체연결된 Document의 내부 슬롯 [[CurrentPosture]] 값을 반환해야 합니다.

4.2 onchange 속성: 자세 변화 처리

onchange 속성은 이벤트 핸들러 IDL 속성 이며, onchange 이벤트 핸들러에 해당합니다. 이 이벤트 핸들러의 이벤트 타입은 "change"입니다.

5. 자세 타입

이 명세는 다음 자세 값을 정의합니다:

  1. 연속 자세 그림

    연속(Continuous) 자세: 연속 자세는 "평평한" 위치를 의미합니다. 이는 대부분의 디바이스에서 기본 상태이며, 다양한 자세를 허용하지 않는 경우입니다.

    접힘, 경첩 또는 유사 기능이 없는 디바이스가 포함됩니다.

    하드웨어 혁신의 특성상, 듀얼, 폴더블, 롤러블 또는 곡면 화면을 가진 디바이스도 화면이 평평하게 표시되는 자세라면 모두 포함됩니다.

    예시:

    • 폴더블 디바이스가 완전히 펼쳐져 평평한 자세인 경우
    • 폴더블 디바이스에서 브라우저가 경첩을 가로지르지 않는 창/섹션에서 실행되는 경우
    • 2-in-1 디바이스가 태블릿 모드로 1개의 화면/측면만 사용하는 경우
    • 접히지 않는 디바이스
    참고

    어떤 경우에는 디바이스가 여러 앱을 실행하거나 물리적으로 평평하지 않은 상태일 수 있지만, 브라우저가 여러 화면/섹션에 걸쳐 있지 않으면 해당 자세는 연속으로 간주됩니다.

  2. 접힌 자세 그림 접힘(Folded) 자세: 접힘 자세는 물리적으로 접힐 수 있는 디바이스를 의미합니다. 이러한 디바이스는 하나의 유연한 화면 또는 두 개의 인접한 화면을 가질 수 있습니다. 이 자세에서는 디스플레이/섹션 사이에 '평평한' 상태를 넘지 않는 각도가 형성됩니다.

    예시:

    • 폴더블 디바이스가 수직 경첩과 내부 화면을 통해 '책' 자세로 사용되는 경우, 콘텐츠가 두 섹션에 걸쳐 있고 각도가 약 30°~170°를 이룸
    • 폴더블 디바이스가 수평 경첩과 내부 화면을 통해 '노트북' 자세로 사용되는 경우
    참고

    폴더블 디바이스를 반쯤 접힌 상태(책처럼)로 사용할 때는, 구현자는 텍스트 방향과 쓰기 모드가 레이아웃 및 표현에 미치는 영향을 고려해야 할 수 있습니다.

    예를 들어, 오른쪽에서 왼쪽으로 진행하는 언어(아랍어, 히브리어, 시리아어 등)와 많은 세로 쓰기 모드(동아시아 언어 등)는 영어 책과는 반대 순서로 페이지가 진행되어, 오른쪽 페이지에 번호가 더 낮아집니다.

    자세한 정보는 중국어, 일본어, 한국어 쓰기 모드의 차이점을 참고하세요.

API에서는 자세 값이 DevicePostureType 열거형 값으로 표현됩니다.

6. 디바이스 자세 미디어 쿼리

6.1 device-posture 미디어 기능

device-posture 미디어 기능은 CSS 미디어 쿼리 [MEDIAQ]를 통해 디바이스의 자세를 나타냅니다. 모든 네비게이블(navigables)은 자신의 자세최상위 탐색 가능 객체와 반영합니다.

값:
continuous | folded
적용 대상:
시각적 미디어 타입
min/max 접두사 허용:
아니오

사용자 에이전트는 MUST 웹 애플리케이션에 적용된 자세를 CSS 미디어 쿼리 [MEDIAQ]로 반영해야 합니다.

7. 자세 읽기

모든 Document 인스턴스에는 내부 슬롯 [[CurrentPosture]]가 있으며, Document가 생성될 때 초기화되어야 하며, 그렇지 않은 경우 MUST 처음 접근 시, 값을 읽기 전에 반드시 초기화되어야 합니다. 사용자 에이전트MUST 디바이스 자세 변경 단계를 실행하여, documentDocument로, disallowRecursion을 true로 설정하여 초기화해야 합니다.

특정 Document현재 자세는 현재 경첩 각도와 화면 방향, 그리고 구현별 추가 신호 등에서 파생됩니다.

이 표는 규범적이지 않습니다.

7.1 자세 값 표

값은 대략적인 것으로, 디바이스마다 다를 수 있습니다. 예를 들어, 평평하게 놓았을 때 정확히 180°가 아니라 175°~185° 범위일 수 있습니다. 디바이스 제작사는 SHOULD 물리적 디바이스 자세가 본 명세에 정의된 자세에 정확히 매핑되도록 해야 합니다. 또한 경첩 각도 외에 더 많은 센서를 사용해 자세를 결정할 수도 있습니다. 예를 들어, 키보드가 화면 하단에 결합되어 있는지, 킥스탠드가 펼쳐져 있는지 여부도 감지할 수 있습니다.

물리적 제약이나 디자인에 따라 일부 자세가 없는 디바이스도 있을 수 있으며, 이 경우 디바이스는 SHOULD 모든 각도와 디바이스 방향(호스트 OS 및 [SCREEN-ORIENTATION]에 의해 고정될 수 있음), 그리고 디바이스 특화 신호가 반드시 정의된 자세 중 하나에 매핑되도록 해야 합니다.

7.1.1 폴더블 디바이스

폴더블 디바이스의 자세 값
자세 각도 값
continuous < ~180°
folded ~180°

8. 알고리즘

8.1 디바이스 자세 정보 계산

디바이스 자세 정보를 계산하는 단계는 Document document에 대해 다음과 같습니다:

  1. topLevelTraversabledocument관련 글로벌 객체네비게이블최상위 탐색 가능 객체로 한다.
  2. 만약 topLevelTraversable.[[PostureOverride]]가 null이 아니라면, 그것을 반환한다.
  3. 현재 경첩 각도 값, 현재 화면 방향, 그리고 구현 특화 신호들에 따라 DevicePostureType 값을 구현자 정의 방식으로 자세 값 표에 따라 반환한다.

8.2 디바이스 자세 변화

사용자 에이전트가 최상위 탐색 가능 객체의 화면(들) 접힘 각도, 방향 또는 디바이스 특화 신호가 변경되었다고 판단하면, MUST 디바이스 자세 변경 단계를 해당 최상위 탐색 가능 객체활성 document로 실행해야 한다.

디바이스 자세 변경 단계Document document와 선택적 boolean disallowRecursion(기본값 false)로 다음과 같이 실행된다:

  1. 만약 documentvisibility state가 "hidden"이면, 이 단계를 중단한다.
  2. posture디바이스 자세 정보 계산document로 실행한 결과로 한다.
  3. 만약 posturedocument.[[CurrentPosture]]와 같다면, 이 단계를 중단한다.
  4. 글로벌 태스크를 큐사용자 상호작용 태스크 소스document관련 글로벌 객체에서 다음 단계를 실행한다:
    1. document.[[CurrentPosture]]posture로 설정한다.
    2. 이벤트를 발행한다. 이름은 "change", 대상은 DevicePosture 객체(해당 document관련 글로벌 객체Navigator에 연결됨).
  5. disallowRecursion이 true이면, 이 단계를 중단한다.
  6. 각각 descendantNavigable에 대해 document하위 네비게이블:
    1. 디바이스 자세 변경 단계documentdescendantNavigable활성 document로 하고, disallowRecursion을 true로 실행한다.

이 명세는 visibility statedocument에 대해 다음 페이지 가시성 변경 단계를 정의합니다:

  1. 디바이스 자세 변경 단계documentdisallowRecursion을 false로 하여 초기화한다.
참고
이슈 103: 페이지 가시성 변경 단계 hook 사용 지양

https://html.spec.whatwg.org/#update-the-visibility-state에서 발췌

명세 작성자는 페이지 가시성 변경 단계 hook을 사용하지 말고, 직접 명세에 call을 추가하는 pull request를 보내는 것이 더 좋습니다. 이렇게 하면 명확한 cross-specification 호출 순서를 보장할 수 있습니다. 이 글 작성 시점에서 다음 명세들은 페이지 가시성 변경 단계를 가지고 있으며, 이 단계들은 정의되지 않은 순서로 실행됩니다: Device Posture API 및 Web NFC. [DEVICEPOSTURE] [WEBNFC]

9. 보안 고려사항

본 명세에 대해 새로운 보안 고려사항이 보고된 바는 없습니다. 하지만 이 문서에서 기술된 10. 개인정보 보호 고려사항을 참고하는 것이 권장됩니다.

10. 개인정보 보호 고려사항

10.1 개인정보 위협 유형

이 섹션은 규범적이지 않습니다.

10.1.1 컨텍스트 간 사용자 식별

이 API가 동일한 디바이스의 서로 다른 브라우징 컨텍스트에서 동시에 사용될 때, 두 컨텍스트 간에 사용자를 연관시켜 예기치 않은 추적 메커니즘이 만들어질 수 있습니다. 하지만 자세 값은 일반적으로 오랜 시간 동안 안정적이기 때문에, 두 사용자가 동일하지 않음을 확인하는 데 사용할 수는 있지만, 다양한 폴더블 디바이스의 타입과 모델이 존재한다는 점에서 특정 사용자를 식별하는 데에는 도움이 되지 않습니다.

추가된 엔트로피는 사용자의 주요 입력이 터치 기반인지 여부를 알려주는 pointer API에 비견할 수 있습니다. 이러한 주요 입력은 키보드가 분리/결합되거나 태블릿 모드가 활성화/비활성화될 때 변경될 수 있습니다.

이론적 공격은 10.2.1 데이터 최소화, 10.2.2 사용자 주의10.2.3 사용자 중재 행동으로 완화됩니다.

10.1.2 교차 출처 iframe

교차 출처 iframe도 이 API를 통해 자세에 접근할 수 있으므로, 10.1.1 컨텍스트 간 사용자 식별에서 언급된 것과 유사하게 사용자를 식별하는 데 정보를 사용할 수 있습니다. 동일한 완화책이 적용됩니다.

10.1.3 악성 스크립트 주입(광고/악용 목적)

iframe을 통해 악의적 행위자가 자신의 코드를 주입하여 자세 정보를 접근하고, 이를 이용해 사용자를 추적할 수 있습니다.

이론적 공격은 10.2.1 데이터 최소화 및 자세 값 자체가 담고 있는 정보가 적고 장기간 안정적으로 유지된다는 사실에 의해 완화됩니다.

10.2 대응 전략

10.2.1 데이터 최소화

API는 "자세"라는 고수준 추상화만 노출하며, "continuous" 또는 "folded" 중 하나입니다. 다양한 자세를 지원하지 않는 디바이스는 기본적으로 "continuous"로 설정됩니다. 즉, 핑거프린트에 최대 1비트의 엔트로피만 더해집니다. 또한 이 1비트가 노출되려면 사용자가 디바이스의 물리적 자세를 명확하고 큰 동작으로 바꿔야만 합니다.

구현은 다양한 저수준 정보를 활용해 가장 적합한 고수준 자세를 결정할 수 있지만, 저수준 세부 정보는 이 API를 통해 노출되지 않습니다. 또한 어떤 세밀한 센서 값도 고수준 자세 상태에 1:1로 매핑되지 않습니다. 구현은 경첩 각도 센서, 다른 센서, 키보드 결합 여부, 킥스탠드 펼침 여부, 또는 이들의 조합 등을 활용해 폼 팩터에 맞는 가장 적합한 자세를 결정할 수 있습니다. 이러한 추상화 덕분에 필요한 최소 정보만 노출되어 데이터 최소화 원칙을 준수하게 됩니다.

10.2.2 사용자 주의

자세 값 변경 이벤트는 활성 documentvisibility state가 "visible"일 때만 발송됩니다(디바이스 자세 변경 단계 참고). 이 상태가 아닐 때 값을 폴링하면 오래된 값이 반환되며, 값은 "visible" 상태거나 "visible"로 변경될 때만 갱신됩니다.

10.2.3 사용자 중재 행동

자세 변경에는 사용자의 명확하고 큰 물리적 행동이 요구됩니다. "큰"이란 자세 값 표에 따라 구현자 정의 임계값을 넘어야 하며, "명확하다"는 것은 OS가 자세 변화에 맞게 적절히 반응하고 사용자의 기대에 부합하는 결과가 나타나야 한다는 뜻입니다.

11. 접근성 고려사항

Device Posture API의 주요 목적은 사용자 경험 향상입니다. API를 기반으로 하는 애플리케이션이 접근성에 긍정적 영향을 줄 수 있는 방법은 세 가지입니다.
  1. 접힘/경첩 영역에 콘텐츠(특히 버튼)를 배치하지 않는 애플리케이션 설계. 이 영역은 곡률 때문에 손가락으로 정확히 터치하거나 아예 터치할 수 없는 경우가 많으므로 상호작용이 어렵습니다.
  2. 접힌 디바이스에서 접힘/경첩 영역에 크고 연속적인 콘텐츠(예: 비디오, 이미지)를 걸쳐 배치하지 않는 설계. 이 영역은 콘텐츠와 색상을 약간 왜곡시킵니다.
  3. 화면 공간을 더 효율적으로 활용하기 위해 UI를 분할하여(각 화면 영역에 콘텐츠를 나누어 배치) 차별화된 강력한 인터페이스를 제공하는 설계.
이 API를 사용할 때는 접근성 관점에서 위의 기회들을 고려해야 합니다. 구체적 예시는 다음과 같습니다:

12. 자동화

Device Posture API는 테스트 작성자에게 도전 과제를 제시합니다. 인터페이스를 완전히 테스트하려면 실제 하드웨어 디바이스가 필요하기 때문입니다. 이를 해결하기 위해 본 문서는 [WEBDRIVER2] 확장 명령어를 정의하여 사용자가 보고되는 디바이스 자세를 제어하고 실제 디바이스를 시뮬레이션할 수 있도록 합니다.

아래 확장 명령어8. 알고리즘과의 통합을 지원하기 위해, 최상위 탐색 가능 객체에는 다음과 같은 내부 슬롯이 필요합니다:

내부 슬롯 설명
[[PostureOverride]] 하드웨어가 제공하는 현재 자세를 재정의합니다. 가능한 값:
  • "continuous"
  • "folded"
  • null: 재정의하지 않음. 하드웨어가 제공하는 값을 사용함.
이 값들은 스크립트에 직접 노출되지 않습니다.

12.1 확장 명령어

12.1.1 디바이스 자세 설정

HTTP 메서드 URI 템플릿
POST /session/{session id}/deviceposture

확장 명령어는 디바이스 자세를 특정 DevicePostureType로 변경합니다.

이 알고리즘에서 사용하는 parameters 인자의 속성
파라미터 이름 값 타입 필수 여부
posture 문자열

remote end steps는 다음과 같습니다:

  1. postureget a property "posture" from parameters로 얻는다.
  2. 만약 posture문자열이 아니면, errorWebDriver error code invalid argument와 함께 반환한다.
  3. posture가 "continuous" 또는 "folded"가 아니면, errorWebDriver error code invalid argument와 함께 반환한다.
  4. topLevelTraversablecurrent browsing context최상위 탐색 가능 객체로 한다.
  5. topLevelTraversable.[[PostureOverride]]posture로 설정한다.
  6. documenttopLevelTraversable활성 document로 한다.
  7. 디바이스 자세 변경 단계document로 실행한다.
  8. success를 data null과 함께 반환한다.

12.1.2 디바이스 자세 초기화

HTTP 메서드 URI 템플릿
DELETE /session/{session id}/deviceposture

확장 명령어는 디바이스 자세 오버라이드를 제거하고, 디바이스 자세 제어를 하드웨어로 되돌립니다.

remote end steps는 다음과 같습니다:

  1. topLevelTraversablecurrent browsing context최상위 탐색 가능 객체로 한다.
  2. 만약 topLevelTraversable. [[PostureOverride]]null이면, success를 data null과 함께 반환한다.
  3. topLevelTraversable.[[PostureOverride]]null로 설정한다.
  4. documenttopLevelTraversable활성 document로 한다.
  5. 디바이스 자세 변경 단계document로 실행한다.
  6. success를 data null과 함께 반환한다.

13. 예시

이 섹션은 규범적이지 않습니다.

13.1 예시 1: 자세 데이터

이것은 자세를 콘솔에 출력하는 간단한 사용 예입니다.

예시 1: 자세 변화에 반응하기
navigator.devicePosture.addEventListener("change", () => {
  console.log(`현재 자세는: ${navigator.devicePosture.type}!`);
})

13.2 예시 2: device-posture

디바이스가 영상통화 웹 서비스에 사용되고 있습니다. 표면에 올려놓으면 노트북 자세로 접혀 핸즈프리 경험을 할 수 있습니다. UA가 자세를 감지하여 UI를 개선합니다. 모든 자세에 맞춰 콘텐츠를 적응시키는 유사 예시도 작성할 수 있습니다. 다른 주요 시나리오는 설명서를 참고하세요.

device-posture 미디어 기능과 viewport segment 미디어 기능을 사용하는 영상통화 웹 서비스의 예시 그림
예시 2: 자세에 맞게 UI 적응
@media (device-posture: folded) and (vertical-viewport-segments: 2) {
  body {
    display: flex;
    flex-flow: column nowrap;
  }

  .videocall-area, .videocall-controls  {
    flex: 1 1 env(viewport-segment-bottom 0 0);
  }
}

13.3 예시 3: device-posture 미디어 기능 감지

유효한 device-posture 값 중 하나는 항상 true가 되므로, 다음 코드로 미디어 기능 지원 여부를 감지할 수 있습니다:

예시 3: device-posture 기능 감지
@media (device-posture) {
  /*브라우저가 device-posture 기능을 지원함*/
}
boolean 컨텍스트에서 미디어 기능에 대한 자세한 내용은 Boolean 컨텍스트에서 미디어 기능 평가를 참고하세요.

14. 준수성

규범적이지 않은 섹션뿐만 아니라, 본 명세서의 모든 작성 지침, 다이어그램, 예시, 참고사항은 모두 규범적이지 않습니다. 그 외의 모든 내용은 규범적입니다.

이 문서에서 MUSTSHOULD라는 키워드는 BCP 14 [RFC2119] [RFC8174] 에 설명된 대로, 그리고 오직 이 문서에서처럼 대문자로 표시된 경우에만 해석합니다.

이 명세는 하나의 제품에 대한 준수 기준을 정의합니다: 이 명세서가 포함하는 인터페이스를 구현하는 사용자 에이전트.

A. IDL 색인

WebIDL[SecureContext, Exposed=(Window)]
partial interface Navigator {
  [SameObject] readonly attribute DevicePosture devicePosture;
};

[SecureContext, Exposed=(Window)]
interface DevicePosture : EventTarget {
  readonly attribute DevicePostureType type;
  attribute EventHandler onchange;
};

enum DevicePostureType {
  "continuous",
  "folded"      
};

B. 감사의 글

이 섹션은 규범적이지 않습니다.

Daniel Appelquist, Jo Balletti, Michael Blix, Paul Grenier, Laura Morinigo님께 본 작업에 기여해주신 점 진심으로 감사드립니다.

C. 주요 변경 요약

이 섹션은 규범적이지 않습니다.

D. 참고 문헌

D.1 규범적 참고 문헌

[dom]
DOM 현행 표준. Anne van Kesteren. WHATWG. 현행 표준. URL: https://dom.spec.whatwg.org/
[HTML]
HTML 현행 표준. Anne van Kesteren; Domenic Denicola; Dominic Farolino; Ian Hickson; Philip Jägenstedt; Simon Pieters. WHATWG. 현행 표준. URL: https://html.spec.whatwg.org/multipage/
[infra]
Infra 현행 표준. Anne van Kesteren; Domenic Denicola. WHATWG. 현행 표준. URL: https://infra.spec.whatwg.org/
[MEDIAQ]
Media Queries Level 4. Florian Rivoal; Tab Atkins Jr.. W3C. 2021년 12월 25일. W3C 후보 권고안. URL: https://www.w3.org/TR/mediaqueries-4/
[RFC2119]
RFC에서 요구 수준을 나타내는 키워드 사용. S. Bradner. IETF. 1997년 3월. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc2119
[RFC8174]
RFC 2119 키워드 대문자/소문자 모호성. B. Leiba. IETF. 2017년 5월. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc8174
[SCREEN-ORIENTATION]
Screen Orientation. Marcos Caceres. W3C. 2023년 8월 9일. W3C 작업 초안. URL: https://www.w3.org/TR/screen-orientation/
[WEBDRIVER2]
WebDriver. Simon Stewart; David Burns. W3C. 2024년 10월 9일. W3C 작업 초안. URL: https://www.w3.org/TR/webdriver2/
[webidl]
Web IDL 현행 표준. Edgar Chen; Timothy Gu. WHATWG. 현행 표준. URL: https://webidl.spec.whatwg.org/

D.2 참고용 참고 문헌

[clreq]
중국어 텍스트 레이아웃 요구사항 - 中文排版需求. Fuqiao Xue; Richard Ishida. W3C. 2024년 7월 1일. W3C 작업 그룹 노트. URL: https://www.w3.org/TR/clreq/
[jlreq]
일본어 텍스트 레이아웃 요구사항 日本語組版処理の要件(일본어판). Hiroyuki Chiba; Junzaburo Edamoto; Richard Ishida; Seiichi Kato; Tatsuo KOBAYASHI; Toshi Kobayashi; Nathaniel McCully; Felix Sasaki; Atsushi Shimono; Hajime Shiozawa; Fuqiao Xue et al. W3C. 2020년 8월 11일. W3C 작업 그룹 노트. URL: https://www.w3.org/TR/jlreq/
[klreq]
한글 텍스트 레이아웃 및 타이포그래피를 위한 요구사항. Richard Ishida. W3C. 2020년 5월 27일. W3C 작업 그룹 노트. URL: https://www.w3.org/TR/klreq/