Storage Standard는 영구 스토리지 및 할당량 추정치를 위한 API와 플랫폼 스토리지 아키텍처를 정의합니다. 메모리 압력이 높은 경우 영구 스토리지 제거를 더 잘 예측할 수 있도록 하는 API가 출시됩니다. Chromium 122부터 사용할 수 있습니다.
스토리지 표준으로 해결할 수 있는 문제는 무엇인가요?
일반적으로 사용자 기기의 저장공간이 부족하면 IndexedDB 또는 localStorage
와 같은 API에 저장된 데이터는 사용자가 개입할 수 없으면 손실됩니다. 스토리지를 영구적으로 만드는 방법은 StorageManager
인터페이스의 persist()
메서드를 호출하는 것입니다. 동시에 최종 사용자에게 권한을 요청하고 권한이 부여되면 스토리지를 영구으로 변경합니다.
const persisted = await navigator.storage.persist();
if (persisted) {
/* Storage will not be cleared except by explicit user action. */
}
저장소 유지를 요청하는 이 방법은 전부 아니면 전무입니다. 더 세부적인 지속성 요구사항을 표현할 수 있는 방법은 없습니다 모두 하나의 스토리지 버킷입니다
Storage Buckets API
Storage Buckets API의 핵심 개념은 사이트에 여러 개의 스토리지 버킷을 만들 수 있는 기능을 부여하는 것입니다. 이 경우 브라우저에서는 다른 버킷과 별개로 각 버킷을 삭제할 수 있습니다. 이를 통해 개발자는 가장 중요한 데이터가 삭제되지 않도록 제거 우선순위를 지정할 수 있습니다.
사용 사례
스토리지 버킷이 어디에 유용한지 설명하기 위해 이메일 애플리케이션을 상상해 보세요. 앱이 클라이언트에만 있는 사용자의 보내지 않은 초안을 잃어버리면 복구할 수 없습니다. 반면에 서버에 저장되어 있다면 브라우저의 저장용량 압박이 심한 경우 사용자는 가장 오래된 받은편지함 이메일 중 일부를 클라이언트에서 삭제해도 괜찮을 것입니다.
Storage Buckets API 사용
새 스토리지 버킷 만들기
새 스토리지 버킷은 StorageBucketManager
인터페이스의 open()
메서드를 사용하여 만들 수 있습니다.
// Create a storage bucket for emails that are synchronized with the
// server.
const inboxBucket = await navigator.storageBuckets.open('inbox');
영구적인 새 스토리지 버킷 만들기
스토리지 버킷이 유지되도록 하려면 durability
및 persisted
옵션 인수를 open()
메서드에 전달하면 됩니다.
persisted
는 스토리지 버킷을 유지해야 하는지 여부를 결정합니다. 허용되는 값은false
(기본값) 또는true
입니다.durability
는 전원 오류 시 데이터 손실 위험을 줄이면서 쓰기 성능을 절충하는 데 도움이 되는 힌트를 브라우저에 제공합니다. 허용되는 값은'relaxed'
(기본값) 또는'strict'
입니다.- 버킷
'strict'
개가 전원 장애 시 데이터 손실 위험을 최소화하려고 시도합니다. 이 경우 성능이 저하될 수 있습니다. 즉, 쓰기를 완료하는 데 시간이 더 오래 걸리고, 전체 시스템 성능에 영향을 미치고, 배터리 전력을 더 많이 소모하고, 저장소 기기가 더 빨리 소모될 수 있습니다. 'relaxed'
버킷은 전력 손실이 발생한 마지막 몇 초 동안 완료된 쓰기를 '삭제'할 수 있습니다. 이에 따라 이러한 버킷에 데이터를 쓰면 성능 특성이 향상되고 배터리 충전이 더 오래 지속될 수 있으며 저장소 기기 전체 기간이 길어질 수 있습니다. 또한 정전으로 인해'strict'
버킷보다 더 높은 비율로 데이터 손상이 발생하지 않습니다.
- 버킷
// Create a storage bucket for email drafts that only exist on the client.
const draftsBucket = await navigator.storageBuckets.open('drafts', {
durability: 'strict', // Or `'relaxed'`.
persisted: true, // Or `false`.
});
스토리지 버킷에서 스토리지 API 액세스
각 스토리지 버킷은 스토리지 API(예: IndexedDB, Cache 인터페이스, File 인터페이스)와 연결됩니다. 이러한 저장소 API는 평소대로 작동하며 진입점이 StorageBucket
인터페이스(예: StorageBucket.indexedDB
)에서 비롯됩니다.
const inboxDb = await new Promise(resolve => {
const request = inboxBucket.indexedDB.open('messages');
request.onupgradeneeded = () => { /* migration code */ };
request.onsuccess = () => resolve(request.result);
request.onerror = () => reject(request.error);
});
DevTools에서 저장소 버킷 디버그
애플리케이션 > 스토리지 섹션에서 전용 트리에서 스토리지 버킷을 검사합니다.