들어가며

웹 기반의 많은 응용 프로그램들이 출현하면서 자바스크립트를 기반으로 한 혁신적인 기술이 개발되었고, 그 중에 하나가 바로 이 nodejs 가 아닌가 한다.

이 nodejs는 자바스크립트를 기반으로 서버급의 빠른 응용 어플리케이션을 개발할 수 있게 해 주는 좋은 도구이다.

이 블로그에서는 nodejs와 마크베이스와의 연동을 통해 손쉽게 데이터를 웹기반으로 주고 받을 수 있도록 하는 과정에 대해 기술한다.

그리고, 마크베이스와 nodejs는 JDBC 드라이버를 통해 서로 통신하도록 하는 방법을 채택하였다.

사용된 환경은 마크베이스가 설치된 도커 이미지(ubuntu 14.04)를 사용했으나, 얼마든지 자신의 환경에 따라 변경이 가능할 것이다.

도커 기반의 마크베이스를 사용하는 법은 다음의 링크를 참조한다.

마크베이스 도커(Docker)에서 설치 및 실행하기

 

nodejs의 설치

패키지 다운 로드

nodejs는 nodejs.org 라는 공식 홈페이지에서 개발 및 배포하고 있다. 이 곳에서 자신의 적절한 환경에 맞는 패키지를 다운 받으면 된다.

아래는 홈페이지를 캡춰한 것이다. 여기에서는 Linux Binaries(x64)를  받아서 설치하는 것으로 하겠다.

wget https://nodejs.org/dist/v6.11.3/node-v6.11.3-linux-x64.tar.xz

패키지 압축 풀기

다운 받은 패키지는 다음과 같다.

machbase@d33024ca8d74:~/nodejs$ ls -al
total 9148
drwxr-xr-x 2 machbase machbase    4096 Sep  9 06:12 .
drwxr-xr-x 9 machbase machbase    4096 Sep  9 06:12 ..
-rw-r--r-- 1 machbase machbase 9356032 Sep  9 06:12 node-v6.11.3-linux-x64.tar.xz

xz 유틸리티가 없는 경우에는 (우분투) 다음과 같이 설치한다.

sudo apt-get update
sudo apt-get install xz-utils

다음과 같이 압축을 푼다.

xz -d node-v6.11.3-linux-x64.tar.xz
수행되면 node-v6.11.3-linux-x64.tar 나온다.
tar -xvf node-v6.11.3-linux-x64.tar 수행.

압축이 모두 풀리면 다음과 같은 디렉토리 구성이 된다.

achbase@d33024ca8d74:~/nodejs/node-v6.11.3-linux-x64$ ls -al
total 164
drwxr-xr-x 6 machbase machbase  4096 Sep  5 17:15 .
drwxr-xr-x 3 machbase machbase  4096 Sep  9 06:25 ..
-rw-r--r-- 1 machbase machbase 56054 Sep  5 17:15 CHANGELOG.md
-rw-r--r-- 1 machbase machbase 60255 Sep  5 17:15 LICENSE
-rw-r--r-- 1 machbase machbase 23304 Sep  5 17:15 README.md
drwxr-xr-x 2 machbase machbase  4096 Sep  5 17:15 bin
drwxr-xr-x 3 machbase machbase  4096 Sep  5 17:15 include
drwxr-xr-x 3 machbase machbase  4096 Sep  5 17:14 lib
drwxr-xr-x 5 machbase machbase  4096 Sep  5 17:14 share
machbase@d33024ca8d74:~/nodejs/node-v6.11.3-linux-x64$ 

런타임 패스 설정

실제 nodejs의 실행환경을 가져오기 위해 다음과 같이 bin 패스를 설정한다.

machbase@d33024ca8d74:~/nodejs/node-v6.11.3-linux-x64$ pwd
/home/machbase/nodejs/node-v6.11.3-linux-x64
machbase@d33024ca8d74:~/nodejs/node-v6.11.3-linux-x64$ export PATH=$PATH:/home/machbase/nodejs/node-v6.11.3-linux-x64/bin
machbase@d33024ca8d74:~/nodejs/node-v6.11.3-linux-x64$ which node
/home/machbase/nodejs/node-v6.11.3-linux-x64/bin/node
machbase@d33024ca8d74:~/nodejs/node-v6.11.3-linux-x64$ 

위와 같이 node 라는 실행화일이 설치된 것을 볼 수 있다.

 

도커를 위한 부가 패키지 설치(optional)

이 글에서 사용하는 공식 도커 패키지는 아무것도 설치되어 있지 않기에 다음과 같은 패키지를 설치한다.

다른 리눅스 패키지를 활용하는 경우 필요 없다.

sudo apt-get install default-jdk make g++

 

NPM 모듈 설치

