ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Node.js] Sequelize 설치
    Node.js 2022. 4. 5. 17:33

     

     

    ORM(Object Relation Mappings) 이란?

    • 자바스크립트 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 것
    • ORM을 이용하면 query가 아닌 method로서 데이터를 조작할 수 있다.
    • sql 작성법을 몰라도 Database 관리가 가능하다.
    • SQL문이 복잡해지면 ORM으로 표현하는데 한계가 있다 -> raw query문을 실행할 수 있는 방법도 제공
    • ORM은 특정 Database에 종속되지 않는다.

     

    Sequelize란?

    • Node.js에서 데이터베이스를 쉽게 다룰 수 있도록 도와주는 라이브러리
    • Promise 문법을 사용하는 Node.js 기반 ORM

     

     

     

     

     

     

    1. 시퀄라이즈에 필요한 sequelize, sequelize-cli, mysql2 패키지를 설치

    # Sequelize 설치하기
    $ npm install --save sequelize
    
    # Sequelize 터미널 설치하기
    # 초기설정을 도와줌
    $ npm install --save-dev sequelize-cli
    
    # mysql2 모듈 설치하기
    $ npm install --save mysql2

     

    2. 시퀄라이즈 구조 생성하기

    $ npx sequelize init

     

    config, models, migrations, seeders 폴더가 생성됩니다

     

    3. models/index.js 수정

    'use strict';
    
    const config = require('../config/config.json')[env];
    const Sequelize = require('sequelize');
    const sequelize = new Sequelize(config);  // mysql 연결 객체 생성
    const env = process.env.NODE_ENV || 'development'; // 지정된 환경변수가 없으면 'development'로 지정
    const db = {};
    
    
    // db객체에 Sequelize 패키지 넣기
    // 연결 객체를 나중에 재사용하기 위해 넣어줌
    db.sequelize = sequelize;
    
    // db객체에 Sequelize 인스턴스 넣기
    db.Sequelize = Sequelize;
    
    module.exports = db;

     

    4. mysql 연결

     

    이미 만들어진 테이블에 model을 매핑하거나 model을 정의해서 테이블을 생성할 수 있도록 해주는 메서드는 sync() 입니다.

    const express = require('express');
    const path = require('path');
    const cookieParser = require('cookie-parser');
    const morgan = require('morgan');
    
    const indexRouter = require('./routes/index');
    const usersRouter = require('./routes/users');
    
    // index.js에 있는 db.sequelize 객체 모듈을 구조분해로 불러옴
    const {sequelize} = require('./models');
    const app = express();
    
    sequelize.sync({force:false}).then(()=>{
        // force : true는 모델을 수정하면 이를 db에 반영하기 위한 옵션
        // 테이블을 지웠다가 다시 생성하는 것이라서 기존 데이터가 날아감
        // alter:true 옵션을 주면 기존 데이터를 유지하면서 테이블을 업데이트 할 수 있음
        // 컬럼을 새로 추가할 때 NOTNULL이면 오류가 나기 때문에 주의하기
        console.log('데이터베이스 연결됨')
    }).catch(err=>{
        console.log(err)
    })
    
    app.use(morgan('dev'));
    app.use(express.json());
    app.use(express.urlencoded({ extended: false }));
    app.use(cookieParser());
    app.use(express.static(path.join(__dirname, 'public')));
    
    app.use('/', indexRouter);
    app.use('/users', usersRouter);
    
    module.exports = app;

     

     

    서버를 실행해서 아래와 같이 나오면 성공!

    (node:1642) [SEQUELIZE0004] DeprecationWarning: A boolean value was passed to options.operatorsAliases. This is a no-op with v5 and should be removed.
    (Use `node --trace-deprecation ...` to show where the warning was created)
    Executing (default): SELECT 1+1 AS result
    데이터베이스 연결됨

     

     

     

     

     

    <참고>

    https://inpa.tistory.com/entry/EXPRESS-%F0%9F%93%9A-%EC%8B%9C%ED%80%84%EB%9D%BC%EC%9D%B4%EC%A6%88-ORM?category=903202 

    https://www.blog.devitpl.com/sequelize/

    댓글

Designed by Tistory.