혁명을 꿈꾸다 HTML5 & API 입문
을 참고 하였습니다.
이번엔 Web SQL Database 를 살펴볼까요?
Web SQL Database 는 지난 아티클에서 소개한 Storage 와 함께 기본적인 Web Storage 중 하나입니다.
말씀 안드려도 딱! 알고 계시겠지만 Client 에 데이터를 저장한다는 공통점을 가지고 있지요.
개발자분들께서는 SQL 에 익숙하시니 금방 접근 하실수 있으리라 생각됩니다.
개발자가 아닌 분들도 그리 어렵지 않은 내용이니 너무 어려워 마시고요... ^^
그럼 Database 를 생성하는 작업부터 시작해 보겠습니다.
15-1. Create Database
생성하기 전에 먼저 사용하는 Web Browser 가 Web SQL Database를 지원하는지 확인해 봐야겠죠?
return false;
확인도 했으니 이젠 Database를 생성해 보겠습니다.
다음과 같은 Database 를 생성하는 Method 를 제공합니다.
return false;
openDatabase 함수를 사용하여 Database 를 생성합니다. 그리고 함수에 사용되는 parameter 들은 아래와 같습니다.
함수명 이름만 봐서는 Open 이라는 말에 이미 존재하는 Database 를 연다고 생각하기 쉬운데 Database 가 존재하지 않으면 Database 를 생성한다는 것! 기억해 두셔요...
15-2. transaction
Database 가 생성도 되었으니 이젠 슬슬 접근해 보겠습니다.
접근하는 Method 는 transaction()입니다.
return false;
db.transaction(function (tx) { //SQL 을 실행하고 Control 합니다.
function(error) { //transaction 에 Error 가 발생한 경우
function() { //transaction 을 성공했을 때
Error 발생시 그리고 성공완료시에 진행할 코드는 생략가능한 부분입니다.
요기까지가 Database 를 생성하고 접근하는 것 까지의 순서입니다.
많이 어렵게 느껴지시나요?
그럼 계속 이어나가겠습니다.
15-3. executeSql
이젠 테이블을 생성하고 데이터를 입력하는 작업을 해보겠습니다.
이런 작업을 할때 사용하는 Method 는 executeSql() 입니다.
return false;
db.transaction(function (tx) { //SQL 을 실행하고 Control 합니다.
tx.executeSql('INSERT INTO worklist(idx, subject, memo) VALUES (1, "업무", "WCF Server 작성")';
tx.executeSql('INSERT INTO worklist(idx, subject, memo) VALUES (2, "약속", "SQLer Article작성")';
tx.executeSql('INSERT INTO worklist(idx, subject, memo) VALUES (3, "가정", "일주일식량 장보기")';
Table 을 생성하고 세건의 Data 를 입력하는 코드입니다.
음.. 여기까지 작업했으니 제대로 Database 가 생성되고 데이터가 제대로 들어갔는지 확인해 볼까효~~ ^^
확인도 됐으니.. 이젠 데이터를 삭제해 보겠습니다.
삭제하는 구문은 여러분도 알고 계시겠지만 서도...
테이블 삭제요?
^^
15-4. 예제
그럼 위 사항들을 모두 적용한 예제를 만들어 보겠습니다.
< html lang="ko">
<head>
<meta charset="utf-8" />
<title>Web SQL Database 예제</title>
<script type="text/javascript">
if (!window.openDatabase) {
document.write("이 Browser 는 Web SQL Database 를 지원하지 않습니다.");
return false;
} else {
var db = openDatabase("MyFirstDatabase", "1.0", "첫번째 테스트 데이터베이스", "2*1024*1024");
db.transaction(function (tx) { //SQL 을 실행하고 Control 합니다.
tx.executeSql('SELECT Count(idx) FROM worklist');
},
function(error) { //transaction 에 Error 가 발생한 경우
alert("Select Error : " + error.message);
tx.executeSql('CREATE TABLE worklist(idx integer primary key, subject, memo)');
},
function() { //transaction 을 성공했을 때
});
db.transaction(function (tx) { //SQL 을 실행하고 Control 합니다.
tx.executeSql('INSERT INTO worklist(idx, subject, memo) values (1, "업무", "WCF Server 작성")');
tx.executeSql('INSERT INTO worklist(idx, subject, memo) values (2, "약속", "SQLer Article작성")');
tx.executeSql('INSERT INTO worklist(idx, subject, memo) values (3, "가정", "일주일식량 장보기")');
},
function(error) { //transaction 에 Error 가 발생한 경우
alert("insert Error : " + error.message);
},
function() { //transaction 을 성공했을 때
alert("insert Success");
});
};
</script>
</head>
<body>
</body>
< /html>
Safari 의 Development Tool 인 Web Inspector 를 통해서 본 모습입니다.
보시면 제가 만든 Database 의 모습을 보실 수있을 겁니다. 데이터도 잘 들어가 있군요... ㅋㅋ
두번 Refresh 하면 에러납니다. ㅋㅋㅋ
왜 그런지 한번 돌려서 확인해보셔요... ㅋㅋㅋ
아 그리고 Database 의 버전이나 동기화에 대한 문제에 대해서는 숙제로 남겨놓기로 하겠습니다.
아래 이미지는 Webkit 에서 제공하는 예제인 Sticky Note 입니다. (안타깝지만 internet explore 9.0 과 firefox 4.0.1 에서는 돌아가지 않습니다.)
http://www.webkit.org/demos/sticky-notes/index.html
한번 간단히 살펴보셔도 좋을 듯합니다.
지난 글과 이번글을 통해서 Web Storage 와 Web SQL Database 에 대해서 알아 보았습니다.
이제 데이터베이스까지 Client 로 넘어왔습니다. 글만 보고 있어도 클라이언트의 한계가 조금씩 없어지는 것 같아 기분좋아지지 않으신가요? 하긴 생각해야할 것들과 개발해야 하는 것들이 점점 많아지긴 하겠지만 말이죠.
더욱더 UX 라고 하는 사용자 경험에 손쉽게? 다가갈 수 있지 않을까 싶습니다. 아! 다른 녀석들의 도움없이요... ^^
그럼
HTML5 시리즈 강좌 리스트
[HTML5강좌] 1. HTML5 개요
[HTML5강좌] 2. HTML4 vs HTML5 (1)
[HTML5강좌] 3. HTML4 vs HTML5 (2)
[HTML5강좌] 4. Sementic Element (1)
[HTML5강좌] 5. Sementic Element (2)
[HTML5강좌] 6. Strong Web Form
[HTML5강좌] 7. Rich Text Edit API
[HTML5강좌] 8. Video Element
[HTML5강좌] 9. Audio Element
[HTML5강좌] 10. Canvas Element
[HTML5강좌] 11. Drag & Drop API
[HTML5강좌] 12. Offline Web Application
[HTML5강좌] 13. Communication API
[HTML5강좌] 14. Web Storage
[HTML5강좌] 15. Web SQL Database
[HTML5강좌] 16. Web Worker
[HTML5강좌] 17. Web Socket
[HTML5강좌] 18. Geolocation API
[HTML5강좌] 19. SVG
[HTML5강좌] 20. File API
HTML5 동영상 강좌 리스트
[HTML5 동영상 강좌] 1. HTML 5 개요
[HTML5 동영상 강좌] 2. HTML4 vs HTML5 (1)
[HTML5 동영상 강좌] 3. HTML4 vs HTML5 (2)
[HTML5 동영상 강좌] 4. Sementic Element (1)
[HTML5 동영상 강좌] 5. Sementic Element (2)
[HTML5 동영상 강좌] 6. Strong Web Form
[HTML5 동영상 강좌] 7. Rich Text Edit API
[HTML5 동영상 강좌] 8. Video Element
[HTML5 동영상 강좌] 9. Audio Element
[HTML5 동영상 강좌] 10. Canvas Element
[HTML5 동영상 강좌] 11. Drag & Drop API
[HTML5 동영상 강좌] 12. Offline Web Application
[HTML5 동영상 강좌] 13. Communication API
[HTML5 동영상 강좌] 14. Web Storage
[HTML5 동영상 강좌] 15. Web SQL Database
[HTML5 동영상 강좌] 16. Web Worker
[HTML5 동영상 강좌] 17. Web Socket
[HTML5 동영상 강좌] 18. Geolocation API
[HTML5 동영상 강좌] 19. SVG
[HTML5 동영상 강좌] 20. File API
행복한 고수되셔요... ^^
woojja ))*
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Comment 6
-
컴포지트
2011.06.21 11:49
-
일부 동감 합니다만, 개인적으로는 W3C의 표준화 과정의 일부라고 생각하고 있습니다. 아울러, 어떤 벤더나 조직이 선호하는 기술 자체를 떠나 빨리 표준화가 진행되고 다시 보완되는 과정이 이루어지면 좋겠다는 생각이 들어요.
퍼블리셔분이 SQL 안다고 하면 개발자가 퍼블리셔분 욕하기 보다는 긴장할 것 같습니다.
위 예제의 SQL 수준도 모르는 요즘 소위, 자칭 "개발자" 엄청 많을 겁니다.
-
컴포지트
2011.06.22 10:45
http://www.w3.org/TR/webdatabase/
Beware. This specification is no longer in active maintenance and the Web Applications Working Group does not intend to maintain it further.
이 사양은 더이상 유지되지 않는다는데요. 쉽게 말해서 W3C 표준화 작업에서 "손 땠다는거죠."
-
우정환
2011.06.23 02:24
네... 그렇습니다. 확! 떼버렸습니다. ^^
사실, 초기에 잡은 목차대로 해야하나를 갈등하다가 일단은 짚고 넘어가자는 생각에 진행을 했더랬습니다.
다음번에 indexedDB 도 한번 살펴보겠습니다.
근데 SQL 할줄안다고 뭐라고 하는 개발 자가 있을까효? 없어요~~
님께선 진정한, 행복한 고수십니다. ^^
-
경계가 사라진다는 정환형님 말씀에 +1
HTML5가 주목받는 여러 이유는 이렇게 점점 더 Browser Extension만이 가졌던 독자 벤더 기술이 W3C로 모아지면서 수용하고 있다는 점일 겁니다. MIX11에서 나왔던 것처럼, 얼마나 더 Native하고 UX친화적인 앱이 이제 차별화 포인트가 되지 않을까 생각해요.
-
우정환
2011.06.23 02:38
에게~~ 1쩜요?
쫌 만 더주셔요... ㅋㅋㅋ
감사합니다. ^^
근데 요즘 indexedDB가 떠오르고있고 webSQL은 가라앉고 있는 실정입니다.ㅋㅋ
HTML 코딩한 퍼블리셔가 SQL 안다고 하면 개발자 엄청 욕하겠죠.