마크베이스를 위한 전용 nodejs 모듈이 없기 때문에 jdbc를 통해 nodejs를 구동할 수 있는 모듈을 미리 설치해야 한다.

그 중에 대표적인 jdbc 모듈을 아래와 같이 설치한다.

machbase@d33024ca8d74:~/nodejs/node-v6.11.3-linux-x64$ npm install jdbc
> java@0.8.0 install /home/machbase/nodejs/node-v6.11.3-linux-x64/node_modules/java
> node-gyp rebuild
............... 생략 .............
`-- jdbc@0.5.1 
  `-- java@0.8.0 
    +-- async@2.0.1 
    +-- find-java-home@0.1.3 
    | `-- which@1.0.9 
    +-- glob@7.1.1 
    | +-- fs.realpath@1.0.0 
    | +-- inflight@1.0.6 
    | | `-- wrappy@1.0.2 
    | +-- inherits@2.0.3 
    | +-- minimatch@3.0.4 
    | | `-- brace-expansion@1.1.8 
    | |   +-- balanced-match@1.0.0 
    | |   `-- concat-map@0.0.1 
    | +-- once@1.4.0 
    | `-- path-is-absolute@1.0.1 
    +-- lodash@4.16.4 
    `-- nan@2.4.0 

npm WARN enoent ENOENT: no such file or directory, open '/home/machbase/nodejs/node-v6.11.3-linux-x64/package.json'
npm WARN node-v6.11.3-linux-x64 No description
npm WARN node-v6.11.3-linux-x64 No repository field.
npm WARN node-v6.11.3-linux-x64 No README data
npm WARN node-v6.11.3-linux-x64 No license field.
machbase@d33024ca8d74:~/nodejs/node-v6.11.3-linux-x64$ 

테스트를 위한 simple.js 만들기

다음은 JDBC 드라이버를 활용하여, v$tables 에서 테이블을 가져오는 질의인 select * from v$tables를 수행하는 js 화일 소스코드이다.

var JDBC = require('jdbc');
var jinst = require('jdbc/lib/jinst');

if (!jinst.isJvmCreated()) {
    jinst.addOption("-Xrs");
    jinst.setupClasspath(['/home/machbase/machbase_home/lib/machbase.jar']);
}

var config = {
    url :'jdbc:machbase://localhost:5656/mhdb',
    drivername: 'com.machbase.jdbc.driver',
    minpoolsize: 10,
    maxpoolsize: 100,
    user: 'SYS',
    password: 'MANAGER',
    properties: {}
};

var machdb = new JDBC(config);

machdb.initialize(function(err) {
    if (err) {
        console.log(err);
    }
});

machdb.reserve(function(err, connObj) {
    var conn = connObj.conn;
    conn.createStatement(function(err, statement) {
        if (err) {
            callback(err);
        } else {
            statement.executeQuery("SELECT * FROM v$tables limit 3;", function(err, resultset) {
                if (err) {
                    callback(err)
                } else {
                    // Convert the result set to an object array.
                    resultset.toObjArray(function(err, results) {
                        if (results.length > 0) {
                            console.log(results);
                        }
                    });
                }
            });
        }
    });
});

위에서 중요한 부분은 다음과 같다.

  • 마크베이스가 설치된 디렉토리의 jar 라이브러리를 지정해야 한다.
    • /home/machbase/machbase_home/lib/machbase.jar
  • JDBC URL을 다음과 같이 지정한다. (포트와 호스트IP를 적절하게 변경한다)
    • jdbc:machbase://localhost:5656/mhdb
  • 드라이버 Name도 적절하게 지정한다.
    • com.machbase.jdbc.driver

 

simple.js 실행하기

실행 화면은 다음과 같다.

machbase@d33024ca8d74:~/nodejs$ node simple.js 
[ { NAME: 'V$STORAGE_DC_TABLESPACES',
    TYPE: 1,
    DATABASE_ID: '-1',
    ID: '1000018',
    USER_ID: 0,
    COLCOUNT: 7 },
  { NAME: 'V$STORAGE_DC_TABLESPACE_DISKS',
    TYPE: 1,
    DATABASE_ID: '-1',
    ID: '1000019',
    USER_ID: 0,
    COLCOUNT: 9 },
  { NAME: 'V$STORAGE_DC_DWFILES',
    TYPE: 1,
    DATABASE_ID: '-1',
    ID: '1000027',
    USER_ID: 0,
    COLCOUNT: 16 } ]
machbase@d33024ca8d74:~/nodejs$ 

위와 같이 성공적으로 nodejs를 활용하여 마크베이스로부터 데이터를 읽는 코드가 완성되었다.

 


마크베이스(Machbase)를 Grafana와 연동하기 마크베이스(Machbase) 기반 천만건 데이터 실전 R 분석

Leave a Reply

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.