IndexedDB의 기본 내구성 모드 변경

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

IndexedDB 내구성 모드

대량의 구조화된 데이터를 저장하는 강력한 웹 API인 IndexedDBreadwrite 트랜잭션에 두 가지 내구성 모드를 제공합니다.

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

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의 기본 내구성 모드를 변경하는 것은 성능을 개선하면서 다른 주요 브라우저와의 호환성을 유지하기 위한 조치입니다. 대부분의 경우 새로운 기본값으로 성능이 개선되므로 아무 조치도 취하지 않는 것이 좋습니다. 필요한 경우 계속해서 원하는 내구성 모드를 지정하여 웹 애플리케이션의 데이터 내구성 및 성능을 관리할 수 있습니다.

감사의 말씀

이 도움말은 에반 스테이드레이첼 앤드류가 검토했습니다.