Server

[Oracle DB #3] Ubuntu 18.04 / node.js / Oracle 클라이언트

우아한 개발자 2022. 4. 26. 16:50

 

#0 AWS + nodejs 환경 구축 (node -v 반드시 14 이상)

https://jejestudy.tistory.com/13

 

AWS + nodejs + Vuejs

$ sudo apt-get update -> 우분트 서버 업데이트 $ curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash - $ sudo apt-get install nodejs $ sudo apt-get install npm -> Node Package Manager..

jejestudy.tistory.com

 

 

 

#1 오라클 모듈 설치 (node를 실행할 폴더에 들어가 설치 여기서는 ->  home/ubuntu/node-project/testNode)

sudo npm install oracledb

 

 

 

#2 Oracle Instant Client와 SDK 파일을 저장할 폴더 생성 후 ubuntu 권한 부여

sudo mkdir /opt/oracle

sudo chown -R ubuntu /opt/oracle

 

 

 

#3 오라클 홈페이지에서 아래 zip 파일들을 다운로드 한 후, 해당폴더(/opt/oracle)에 삽입 

http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html

-instantclient-basic-linux.x64-12.2.0.1.0.zip

-instantclient-sdk-linux.x64-12.2.0.1.0.zip.

 

 

 

#4 오라클 홈페이지에서 아래 zip 파일들을 다운로드 한 후, 해당폴더(/opt/oracle)에 삽입 

cd /opt/oracle 
sudo apt install unzip
unzip instantclient-basic-linux.x64-12.2.0.1.0.zip 
unzip instantclient-sdk-linux.x64-12.2.0.1.0.zip

 

 

#5 Oracle 클라이언트 라이브러리 Link 생성

 
sudo ln -s /opt/oracle/instantclient_12_2/libclntsh.so.12.1 /usr/local/lib/

 

 

 

#6 라이브러리 경로 입력 (LD_LIBRARY_PATH 에 /usr/local/lib 를 추가)

sudo sh -c "echo /opt/oracle/instantclient_12_2 > /etc/ld.so.conf.d/oracle-instantclient.conf"

sudo ldconfig

 

 

#7 libaio 설치

cd ~

sudo apt-get install -y libaio1

 

 

 

#8 권한 부여 후 dbconfig.js 파일 추가

sudo chown -R ubuntu /home/ubuntu/node-project/testNode/

 

dbconfig.js

module.exports = {
    user          : process.env.NODE_ORACLEDB_USER || "hr",

    // Instead of hard coding the password, consider prompting for it,
    // passing it in an environment variable via process.env, or using
    // External Authentication.
    password      : process.env.NODE_ORACLEDB_PASSWORD || "hr",

    // For information on connection strings see:
    // https://github.com/oracle/node-oracledb/blob/master/doc/api.md#connectionstrings
    connectString : process.env.NODE_ORACLEDB_CONNECTIONSTRING || "(DESCRIPTION =\n" +
        "    (ADDRESS = (PROTOCOL = TCP)(HOST = ip-172-31-34-242)(PORT = 1521))\n" +
        "    (CONNECT_DATA =\n" +
        "      (SERVER = DEDICATED)\n" +
        "      (SERVICE_NAME = XE)\n" +
        "    )\n" +
        "  )",


    // Setting externalAuth is optional.  It defaults to false.  See:
    // https://github.com/oracle/node-oracledb/blob/master/doc/api.md#extauth
    externalAuth  : process.env.NODE_ORACLEDB_EXTERNALAUTH ? true : false
};

app.js

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

/************************오라클 연결 설정  ************************/
var oracledb = require('oracledb');
var dbConfig = require('./dbconfig.js');


oracledb.getConnection(
    {
      user          : dbConfig.user,
      password      : dbConfig.password,
      connectString : dbConfig.connectString
    },
    function(err, connection)
    {
      if (err) {
        console.error(err.message);
        return;
      }
      connection.execute(
          "SELECT * FROM TAB",
          function(err, result)
          {
            if (err) {
              console.error(err.message);
              doRelease(connection);
              return;
            }
            console.log(result);
            //console.log(result.metaData);
            //console.log(result.rows);
            doRelease(connection);
          });
    });

function doRelease(connection)
{
  connection.release(
      function(err) {
        if (err) {
          console.error(err.message);
        }
      });
}
/************************오라클 연결 설정  ************************/


var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

app.set('port', process.env.PORT || 9000);

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

var server = app.listen(app.get('port'), function() {
console.log('Express server listening on port ' + server.address().port); });

 

 

 

#9 nodemon app.js 실행 시 연동 확인