Node.js 프로그래밍을 하다보면, RDBMS 나 별도 서버가 필요한 NO-SQL까진 필요가 없고, 단순히 그냥 설정정도 파일로 남겨서 추후에 다시 실행될때 해당 파일을 읽어서 처리하고 싶을때가 종종 있다.
정말 별거 아닌 설정파일들이라, 사실 파일 읽고 파싱하고 다시 넣고... 어렵진 않지만 그냥 귀찮아서 chat-gpt한테 해달라고 하고싶을때가 한두번이 아니다.
이럴때 쓰는 nedb.
electron framework에서도 호환성이 좋다.
electron-builder를 통해 build시 sqlite3의 경우 윈도우용 rebuild과정에서 에러가 발생하는데, mac에서 이런거까지 일일히 신경쓰고 싶지도 않고, 고급query를 쓰는게 아니고 간단한 설정 값 정도만 넣는 용이라면 추천한다.
공식홈페이지 들어가면 개발자가 불쌍한 고양이 사진을 올리고 돕던가 돈달라고 하는데, 양심상 이용하는 사람이라면 커피값이라도 주면 좋을 듯 하다.
설치
$> npm install nedb --save
사용법
const Datastore = require('nedb')
// -------------- 상황에 따라 타입 선정하여 db 객체 생성 --------------
// 타입1.단순 사용
const db = new Datastore();
// 타입2.영구저장소(파일), 수동 로딩
const db = new Datastore({ filename: '{data.db 파일 경로}' });
db.loadDatabase(function (err) { // 콜백은 옵션
// 이제 명령어가 실행됨
});
// 타입3.영구저장소(파일), 자동 로딩
const db = new Datastore({ filename: '{data.db 파일 경로}', autoload: true });
// 바로 명령어 실행 가능
// 타입4. Node Webkit 앱 (예:nwtest)의 영구저장소
//예를 들어 Linux에서 데이터 파일은 ~/.config/nwtest/nedb-data/something.db
const path = require('path')
const db = new Datastore({ filename: path.join(require('nw.gui').App.dataPath, 'something.db') });
// ------------------------------------------------------------
// 저장하고자 하는 json 데이터 예제
var doc = {
hello: 'world',
n: 5,
today: new Date()
};
// INSERT 예제
db.insert(doc, function (err, newDoc) { // 콜백은 옵션
// newDoc 변수는 기존 doc에 _id (별도키값)이 포함되어 리턴
});
// SELECT 예제
db.find( {hello : 'world'}, function(err,docs){
// find의 첫번째 매개변수는 찾고자하는 항목들, docs는 포함된 모든 row를 리턴
});
// 단일 SELECT 예제
db.findOne( {hello : 'world'}, function(err,docs){
// 첫번째 매개변수는 찾고자하는 항목들, docs는 포함된 하나의 row를 리턴
});
// 업데이트 예제
db.update({ hello: 'world' }, { $set: { "n": 1 }, {}, function () {
// 첫번째 매개변수는 찾고자 하는 항목, 두번째는 변경하고자하는 대상값, 세번째는 옵션
});
// 업데이트 시도시 데이터가 없다면 insert 처리 예제
db.update({ hello: 'world' }, { $set: { "n": 1 }, {upsert : true}, function () {
// update + insert = upsert 라고 칭함.
});
// 삭제
db.remove({ system: 'solar' }, { multi: true }, function (err, numRemoved) {
// multi는 여러개인 경우 일괄 삭제 여부
});
자세한 내용은 공식홈페이지에서 확인이 가능하다.
실제 .db 파일을 보면 평문으로 들어가는걸 확인할 수 있다. 아마 별도 설정이 있지 않을까...
upsert가 true일 경우 update 날렸을때 동일 _id로 데이터가 무수히 쌓이는걸 확인할 수 있는데, 이는 정상이며 node.js 프로그램을 재구동했을때 최종 하나만 남고 나머지는 사라지는것을 확인할 수 있다. ( git issue 에서 개발자가 정상이고 의도임을 얘기)
nedb는 기본이 비동기식으로 되어있기 때문에, 동기식으로 원한다면 promise / async, await 를 이용하여 구현하자.
'데이터베이스' 카테고리의 다른 글
우분투에서 몽고디비 최초 실행시 실행안되는 이슈 (0) | 2023.11.21 |
---|