번역 작업 진행중입니다.

IndexedDB는 데이터 객체나 파일을 비롯해 많은 양의 구조화된 데이터를 클리이언트 측에 저장하기 위한 낮은 수준의 API입니다. API는 이 데이터에서 고 성능의 검색을 할 수 있는 인덱스를 사용합니다. 웹 스토리지는 적은 양의 데이터를 저장하는데 유용하지만 많은 양의 구조화된 데이터를 저장하는데는 좋지 않습니다. 이럴 때 IndexedDB를 사용할 수 있습니다. 이 페이지는 MDN의 IndexedDB에 대한 내용을 다루는 시작 문서입니다. 전체 API 레퍼런스, 사용 가이드, 세부적인 브라우저 지원 상황, 그리고 핵심 개념에 대한 설명을 제공하는 링크가 있습니다.

주의: This feature is available in Web Workers.

주의: IndexedDB API는 강력하지만, 간단한 사례에는 좀 복잡해 보일 수도 있습니다. 좀 더 단순한 API를 선호한다면, IndexDB에 좀 더 친숙해질 수 있는 localForage, dexie.js, ZangoDBJsStone 같은 라이브러리를 알아보세요.

핵심 개념과 사용

IndexedDB is a transactional database system, like an SQL-based RDBMS. However, unlike SQL-based RDBMSes, which use fixed-column tables, IndexedDB is a JavaScript-based object-oriented database. IndexedDB lets you store and retrieve objects that are indexed with a key; any objects supported by the structured clone algorithm can be stored. You need to specify the database schema, open a connection to your database, and then retrieve and update data within a series of transactions.

Note: Like most web storage solutions, IndexedDB follows a same-origin policy. So while you can access stored data within a domain, you cannot access data across different domains.

동기 및 비동기

Operations performed using IndexedDB are done asynchronously, so as not to block applications. IndexedDB originally included both synchronous and asynchronous APIs. The synchronous API was intended for use only with Web Workers but was removed from the spec because it was unclear whether it was needed. However,  the synchronous API may be reintroduced if there is enough demand from web developers.

저장 용량 한도 및 eviction criteria

하나의 종류 또는 다른 종류의 데이터를 클라이언트 측(즉, 로컬 디스크 상)에 저장하는 웹 기술은 많습니다. IndexedDB는 가장 일반적으로 언급되는 것입니다. 브라우저가 얼마만큼의 공간을 web data storage에 할당할지 그리고 용량이 한계에 도달했을 때 무엇을 지울지의 프로세스는 간단하지 않고, 브라우저마다 다릅니다. 브라우저 저장 공간 제한과 퇴거 기준을 Firefox의 경우 이 작동 방식을 설명하려고 시도합니다.

인터페이스

To get access to a database, call open() on the indexedDB attribute of a window object. This method returns an IDBRequest object; asynchronous operations communicate to the calling application by firing events on IDBRequest objects.

Connecting to a database

