IndexedDB의 기본 내구성 모드 변경

토마스 슈타이너
토마스 슈타이너

IndexedDB의 기본 내구성 모드가 Chrome 121부터 strict에서 relaxed로 변경됩니다. 이번 조정은 성능을 향상하고 Firefox, Safari 등 다른 주요 브라우저에 맞추기 위한 것입니다. 블로그 게시물에서는 이번 변경사항의 세부정보와 웹 개발자에게 미치는 영향을 설명합니다.

IndexedDB 내구성 모드

IndexedDB는 대량의 구조화된 데이터를 저장하기 위한 강력한 웹 API로, readwrite 트랜잭션을 위한 두 가지 내구성 모드를 제공합니다.

  • strict: 이 모드는 complete 이벤트를 실행하기 전에 OS에 변경사항을 디스크에 플러시하도록 명시적으로 지시합니다.
  • relaxed 이 모드는 기본 OS 플러시 동작에 의존하며 OS 버퍼에 변경사항이 발생하면 complete 이벤트를 발생시킵니다. OS 버퍼는 일반적으로 2초마다 플러시됩니다.

strict는 변경사항이 실제로 디스크에 즉시 기록되는지 확인하지 않는다는 점에 유의해야 합니다. 사이트에서 put()를 호출한 후 정전으로 인해 변경사항이 디스크에 적용되지 않아 다음 번에 앱을 실행할 때 누락될 수 있는 일정한 시간이 아직 남아 있습니다.

strict 내구성 보장과 관련하여 IndexedDB 트랜잭션 complete 이벤트는 데이터가 실제로 기록될 때까지 실행되지 않는 반면, relaxed 내구성의 경우 데이터는 complete 이벤트가 실행될 때 여전히 기록되는 프로세스에 있습니다. 전체 프로세스에 관한 자세한 내용은 이 설명 내용을 확인하세요.

따라서 strict는 다음 작업을 하기 전에 작성되었음을 반드시 알아야 하는 작업에만 사용됩니다. 데이터 이전은 strict 내구성이 필요한 예입니다. 한 백업 저장소에서 다른 백업 저장소로 이동할 때 새 백업 저장소가 작성될 때까지 이전 형식을 삭제하지 않으려고 합니다. 이렇게 하면 strict 내구성을 통해 중간에 장애로부터 복구할 수 있는 마이그레이션 루틴을 용이하게 합니다.

기본 내구성 모드 변경사항

이 변경사항의 중요한 측면은 Chrome에서 readwrite 트랜잭션의 기본 내구성 모드입니다. 지금까지 기본값은 strict였으므로 데이터 변경사항에 대한 즉각적인 디스크 쓰기가 보장되었습니다. 그러나 성능을 고려하고 relaxed를 사용하는 다른 주요 브라우저와 맞추기 위해 Chrome도 기본값을 relaxed로 변경할 계획입니다.

이 변경사항은 성능과 데이터 내구성 간에 더 나은 균형을 제공하기 위해 설계되었습니다. strict는 최대의 데이터 내구성을 보장하지만 relaxed는 많은 웹 애플리케이션에 충분한 경우가 많으며 다음과 같은 방식으로 성능을 크게 개선할 수 있습니다.

  • 속도: 실제 사례를 살펴보면 Chrome 팀은 속도가 3배에서 30배로 빨라진 것을 확인했습니다.
  • 디스크 내구성(특히 솔리드 스테이트 디스크(SSD)이 장착된 기기의 경우).
  • 배터리 수명 연장.
  • 읽기 속도 향상 쓰기 트랜잭션 뒤에서 읽기 트랜잭션이 종종 차단되는 IndexedDB의 아키텍처로 인해 읽기 속도가 부수적인 효과로 개선됩니다.
  • 디스크 작업은 공유 시스템 리소스이므로 전체 기기가 긍정적인 영향을 받습니다.

상호 운용성 및 호환성

이 변경사항의 한 가지 중요한 측면은 상호 운용성 및 호환성에 미치는 영향입니다. Chromium은 다른 주요 브라우저 공급업체의 행동에 발맞춰 상호 운용성을 개선합니다. 표준 자체는 다양한 구현을 허용하며 이 변경사항은 이러한 구현을 조화롭게 조정하는 것을 목표로 합니다. 이번 변경사항에 대한 자세한 이전 맥락은 이 GitHub 문제에서 확인할 수 있습니다.

웹 개발자에게 미치는 영향

이 변경사항으로 인해 새로운 API 노출 영역이 도입되지는 않습니다. 기존 IndexedDB API는 동일하게 유지되며 이 변경사항은 주로 readwrite 트랜잭션의 기본 동작에 영향을 미칩니다. 트랜잭션을 생성할 때 원하는 내구성 모드를 지정하여 데이터 내구성과 성능을 제어할 수 있습니다. 다음 코드 샘플은 선택적 옵션 배열에서 durabilitystrict로 설정하여 이전 동작을 다시 가져오는 방법을 보여줍니다.

let db;
const DBOpenRequest = window.indexedDB.open("toDoList", 4);
DBOpenRequest.onsuccess = (event) => {
  db = DBOpenRequest.result;
};
const transaction = db.transaction(
  ['toDoList'],
  'readwrite',
  { durability: 'strict' });

출시 전에 변경사항을 로컬에서 테스트

이 변경사항은 Chrome 121부터 적용됩니다. 이전에 로컬에서 새 동작을 테스트하려면 chrome://flags에서 #indexed-db-default-durability-relaxed 플래그를 전환합니다.

자세히 알아보기

이 변경사항에 관한 자세한 기술 세부정보 및 업데이트는 추적 버그Chrome 플랫폼 상태 항목에서 확인하세요.

요약하자면, Chrome이 IndexedDB에서 기본 내구성 모드를 변경하는 것은 다른 주요 브라우저와의 호환성을 유지하면서 성능을 개선하는 것을 목표로 하고 있습니다. 새로운 기본값을 사용하면 성능이 향상되므로 대부분의 경우 아무 조치도 취하지 않는 것이 좋습니다. 필요한 경우 원하는 내구성 모드를 계속 지정하여 웹 애플리케이션에서 데이터 내구성과 성능을 제어할 수 있습니다.

감사의 말씀

Evan StadeRachel Andrew가 작성한 도움말입니다.