반응형

바쁜분들을 위해 그리고 기초는 있다란 가정하에 3줄 요약
1. npm install oracledb@5.2.0

2. 아래 링크로 접속하여 client 설치 후 yum으로 install
https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html
자신의 오라클 버전에 맞는 파일 다운로드(11g인 경우 Version 11.2.0.4.0의 RPM파일 다운로드)
 yum install oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm

3. vi ~/.bashrc를 입력해서 환경변수 설정
export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib:${LD_LIBRARY_PATH}

안 바쁘면 이제 시작~

보통 node.js로 oracle로 db connection을 하려면 npm install oracledb로 oracledb를 설치 후 아래와 같이 하기 마련이다.
dbConfig.js에 DB 연결 정보를 설정해 두고

// Oracle DB 연결 정보
const dbConfig = {
    user: 'myid',
    password: 'pwd123',
    connectString : "(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 200.100.80.10)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = pos)))"
  };

  module.exports = dbConfig;


이를 require로 불러와서 getConnection으로 연결 후 DB조회, 처리
 

const
oracledb = require('oracledb');
const dbConfig = require('./dbConfig.js'); // dbConfig 파일을 불러옴

oracledb.getConnection(dbConfig, (err, connection) => {
    if (err) {
      console.error('Error connecting to Oracle:', err.message);
      process.exit(1);
      return;
    }
    console.log('=======');
    // 연결이 성공한 경우, 쿼리 실행
    connection.execute(
      'SELECT * FROM YOUR_TABLE', // 적절한 테이블명으로 변경
      [], // 바인드 변수 배열 (여기서는 사용하지 않음)
      { resultSet: true, outFormat: oracledb.OUT_FORMAT_OBJECT },
      (err, result) => {
        if (err) {
          console.error('Error executing query:', err.message);
        } else {
          console.log('Query result:', result.rows);
        }
 
        // 연결 종료
        connection.close((err) => {
          if (err) {
            console.error('Error closing connection:', err.message);
          } else {
            console.log('Connection closed.');
          }
        });
      }
    );
  });


그런데 안된다.
절대 안된다.

thin모드를 지원하지 않는단다.
도대체 왜??????

자랑스럽게 node oracledb 6.0에선 Thin mode를 지원한다고 발표한 상태다.


설치된 oracledb 모듈의 버전도 6.0을 넘어 6.2였다.

이윤즉슨 oracledb 모듈 버전이 6.0으로 올라서면서 thin을 지원하지만 
oracle 11g는 6.0으로 올려도 지원 자체가 불가능하다.
시간 많으면 여기가서 읽어보시라.
https://node-oracledb.readthedocs.io/en/latest/user_guide/appendix_a.html#id1

thin 모드와 thick 모드가 궁금하다면 chat gpt 센세에게 물어보면 잘 가르쳐 주신다.



결론은 node.js가 설치된 서버에 별도의 client를 설치해줘야만 한다.
또한 6.2버전을 thick 모드를 지원하는 5.2.0으로 다운그레이드를 해줘야 한다.
아니면 초장부터 5.2.0으로 설치 하던지
이렇게 말이다.
npm install oracledb@5.2.0

일단 oracledb는 5.2.0으로 설치완료했고
다음엔 망할 클라이언트 설치다.
바쁘면 그냥 아래 링크 눌러 다운받으면 된다.
* 오라클 11g용 Instant Client rpm파일의 다이렉트 링크는 아래와 같다.
https://download.oracle.com/otn/linux/instantclient/11204/oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm

바쁘지 않으면 천천히 읽어 내려가면 된다.

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

3.2.1을 보면 Node-oracledb Installation on Linux x86_64 with Instant Client ZIP files가 보일것이다.
이걸 선택해주자.

 

그럼 node-oracledb.readthedocs.io란 사이트로 이동 할 것이다.
https://node-oracledb.readthedocs.io/en/latest/user_guide/installation.html#instzip

2.4.3.1. Oracle Instant Client ZIP Files에 x86-634 64-bit가 보일것이다.

이걸 선택하면 최종 종착지는 oracle.com이다.
https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html

여기서 자신의 오라클 DB 버전에 맞는걸 다운받아 주면 된다.
내 경우 oracle 11g이므로 version 11.2.0.4.0을 눌러 Instant Client Package (RPM)을 다운 받았다.
RPM은 Redhat Package Manager의 약자로 Windows를 예를들면 setup.exe와 비슷하다고 볼 수 있다
그래야 yum으로 리눅스에서 install이 가능하기 때문인데 
YUM은 Yellowdog Update Manager의 약자로 RPM의 단점인 의존성 문제를 해결하기 위해서 제공되는 것으로 특정 패키지를 설치할 때 의존성이 있는 다른 패키지들을 자동으로 먼저 설치해주는 지능적인 툴이다.


다운받은 파일을 적당한 곳에 복사해 두고 해당 디렉토리에서 yum을 이용해 rpm파일을 설치한다.
 yum install oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm

혹시 다른 rpm파일을 잘못 설치했다면 리스트로 확인도 가능하고 제거도 가능하니 당황하진 말자
 yum list installed

제거하는 방법은
yum remove 패키지이름


마지막으로 환경변수를 설정해줘야 한다.



 vi ~/.bashrc 를 입력하자

export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib:${LD_LIBRARY_PATH}
이렇게 입력해주고 :wq로 저장 후 나가준다.
제대로 설정되었는지 확인하려면 echo $LD_LIBRARY_PATH 를 입력해보자
/usr/lib/oracle/11.2/client64/lib: 
이렇게 뜬다면 정상이다.

이제 클라이언트 설치와 환경변수까지 모두 다 설정해줬다.
다시 node.js로 dbconnect 파일을 실행해보면 정상 접근이 가능한 걸 확인 할 수 있을것이다.

반응형
Posted by Hippalus
,