디바이스 메모리 API

W3C 워킹 드래프트,

이 문서에 대한 자세한 정보
현재 버전:
https://www.w3.org/TR/2026/WD-device-memory-1-20260119/
최신 공개 버전:
https://www.w3.org/TR/device-memory/
에디터스 드래프트:
https://www.w3.org/TR/device-memory/
이전 버전:
히스토리:
https://www.w3.org/standards/history/device-memory-1/
피드백:
GitHub
에디터:
(Google)
(Microsoft)
이전 에디터:
Shubhie Panicker (Google)

개요

이 문서는 웹 앱이 디바이스의 메모리(RAM) 상황에 따라 콘텐츠를 맞춤화할 수 있도록, 메모리와 관련된 디바이스 성능 정보를 제공하는 HTTP Client Hint 헤더와 자바스크립트 API를 정의합니다.

이 문서의 상태

이 섹션은 문서가 발행되는 시점에서의 상태를 설명합니다. 현재 W3C 발행물 목록과 이 기술 보고서의 최신 개정본은 W3C 표준 및 드래프트 색인에서 확인할 수 있습니다.

이 문서는 Web Performance Working Group에서 워킹 드래프트Recommendation track 방식을 사용해 발행되었습니다. 워킹 드래프트로의 발행은 W3C와 그 회원들의 지지를 의미하지 않습니다.

이 문서는 초안이며 언제든지 업데이트, 교체, 또는 폐기될 수 있습니다. 이 문서를 진행 중인 작업 외의 용도로 인용하는 것은 부적절합니다.

GitHub Issues에서 명세에 대한 논의가 권장됩니다.

이 문서는 2025년 8월 18일 W3C 프로세스 문서의 규정을 따릅니다.

이 문서는 W3C 특허 정책에 따라 운영되는 그룹에서 작성되었습니다. W3C는 그룹의 산출물과 관련된 공개 특허 공개 목록을 유지하며, 해당 페이지에는 특허 공개 방법에 대한 안내도 포함되어 있습니다. 어떤 개인이 필수 특허 청구가 있다고 믿는 특허에 대해 실제 지식을 가질 경우, W3C 특허 정책 6절에 따라 그 정보를 공개해야 합니다.

1. 소개

개발자들은 다음을 위한 디바이스 클래스 신호가 필요합니다:
  1. 저사양 디바이스에 대해 사이트 또는 특정 컴포넌트의 경량 버전을 서비스. 예시:

    • Google "search lite" (EM에서 사용되는 10KB 검색 결과 페이지) 서비스.

    • Facebook에서 영상 플레이어의 경량 버전 서비스.

    • Google Maps에서 경량 타일 이미지를 서비스.

  2. 메트릭 정규화: 분석용 툴에서 디바이스 클래스에 따라 메트릭을 정규화할 수 있어야 합니다. 예를 들어, 고사양 디바이스에서 100ms 길이의 작업이 발생하면 저사양 디바이스에서의 같은 작업보다 더 심각한 문제임을 의미합니다.

디바이스 메모리는 “디바이스 클래스”를 결정하는 데 매우 유용한 신호입니다. 저메모리 디바이스 (512MB 미만, 512MB~1GB)는 신흥 시장에서 널리 사용됩니다.

1.1. 사용 예시

서버는 Sec-CH-Device-Memory HTTP Client Hint를 받기 위해 Accept-CH 헤더 필드 또는 동등한 HTML meta 요소(http-equiv 속성 사용)를 적용합니다:
Accept-CH: Sec-CH-Device-Memory

위 선호값을 서버로부터 수신하면, 호환되는 사용자 에이전트는 Sec-CH-Device-Memory 요청 헤더 필드를 통해 메모리 관련 디바이스 성능을 알립니다:

GET /example HTTP/1.1
Sec-CH-Device-Memory: 0.5
...

2. Sec-CH-Device-Memory (Client Hint) 헤더 필드

Sec-CH-Device-Memory 헤더 필드는 HTTP Client Hint 헤더입니다. 구조화된 헤더 값 형식이며, 값은 item이며 decimal로서 클라이언트의 디바이스 메모리(RAM 대략값, GiB 단위)를 나타냅니다.

Sec-CH-Device-Memory 헤더 필드의 ABNF(확장 백우스-나우르 형식) 구문은 다음과 같습니다:

Sec-CH-Device-Memory = sf-decimal

2.1. 디바이스 메모리 값 계산하기

값 계산은 실제 디바이스 메모리(MiB 기준)를 가장 가까운 값(가장 큰 비트만 1, 나머지 0: 2의 거듭제곱)으로 반올림한 뒤, 그 수를 1024.0으로 나누어 GiB 단위로 변환해 산출합니다.

값 목록에는 상한과 하한을 설정해야 합니다. 상한과 하한 사이의 범위는 대부분의 장치 메모리 값을 포함하되, 드문 장치 메모리 값은 제외하여 디바이스 핑거프린팅을 완화해야 합니다.

참고: 구현체는 상한과 하한을 설정하고, 시간이 지남에 따라 이를 동적으로 조정할 수 있습니다. 이러한 값들은 장치 유형에 따라 다를 수도 있습니다.

