관련 지식
javascript, node, database, nedb

프로그램을 만들면 데이터를 저장하는 상황이 반드시 발생합니다. 데이터가 적을 경우 어플리케이션의 특정 영역에 변수로 관리해도 상관 없습니다. 그러나 데이터 양이 많고 검색, 저장이 빈번하게 발생할 경우 트랜잭션 처리나 관리를 위해 DB를 사용하는 것이 좋습니다.

이미 다양한 환경에 골라서 쓸수 있는 좋은 DB는 매우 많이 있지만 그럼에도 조금 다른 특징을 가진 DB가 있어 소개하고자 합니다.

경로 : https://github.com/louischatriot/nedb
설치 : npm install nedb
버전 : 1.8.0

NeDB는 In-memory-database 로도 사용이 가능하고 persistant database로도 사용이 가능합니다. 100% 자바스크립트로만 개발된 데이터베이스라서 node.js 뿐 아니라 nw.jselectron, 브라우저에서도 사용이 가능합니다.

만약 단독 실행형 데이터베이스를 사용하기 부담스러운 환경이라면 자바스크립트 어느 환경에서도 붙여서 실행할 수 있는 NeDB는 최고의 선택이 될 수도 있습니다.

예시1. 세션 DB로 사용하기

node.js로 웹 어플리케이션을 개발할때 세션을 DB에 저장하기 위해 MongoDB나 Redis를 많이 사용합니다. 그러나 둘다 별도 설치를 필요로 하기 때문에 작은 규모의 환경에선 부담스러울 수 있습니다. NeDB는 connect-nedb-session 을 통하여 별도의 프로그램 설치없이 세션 DB로 사용 가능합니다.

경로 : https://github.com/louischatriot/connect-nedb-session
설치 : npm install connect-nedb-session
버전 : 0.0.3

아래 예시는 express 에서 NeDB를 세션 DB로 사용하는 코드 입니다.

  1. const session = require('express-session');
  2. const NedbStore = require('connect-nedb-session')(session);
  3. app.use(session({ resave: true,
  4. saveUninitialized: true,
  5. store: new NedbStore({ filename: 'session.nedb' }),
  6. cookie: {
  7. maxAge: 1000 * 60 * 60 * 24 * 31 // 쿠키 유효기간 31일
  8. },
  9. secret: 'uwotm8' }));

예시2. 어플리케이션에서 직접 사용하기

express 같은 프레임워크 기반이 아니더라도 사용이 가능합니다. 아래는 node.js 환경에서 직접 DB 파일에 접근하여 sid값이 일치하는 내용을 검색을 하는 예제 입니다.

  1. var Datastore = require('nedb');
  2. var db = new Datastore({ filename:'session.nedb', autoload:true });
  3. db.find({sid:'trdzcAjJTNEvzUiEihmwfLK-8SSCjvPt'}, function(err, docs) {
  4. console.log(docs);
  5. });

예시3. 브라우저에서 사용하기

브라우저에서는 메모리에만 저장되는 In-memory-database 으로 동작합니다. 따라서 쓰임에 제약이 생길수 밖에 없습니다. 페이지 전체에 대한 URL 이동이 발생하기 전까지만 데이터를 유지할수 있다는 것입니다.

  1. <script src="nedb.min.js"></script>
  2. <script>
  3. var db = new Nedb(); // Create an in-memory only datastore
  4. db.insert({ planet: 'Earth' }, function (err) {
  5. db.find({}, function (err, docs) {
  6. // docs contains the two planets Earth and Mars
  7. });
  8. });
  9. </script>

위와 같은 코드를 실행하면 {planet:'Earth'} 값이 저장되고 search, update 등을 할 수 있지만 만약 다른 URL로 이동하게 되면 데이터는 없어지게 됩니다. 따라서 브라우저 환경에서 사용하고 싶은 경우 SPA로 만든 웹사이트여야 효율적으로 이용할 수 있을것입니다. 만약 SPA로 만든 웹사이트가 아니라면 NeDB와 sessionStroagelocalStorage 를 같이 이용하여 데이터베이스 데이터를 지속시킬수도 있습니다.