IDBEnvironment
Provides access to IndexedDB functionality. It is implemented by the window and worker objects. This interface isn't part of the 2.0 specification.
IDBFactory
Provides access to a database. This is the interface implemented by the global object indexedDB and is therefore the entry point for the API.
IDBOpenDBRequest
Represents a request to open a database.
IDBDatabase
Represents a connection to a database. It's the only way to get a transaction on the database.
Retrieving and modifying data
IDBTransaction
Represents a transaction. You create a transaction on a database, specify the scope (such as which object stores you want to access), and determine the kind of access (read only or readwrite) that you want.
IDBRequest
Generic interface that handles database requests and provides access to results.
IDBObjectStore
Represents an object store that allows access to a set of data in an IndexedDB database, looked up via primary key.
IDBIndex
Also allows access to a subset of data in an IndexedDB database, but uses an index to retrieve the record(s) rather than the primary key. This is sometimes faster than using IDBObjectStore.
IDBCursor
Iterates over object stores and indexes.
IDBCursorWithValue
Iterates over object stores and indexes and returns the cursor's current value.
IDBKeyRange
Defines a key range that can be used to retrieve data from a database in a certain range.
IDBLocaleAwareKeyRange
Defines a key range that can be used to retrieve data from a database in a certain range, sorted according to the rules of the locale specified for a certain index (see createIndex()'s optionalParameters.). This interface isn't part of the 2.0 specification.

Custom event interfaces

This specification fires events with the following custom interface:

IDBVersionChangeEvent
The IDBVersionChangeEvent interface indicates that the version of the database has changed, as the result of an IDBOpenDBRequest.onupgradeneeded event handler function.

Obsolete interfaces

An early version of the specification also defined these now removed interfaces. They are still documented in case you need to update previously written code:

IDBVersionChangeRequest
Represents a request to change the version of a database. The way to change the version of the database has since changed (by calling IDBFactory.open without also calling IDBDatabase.setVersion), and the interface IDBOpenDBRequest now has the functionality of the removed IDBVersionChangeRequest.
IDBDatabaseException 
Represents exception conditions that can be encountered while performing database operations.
IDBTransactionSync
Sync version of IDBTransaction.
IDBObjectStoreSync
Sync version of IDBObjectStore.
IDBIndexSync
Sync version of IDBIndex.
IDBFactorySync
Sync version of IDBFactory.
IDBEnvironmentSync
Sync version of IDBEnvironment.
IDBDatabaseSync
Sync version of IDBDatabase.
IDBCursorSync
Sync version of IDBCursor.

 

비동기 API

비동기 API 메서드는 쓰레드 호출을 막지 않고 값을 반환합니다. 데이터 베이스에 비동기로 접근하려면 window 객체의 indexedDB 속성에 있는 open()을 호출합니다. 이 메서드는 IDBRequest 객체(IDBOpenDBRequest)를 반환합니다. 비동기 작업은 IDBRequest 객체의 이벤트를 발생시켜서 호출한 애플리케이션과 통신합니다.

주의: 이전 버전의 브라우저에서는 IndexedDB 객체에 접두사가 붙어 있습니다(Gecko < 16에서는 mozIndexedDB의 속성으로 제공되고 Chrome에서는 webkitIndexedDB로, IE 10에서는 msIndexedDB로 제공).

  • IDBFactory는 데이터베이스에 접근할 수 있게 해줍니다. 전역 객체인 indexedDB에 의해서 구현되어 있고 API의 시작 지점입니다.
  • IDBCursor는 인덱스에 저장되어 있는 객체를 반복합니다.
  • IDBCursorWithValue는 인덱스에 저장되어 있는 객체를 반복하고 현재 값의 커서를 반환합니다.
  • IDBDatabase는 데이터 베이스 커넥션을 나타냅니다. 데이터 베이스의 트랜잭션을 얻을 수 있는 유일한 방법입니다.
  • IDBEnvironment는 클라이언트 사이드 데이터 베이스의 접근을 제공합니다. window 객체에 의해서 구현됩니다.
  • IDBIndex는 인덱스의 메타데이터로의 접근을 제공합니다.
  • IDBKeyRange는 키의 범위를 정의합니다.
  • IDBObjectStore는 객체 저장소를 나타냅니다.
  • IDBOpenDBRequest는 데이터 베이스를 여는 요청을 나타냅니다.
  • IDBRequest는 데이터 베이스와 데이터 베이스 객체에 대한 비동기 요청의 접근을 제공합니다. 비동기 메서드를 호출할 때 받게 됩니다.
  • IDBTransaction은 트랜잭션을 나타냅니다. 데이터 베이스에 트랜잭션을 생성하고, 범위를 설정(접근하고자 하는 어떤 객체를 저장하는지 등)하고, 원하는 접근의 종류(읽기 전용이나 쓰기)를 결정합니다.
  • IDBVersionChangeEvent는 변경된 데이터 베이스 버전을 나타냅니다.

이전 버전의 명세에서는 지금은 지워진 아래 사항도 정의하고 있습니다. 이전에 작성된 코드를 업데이트해야할 경우를 대비해서 아직 문서에 남아 있습니다:

  • IDBVersionChangeRequest는 데이터 베이스 버전을 변경하는 요청을 나타냅니다. 데이터 베이스의 버전을 변경하는 방법은 계속 변경되어 왔습니다(IDBDatabase.setVersion()를 호출하지 않고 IDBFactory.open()를 호출하는 방법으로). IDBOpenDBRequest 인터페이스는 이제 삭제된 IDBVersionChangeRequest 기능을 가지고 있습니다.
  • IDBDatabaseException 은 데이터 베이스 작업을 할 때 만날 수 있는 예외 사항 조건을 나타냅니다.

동기화 버전의 API도 있습니다. 동기 API는 구현된 브라우저가 없습니다. 이 API는 WebWorkers와 함께 사용하도록 의도되었습니다.

Examples

Specifications

Specification Status Comment
Indexed Database API Recommendation Initial definition
Indexed Database API 2.0 Recommendation  

브라우저 호환성

 

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!

Feature Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support 23webkit
24 (unprefixed)
38 (prefixes deprecated)
57 (prefixes removed)
(Yes) 10.0 (10.0) moz
16.0 (16.0)
10 15

7.1, partial
10

Available in workers (Yes) (unprefixed)
38 (prefixes deprecated)
57 (prefixes removed)
(Yes) 37.0 (37.0)[1] (Yes) (Yes) 10
Available in privacy mode[3] (Yes) No support No support No support No support No support
IDBLocaleAwareKeyRange No support No support 43.0 (43.0)[2] No support No support No support
Indexed Database 2.0 58 ? ? ? 45 10.1
Feature Android Webview Chrome for Android Edge Firefox Mobile (Gecko) Firefox OS IE/Edge Phone Opera Mobile Safari Mobile
Basic support (Yes) (unprefixed)
38 (prefixes deprecated)
57 (prefixes removed)
(Yes) (unprefixed)
38 (prefixes deprecated)
57 (prefixes removed)
(Yes) 22.0 (22.0) 1.0.1 10 22 8, partial
10
Available in workers (Yes) (unprefixed)
38 (prefixes deprecated)
57 (prefixes removed)
(Yes) (unprefixed)
38 (prefixes deprecated)
57 (prefixes removed)
(Yes) 37.0 (37.0)[1] (Yes) (Yes) (Yes) 10
Available in privacy mode[3] No support No support No support No support No support No support ? ?
IDBLocaleAwareKeyRange No support No support No support 43.0 (43.0)[2] 2.5[2] No support No support No support
Indexed Database 2.0 58 58 ? ? ? 10.1 45 ?
  • [1] IDBCursorWithValue 는 Gecko 42.0 (Firefox 42.0 / Thunderbird 42.0 / SeaMonkey 2.39).
  • [2] This feature is currently hidden behind a flag — to enable it and experiment, go to about:config and enable dom.indexedDB.experimental.
  • [3] AKA "Private Browsing Mode" (Firefox) and "Incognito" (Chrome).

 

 

참고자료

문서 태그 및 공헌자

태그: 
이 페이지의 공헌자: QuanXiuzhi, DGURI, naduhy2, hyeonseok, claudepache
최종 변경자: QuanXiuzhi,