[프로그래머]야근방지

node.js 오라클 접속하기...

어리버리_ 2020. 2. 4. 19:44

환경은 Centos 7 , Node.js 12.14.1 , Oracle 11g 기준...


1. node.js 설치

1.1 nvm 설치

nvm 으로 설치하는 이유는 npm 으로 설치 가능한 oracleDB 요놈이 node.js 8.x 이상에서만 구동되는놈임

다른 리포지터리에서 버전명을 추가해주고 설치할 수 있지만 nvm 으로 설치하면 편안(?) 하게 설치 가능

가급적 TLS 버전 (nvm 리스트에 표시됨) 을 사용할것..!!


curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash


1.2 nvm 설치 후 콘솔 터미날 재시작

1.3 버전확인

nvm --version

1.4 nodejs 버전 리스트업

nvm ls-remote

1.5 node.js 설치

nvm install [리스트업 버전명]

1.6 node.js , npm 버전 확인

node -v

npm -v


2. 오라클 연동 설치

2.1 npm oracledb 설치

npm install oracledb

2.2 oracle client 설치

https://oracle.github.io/node-oracledb/INSTALL.html#prerequisites

[3.2.4항] 내용 참고

무료 oracle instant client 'basic' rpm 설치

https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html

에서 basic package(RPM) 버전 다운로드 후 리눅스 서버에 업로드

후에

yum install oracle-instantclient19.5-basic-19.5.0.0.0-1.x86_64.rpm

명령으로 설치

클라이언트 19.x 버전 이상이면 설정은 지가 알아서 함

2.3 connection string 설정

/usr/lib/oracle/19.5/client64/lib/network/admin 경로에 tnsnames.ora 파일 생성

// 테스트서버

TEST_SVR = 

  (DESCRIPTION = 

    (ADDRESS = (PROTOCOL = TCP)(HOST = [HOST_IP_ADDRESS ex : 127.0.0.1])(PORT = 1521))

    (CONNECT_DATA = 

      (SERVER = DEDICATED)

      (SERVICE_NAME = ORCL)

    )

  )

의 형태로 connection string 을 생성해줌...

3. node.js 접속 테스트

3.1 node.js Express App 작성

3.2 config.js 파일 하나 만들어서 다음과 같이 작성

module.exports = {

user          : "user_name", // oracle server 사용자명

password      : "user_passwd", // oracle server 사용자 비밀번호

connectString : "TEST_SVR", // 2.3 항목에서 설정한 TNS_NAME 설정

externalAuth  :  false // 외부 인증 사용여부 false 로 설정

};

3.3 node.js Express App 의 users.js 파일에 다음과 같이 테스트 코드 작성


var express = require('express');

var router = express.Router();

var oracleDb = require('oracledb');

var dbConfig = require('../config/dbconfig');


/* GET users listing. */

router.get('/', function(req, res, next) {

  run().then(function(result){

    res.send(result);

  }).catch(function(err){

    res.send(err);

  });

});


function run(){

  return new Promise(function(resolve,reject){

    (async() => {

      let connection;

try{

  connection = await oracleDb.getConnection({

    user          : dbConfig.user,

    password      : dbConfig.password,

    connectString : dbConfig.connectString

  });

  var sql = "select * from tab";

  const result = await connection.execute(sql,

  [],

  {outFormat : oracleDb.OBJECT});

  //console.log(result.rows);

  var jArray = new Array();

  for(const row of result.rows)

  {

    var rtnJson = new Object();

    rtnJson.TNAME = row.TNAME.toString();

    rtnJson.TABTYPE = row.TABTYPE.toString();

    jArray.push(rtnJson);

  }



  return resolve(jArray);

} catch(err) {

  console.log(err);

  return reject(err);

} finally {

  if(connection){

    try{

      await connection.close();

    } catch (err){

      return reject(err);

    }

  }

}

      })();

    });

}

module.exports = router;

3.4 npm start 로 구동

3.5 크롬이나 익스에서 http://localhost:3000/users

3.6 결과확인