본문 바로가기
Node.js/express

Connection Pool을 사용해 Database 연결하기

by holy season 2024. 7. 24.
반응형

소스 코드

// 1. 라이브러리 임포트
const mysql = require("mysql");
const dotenv = require("dotenv");
const path = require("path");

// 2. .env 파일에서 데이터베이스 정보 획득
dotenv.config({ path: path.resolve("env/database.env") });

// 3. config 객체 설정
const config = {
  host: process.env.db_host,
  port: process.env.db_port,
  user: process.env.db_user,
  password: process.env.db_password,
  database: process.env.db_database,
};

// 4. 커넥션 풀 생성
const pool = mysql.createPool(config);

// 5. 콜백 함수 생성
const getConnectionPool = (callback) => {
  pool.getConnection((err, conn) => {
    if (!err) callback(conn);
  });
};

// 6. 함수 export
exports.getConnectionPool = getConnectionPool;

Connection Pool을 사용해 Database 연결하기

nodejs에서 mysql라이브러리를 사용해서 데이터베이스에 커넥션 풀을 생성해보도록 하겠습니다.

순서는 다음과 같습니다.

순서

  1. 라이브러리 호출
  2. .env 파일에서 데이터베이스 정보 획득
  3. 커넥션 풀 생성
  4. 콜백 함수 생성
  5. 다른 파일에서 사용할 수 있게 콜백 함수 export

1. 라이브러리 호출

라이브러리로는 mysql 데이터베이스와 연결할 수 있게 하는 mysql 라이브러리, nodejs의 환경변수를 설정할 수 있는 dotenv, 파일 경로를 쉽게 획득할 수 있게 해주는 path 라이브러리를 호출해 주었습니다.

2. .env 파일에서 데이터베이스 정보 획득

env/database.env 파일에 있는 정보를 획득하기 위해 path 라이브러리의 resolve함수로 env/database.env 파일의 절대 경로를 받아와 dotenv 라이브러리의 config 함수의 path 값으로 설정해 nodejs의 환경 변수를 설정해줍니다.

dotenv 관련 글

2024.07.11 - [Node.js/express] - dotenv 사용해서 환경변수 설정하기

 

dotenv 사용해서 환경변수 설정하기

dotenvdotenv는 .env파일에서 process.env의 환경변수를 설정할 수 있는 라이브러리입니다.설치노드 패키지 매니저를 이용해서 dotenv를 설치해줍니다.npm install dotenv폴더 구성env폴더를 생성한 후 env/develo

holy-season.tistory.com

3. config 객체 설정

config라는 자바스크립트 객체를 선언해 주고 Database의 정보 host, port, user, password, database를 설정해줍니다.

4. 커넥션 풀 생성

mysql 라이브러리의 createPool 메서드의 인자로 config 객체를 주어 새로운 pool 변수를 만들어 줍니다.

5. 콜백 함수 생성

콜백 함수를 인자로 받고 생성한 pool변수의 함수인 getConnection을 호출 하고 데이터베이스와의 연결을 에러없이 받아오는것이 성공했다면 인자로 넣은 콜백함수를 실행 시키도록 구성해줍니다.

6. 콜백 함수 Export

다른 파일에서 getConnectionPool 모듈을 불러와 사용할 수 있게 getConnectionPool 함수를 export 시켜줍니다.

export시켜준 getConnectionPool 모듈을 사용하여 콜백함수를 적절히 구성하면 데이터베이스를 조작할 수 있습니다.

예시

var express = require("express");
var router = express.Router();
const pool = require("../database/pool");
const CryptoJS = require("crypto-js");

router.post("/login", (req, res) => {
  const result = {
    isSuccess: false,
    message: "",
  };

  pool.getConnectionPool((conn) => {
    const sql =
      "SELECT id, password FROM app.Users WHERE id = ? AND password = ?";
    req.body.password = CryptoJS.SHA256(req.body.password).toString();
    const params = [req.body.id, req.body.password];
    conn.query(sql, params, (err, row) => {
      if (err) {
        result.message = "로그인 실패했습니다.";
        return res.send(result);
      }

      if (row.length == 0) {
        result.message = "아이디와 비밀번호를 확인해주세요!";
        return res.send(result);
      }

      result.isSuccess = true;
      result.message = "로그인 성공!";
      return res.send(result);
    });
    conn.release();
  });
});

 

반응형

'Node.js > express' 카테고리의 다른 글

CORS 설정하기  (0) 2024.07.22
dotenv 사용해서 환경변수 설정하기  (0) 2024.07.11
Express 애플리케이션 생성기  (0) 2023.04.08
express 서버 구축  (0) 2023.03.30