기본 모듈 crypto 를 이용해서 파일의 md5sum 을 구하는 스크립트를 만들어보자. 별도로 제공이 안되므로 직접 만들어써야 한다. 일단 아래와 같이 만들어보면 md5 뿐만 아니라 sha1 에 대한 checksum 을 쉽게 구할 수도 있을 것이다.
  • 동기IO를 이용한 방법 (파일을 조금씩 읽어서 처리하는 방법) => Windows 에서는 에러가 발생하고 제대로 실행되지 않는다. 원인을 찾아보려고 했으나, 알 수가 없다. 혹시 누구 아시는분? node.js v0.6.11 에서 문제가 있었으나, v0.6.12 에서 잘 되고 있다.

    var fs     = require('fs');
    var crypto = require('crypto');
     
    var filename = 'walk_test.js';
    function md5sum(filename) {
      var genChecksum = null;
      var checksum = crypto.createHash('md5');
      var bytesRead = 1;
      var pos = 0
      var buffer = new Buffer(1024*64); // 64Kbyte
      var fd = fs.openSync(filename, 'r');
      var data = null;
      while (bytesRead > 0) {
        bytesRead = fs.readSync(fd, buffer, 0, buffer.length, pos);
        pos += bytesRead;
        if (bytesRead === buffer.length) {
          checksum.update(buffer);
        } else {
          data = buffer.slice(0, bytesRead);
          checksum.update(data);
        }
      }
      fs.closeSync(fd);
      genChecksum = checksum.digest('hex');
      return genChecksum;
    }
    
    console.log('checksum is : ' + md5sum(filename));
    
  • 동기IO를 이용한 방법 (파일은 한번에 읽어서 처리하는 방법) ⇒ 주의 : 한번에 큰 파일을 읽어서 처리하므로, 메모리를 많이 소모하게 될 것이다.

    var fs     = require('fs');
    var crypto = require('crypto');
     
    var filename = 'walk_test.js';
     
    function md5sum(filename) {
      var genChecksum = null;
      var checksum = crypto.createHash('md5');
      var data = fs.readFileSync(filename);
      checksum.update(data);
      genChecksum = checksum.digest('hex');
      return genChecksum;
    }
     
    console.log('checksum is : ' + md5sum(filename));
    
  • 비동기IO를 이용한 방법

    var fs     = require('fs');
    var crypto = require('crypto');
     
    var filename = 'walk_test.js';
    var genChecksum = null;
    var checksum = crypto.createHash('md5');
    var fin = fs.ReadStream(filename);
    fin.on('data', function(data){
      checksum.update(data);
    });
     
    fin.on('end', function(){
      genChecksum = checksum.digest('hex');
      console.log('checksum is : ' + genChecksum);
    });
    



node.js 에도 Ruby 의 rvm 와 비슷한 툴이 제공됩니다. 바로 nvm 이지요.

설치방법은 아래와 같습니다. (FreeBSD에서는 ./nvm/nvm.sh 를 열어서 make 를 gmake 로 바꾸어주고 사용합니다.)

$ git clone git://github.com/creationix/nvm.git ~/.nvm
$ echo 'source ~/.nvm/nvm.sh' >> ~/.profile; source ~/.profile
$ nvm install v0.6.11
$ nvm use v0.6.11
$ nvm alias default v0.6.11
$ node -v
v0.6.11

이외에도 아래의 툴들도 고려해볼 만 하니 살펴봐주세요.


+ Recent posts