IndexedDB
IndexedDB(Indexed Database API)는 웹 브라우저에서 구조화된 데이터를 지속적으로 저장하고 조회하기 위한 데이터베이스 API다. 단순 문자열 키·값 저장소인 Web Storage와 달리 객체 저장소, 보조 인덱스, 커서와 트랜잭션을 제공한다. 오프라인 우선 웹 애플...
| 분류 | 브라우저 데이터베이스 API |
|---|---|
| 주요 용도 | 구조화된 데이터의 비동기 저장 |
| 관련 기술 | World Wide Web, 웹 브라우저, HTTP, JavaScript |
| 주요 명세 | W3C Indexed Database API 3.0 |
IndexedDB(Indexed Database API)는 웹 브라우저에서 구조화된 데이터를 지속적으로 저장하고 조회하기 위한 데이터베이스 API다. 단순 문자열 키·값 저장소인 Web Storage와 달리 객체 저장소, 보조 인덱스, 커서와 트랜잭션을 제공한다. 오프라인 우선 웹 애플리케이션에서 문서, 기록과 대규모 사용자 데이터를 관리하는 데 활용된다.
IndexedDB의 데이터는 데이터베이스 내부의 객체 저장소(object store)에 보관된다. 각 레코드는 키와 값으로 구성되며 기본 키는 데이터에서 추출하거나 자동 생성할 수 있다. 인덱스는 특정 속성에 대한 조회를 효율화하고 커서는 여러 레코드를 일정한 순서로 탐색하는 데 사용된다.
데이터 읽기와 쓰기는 트랜잭션 안에서 실행된다. 트랜잭션은 접근 대상 저장소와 읽기·쓰기 권한을 지정하며 성공적으로 완료되거나 오류가 발생하면 작업이 원자적으로 처리되도록 한다. 이벤트 및 Promise 기반 래퍼를 통해 비동기 호출을 조합할 수 있으며, 같은 데이터베이스에 여러 탭이 접근할 때 버전 변경과 연결 생명주기를 조정해야 한다.
IndexedDB는 문자열 외에도 구조화 복제 알고리즘이 지원하는 객체와 Blob 등의 데이터를 저장할 수 있다. 하지만 모든 자바스크립트 객체나 실행 중인 함수를 그대로 보관하는 것은 아니며, 특정 객체의 복제 가능 여부와 제약을 확인해야 한다. 레코드 설계와 인덱스 선택, 순회 범위는 저장 공간과 조회 성능에 영향을 준다.
IndexedDB는 출처별 저장 공간과 브라우저의 할당량 정책에 따라 관리된다. 사용자에 의한 데이터 삭제, 비공개 탐색 환경과 저장 공간 부족으로 데이터가 사라지거나 기록이 실패할 수 있다. 암호화와 인증 정보 보호는 별도의 문제이므로 클라이언트 저장소만을 신뢰하여 중요한 비밀을 안전하게 보존할 수 있다고 가정하지 않는다.[1]