Copyright © 2026 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
이 문서는 웹 애플리케이션이 화면 절전 방지 잠금을 요청할 수 있도록 하는 API를 규정합니다. 적절한 조건에서 허용되는 경우, 화면 절전 방지 잠금은 시스템이 기기의 화면을 끄는 것을 방지합니다.
이 절에서는 이 문서가 발행된 시점의 상태를 설명합니다. 현재 W3C 발행물 목록과 이 기술 보고서의 최신 개정판은 다음의 W3C 표준 및 초안 색인에서 확인할 수 있습니다.
구현자는 이 명세가 매우 불안정하다는 점을 인지해야 합니다. 논의에 참여하지 않는 구현자는 명세가 자신도 모르는 사이에 호환되지 않는 방식으로 변경되는 것을 보게 될 것입니다. 이 명세가 최종적으로 후보 권고안 단계에 도달하기 전에 이를 구현하는 데 관심이 있는 공급업체는 GitHub의 저장소를 구독하고 논의에 참여해야 합니다.
이 문서는 장치 및 센서 작업 그룹과 웹 애플리케이션 작업 그룹이 권고안 트랙을 사용하여 작업 초안으로 발행했습니다.
작업 초안으로의 발행이 W3C와 그 회원의 승인을 의미하지는 않습니다.
이 문서는 초안이며 언제든지 다른 문서에 의해 갱신되거나, 대체되거나, 폐기될 수 있습니다. 이 문서를 진행 중인 작업 이외의 것으로 인용하는 것은 적절하지 않습니다.
이 문서는 W3C 특허 정책에 따라 운영되는 그룹에서 작성되었습니다. W3C는 각 그룹의 산출물과 관련하여 이루어진 특허 공개의 공개 목록 (장치 및 센서 작업 그룹)과 특허 공개의 공개 목록 (웹 애플리케이션 작업 그룹)을 유지하고 있으며, 이 페이지에는 특허 공개 방법에 대한 지침도 포함되어 있습니다. 개인이 필수 청구항을 포함한다고 자신이 믿는 특허에 대해 실제로 알고 있는 경우에는 W3C 특허 정책 제6절에 따라 해당 정보를 공개해야 합니다.
이 문서는 2025년 8월 18일 W3C 프로세스 문서의 적용을 받습니다.
이 절은 비규범적입니다.
최신 운영 체제는 적극적인 전원 관리를 구현하여 배터리 수명을 늘립니다. 이는 사용자 활동이 없어진 직후 호스트 장치가 화면 밝기를 낮추거나 화면을 끄고, CPU까지 초저전력 상태로 전환하여 전력 사용을 최대한 제한할 수 있음을 의미합니다.
이는 배터리 수명을 늘리는 데 매우 유용하지만, 때로는 바코드 스캔, 전자책 읽기, 조리법 따라 하기, 청중을 대상으로 한 발표 등의 사용 사례를 방해할 수 있습니다. 다음 문서도 참고하세요: 깨우기 잠금: 사용 사례.
깨우기 잠금은 일반적으로 특정 동작의 발생을 방지하지만, 사용자 에이전트는 (그리고 기반 OS는) 배터리 상태(외부 전원 연결, 방전 중, 배터리 잔량 부족)에 따라 깨우기 잠금의 지속 시간을 제한하거나, 절전 모드가 활성화된 경우 깨우기 잠금을 허용하지 않을 수도 있습니다.
이 명세는 다음과 같은 깨우기 잠금 유형을 정의합니다:
API에서 깨우기 잠금 유형은
WakeLockType 열거형 값으로 표현됩니다.
다른 명세에서 다른 깨우기 잠금 유형을 정의할 수도 있습니다.
화면 깨우기 잠금 API는 정책으로 제어되는 기능을 정의하며,
이 기능은 문자열 "screen-wake-lock"으로 식별됩니다. 이 기능의 기본 허용 목록은
'self'입니다.
[PERMISSIONS] API는 웹사이트가 사용자에게 권한을 요청하고 보유한 권한을 조회할 수 있는 일관된 방법을 제공합니다.
사용자
에이전트는 깨우기 잠금을 거부할 수 있으며,
그 대상은
특정 깨우기 잠금 유형과 특정 Document입니다. 거부 사유는
플랫폼 설정이나 사용자 선호도 등 구현에 따라
달라질 수 있습니다.
사용자 에이전트에는 다음과 같은 방해되지 않는 알림을 표시할 것이 권장됩니다: 깨우기 잠금이 활성 상태일 때 이를 사용자에게 알리고, 사용자가 진행 중인 작업을 차단하거나, 단순히 알림을 닫을 수 있는 수단을 제공하는 알림입니다.
"screen-wake-lock" 강력한 기능은 이 명세에서
정의하는 기능을 활성화합니다.
"screen-wake-lock" 강력한 기능은 권한 철회
알고리즘을 정의합니다. 화면
깨우기 잠금 권한 철회 알고리즘을 호출하려면 다음 단계를 실행합니다:
[[ActiveLocks]]["screen"]으로 합니다.
작업 소스 중 이 명세에 언급된 작업에 사용되는 것은 화면 깨우기 잠금 작업 소스입니다.
플랫폼 깨우기 잠금이라는 용어는 사용자 에이전트가 상태를 조회하고 깨우기 잠금을 획득하거나 해제하기 위해 상호 작용하는 플랫폼 인터페이스를 가리킵니다.
플랫폼 깨우기 잠금은 기반 플랫폼에서 (예: 네이티브 깨우기 잠금 프레임워크에서) 정의하거나, 하드웨어를 직접 제어할 수 있는 경우 사용자 에이전트에서 정의할 수 있습니다.
| 내부 슬롯 | 초깃값 | 설명 |
|---|---|---|
| [[ActiveLocks]] | 순서 있는 맵으로, 깨우기 잠금 유형을 빈 목록에 대응시킵니다. |
순서 있는 맵으로, 깨우기 잠금
유형을 다음
목록에 대응시킵니다: WakeLockSentinel 객체의 목록이며,
이 객체들은
이 Document와 연결됩니다.
|
WakeLock 인터페이스를 통해 문서는 화면 깨우기 잠금을 획득할
수 있습니다.
WebIDL[SecureContext, Exposed=(Window)]
interface WakeLock {
Promise<WakeLockSentinel> request(optional WakeLockType type = "screen");
};
request(type) 메서드의 단계는 다음과 같습니다:
NotAllowedError" DOMException.
screen-wake-lock"이면, 다음 값으로 거부된 프로미스를 반환합니다: "NotAllowedError" DOMException.
NotAllowedError" DOMException.
hidden"이면, 다음 값으로 거부된 프로미스를 반환합니다: "NotAllowedError" DOMException.
screen-wake-lock"입니다.
denied"이면:
NotAllowedError"
DOMException으로
거부하는 것입니다.
NotAllowedError"
DOMException으로
거부합니다.
hidden"이면:
NotAllowedError"
DOMException으로
거부합니다.
[[ActiveLocks]]["screen"]이
비어 있으면, 다음
단계들을 병렬로
실행합니다:
WakeLockSentinel
객체로 하며, 이 객체의 type 속성은
type으로 설정합니다.
[[ActiveLocks]]["screen"].
WebIDL[SecureContext, Exposed=(Window)]
interface WakeLockSentinel : EventTarget {
readonly attribute boolean released;
readonly attribute WakeLockType type;
Promise<undefined> release();
attribute EventHandler onrelease;
};
WakeLockSentinel 객체는 플랫폼 깨우기
잠금에 대한 핸들을 제공하며, 수동으로 해제되거나
기반 플랫폼 깨우기 잠금이 해제될 때까지 이를 유지합니다. 이 객체가
존재하면 플랫폼 깨우기 잠금은 해당 깨우기 잠금
유형에 대해 활성 상태로 유지되며, 모든 WakeLockSentinel 인스턴스를
특정 깨우기 잠금 유형에 대해 해제하면 기반 플랫폼 깨우기
잠금이 해제됩니다.
WakeLockSentinel 인스턴스는
다음
내부
슬롯을 갖도록 생성됩니다:
| 내부 슬롯 | 초깃값 | 설명 (비규범적) |
|---|---|---|
| [[Released]] |
false
|
주어진 WakeLockSentinel의 해제 여부입니다.
|
released getter의 단계는
this.[[Released]]를
반환하는 것입니다.
release() 메서드의 단계는
다음과 같습니다:
[[Released]]가 false이면,
깨우기 잠금 해제를 실행합니다. 이때 lock는
this로 설정하고, type은
다음 속성의 값으로 설정합니다:
this의 type 속성.
undefined.
onrelease 속성은 이벤트 핸들러
IDL 속성으로서 "onrelease" 이벤트
핸들러에 대응하며, 이 핸들러의 이벤트 핸들러 이벤트 유형은
"release"입니다.
이 속성은 주어진 WakeLockSentinel
객체의 핸들이 해제되었음을 스크립트에 알리는 데 사용됩니다. 해제 사유는
release() 메서드가
호출되었거나,
깨우기 잠금을 사용자 에이전트가 해제했기 때문입니다.
WakeLockSentinel 객체에
하나 이상의 이벤트 리스너가
""에 대해 등록되어 있고,
releaseWakeLockSentinel 객체가 아직
해제되지 않았다면, 반드시
강한 참조가 있어야 하며, 그 출발점은 Window 객체로서
WakeLockSentinel 객체의 생성자가
호출된 객체이고, 참조의 대상은
WakeLockSentinel 객체 자체여야 합니다.
WakeLockSentinel 객체가 큐에 추가한 작업이
화면 깨우기 잠금 작업 소스에 있는 동안, 반드시 강한 참조가 있어야 하며,
그 출발점은 Window 객체로서 WakeLockSentinel 객체의
생성자가 호출된 객체이고, 참조의 대상은 해당 WakeLockSentinel 객체여야 합니다.
깨우기 잠금 유형을 설명하기 위해, 이 명세는 다음 열거형을 정의하여 깨우기 잠금 유형을 나타냅니다:
WebIDLenum WakeLockType { "screen" };
screen
이 절은 각 깨우기 잠금 유형에 동등하고 독립적으로 적용됩니다. 단, 특정 깨우기 잠금 유형을 명시적으로 언급한 경우는 예외입니다.
사용자 에이전트는 깨우기 잠금을 획득할 때 기반 운영 체제에 잠금을 적용하도록 요청합니다. 기반 운영 체제에 대한 요청이 반환할 수 있는 값은 확인하지 않습니다. 즉, 사용자 에이전트는 반드시 깨우기 잠금 획득을 권고 사항일 뿐인 것으로 취급해야 합니다.
반대로, 사용자 에이전트는 깨우기 잠금을 해제할 때 기반 운영 체제에 깨우기 잠금을 더 이상 적용하지 않도록 요청합니다. 잠금은 운영 체제에 대한 요청이 성공한 경우에만 해제된 것으로 간주합니다.
깨우기 잠금의 적용 가능 여부는 운영 체제의 상태가 잠금 적용을 허용하는지에 따라 결정됩니다(예: 배터리 충전량이 충분한 경우).
화면 깨우기 잠금은 절대로 적용 가능한 상태여서는 안 됩니다. 그 기간은 사용자가 수동으로 화면을 끈 후 화면을 다시 켤 때까지입니다.
사용자 에이전트는 언제든지 깨우기 잠금을 해제할 수 있습니다. 예를 들어, 다음과 같은 경우입니다:
Document인 document가 더 이상
완전 활성 상태가 아니게 되면, 사용자 에이전트는 다음
단계를 실행해야 합니다:
[[ActiveLocks]]["screen"]:
이 명세는 다음 페이지 가시성 변경 단계를 정의하며, 가시성 상태 state와 document를 받습니다:
hidden"이 아니면, 이 단계들을 중단합니다.
[[ActiveLocks]]["screen"]:
깨우기 잠금 획득을 주어진 type에 대해 수행하려면, 다음 단계를 실행합니다:
깨우기 잠금 해제를 주어진 document, lock 및 type에 대해 수행하려면, 다음 단계를 실행합니다:
[[ActiveLocks]][type]이
lock를 포함하지 않으면, 이 단계들을 중단합니다.
[[ActiveLocks]][type]에서 제거합니다.
[[ActiveLocks]][type]이 비어 있으면, 다음 단계를 병렬로 실행합니다:
true로,
그렇지 않으면 false로 합니다.
true이고 type이 "screen"이면 다음을
실행합니다:
[[Released]]를 true로 설정합니다.
release"이고 대상은 lock입니다.
화면 깨우기 잠금은 다양한 장치 구성 요소 - 특히 디스플레이 - 가 평소보다 더 높은 전력 수준으로 작동하게 할 수 있습니다. 이는 장치의 자동 잠금을 방해하거나 배터리를 더 빠르게 소모하는 등 바람직하지 않은 영향을 줄 수 있습니다. 더 빠른 배터리 소모는 모바일 장치에서 특히 우려되는 문제입니다. 모바일 장치는 고정된 전원을 즉시 이용할 수 없는 경우가 많기 때문입니다. 예상치 못한 시점에 배터리가 완전히 소모되면 사용자가 전화를 걸거나 받지 못하고 네트워크 서비스를 이용하지 못할 수 있으며, 여기에는 긴급 통화 서비스도 포함됩니다.
구현체에는 화면 깨우기 잠금 요청을 무시하는 것이 허용됩니다. 예를 들어, 배터리 잔량이 부족하거나 사용자가 장치를 절전 모드로 설정한 경우입니다.
사용자 에이전트에는 UI나 표시기를 제공할 것이 권장됩니다. 이를 통해 사용자는 화면 깨우기 잠금이 활성 상태임을 알 수 있습니다. 이러한 UI를 제공하면 최종 사용자가 특정 웹 애플리케이션이 장치의 에너지 사용에 부정적인 영향을 주는지 파악하고, 원한다면 조치를 취할 수 있습니다.
이 절은 비규범적입니다.
function tryKeepScreenAlive(minutes) {
navigator.wakeLock.request("screen").then(lock => {
setTimeout(() => lock.release(), minutes * 60 * 1000);
});
}
tryKeepScreenAlive(10);
이 예제에서는 사용자가 체크박스를 클릭하여 화면 깨우기 잠금을 요청할 수 있으며, 깨우기 잠금의 상태가 바뀌면 체크박스의 선택 상태를 갱신합니다:
const checkbox = document.createElement("input");
checkbox.setAttribute("type", "checkbox");
document.body.appendChild(checkbox);
const sentinel = await navigator.wakeLock.request("screen");
checkbox.checked = !sentinel.released;
sentinel.onrelease = () => checkbox.checked = !sentinel.released;
이 예제에서는 서로 다른 두 깨우기 잠금 요청을 생성하고 독립적으로 해제합니다:
let lock1 = await navigator.wakeLock.request("screen");
let lock2 = await navigator.wakeLock.request("screen");
lock1.release();
lock2.release();
비규범적으로 표시된 절뿐만 아니라, 이 명세의 모든 작성 지침, 다이어그램, 예제 및 참고 사항도 비규범적입니다. 이 명세의 나머지 모든 내용은 규범적입니다.
이 문서의 핵심 단어 MAY, MUST, MUST NOT 및 RECOMMENDED는 다음 문서에 설명된 대로 해석해야 합니다: BCP 14 [RFC2119] [RFC8174]. 이는 여기 표시된 것처럼 모두 대문자로 표기된 경우에만 적용됩니다.
이 명세는 단일 제품에 대한 적합성 기준을 정의하며, 그 제품은 사용자 에이전트로서 이 명세에 포함된 인터페이스를 구현합니다.
이 절은 비규범적입니다.
이 작업에 기여해 주신 Mounir Lamouri, Sergey Konstantinov, Matvey Larionov, Dominique Hazael-Massieux, Domenic Denicola, Thomas Steiner, Anne van Kesteren께 진심으로 감사드립니다.
이 절은 비규범적입니다.
이 절은 이전 발행본 이후의 변경 사항을 기록합니다.
WakeLock.request()에 추가하여
숨겨진 문서를 처리하도록 했습니다.
ScreenWakeLock을 생성 가능하게 했습니다.
WakeLockSentinel.released를 추가했습니다.
[[ActiveLocks]] 내부 슬롯의 소속:
Document
§6.1
onrelease 속성의
소속: WakeLockSentinel
§9.5
release() 메서드의 소속:
WakeLockSentinel
§9.4
released 속성의 소속:
WakeLockSentinel
§9.2
[[Released]] 내부 슬롯의 소속:
WakeLockSentinel
§9.1
request() 메서드의 소속:
WakeLock
§8.1
"screen" 열거형 값의 소속:
WakeLockType
§10.
type 속성의 소속:
WakeLockSentinel
§9.3
wakeLock 속성의 소속:
Navigator
§7.
WakeLock 인터페이스
§8.
WakeLockSentinel 인터페이스
§9.
WakeLockType 열거형
§10.
Document 인터페이스
EventTarget 인터페이스
EventHandler
Document에 대해)
Document에 대해)
Window
인터페이스
list에 대해)
list에 대해)
list에 대해)
denied (PermissionState에 대해)
boolean
타입
DOMException 인터페이스
[Exposed] 확장 속성
NotAllowedError 예외
Promise 인터페이스
[SameObject] 확장 속성
[SecureContext] 확장 속성
undefined 타입
WebIDL[SecureContext]
partial interface Navigator {
[SameObject] readonly attribute WakeLock wakeLock;
};
[SecureContext, Exposed=(Window)]
interface WakeLock {
Promise<WakeLockSentinel> request(optional WakeLockType type = "screen");
};
[SecureContext, Exposed=(Window)]
interface WakeLockSentinel : EventTarget {
readonly attribute boolean released;
readonly attribute WakeLockType type;
Promise<undefined> release();
attribute EventHandler onrelease;
};
enum WakeLockType { "screen" };
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: