-
노드 시퀄라이즈 사용하기노드 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