StoryCode

Indexed DB

JavaScript, ECMAScript
반응형

# 참조 : https://www.youtube.com/watch?v=mHJDtDM_wHc 

# 참조 : https://seomal.com/map/1/231

 

1) 용량

Cookie는 수KB 만 저장 가능

Local Storage 는 수MB 저장 가능

IndexedDB (Web DB) 는 Chrome 은 디스크 80%, Firefox 는 50%, Safari 는 1GB 저장 가능

 

2) 서버 전송 여부

Cookie 는 자동 포함되서 전송되고, 나머지는 자동 전송안되고 프론트에서 수작업으로 보내야 함.

 

3) 저장 가능 타입

Cookie / LocalStorage 문자열만 저장되나, Indexed DB 는 DB 이므로 다양한 포맷 저장 가능

 

4) 동작주의

웹서버 필요. (Visual Studio Code 에서는 Live Server 설치후, html 오른쪽 클릭 메뉴에서 "Open with Live Server" 선택

ffile:/// 로는 보안때문인지 실행이 안됨 .

 

5) 구조

DB Indexed DB
Database Database
Table(Entity) Object Store
Row(Attribue, Tuple) Object

 

6) 명령

     
#1.Database 신규/기존 오픈 요청 const databaseopenrequest = indexedDB.open('myservicedatabase', 1)
* 1 은 개발자(회사)가 정하는 임의의 버전이다.
이유인즉슨, DB 자체는 클라이언트의 브라우저에 있다. 그러다보니 서버에서 클라이언트의 DB 내용을 변경하고자 할 경우, indexedDB.open 에서 이 버전을 2 로 바꾼 뒤 사용자가 브라우저로 접속하면, 아래 "#3.Database 버전 업그레이드" Event 가 발생한다.
#2.Database 신규/기존 오픈 성공 후, db instance 돌려받기 databaseopenrequest.addEventListener('success',
    function(event)
    {
        databaseinstance = event.target.result;
    }
);

databaseopenrequest.addEventListener('error',
    function(event)
    {
    }
);


* 여기서 databaseinstance 가 실제 database instance 이다.
#3.Database 버전 업그레이드 databaseopenrequest.addEventListener('upgradeneeded',
    function(event)
    {
        databaseinstance = event.target.result;
        if (event.oldVersion < 1) // *2
        {
            databaseinstance.createObjectStore('boardmaster_tbl', {keyPath:'boardmasterid', autoIncrement:true});
        }

        if (event.oldVersion < 2) // *2
        {
            databaseinstance.createObjectStore('boarddetail_tbl', {keyPath:'boarddetailid', autoIncrement:true});
        }
    }
);

*1 event.oldVersion == 0 이면 최초 생성.

*2 고민사항) 버전 1부터 n까지 차근 차근 올라간 사람은 괜찮은데, 신규 회원이 갑자기 버전 10부터 접근시 처리도 고민해야 할 듯.
#4. Insert
- prompt 로 입력받은 값 넣기
let boardmaster_tbl = databaseinstance.transaction('boardmaster_tbl', 'readwrite').objectStore('boardmaster_tbl);

let insertrequest = boardmaster_tbl.add({title:promot('enter title'), body:prompt('enter body'));

insertrequest.addEventListener('success', function(event) {event.target.result}); // 성공시 처리
#5. Select let boardmaster_tbl = databaseinstance.transaction('boardmaster_tbl', 'readonly').objectStore('boardmaster_tbl);

let selectrequest = boardmaster_tbl.get(prompt('enter id'));

selectrequest.addEventListener('success', function(event) {event.target.result}); // 성공시 처리
#6. Select All let boardmaster_tbl = databaseinstance.transaction('boardmaster_tbl', 'readonly').objectStore('boardmaster_tbl);

let selectrequest = boardmaster_tbl.getAll();

selectrequest.addEventListener('success', function(event) {event.target.result}); // 성공시 처리

* 주의 : 데이타 많아지면  IDBCursor 사용 필요 ( 별도로 알아볼것 )
#7. Update let boardmaster_tbl = databaseinstance.transaction('boardmaster_tbl', 'readwrite').objectStore('boardmaster_tbl);

let updaterequest = boardmaster_tbl.put({id:Number(prompt('enter id')),title:promot('enter title'), body:prompt('enter body'));

updaterequest.addEventListener('success', function(event) {event.target.result}); // 성공시 처리
#8. Delete let boardmaster_tbl = databaseinstance.transaction('boardmaster_tbl', 'readwrite').objectStore('boardmaster_tbl);

let updaterequest = boardmaster_tbl.delete(Number(prompt('enter id')));

updaterequest.addEventListener('success', function(event) {event.target.result}); // 성공시 처리

 

 

 

 

반응형