만약 Sec-CH-Device-Memory 헤더 필드가 메시지에 두 번 이상 나타나면, 마지막 값이 앞선 모든 값을 덮어씁니다.

2.2. 예시

512MiB는 다음과 같이 보고됩니다:

Sec-CH-Device-Memory: 0.5

1000MiB는 다음과 같이 보고됩니다:

Sec-CH-Device-Memory: 1

3. 디바이스 메모리 JS API

[
    SecureContext,
    Exposed=(Window,Worker)
] interface mixin NavigatorDeviceMemory {
    readonly attribute double deviceMemory;
};

Navigator includes NavigatorDeviceMemory;
WorkerNavigator includes NavigatorDeviceMemory;

참고: self.navigator.deviceMemory§ 2.1 디바이스 메모리 값 계산하기에 설명된 바와 같이 GiB 단위 RAM 용량을 반환합니다.

4. 보안 고려사항

Sec-CH-Device-Memory Client Hint 헤더와 JS API는 HTTPS 보안 컨텍스트에서만 사용 가능합니다.

광고된 User-Agent 및 기타 클라이언트 특성 기반으로 하는 디바이스 식별 및 분류(예: 디바이스 타입/클래스)는 최적화된 콘텐츠 제공에 흔히 사용됩니다. 이런 솔루션은 주로 상용 디바이스 DB를 활용하는데, 이는 비용이 크고 통합과 유지가 어렵습니다. 본 명세는 이런 기술적 문제를 해결할 디바이스 메모리 성능 기제(mechanism)를 정의합니다.

핑거프린팅 위험 감소를 위해, 보고 값은 한 개의 가장 큰 비트로 반올림되며, 정확값이 보고되지 않습니다. 또한 값 범위의 상한과 하한이 지정됩니다.

5. IANA 고려사항

본 문서는 Sec-CH-Device-Memory HTTP 요청 헤더 필드를 정의하고, 이를 영구 메시지 헤더 필드 레지스트리([RFC3864])에 등록합니다.

5.1. Sec-CH-Device-Memory 헤더 필드

헤더 필드명

Sec-CH-Device-Memory

적용 프로토콜

http

상태

standard

작성자/변경 관리자

IETF

명세 문서

이 명세서 (§ 2 Sec-CH-Device-Memory (Client Hint) 헤더 필드)

6. 감사의 글

이 명세의 개선에 기여한 모든 기여자분께 특별히 감사드립니다.

적합성

문서 관례

적합성 요구사항은 설명적 단언과 RFC 2119 용어를 조합해 서술됩니다. 규범 파트에서 “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, “OPTIONAL” 같은 주요 키워드는 RFC 2119에서 설명한 대로 해석해야 합니다. 다만, 가독성을 위해 이 단어들은 명세서에서 모두 대문자로 표기하지는 않습니다.

명세의 모든 텍스트는 명백히 비규범적임을 표시한 섹션, 예시, 참고를 제외하고 규범적입니다. [RFC2119]

이 명세의 예시는 “for example”로 소개하거나, class="example"로 규범 텍스트와 분리되어 안내합니다:

이것은 참고용 예시입니다.

참고용 노트는 “참고”로 시작하여, class="note"로 규범 텍스트와 구분합니다:

참고, 이것은 참고용 노트입니다.

호환 알고리즘

알고리즘에서 명령형 서술("선행 공백 문자 모두 제거"나 "false를 반환하고 이 단계 중단" 등)은, 해당 알고리즘의 도입부에서 사용된 키워드("must", "should", "may" 등) 의미대로 해석해야 합니다.

알고리즘 또는 구체 단계로 표기된 적합성 요구사항은 어떠한 방식으로 구현해도 결과가 동일하기만 하면 됩니다. 이 명세서의 알고리즘은 이해하기 쉽게 작성된 것이며 성능을 목적으로 하진 않았습니다. 구현자는 다양한 수준에서 최적화를 권장합니다.

색인

이 명세에서 정의된 용어

참조로 정의된 용어

참고문헌

규범 참고문헌

[HTML]
Anne van Kesteren; et al. HTML Standard. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[RFC8941]
M. Nottingham; P-H. Kamp. Structured Field Values for HTTP. February 2021. Proposed Standard. URL: https://httpwg.org/specs/rfc8941.html
[RFC8942]
I. Grigorik; Y. Weiss. HTTP Client Hints. February 2021. Experimental. URL: https://www.rfc-editor.org/rfc/rfc8942
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL Standard. Living Standard. URL: https://webidl.spec.whatwg.org/

참고용 문헌

[RFC3864]
G. Klyne; M. Nottingham; J. Mogul. Registration Procedures for Message Header Fields. September 2004. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc3864

IDL 색인

[
    SecureContext,
    Exposed=(Window,Worker)
] interface mixin NavigatorDeviceMemory {
    readonly attribute double deviceMemory;
};

Navigator includes NavigatorDeviceMemory;
WorkerNavigator includes NavigatorDeviceMemory;