강좌 & 팁
글 수 2,412
2014.09.15 16:21:57 (*.134.169.166)
40117
Node.js 가 퍼지면서 동시에 가장 많이 퍼진 데이터베이스는
몽고디비가 당연 압권이죠..
그런데
이놈이 그리 가볍지는 않습니다.
노드를 사용하면서 가볍게 사용할 만한 NoSQL 디비가
생각보다 많지 않습니다.
이럴때 등장한 것이 TingoDB 죠..
이 디비는 몽고디비와 API 호환성을 가지면서 로컬 디비입니다.
즉 파일 기반으로 디비 서버가 없고 라이브러리 형식의 디비입니다.
그러면서 몽고디비와 많은 부분이 호환됩니다.
모듈만 설치하면 바로 사용할 수 있고 패키지 배포시 디비설치에 관련된
처리가 따로 없습니다.
몽고디비와 많은 부분이 유사하기 때문에 가볍게 사용하다가
몽고디비 서버를 운영할 때 아주 작은 부분만 수정하면 확장이 가능하다는 것이
또한 매력입니다.
이번 강좌는 이 TingoDB 를 한번 소개해 보겠습니다.
3. 설치
TingoDB의 공식 홈페이지는 다음과 같습니다.
http://www.tingodb.com/
저장소는 다음과 같습니다.
https://github.com/sergeyksv/tingodb
다음과 같이 설치 합니다.
$ npm install tingodb
tingodb@0.2.1 node_modules/tingodb
├── safe@0.1.4
├── async@0.9.0
└── lodash@2.4.1
별 문제 없이 모듈이 설치 됩니다.
4. 간단한 시험
먼저 컬렉션을 하나 만들고 .. 샘플을 넣고 ... 찾고.. 수정하고.. 지우는
아주 기본적인 것을 해 보도록 하겠습니다.
tingodb_basic.js 라는 이름으로 만들 겁니다.
다음이 소스입니다.
4.1 소스
설명이 굳이 필요할까 생각됩니다.
순차적이고 이벤트처리가 중심이라서 async 모듈을 사용했습니다.
한글 변수명을 썼는데 덕분에 소스를 그대로 보시고서 이해하실 수 있다고
생각합니다.
그래서 따로 설명하지 않겠습니다.
몽고 디비를 강좌하는 것은 아니라서요 ^^
-----------[tingodb_basic.js]-----------------------------------------------------------
var async = require( 'async' );
var 차례대로_진행_하기 = async.series;
console.log( 'TingdDB 시험을 진행합니다.' );
console.log( '데이터 베이스와 컬렉션을 선언합니다.');
var 데이터베이스_모듈 = require('tingodb')().Db;
var 데이터베이스 = new 데이터베이스_모듈('./db/', {});
var 전화번호_컬렉션 = null;
//////////////////////////////////////////////////////////////////////
차례대로_진행_하기({
//////////////////////////////////////////////////////////////////////
//====================================================================
'1. 전화번호 컬렉션을 새로 생성합니다.' : function(다음_진행_하기){
console.log( '1. 전화번호 컬렉션을 새로 생성합니다.');
데이터베이스.createCollection( "전화번호", function( 에러, 컬렉션 ){
if( 에러 ) {
console.log( 에러 );
다음_진행_하기( '전화번호 컬렉션 생성 실패' );
return;
}
전화번호_컬렉션 = 컬렉션;
다음_진행_하기(null);
return;
});
},
//====================================================================
'2. 컬렉션 목록을 보여 줍니다.' : function(다음_진행_하기){
console.log( '2. 컬렉션 목록을 보여 줍니다.' );
데이터베이스.collectionNames( function( 에러, 컬렉션들 ){
if( 에러 ) {
console.log( 에러 );
다음_진행_하기( '전화번호 컬렉션 목록 보기 실패' );
return;
}
console.log(컬렉션들);
다음_진행_하기(null);
return;
});
},
//====================================================================
'3. 전화번호에 데이터를 넣습니다.' : function(다음_진행_하기){
console.log( '3. 전화번호에 데이터를 넣습니다.');
var 전화번호_목록 = [
{ 이름 : '아무개1', 전화 : '010-0123-0001' },
{ 이름 : '아무개2', 전화 : '010-0123-0002' },
{ 이름 : '아무개3', 전화 : '010-0123-0003' },
];
전화번호_컬렉션.insert( 전화번호_목록, function(에러,처리결과){
if( 에러 ) {
console.log( 에러 );
다음_진행_하기( '전화번호 목록 등록 실패' );
return;
}
다음_진행_하기(null);
return;
});
},
//====================================================================
'4.넣은 전화번호를 열거 합니다.' : function(다음_진행_하기){
console.log( '4. 넣은 전화번호를 열거 합니다.');
전화번호_컬렉션.find().toArray(function( 에러, 처리결과 ) {
if( 에러 ) {
console.log( 에러 );
다음_진행_하기( '전화번호 목록 열거 실패' );
return;
}
console.log( 처리결과 );
다음_진행_하기(null);
return;
});
},
//====================================================================
'5.컬렉션을 삭제합니다.' : function(다음_진행_하기){
console.log( '5. 컬렉션을 삭제합니다.');
전화번호_컬렉션.drop(function( 에러, 처리결과 ) {
if( 에러 ) {
console.log( 에러 );
다음_진행_하기( '전화번호 목록 컬렉션 삭제 실패' );
return;
}
console.log( 처리결과 );
다음_진행_하기(null);
return;
});
},
//====================================================================
'6. 컬렉션 목록을 보여 줍니다.' : function(다음_진행_하기){
console.log( '6. 컬렉션 목록을 보여 줍니다.' );
데이터베이스.collectionNames( function( 에러, 컬렉션들 ){
if( 에러 ) {
console.log( 에러 );
다음_진행_하기( '전화번호 컬렉션 목록 보기 실패' );
return;
}
console.log(컬렉션들);
다음_진행_하기(null);
return;
});
},
//====================================================================
'7.삭제한 전화번호를 열거 합니다.' : function(다음_진행_하기){
console.log( '7. 삭제한 전화번호를 열거 합니다.');
전화번호_컬렉션.find().toArray(function( 에러, 처리결과 ) {
if( 에러 ) {
console.log( 에러 );
console.log( '전화번호 목록 열거 실패' );
}else{
console.log( 처리결과 );
console.log( '전화번호 목록 열거 성공' );
}
다음_진행_하기(null);
return;
});
},
//====================================================================
'8. 전화번호 컬렉션을 새로 생성합니다.' : function(다음_진행_하기){
console.log( '8. 전화번호 컬렉션을 새로 생성합니다.');
데이터베이스.createCollection( "전화번호", function( 에러, 컬렉션 ){
if( 에러 ) {
console.log( 에러 );
다음_진행_하기( '전화번호 컬렉션 생성 실패' );
return;
}
전화번호_컬렉션 = 컬렉션;
다음_진행_하기(null);
return;
});
},
//====================================================================
'9. 전화번호에 데이터를 넣습니다.' : function(다음_진행_하기){
console.log( '9. 전화번호에 데이터를 넣습니다.');
var 전화번호_목록 = [
{ 이름 : '홍길동1', 전화 : '010-9123-0001' },
{ 이름 : '홍길동2', 전화 : '010-9123-0002' },
{ 이름 : '홍길동3', 전화 : '010-9123-0003' },
];
전화번호_컬렉션.insert( 전화번호_목록, function(에러,처리결과){
if( 에러 ) {
console.log( 에러 );
다음_진행_하기( '전화번호 목록 등록 실패' );
return;
}
다음_진행_하기(null);
return;
});
},
//====================================================================
'10.새로 넣은 전화번호를 열거 합니다.' : function(다음_진행_하기){
console.log( '10.새로 넣은 전화번호를 열거 합니다.');
전화번호_컬렉션.find().toArray(function( 에러, 처리결과 ) {
if( 에러 ) {
console.log( 에러 );
다음_진행_하기( '수정된 전화번호 목록 열거 실패' );
return;
}
console.log( 처리결과 );
다음_진행_하기(null);
return;
});
},
//====================================================================
'11.홍길동 2 를 찾습니다.' : function(다음_진행_하기){
console.log( '11. 홍길동 2 를 찾습니다.');
전화번호_컬렉션.findOne({ 이름 : '홍길동2' }, function( 에러, 처리결과 ) {
if( 에러 ) {
console.log( 에러 );
다음_진행_하기( '홍길동2 찾기 실패' );
return;
}
console.log( 처리결과 );
다음_진행_하기(null);
return;
});
},
//====================================================================
'12.홍길동 4 를 찾습니다.' : function(다음_진행_하기){
console.log( '12. 홍길동 4 를 찾습니다.');
전화번호_컬렉션.findOne({ 이름 : '홍길동4' }, function( 에러, 처리결과 ) {
if( 에러 ) {
console.log( 에러 );
다음_진행_하기( '홍길동4 찾기 실패' );
return;
}
console.log( 처리결과 );
다음_진행_하기(null);
return;
});
},
//====================================================================
'13. 홍길동 2의 이름과 전화 번호를 바꿉니다.' : function(다음_진행_하기){
console.log( '13. 홍길동 2의 이름과 전화 번호를 바꿉니다.');
전화번호_컬렉션.update({ 이름 : '홍길동2' }, { 이름 : '홍길동4', 전화 : '010-9123-9002' }, function( 에러, 처리결과 ) {
if( 에러 ) {
console.log( 에러 );
다음_진행_하기( '홍길동2 전화번호 바꾸기 실패' );
return;
}
console.log( 처리결과 );
다음_진행_하기(null);
return;
});
},
//====================================================================
'14.수정된 전화번호를 열거 합니다.' : function(다음_진행_하기){
console.log( '14. 수정된 전화번호를 열거 합니다.');
전화번호_컬렉션.find().toArray(function( 에러, 처리결과 ) {
if( 에러 ) {
console.log( 에러 );
다음_진행_하기( '수정된 전화번호 목록 열거 실패' );
return;
}
console.log( 처리결과 );
다음_진행_하기(null);
return;
});
},
//====================================================================
'15. 홍길동 4의 이름만 바꿉니다.' : function(다음_진행_하기){
console.log( '15. 홍길동 4의 이름만 바꿉니다.');
전화번호_컬렉션.update({ 이름 : '홍길동4' }, {$set:{이름 : '홍길동2'}} , function( 에러, 처리결과 ) {
if( 에러 ) {
console.log( 에러 );
다음_진행_하기( '홍길동2 전화번호 바꾸기 실패' );
return;
}
console.log( 처리결과 );
다음_진행_하기(null);
return;
});
},
//====================================================================
'16.수정된 전화번호를 열거 합니다.' : function(다음_진행_하기){
console.log( '16. 수정된 전화번호를 열거 합니다.');
전화번호_컬렉션.find().toArray(function( 에러, 처리결과 ) {
if( 에러 ) {
console.log( 에러 );
다음_진행_하기( '수정된 전화번호 목록 열거 실패' );
return;
}
console.log( 처리결과 );
다음_진행_하기(null);
return;
});
},
//====================================================================
'17. 홍길동 3을 삭제합니다.' : function(다음_진행_하기){
console.log( '17. 홍길동 3을 삭제합니다.');
전화번호_컬렉션.remove({ 이름 : '홍길동3' }, {w:1},function( 에러, 처리결과 ) {
if( 에러 ) {
console.log( 에러 );
다음_진행_하기( '홍길동3 삭제 실패' );
return;
}
console.log( 처리결과 );
다음_진행_하기(null);
return;
});
},
//====================================================================
'18.삭제 처리된 전화번호를 열거 합니다.' : function(다음_진행_하기){
console.log( '18.삭제 처리된 전화번호를 열거 합니다.');
전화번호_컬렉션.find().toArray(function( 에러, 처리결과 ) {
if( 에러 ) {
console.log( 에러 );
다음_진행_하기( '수정된 전화번호 목록 열거 실패' );
return;
}
console.log( 처리결과 );
다음_진행_하기(null);
return;
});
},
//====================================================================
//////////////////////////////////////////////////////////////////////
},// 차례대로_진행_하는 항목 들 끝 표시
//////////////////////////////////////////////////////////////////////
//// 마지막 종료 처리
//////////////////////////////////////////////////////////////////////
function( 에러, 결과들) {
데이터베이스.close();
if( 에러 ) {
console.log( '에러 : ' + 에러 );
process.exit(1);
return;
}
console.log( '모든 처리가 끝났습니다.' );
process.exit(0);
});
//////////////////////////////////////////////////////////////////////
//// 순차_처리_하기 끝
//////////////////////////////////////////////////////////////////////
-----------[tingodb_basic.js]-----------------------------------------------------------