[Nextjs] 오라클 DB 연결

양찌·2022년 11월 1일
1

Next.js

목록 보기
2/2

Nextjs에서 해야 할 일

1. oracledb npm 패키지 설치

npm i oracledb


2. .env.local 파일 생성

프로젝트 최상위 디렉토리에서 생성
DB 접속 정보 입력
환경 변수 작명은 자유

// .env.local

DB_USER='db 유저네임'
DB_PASSWORD='db 비밀번호'
DB_CONNECTIONSTRING='넘버.넘버.넘버.넘버:넘버/ABCD'
DB_CONNECTIONSTRING 은 db url인데

참고 : https://www.youtube.com/watch?v=I23XTkUMrtM

  • 환경 변수 파일임으로 파일명은 반드시 .env(또는 .env.local) 여야 함
  • github에 commit시 .env 파일이 올라가지 않도록 최상위 디렉토리 안에 있는 .gitignore 파일에 파일명 추가
// .gitignore

// ... 생략

# local env files
.env*.local
.env

// ... 생략

3. dbconfig.js 파일 생성

  • 생성 경로는 사용시 절대 경로로 import 해옴으로 상관없음
  • process.env.환경변수명 으로 환경변수 사용
require('dotenv').config()

module.exports = {
  user          : process.env.DB_USER || "hr",
  password      : process.env.DB_PASSWORD,
  connectString : process.env.DB_CONNECTIONSTRING || "localhost/orclpdb1",
};

4. DB data fetch API 생성

  • .getConnection() - 오라클 db 연결
  • .execute() - sql문 실행
    ( 쿼리문 날리는 기타 다른 예시는 node-oracle 깃허브 에 가면 많이 있다. )
// pages/api/faqs.js

const oracledb = require('oracledb');

// 이전 단계에서 만든 dbconfig.js을 생성 경로에 맞춰 불러오기
const dbConfig = require('../../assets/db/dbconfig.js'); 


export default async function getAllFaqs( req, res ) {

    let connection;

    try {
      // DB 연결 
      connection = await oracledb.getConnection(dbConfig);

      const sql = `
        SELECT *
        FROM FAQS
      `
      
      // sql문 실행
      const { rows } = await connection.execute(sql);
      return res.status(200).json({ faqsList : rows });

    } catch (err) {
      console.error('연결 실패------', err);

    } finally {
      if (connection) {
        try {
          await connection.close();
        } catch (err) {
          console.error(err);
        }
      }
    }
  }

5. DB data fetch API 사용

// index.js

// useEffect에서 api 호출로 data fetch시에는 
// useState로 data 관리
const [ faqs, setFaqs ] = useState([])

useEffect(() => {
  const fetchFAQs = async () => {
     const res = await fetch('/api/faqs');
     const { faqsList } = await res.json();
     setFaqs(faqsList);
  }
   
  fetchFAQs();  

})

return (
  <div>{ faqsList.map((faq,idx) => <p key={idx}>{ faq[idx] }</p>) }<div>
)




오라클 리눅스 서버에서 해야 할 일

아래의 모든 작업은!

위 nextjs 기반으로 구현된 애플리케이션을 git clone으로 가져온 디렉터리에서 실행했다.

1. Oracle Instant Client 드라이버 2개 설치

  • /opt/oracle 디렉토리로 이동
    - oracle 드라이버가 설치되는 디렉토리로 이동 (나 같은 경우는 /opt/oracle 디렉터리에 저장)

  • 다운로드 url
    https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html

  • 설치 드라이버
    - "Basic" packages
    - "SQL*Plus" packages

  • 다운로드 방법
    위 2개 드라이버를 각각 다운로드 링크 주소 복사 후, wget 명령어로 터미널에서 다운로드

wget <https://download.oracle.com/otn_software/linux/instantclient/217000/instantclient-basic-linux.x64-21.7.0.0.0dbru.zip>
  • unzip
unzip instantclient-basic-linux.x64-21.7.0.0.0dbru.zip

2. libaio npm 패키지 설치

sudo yum install libaio


3. 패스 환경 변수 설정

설치 경로와 설치한 패키지 버전에 유의하여 환경 변수를 설정한다.

3-1. 임시로 환경 변수를 설정하는 방법

export LD_LIBRARY_PATH=/opt/oracle/instantclient_21_7:$LD_LIBRARY_PATH
export PATH=/opt/oracle/instantclient_21_7:$PATH

3-2. 영구적으로 환경 변수 설정하는 방법

1) root(su) 권한으로 접속

2) 터미널에서~/.bashrc 들어가기

vi ~/.bashrc
3) 환경변수를 맨 아래 줄에 작성 ("export" 단어와 함께 작성)


4. 애플리케이션 빌드 후 백그라운드에서 실행

npm run build
nohup npm run start &





참고

https://devbybyun.tistory.com/7

https://www.youtube.com/watch?v=I23XTkUMrtM

https://www.oracle.com/database/technologies/appdev/quickstartnodeonprem.html#linux-tab

https://github.com/oracle/node-oracledb/tree/main/examples

profile
신입 개발자 입니다! 혹시 제 글에서 수정이 필요하거나, 개선될 부분이 있으면 자유롭게 댓글 달아주세요😊

0개의 댓글