얼마전 구글에서 GoogleGear라는 것을 배포 했다. 처음엔 어떤것인지도 몰랐는데.. 최근에 알게된 사실로는 오프라인에서도 웹서핑을 도와준다고 한다.
자세히 내용을 살표보니 SQLite를 이용해 웹에 있는 자료들을 미리 읽어들어 저장해 두고, 오프라인 일 때도 써먹는 다는 내용이였다.
사실, IE의 "오프라인으로 작업"등 비슷한 기능은 이미 있었다. 하지만, 역시 구글이다. 개발자들이 편하게 접근할 수 있도록 GoogleGear API를 열어두었다.
그럼, 코드로 만나보자.
1. GoogleGear를 사용하기 위해서는 먼저 설치가 되어있어야 한다. 처음 발표되었을때, 뭔지도 모르고 미리 설치는 해두었다 ^^;
2. gears_init.js 파일을 html안에 포함 해야한다.
<script src="gears_init.js"></script>
gears_init.js 파일을 미리 받아 놓고 위 코드를 html에 포함 해도 되고, gears_init.js 파일의 내용 전부를 html 파일에 포함 시켜도 된다.
3. 설치 여부 체크 html 파일이 열리면, GoogleGear가 설치되어 있는지 체크 하는 부분이 있어야 한다.
if ( !window.google || !google.gears ) { alert('GoogleGear를 먼저 설치하세요.'); return; }
4. DB파일을 생성한다. SQLite는 파일 하나로 Database를 로칼 컴퓨터에 생성 한다. FireFox에서는 C:\Documents and Settings\<사용자명>\Application Data\Mozilla\Firefox\Profiles\<임시이름>.default\urlclassifier2.sqlite 라는 파일이 생성되었다.
try { db = google.gears.factory.create('beta.database', '1.0'); } catch (ex) { alert('Database를 생성할 수 없습니다: ' + ex.message); }
5. 테이블을 만든다.
if (db) { db.open('address'); db.execute('create table if not exists ntAddress' + ' (name varchar(255), phone varchar(255), email varchar(255) , Timestamp int)');
이제까지 Google API가 그러했듯이 엄청 간단하다. 우리가 잘 아는 쿼리를 직접 날리고, 무거운 작업의 경우 WorkPool을 이용해 백그라운드로 돌릴 수도 있다. LocalServer를 이용해 서버 정보를 간단하게 캐쉬로 만들어 저장하는 할 수도 있는 듯하다. Google에서 제공하는 샘플 소스 및 툴 을 받아보자
손가락이 근질근질 하지 않은가. 흐흐흐흐흐...
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>주소록</title> </head>
<script src="gears_init.js"></script> <script> var db; init();
function init() { if ( !window.google || !google.gears ) { location.href = "http://gears.google.com/?action=install&message=GoogleGear를 먼저 설치하세요.&return=" + location.href; return; }
try { db = google.gears.factory.create('beta.database', '1.0'); } catch (ex) { alert('Database를 생성할 수 없습니다: ' + ex.message); }
if (db) { db.open('address'); db.execute('create table if not exists ntAddress' + ' (name varchar(255), phone varchar(255), email varchar(255) , Timestamp int)');
display(); } }
function doDel(saveTime) { if (!google.gears.factory || !db) return;
try { db.execute('delete from ntAddress where Timestamp='+ saveTime); } catch (e) { alert(e.message); throw new Error(e.message); } display(); }
function doSave() { if (!google.gears.factory || !db) return;
var oName = document.getElementById('iName'); var oPhone = document.getElementById('iPhone'); var oMail = document.getElementById('iMail'); var currTime = new Date().getTime();