[Node.js/Sequelize] Sequelize 라이브러리

Bam·2023년 9월 26일
0

Node.js

목록 보기
19/19
post-thumbnail

오늘은 Sequelize라는 라이브러리에 대해서 소개하려고 합니다. 시퀄라이즈는 노드에서 관계형 데이터베이스 작업을 편리하게 수행할 수 있도록 도와주는 라이브러리입니다.

여러 관계형 데이터베이스가 있지만 여기서는 MySQL을 이용하도록 하겠습니다. 또한 웹 서버 라이브러리로 익스프레스 라이브러리를 사용하고 있습니다.


시퀄라이즈

시퀄라이즈ORM(Object Relation Mapping)이라고 부르는 라이브러리입니다. 그 이름처럼 자바스크립트의 객체와 데이터베이스 릴레이션(테이블)을 매핑해줍니다. 게다가 단순히 매핑하는 것만이 아닌 자바스크립트 구문을 자동적으로 SQL로 변환해줍니다. 그 덕분에 자바스크립트만으로 데이터베이스를 다룰수 있다는 장점이 생기게 됩니다.

여담으로, SQL을 몰라도 시퀄라이즈를 이용해서 DB조작이 가능합니다. 하지만 SQL의 기본 명령들을 이해하고 있어야만 제대로 사용할 수 있겠죠?

시퀄라이즈는 다음 명령어로 설치합니다.

npm install sequelize sequelize-cli

sequelize-cli는 시퀄라이즈 명령어를 사용하기 위한 패키지입니다.

그리고 우리는 익스프레스와 MySQL을 사용할 예정이니 아래 패키지들도 설치해주세요.

npm install express mysql2 morgan
npm install -D nodemon

mysql2는 시퀄라이즈와 MySQL을 연결해주는 드라이버 패키지입니다. morgan은 로깅(logging)기능이 있는 패키지입니다. 여러 에러 탐지에 도움을 줍니다.

패키지 설치가 완료됐다면 다음 명령어로 프로젝트 폴더를 설정합니다.

npx sequelize init

이 명령어를 수행하면 프로젝트 폴더에 config, models, migrations, seeders의 폴더가 생성되고 몇가지 기본 설정 파일이 생성됩니다.

/models/index.js에 기본적으로 생성된 코드는 불필요한 내용이 많아 아래 내용으로 대체합니다.

const Sequelize = require('sequelize');
const env = process.env.NODE_ENV || 'development';
const config = require('../config/config.json')[env];
const db = {};

const sequelize = new Sequelize(config.database, config.username, config.password, config);

db.sequelize = sequelize;

module.exports = db;

MySQL과 연결하기

연결 전

참고로 연결 전에 MySQL이 켜져있고, 데이터베이스가 생성되어 있어야합니다. 실습을 위해 저는 seq라는 데이터베이스를 하나 만들었습니다.

그리고 ./config/config.json에서 설정을 합니다. 간단한 실습이라 test, production은 이용하지 않을 예정이니 제일 상단의 "development"부분을 수정해주세요.

  "development": {
    "username": "root",
    "password": "root 비밀번호", //MySQL 설치과정에서 설정한 root 계정 비밀번호
    "database": "seq", //생성한 데이터베이스 이름
    "host": "127.0.0.1",
    "dialect": "mysql"
  },

그리고 nodemon 실행을 위해 package.json에 다음 내용도 추가해주세요.

  "scripts": {
    "start": "nodemon app"
  },

연결하기 app.js

이제 익스프레스로 만드는 앱과 MySQL을 연결해보겠습니다. 최상위 위치에 app.js를 생성하고 다음과 같이 작성해주세요.

const express = require('express');
const path = require('path');
const morgan = require('morgan');

const { sequelize } = require('./models');

const app = express();

app.set('port', process.env.PORT || 3001);

sequelize.sync({ force: false })
  .then(() => console.log('DB 연결 성공!'))
  .catch(e => console.error(e));

app.use(morgan('dev'));
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
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'), '번 포트에서 대기중 '));

작성 후 터미널에 npm start를 입력합니다.위 사진과 같은 결과가 나오면 DB 연결에 성공한 것 입니다.

만약 실패하는 경우에 mysql이 실행중인지, 계정과 계정 비밀번호를 제대로 입력했는지, 사용하고자 하는 데이터베이스가 존재하는지, 이름은 맞는지를 확인해주세요.

0개의 댓글