ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 노드 시퀄라이즈 사용하기
    노드 2023. 4. 19. 09:58

    시퀄라이즈 ORM

    SQL 작업을 쉽게 할 수 있도록 도와주는 라이브러리

    • ORM : Object Relational Mapping : 객체와 데이터를 매핑(1 대 1 짝지음)
    • MySQL 외에도 다른 RDB(Maria, Postgre, SQLite, MSSQL)와도 호환된다.
    • 자바스크립트 문법으로 데이터베이스 조작 가능

    * 자바스크립트 코드를 SQL로 바꿔서 실행을 해준다.

     

    시퀄라이즈를 사용해 보기 위해서 프로젝트 세팅을 하자.

    콘솔을 통해 경로로 이동한 후 package.json 작성. 

    //package.json
    {
      "name": "learn-sequelize",
      "version": "0.0.1",
      "description": "시퀄라이즈를 배우자",
      "main": "app.js",
      "scripts": {
        "start": "nodemon app"
      },
      "author": "ZeroCho",
      "license": "MIT"
    }

     

    시퀄라이즈 CLI 사용하기

    시퀄라이즈 명령어를 사용하기 위해 sequelize-cli 설치

    mysql2는 MySQL DB가 아닌 드라이버(Node.js와 MySQL을 이어주는 역할)

    //package.json
    {
      "name": "learn-sequelize",
      "version": "0.0.1",
      "description": "시퀄라이즈를 배우자",
      "main": "app.js",
      "scripts": {
        "start": "nodemon app"
      },
      "author": "ZeroCho",
      "license": "MIT",
      "dependencies": {
        "express": "^4.18.2",
        "morgan": "^1.10.0",
        "mysql2": "^3.2.3",
        "nunjucks": "^3.2.4",
        "sequelize": "^6.31.0",
        "sequelize-cli": "^6.6.0"
      },
      "devDependencies": {
        "nodemon": "^2.0.22"
      }
    }

    dependencies에 추가가 잘 된 것을 확인 가능하다.

     

    npx sequelize init으로 시퀄라이즈 구조 생성

    이후의 프로젝트 구조는 다음과 같다

     

    그리고 필요한 준비물은 다음과 같다

    sequelize init해서 생성된 부분을 제외하고 파일을 일단 직접 생성하면 된다.

     

    models/index.js 수정

    다음과 같이 수정한다.

    • new Sequelize(옵션들 ...)로 DB와 연결 가능

     

    //models/index.js
    const Sequelize = require('sequelize');
    
    const env = process.env.NODE_ENV || 'development';
    const config = require('../config/config')[env];
    const db = {};
    
    const sequelize = new Sequelize(config.database, config.username, config.password, config);
    
    db.sequelize = sequelize;
    //db.Sequelize = Sequelize; //이부분은 사실 필요가 없다
    
    module.exports = db;

    이렇게 하면 mysql2 드라이버를 사용해서 mysql과 시퀄라이즈, 노드를 연결해준다. 

     

    그리고 config/config.json파일이 있는데 여기서 password 와 database를 본인이 설정한 값으로 바꿔준다.  

     

    app.js

    //app.js
    const express = require('express');
    const path = require('path');
    const morgan = require('morgan');
    const nunjucks = require('nunjucks');
    
    const { sequelize } = require('./models');
    
    const app = express();
    app.set('port', process.env.PORT || 3001);
    app.set('view engine', 'html');
    nunjucks.configure('views', {
      express: app,
      watch: true,
    });
    sequelize.sync({ force: false })
      .then(() => {
        console.log('데이터베이스 연결 성공');
      })
      .catch((err) => {
        console.error(err);
      });
    
    app.use(morgan('dev'));
    app.use(express.static(path.join(__dirname, 'public')));
    app.use(express.json());
    app.use(express.urlencoded({ extended: false }));
    
    app.use('/', indexRouter);
    
    app.use((req, res, next) => {
      const error =  new Error(`${req.method} ${req.url} 라우터가 없습니다.`);
      error.status = 404;
      next(error);
    });
    
    app.use((err, req, res, next) => {
      res.locals.message = err.message;
      res.locals.error = process.env.NODE_ENV !== 'production' ? err : {};
      res.status(err.status || 500);
      res.render('error');
    });
    
    app.listen(app.get('port'), () => {
      console.log(app.get('port'), '번 포트에서 대기 중');
    });

    이것이 기본적인 구조가 되겠다. 

     

    require를 통해서 필요한 것들을 쭉 불러왔다.

    그리고 model의 index.js를 불러오는데 그걸 require로 불러와서 sequelize의 sync해준다. 

    sequelize sync하면 데이터베이스에 연결이 된다. 시퀄라이즈를 통해서 노드에서 db로 연결이 되는 것이다. 

     

    나머지 필요한 부분은 여기서 받으면 된다.

    https://github.com/KangMinR/learn-sequelize/tree/main/learn-sequelize

     

    GitHub - KangMinR/learn-sequelize

    Contribute to KangMinR/learn-sequelize development by creating an account on GitHub.

    github.com

     

    npm start로 실행해서 SELECT 1+1 AS RESULT가 나오면 연결 성공이다. (MySQL도 켜져 있는지 확인)

    SELECT 1+1 AS RESULT를 하는 이유는 그냥 연결이 잘 됐는지 확인하기 위해서 단순한 쿼리를 실행해 본 것이다. 

     

     

    '노드' 카테고리의 다른 글

    노드 시퀄라이즈 모델 만들기  (1) 2023.04.19
    노드 데이터베이스 CRUD 작업하기  (0) 2023.04.18
    노드 데이터베이스 MySQL  (1) 2023.04.18
    노드 관계 쿼리  (0) 2023.04.18
    노드 테이블 관계 이해하기  (0) 2023.04.18
Designed by Tistory.