Node.Js mysql 연동하기

Tack's·2022년 1월 18일
0
post-thumbnail

✏ mysql이란?

MySql은 오픈소스의 관계형 데이터베이스 관리시스템으로 기존의 파일 시스템보다
효율적으로 데이터를 관리할 수 있다. Node.Js와 MySql을 연동하기 위해
기본적으로 mysql이 설치 되어있어야 하고 npm을 이용하여 mysql 외장 모듈을 설치해야 한다.

$ npm install mysql 을 입력해 설치 해준다.


👀 1. DB 생성

DB에 User 테이블을 생성한다.

CREATE TABLE User (
  `user_id` VARCHAR(45) NOT NULL,
  `user_pw` VARCHAR(45) NULL,
  `user_name` VARCHAR(45) NULL,
  `user_nickName` VARCHAR(45) NULL,
  `user_email` VARCHAR(45) NULL,
  `user_code` VARCHAR(45) NULL,
  PRIMARY KEY (`user_id`)

🔌 2. DB연결

나는 그냥 연결하는 것이 아닌 ORM 중 Sequelize 와 Mybatis 모두 사용해 연결해주도록 하겠다.
ORM이란?

Object Relational Mapping, 객체-관계 매핑
객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말한다.

👉🏻 code

const path = require("path");
const Sequelize = require("sequelize");
const mybatisMapper = require("mybatis-mapper");
const envType = process.env.ENV ? process.env.ENV : "dev";
const version = process.env.VERSION ? process.env.VERSION : "base";

// DB connection 정보
const sequelize = new Sequelize('Database', 'userName', 'Password', {
  host: '127.0.0.1',
  dialect: 'mysql'
  } );

const sqlPath = path.join(__dirname, "..", ".", `/sql/${version}/`);

mybatisMapper.createMapper([`${sqlPath}/base.xml`]);

var init = async function(req, res, next) {
  req.envType = envType;
  req.sequelize = sequelize;
  req.mybatisMapper = mybatisMapper;

  next();
};

module.exports = init;
나는 쿼리 매핑은 mybatisMapper를 이용해 xml로 구성한다.
또 따로 config.json 파일을 생성하지 않고 하나의 파일에서 연결을 마쳤다.
(후회할것 같지만 일단은 이렇게 했다...🤦‍♂️ 동작확인이 너무 하고싶었음...)
여기까지 됐다면 DB는 연결되었다. 이제 정상 동작하는지 코드를 작성해 확인해보자 🤷‍♂️

🔨 3. 실행 코드 작성


🙄 먼저 쿼리가 작성될 xml을 작성한다.

📕 base.xml

<mapper namespace="BASE">  
  <select id="USER.SELECT.TB_VU.001">
  	/* 사용자, 유저 정보 조회 */
    SELECT  
        *
    FROM user_T
    WHERE user_id = #{id}
  </select>
</mapper>

🙄 base.xml 파일이 작성되었다면 user.js을 작성하고 실행한다.

📕 user.js

var express = require("express");
var app = express.Router();

app.get("/users/:id", async (req, res) => {
  if (!req.params || !req.params.id) {
    res.status(403).send({ msg: "잘못된 파라미터입니다." });
    return;
  }

  var selectParams = {
    id: req.params.id
  };

  var selectQuery = req.mybatisMapper.getStatement(
    "BASE",
    "USER.SELECT.TB_VU.001",
    selectParams,
    { language: "sql", indent: "  " }
  );

  let data = [];
  try {
    data = await req.sequelize.query(selectQuery, {
      type: req.sequelize.QueryTypes.SELECT
    });
    console.log("TCL: data", data);
  } catch (error) {
    res.status(403).send({ msg: "rdb select에 실패하였습니다.", error: error });
    return;
  }

  if (data.length == 0) {
    res.status(403).send({ msg: "정보가 없습니다." });
    return;
  }

  res.json({
    msg: "RDB에서 정보 꺼내오기",
    user: data.map(x => {
      x.vu_password = "";
      return x;
    })[0]
  });
});

module.exports = app;

이제 연결에 관한 모든 코드는 끝이 났다. 확인하러 go!👍
profile
바쁘다바빠

1개의 댓글

comment-user-thumbnail
2022년 1월 20일

좋은 개발의 흔적이다

답글 달기