원문 링크 - http://www.catonmat.net/blog/nodejs-modules-cradle/

본 게시글은 원저자의 허락을 얻어 번역한 것입니다.

1회 연재 - dnode (RPC 라이브러리)

2회 연재 - optimist (옵션 파서)

3회 연재 - lazy (lazy 리스트 처리)

4회 연재 - request (HTTP 스트림 처리)

5회 연재 - hashish (해시 처리)

6회 연재 - read (쉬운 표준 입력 처리)

7회 연재 - ntwitter (트위터 API)

8회 연재 - socket.io (웹소켓 통신)

9회 연재 - redis (redis 클라이언트 라이브러리)

10회 연재 - express (경량의 고속 웹 프레임워크)

11회 연재 - semvar (버전 넘버링 처리)

오늘 소개할 모듈은 캐싱을 지원하는 node.js용 고수준 CouchDB 클라이언트인 cradle이다. cracle은 Alexis Sellier (cloudhead)에 의해 작성됐다.

cradle은 대부분의 CouchDB 클라이언트들보다 고수준이다. 때문에 Couch DB의 REST API에 대한 지식이 거의 필요없다. cradle은 내장 write-through 캐싱(역자주: 캐시가 변경됐을 때, 이에 해당되는 실제 메모리의 내용을 같이 업데이트 해주는 캐시 쓰기 기법. 좀더 자세한 내용은 검색을 해보기 바람) 을 통해 빠른 처리 속도를 제공하며 문서의 업데이트와 삭제를 쉽게 해준다. cradle은 CouchDB와 Node.js의 멋진 결합을 통해 만들어졌다.

다음 예제는 cradle을 사용하는 간단한 방법을 보여준다.

var cradle = require('cradle');
var db = new(cradle.Connection)().database('starwars');

db.get('vader', function (err, doc) {
    doc.name; // 'Darth Vader'
    assert.equal(doc.force, 'dark');
});

db.save('skywalker', {
    force: 'light',
    name: 'Luke Skywalker'
}, function (err, res) {
    if (err) {
        // Handle error
    } else {
        // Handle success
    }
});

cradle은 DB 생성과 같이 CouchDB가 지원하는 API의 모든 기능을 제공한다.

var db = c.database('starwars');
db.create();

db가 존재하는지 체크:

db.exists(function (err, exists) {
  if (err) {
    console.log('error', err);
  } else if (exists) {
    console.log('the force is with you.');
  } else {
    console.log('database does not exists.');
    db.create();
    /* populate design documents */
  }
});

db 삭제:

db.destroy(cb);

document 가져오기:

db.get('vader', function (err, doc) {
    console.log(doc);
});

view 쿼리하기:

db.view('characters/all', function (err, res) {
    res.forEach(function (row) {
        console.log(row.name + " is on the " +
            row.force + " side of the force.");
    });
});

document 생성 및 업데이트:

db.save('vader', {
    name: 'darth', force: 'dark'
}, function (err, res) {
    // Handle response
});

view 생성:

db.save('_design/characters', {
    all: {
        map: function (doc) {
            if (doc.name) emit(doc.name, doc);
        }
    },
    darkside: {
        map: function (doc) {
            if (doc.name && doc.force == 'dark') {
                emit(null, doc);
            }
        }
    }
});

document 삭제:

db.remove('luke', '1-94B6F82', function (err, res) {
    // Handle response
});

cradle은 또한 스트리밍이나 Changes API, 그외 여러 기능들을 제공한다. 더 자세한 내용은 cradle 도움말을 참조해라 .

cradle은 다음과 같은 npm 명령으로 설치할 수 있다.

npm install cradle

Cradle의 GitHub 사이트: https://github.com/cloudhead/cradle.

Enjoy!

If you love these articles, subscribe to my blog for more, follow me on Twitter to find about my adventures, and watch me produce code on GitHub!