본문 바로가기

[node.js] MSSQL 연동하기

안자매 2022. 3. 14.
반응형


개인적으로 공부하면서 기록하는 공간으로

잘못된 정보는 댓글을 통해 알려주시면 감사하겠습니다 :-)

▪ ▪ ▪ ▪ ▪

저는 DB 작업 할 때 주로 프로시저를 사용하곤 해요.
처음 연동 할 때 DB 작업을 쉽게 할 수 있도록 도와주는 ORM 라이브러리인 Sequelize를 통해 시도해 보았지만,
procedure의 output 값을 받는데 한계를 느껴 mssql 라이브러리를 사용하게 되었습니다.
node.js에서 mssql 연동하는 방법을 정리해보았습니다.
( 혹시 Sequelize을 사용해서 procedure output 값 받는 방법 아시는 분은 공유 부탁드려요ෆ )

 

 

라이브러리 설치

node.js에서 MSSQL을 사용하기 위해서는 mssql 라이브러리를 설치해야한다.

javascript
npm i mssql
bash
  ...
  "dependencies": {
    "dotenv": "^16.0.0",
    "express": "^4.17.2",
    "http-server": "^14.1.0",
    "mssql": "^8.0.2",
    "sequelize": "^6.16.1",
    "sequelize-cli": "^6.4.1",
    "tedious": "^14.3.0"
  },
  ...

package.json 파일에 "mssql" : mssql 버전이 생겼다면 정상적으로 설치가 된 것이다.


공식사이트
https://www.npmjs.com/package/mssql

 

mssql

Microsoft SQL Server client for Node.js.. Latest version: 8.0.2, last published: a month ago. Start using mssql in your project by running `npm i mssql`. There are 1116 other projects in the npm registry using mssql.

www.npmjs.com

 

 

MSSQL 연동

DB 연동을 하기 위해 작성한 파일들은 다음과 같다.

dotenv 파일 

• 서버 정보,  API 정보, DB 정보 등의 환경변수를 .env파일에 저장하고 process.env로 로드하는 의존성 모듈이다.
• 해당 정보들은 보안이 이루어져야하는 정보들이므로 환경변수 파일을 외부에 만들어 접근할 수 있게하고, 개발 초기단계에서 세팅하기를 권고한다.


dotenv 설치

bash
npm i dotenv


.env 작성

.env 파일은 프로젝트 루트 경로에 위치해야한다.
"키=값" 형태로 작성하며,  ; (세미콜론)은 사용하지 않는다.

bash
DB_DEV_SERVER='[연결할 DB서버 정보]'
DB_DEV_PORT=[연결할DB서버포트]
DB_DEV_DATEBASE='[DB명]'
DB_DEV_USERNAME='[DB 계정 ID]'
DB_DEV_PASSOWRD='[DB 계정 PW]'

 

config 파일 (/src/config/config.js)

• config 객체에서 .env 파일에서 작성한 환경변수를 불러와 MSSQL 접속 정보를 저장한다.
• .env를 사용하기 위해 dotenv 라이브러리를 import 하고, dotenv.config()를 통해 .env 파일을 불러온다.

javascript
import dotenv from 'dotenv';

dotenv.config();

export const config = {
  port: process.env.PORT,
  dbconfig: {
    server: process.env.DB_DEV_SERVER,
    port: parseInt(process.env.DB_DEV_PORT),
    pool: {
      max: 5,
      min: 1,
      idleTimeoutMillis: 30000,
    },
    options: {
      encrypt: false,
      datebase: process.env.DB_DEV_DATEBASE,
      trustServerCertificate: true,
    },
    authentication: {
      type: 'default',
      options: {
        userName: process.env.DB_DEV_USERNAME,
        password: process.env.DB_DEV_PASSOWRD,
      },
    },
  },
};

 

Connection Pool 객체 생성 (/src/config/server.js)

** Connection Pool 이란? 

- 데이터베이스 연결을 재사용할 수 있도록 관리되는 데이터베이스 연결의 캐시이다.
- 서버 실행 시 Connection Pool 객체에 저장하여 데이터베이스 작업 필요 시 해당 객체를 사용하여 재연결을 할 필요가 없다.

javascript
import sql from 'mssql';
import { config } from './config.js';

const connPool = new sql.ConnectionPool(config.dbconfig)
  .connect()
  .then((pool) => {
    console.log('DB연결 성공');
    return pool;
  })
  .catch((err) => {
    console.log('err ', err);
  });

export {
  sql,
  connPool
}

 

DB 연결 확인하기 (/src/app.js)

• 데이터베이스가 정상적으로 연동되었는지 확인하기 위하여, connection을 실행시킨다.
• 해당 과정은 DB연결을 확인하기 위한 과정으로  API 개발 시 service 로직에서 불러와서 사용한다.

javascript
import express from 'express';
import { connPool } from './config/server.js';

const app = express();

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

connPool;

app.listen(app.get('port'), () => {
  console.log(app.get('port'), '번 포트에서 대기중');
});

node.js 서버 실행 후,  정상적으로 연결이 되었다면 터미널 창에 "DB연결 성공"이 출력된다.

​​​​​

Reference

https://velog.io/@reveloper-1311/DB-Node.js에서-환경변수-사용하기dotenv

 

 

댓글