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}); // 성공시 처리 |
반응형
'JavaScript, ECMAScript' 카테고리의 다른 글
음성,Speak,Speech (0) | 2022.12.01 |
---|---|
Chrome Browser Rendering FPS 측정 (0) | 2022.11.20 |
디버깅.Debugging.VSC.VisualStudioCode.연동 (0) | 2022.07.28 |
Swallow Copy, Deep Copy, json 복사시 문제점과 대응 (0) | 2022.07.25 |
Callback, Promise, Async/Await (0) | 2022.04.04 |