본문 바로가기
Server/NodeJs

[NodeJS] NestJs Oracle DB 연결하기

by kigo23 2023. 3. 23.
반응형

오라클DB를 웹 환경(node)에서 작업하기 위하여 NestJS에서 오라클DB와 연결 하였습니다.

 

작업환경 : node v16.19.1, nest v9.2

 

우선 npm 에서 'oracledb' 패키지를 설치받아줍니다. NestJs는 타입스크립트이기 때문에 @types/oracledb도 같이 받아줘서 타입에러가 나지 않도록 해줍니다.

 

참고로 제가 받은 버전입니다. 혹시 잘 안되시면 버전을 맞춰서 해보세요

    "@types/oracledb": "^5.2.3",
    "oracledb": "^5.5.0",

npm i @types/oracledb oracledb

 

 

오라클 패키지를 설치하셨다면 오라클 클라이언트 파일을 다운받아줍니다.

아래 링크에서 다운받아 줍니다. 저는 21.9버전 설치했습니다.

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

 

Instant Client for Microsoft Windows (x64) 64-bit

We’re sorry. We could not find a match for your search. We suggest you try the following to help find what you’re looking for: Check the spelling of your keyword search. Use synonyms for the keyword you typed, for example, try "application" instead of

www.oracle.com

다운로드를 완료하셨다면 폴더 통째로 root에 옮겨줍니다.

root위치에 요렇게 넣어줍니다!

 

이제 코드를 작성해줍시다.

main.ts에서 설치한 oracledb 패키지를 import하고 설치했던 오라클 클라이언트를 실행하는 코드를 입력합니다.

//main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import * as oracledb from 'oracledb';

async function init() {
  const app = await NestFactory.create(AppModule);

  //oracle client 실행
  try {
    oracledb.initOracleClient({ libDir: './instantclient_21_9' });
  } catch (err) {
    console.error('undefined oracle client');
    console.error(err);
    process.exit(1);
  }

  await app.listen(3001);
}

init();

 

root에 dbconfig.ts 파일을 만들고 접속정보를 입력해줍니다.

(※dbconfig.ts는 꼭 gitignore에 등록해서 git서버에 올라가지 않도록 주의합니다)

//dbconfig.ts
export const oracleDbConfig: object = {
  user: 'USER',
  password: 'PASSWORD',
  connectString: '서버정보',
  externalAuth: false,
};

 

main.js에서 dbconfig.ts 를 임포트합니다.

oracle에 접속한 후 쿼리를 입력해 테스트 해봅니다.

//main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import * as oracledb from 'oracledb';
import { oracleDbConfig } from 'dbconfig';

async function init() {
  const app = await NestFactory.create(AppModule);

  //oracle client 실행
  try {
    oracledb.initOracleClient({ libDir: './instantclient_21_9' });
  } catch (err) {
    console.error('undefined oracle client');
    console.error(err);
    process.exit(1);
  }

  //oracle 접속
  let connection = await oracledb.getConnection(oracleDbConfig);
  let binds = {};
  let options = {
    outFormat: oracledb.OUT_FORMAT_OBJECT, // query result format
  };

  //query 실행
  let result = await connection.execute('select * from TABLE', binds, options);

  //접속 종료
  await connection.close();
  
  console.log(result);

  await app.listen(3001);
}

init();

 

다음과 같이 콘솔에 찍히는 것을 확인하실 수 있습니다.