코딩이란 무엇일까

nodeJs Sequelize사용하여 My sql과 연결해보기 본문

node.js

nodeJs Sequelize사용하여 My sql과 연결해보기

둥구는 지굴다 2022. 8. 30. 19:14

안녕하세요 오늘은 Sequelize라는 라이브러리를 사용하여 Mysql과 연결해보는 시간을 가져보겠습니다.

 

Sequelize (시퀄라이즈) 란?

Sequelize란 DB작업을 쉽게 할 수 있는 라이브러리입니다.

ORM으로 분류되고 SQL질의어를 몰라도 데이터베이스를 쉽게 관리할 수 있는 라이브러리입니다.

ORM이란?

ORM은 짧게 짚고 넘어가자면
ORM Object Relational Mapping의 줄임말로
관계형 데이터베이스의 데이터를 자동으로 연결해준다고 생각하면 쉽습니다.
객체지향 프로그래밍은 클래스를, 관계형 데이터베이스는 테이블을 사용합니다.

Sequelize 패키지 설치하기

npm i express mysql2 sequelize sequelize-cli dotenv

Sequelize, Sequelize-cli , dotenv , mysql2를 설치하였습니다

이후 npx sequelize init 명령어를 호출해줍니다.

json 파일에 설치된 라이브리와 npx sequelize init을 하면 config, migrations, models, seeders폴더들이 자동으로 생성된 것을 볼 수 있습니다.

config파일=> sequelize를 사용하기위한 환경을 설정하는 폴더

models / index.js => model을 정의하고 index.js 관계를 설정하기 위한 파일

 

시퀄라이즈로 database 만들어보기

위에 언급했다시피 시퀄 라이즈를 사용하면 sql문을 사용하지 않고 my sql 워크벤치를 사용하지 않아도

데이터베이스를 만들 수 있습니다.

데이터베이스를 정의해주는 파일인 config.js를 만들어보겠습니다.

import dotenv, { config } from"dotenv"

dotenv.config(); //dotenv 사용선언문

export default {
//개발용
    development:{
        username:"root", //사용자의이름 설정
        password:process.env.DB_PASSWORD, // 암호 설정
        database:"testdb",  // 데이터베이스 이름 설정
        host:"127.0.0.1",
        port:"3306",
        dialect:"mysql",
    },
    //테스트용
    test:{
        username:"root", //사용자의이름 설정
        password:process.env.DB_PASSWORD, // 암호 설정
        database:"testdb",  // 데이터베이스 이름 설정
        host:"127.0.0.1",
        port:"3306",
        dialect:"mysql",
    },
    //배포용
    production:{
        username:"root", //사용자의이름 설정
        password:process.env.DB_PASSWORD, // 암호 설정
        database:"testdb",  // 데이터베이스 이름 설정
        host:"127.0.0.1",
        port:"3306",
        dialect:"mysql",
    },

}

시퀄 라이즈로 table짜보기

데이터 베이스를 만들었으니 안에 들어갈 테이블을 만들어봅시다.

우선 사용자의 정보를 담아줄 수 있는 테이블을 만들기 위해 user.js파일을 만들겠습니다.

import Sequelize from "sequelize";

export default class User extends Sequelize.Model {
  static init(sequelize) {
    return super.init(
      {
        email: {
          type: Sequelize.STRING(100), // => String은 varchar와 같은 말
          allowNull: false, // null값을 허용할지
          commnet: "이메일", //컬럼에대한 설명
        },
        password: {
          type: Sequelize.STRING(100),
          allowNull: false,
          comment: "비밀번호",
        },
      },
      {
        //테이블에 대한 설정
        sequelize,
        timestamps: true,
        modelName: "User", //웬만하면 클래스네임과 동일하게
        tableName: "user", //DB 에 저장될 실제 테이블 이름
        charset: "utf8",
        collage: "utf8_gernal_ci",
      }
    );
  }
  static associate(db) {
    //관계설정
  }
}

user라는 테이블에 email칼럼과 password칼럼을 생성해주었습니다.

index.js파일 설정해주기

우선 기존에 index.js에 들어있는 내용은 다 없애 주시고 밑에 내용을 작성했습니다.\

import Sequelize from "sequelize";
import user from "./user.js";
import config from "../config/config.js";

const env = process.env.NODE_ENV || "development"; //배포용인지 개발용인지.
const dbconfig = config[env]; //db설정에 env를 전달
const db = {}; 

const sequelize = new Sequelize(
  dbconfig.database,
  dbconfig.username,
  dbconfig.password,
  dbconfig
); //데이터베이스에 설정해준 값을 전달해줌

db.User = user; // user.js에서 설정한 값들을 user에 전달

Object.keys(db).forEach((modelName) => {
  db[modelName].init(sequelize);
});

Object.keys(db).forEach((modelName) => {
  if (db[modelName].associate) {
    db[modelName].associate(db);
  }
});

db.sequelize = sequelize; //시퀄라이즈 값 전달
db.Sequelize = Sequelize; ////시퀄라이즈 값 전달

export default db;

app.js파일에서 MySQL연결하기

이제 MYsql과 연결을 하기위해 app.js파일에 서버를 구동하고 데이터베이스까지 연결을 해봅시다.

import express from "express";
import db from "./models/index.js";
import user from "./routes/user.js";

const app = express();
app.set("port", 3000);

db.sequelize //mysql과 연결해주는 부분
  .sync()
  .then(() => {
    console.log("DB연결에 성공하였습니다"); //성공할 시 
  })
  .catch((err) => console.log(err)); //실패할 시

app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use("/user", user);

app.listen(app.get("port"), () => {
  console.log(`${app.get("port")}번 서버 실행 중`);
});

서버를 구동시킨 뒤 아래와 같이 성공했을 때 console.log에 뜰 메시지가 뜨면 성공하신 겁니다.

 

'node.js' 카테고리의 다른 글

nodeJs 사용해서 간단한 서버 구축해보기  (0) 2022.08.24
Node js에 express설치 및 express이란?  (0) 2022.08.19
NodeJS란 무엇인가.  (1) 2022.08.17
Comments