반응형

안녕하세요.

Node.js에서 oracledb 라이브러리를 통한 오라클 연결 방법입니다.

 

▼사전 준비 작업

- Node 설치

  https://meyouus.tistory.com/62 참고

 

- Oracle Instance Client 설치

  다운로드 페이지 : https://www.oracle.com/database/technologies/instant-client/downloads.html

  설치 참고 :  https://sora-muck.tistory.com/12

 

- Node 개발 편집기로 Visual Studio Code 설치

  다운로드 페이지 : https://code.visualstudio.com/nodejs

  설치 참고 : https://meyouus.tistory.com/21

 

- Request / Response 테스트를 위한 Postman 설치
  다운로드 페이지 : https://www.getpostman.com/downloads/

  사용법 : https://meetup.toast.com/posts/107

 

▼ oracledb 모듈(라이브러리) 설치

npm install oracledb --save

 

▼ express 모듈 설치 모듈(라이브러리) 설치

npm install express --save

 

▼ body-parser 모듈 설치

npm install body-parser --save

▼ dbConfig.js, app.js 파일 생성

 - dbConfig.js : db 연결 정보

/*  DB Info */
module.exports = 
{
    user : process.env.NODE_ORACLEDB_USER || "*****",
    password : process.env.NODE_ORACLEDB_PASSWOR || "********",
    connectString : process.env.NODE_ORACLEDB_CONNECTIONSTRING || "localhost/orcl"
}

 

 - app.js : Oracle 연결, CURD 처리, Request / Response 처리   

var oracledb = require('oracledb');
var dbConfig = require('../config/dbConfig');
// Express 기본 모듈 불러오기
var express = require('express')
  , http = require('http')
  , path = require('path');

// 익스프레스 객체 생성
var app = express();
 
// 기본 속성 설정
app.set('port', process.env.PORT || 3000);

// body-parser
var bodyParser = require('body-parser');

app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());

// 라우터 객체 참조
var router = express.Router();

// Oracle Auto Commit 설정
oracledb.autoCommit = true;

// 데이터 조회 처리
router.post('/dbTestSelect', function(request, response){

    oracledb.getConnection({
        user            : dbConfig.user,
        password        : dbConfig.password,
        connectString   : dbConfig.connectString
    },
    function(err, connection) {
        if (err) {
            console.error(err.message);
            return;
        }

        let query = 
            'select * ' +
            '   from emp';

        connection.execute(query, [], function (err, result) {
            if (err) {
                console.error(err.message);
                doRelease(connection);
                return;
            }
            console.log(result.rows);                   // 데이터
            doRelease(connection, result.rows);         // Connection 해제
        });
    });    

    // DB 연결 해제
    function doRelease(connection, rowList) {
        connection.release(function (err) {
            if (err) {
                console.error(err.message);
            }

            // DB종료까지 모두 완료되었을 시 응답 데이터 반환
            console.log('list size: ' + rowList.length);
            
            response.send(rowList);
        });
    }
});


// 데이터 입력 처리
router.post('/dbTestInsert', function(request, response){

    oracledb.getConnection({
        user            : dbConfig.user,
        password        : dbConfig.password,
        connectString   : dbConfig.connectString
    },
    function(err, connection) {
        if (err) {
            console.error(err.message);
            return;
        }

        // PrepareStatement 구조
        let query = 
            'INSERT INTO EMP( EMPNO ,ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) ' +
              'VALUES( :EMPNO ,:ENAME, :JOB, :MGR, SYSDATE, :SAL, :COMM, :DEPTNO )';

        let binddata = [
            Number(request.body.empno),
            request.body.ename,
            request.body.job,
            request.body.mgr,
            Number(request.body.sal),
            Number(request.body.comm),
            Number(request.body.deptno)            
        ];

        connection.execute(query, binddata, function (err, result) {
            if (err) {
                console.error(err.message);
                doRelease(connection);
                return;
            }
            console.log('Row Insert: ' + result.rowsAffected);

            doRelease(connection, result.rowsAffected);         // Connection 해제
        });
    });    

    // DB 연결 해제
    function doRelease(connection, result) {
        connection.release(function (err) {
            if (err) {
                console.error(err.message);
            }

            // DB종료까지 모두 완료되었을 시 응답 데이터 반환
            response.send(''+result);
        });
    }
});

// 라우터 객체를 app 객체에 등록
app.use('/', router);
 
 
// 등록되지 않은 패스에 대해 페이지 오류 응답
app.all('*', function(req, res) {
    res.status(404).send('<h1>ERROR - 페이지를 찾을 수 없습니다.</h1>');
});
 
 
// Express 서버 시작
http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

 

▼ http://localhost:3000/dbTestSelect 실행결과
    정상적으로 데이터가 조회됨

 

http://localhost:3000/dbTestInsert 데이터 입력

APP.zip
0.01MB

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기