Published 2021. 12. 8. 18:40
반응형

Sequelize 란?

  • Node.js에서 DB와 연결할 때, 쿼리를 몰라도 좀 더 편하게 사용할 수 있도록 도와주는 모듈
  • 전에 했던 MySQL과 연결 예제을 Sequelize를 사용해 진행
  • MySQL이 아닌 다른 DB를 사용할 때도 Sequelize 사용 가능

사용 방법

  1. 'npm i sequelize'를 통해 sequelize 모듈 설치 (mysql2 모듈은 설치 완료됬다고 가정)
  2. 'npm i -D sequelize-cli'를 통해 sequelize-cli 모듈 설치 ( -D : 개발용)
  3. 'npx sequelize init'을 통해 sequelize 구조 생성
    • 아래의 폴더들이 자동으로 생성됨

  1. 새로 생성 된 config 폴더의 config.json 파일에 들어가서 다음 부분을 자신의 DB 정보에 맞게 수정
    • username, password, database 수정

  1. models 폴더에 student2.js 파일 생성 후 다음과 같이 코드 입력
module.exports = (sequelize, DataTypes) => {
    return sequelize.define('student2', {
        name: {
            type: DataTypes.STRING(30),
            allowNull: false,
        },
        age: {
            type: DataTypes.INTEGER,
            allowNull: false,
        },
        height: {
            type: DataTypes.DOUBLE,
            allowNull: false,
        },
    },{
        charset: 'utf8',
        collate: 'utf8_general_ci',        // 이걸 해줌으로써 DB에 한글사용 가능
    });
}
  • 이 때 sequelize가 id(primary key)와 createdAt, updatedAt을 자동으로 생성해줌
  1. models 폴더의 index.js 파일에 다음 코드 추가
    • 맨 밑에 있는 module.exports = db; 윗부분에 추가
db.Student2 = require('./student2')(sequelize, Sequelize);
  1. main 파일인 test.js에 Sequelize 객체 생성 및 DB 연결
var express = require('express');
var app = express();
var db = require('./models');
db.sequelize.sync();

app.get('/', function(req, res){
   db.Student2.create({
       name: 'Tom',
       age: 20,
       height: 181.3,
   });
});

app.listen(52273, function() {
    console.log('Server Running at http://127.0.0.1:52273');
});
  1. 다음과 같이 코딩 후 test.js를 실행하면 Student2s 라는 테이블이 생성됨
    • 기존에 테이블이 존재하면 다시 생성 X
  2. http://127.0.0.1:52273에 접속하면 name, age, height가 각각 'Tom', 20, 181.3인 정보가 입력됨

활용 방법

  • 사실 저렇게 값을 하나씩 넣어주는 것은 의미가 거의 없고, 값을 입력받고 DB에 넣어줄 수 있는 기능이 중요하다고 생각해서 코드를 수정함
  • RequestBody에 name, age, height 값을 넣어주고 post하면 DB에 넣어주는 기능
var express = require('express');
var app = express();
var db = require('./models');
db.sequelize.sync();

app.use(express.json());
app.use(express.urlencoded({ extended: true }));

app.post('/newstudent', async(req, res) => {
    try{
        console.log(req.body);
        const newStudent = await db.Student2.create({
            name: req.body.name,
            age: req.body.age,
            height: req.body.height,
        });
        res.status(200).json(newStudent);
    } catch(err) {
        console.log(err);
    }
});

app.listen(52273, function() {
    console.log('Server Running at http://127.0.0.1:52273');
});
  • 이를 활용하여 ['Alice', 18, 163.4], ['Harry', 19, 175.7] 같이 새로운 정보를 삽입할 수 있음.

  • 아래와 같이 값이 추가되는 것을 확인할 수 있음

  • create 뿐만 아닌 find, update 등 다양한 기능들도 사용 가능
반응형

↓ 클릭시 이동

복사했습니다!