노드

노드 시퀄라이즈 사용하기

포칼이 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를 하는 이유는 그냥 연결이 잘 됐는지 확인하기 위해서 단순한 쿼리를 실행해 본 것이다.