Your Search Results

    IndexedDB

    IndexedDB는 클리이언트에서 많은 양의 구조화된 데이터를 인덱스를 이용해서 높은 성능으로 검색할 수 있게 해주는 API입니다. DOM Storage는 작은 양의 데이터를 저장하는데 유용하지만 많은 양의 구조화된 데이터를 저장하는데는 좋지 않습니다. 이럴 때 IndexedDB를 사용할 수 있습니다.

    이 페이지는 API 객체의 기술적인 설명에 대한 시작 문서입니다. 입문서가 필요하다면 IndexedDB의 기초 개념을 참고하세요. 더 자세한 내용은 IndexedDB 사용하기를 참고하세요.

    IndexedDB는 동기와 비동기에 대한 API를 나눠서 제공하고 있습니다. 동기 API는 Web Workers 안에서 사용하도록 의도되었지만 아직 구현하고 있는 브라우저는 없습니다. 비동기 API는 Web Workers 안에서와 밖에서 모두 사용할 수 있지만 Firefox는 아직 이를 구현하지 않았습니다.

    비동기 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와 함께 사용하도록 의도되었습니다.

    저장 용량 한도

    단일 데이터 베이스 항목에 대한 제한은 전혀 없습니다. 하지만 개별 IndexedDB 데이터 베이스의 크기에는 제한이 있을 수 있습니다. 이 제한(이를 알려주는 사용자 인터페이스 방법 포함)은 브라우저 별로 다를 수 있습니다:

    예제

    웹에서 IndexedDB를 어떻게 사용할지를 보여주는 아주 좋은 예제는 IndexedDB Mozilla DevDerby의 우승자인 Marco Castelluccio의 예제입니다. 이 데모는 eLibri라는 라이브러리이자 eBook 리더 애플리케이션입니다.

    브라우저 호환성

    Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
    Asynchronous API

    24.0
    11.0 webkit

    16.0 (16.0)
    4.0 (2.0) moz
    10 15.0 Not supported
    Synchronous API
    (used with WebWorkers)
    Not supported Not supported
    See bug 701634
    Not supported Not supported Not supported
    Feature Android Firefox Mobile (Gecko) IE Phone Opera Mobile Safari Mobile
    Asynchronous API Not supported 6.0 (6.0) moz Not supported Not supported Not supported

    WebSQL을 지원하는 브라우저에서 IndexedDB Polyfill로 IndexedDB를 사용할 가능성도 있습니다.

    참고자료

    Document Tags and Contributors

    Contributors to this page: claudepache, hyeonseok
    Last updated by: hyeonseok,