-
[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 데이터베이스 연결됨
<참고>
'Node.js' 카테고리의 다른 글
[Node.js] sequelize 쿼리 (0) 2022.04.19 [Node.js] sequelize 관계 정의 (associations) (0) 2022.04.06 [Node.js] multer로 이미지 업로드 하고 sharp로 리사이징 해주기 (0) 2020.11.27 [Node.js] multer 모듈 이용해서 파일 업로드 하기 (0) 2020.11.26 [Node.js] socket.io 원리 (0) 2020.10.20