클라이언트(브라우저 내부) local database
네트워크없이 접근 가능, 빠름
브라우저의 객체 저장 가능
자바스크립트 객체, 파일, blobs 등을 저장
transaction을 지원함
자료형과 객체 저장 가능
문서 내부에 간단한 문자열 데이터를 저장
적은양의 데이터만 저장 가능
JSON 데이터를 문자열로 변환하여 저장
여전히 문자열만 저장되기 때문에 간단한 데이터만 저장 가능
사용자가 지우지 않는 이상 계속 지속됨
JSON 데이터를 오직 탭 세션에 저장
브라우저를 닫으면 데이터가 사라짐 (일회성)
Key를 이용해 Index되는 구조화된 데이터를 쉽게 저장
브라우저 기반 내장 데이터베이스로 JS 관련 어플을 만들때 사용 가능
Index를 지원하기 때문에 많은 양의 구조화된 데이터를 다룰 때 적합하다.
let request = indexedDB.open(name, version);
name - 문자열, 데이터베이스 이름.
version - 기본적으로 양의 정수 버전 1
let request = indexedDB.open('myDB', 1);
indexedDB 데이터 베이스 수정시 version을 수정해야함
let onRequest = indexedDB.open('myDB', 1);
onRequest.onsuccess = () => {
console.log('Success creating or accessing db')
}
onRequest.onupgradeneeded = () => {
const database = onRequest.result
}
onRequest.onerror = () => {
console.log('Error creating or accessing db')
}
로컬 데이터베이스 버전이 지정된 버전(1)보다 낮으면 onupgradeneeded가 트리거되고 데이터베이스 버전을 업그레이드
이벤트는 데이터베이스가 아직 존재하지 않을 때도 트리거되므로 초기화를 수행 가능
database.createObjectStore('store name', {keyPath:'id'})
database.createObjectStore('store name', {autoIncrement:true})
연속적인 숫자를 각 객체에 저장(숫자, 객체 상관없이 따로 저장)
database.createObjectStore('store name', {keyPath:'id', autoIncrement: true})
숫자를 객체 아이디라는 프로퍼티에 저장(특정 키 모두 인덱싱 가능)
onRequest.onupgradeneeded = () => {
const database = onRequest.result
const objectStore = database.createObjectStore('store name', {keyPath:'id'})
}
.onupgradeneede() 으로 데이터베이스가 업그레이드 될 때 ObjectStore 생성 또는 수정 가능
const usersStore = database.createObjectStore('users', {keyPath: 'id'})
createObjectStore(tableName)함수를 이용해서 usersStore라는 이름으로 ObjectStore를 생성하고 users라는 테이블을 만듦
=> usersStore 저장소에 users라는 테이블이 생성됨
{keyPath:'id'}로 'id'를 제공하는데 필요한 인덱스 필드의 이름을 지정
const initializeDb = indexedDB.open('myDB', 1)
initializedDb.onupgradeneeded = () => {
const database = initializeDb.result
database.createObjectStore('users', {keyPath:'id'})
}
const transaction = database.transaction("objectStore Name", "Transaction Mode")
모든 데이터 읽기 및 쓰기는 Transaction 내에서 수행됨
//users테이블에서 transaction을 instance화
const transaction = database.transaction('users', 'readwrite').objectStore('users')
const todos = database.createObjectStore('todos', {autoIncrement: true})
function addTodos() {
const todo = {
title: "todo1"
text:"no.1 thing to do"
}
//todos ObjectStore에 readwrite(읽기, 쓰기 가능)권한으로 Transaction시작하기
const transaction = database.transaction("todos",'readwrite')
//objectStore()함수로 todos테이블 선택
const todos = transaction.objectStore("todos")
//원하는 객체(todo)를 테이블에 추가
todos.add(todo)
}
indexedDb가 활용 문법이 깔끔하지 않다는 의견이 많다던데, 그래서인지 이 부분은 오늘 강의만으로 이해하기에는 조금 어려웠다,,,
좀더 찾아보고 공부해보는 걸로!