Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- network
- 쿠버네티스
- kubernetes
- 이론
- nodejs
- git
- 클라우드
- IaaS
- gns3
- mysql
- OpenStack
- 실습
- PAT
- 네트워크
- RAID
- node.js
- MongoDB
- dockerfile
- RAPA
- Javascript
- Docker-compose
- 명령어
- express
- worker
- 개념
- Docker Swarm
- 용어정리
- docker
- 도커
- PaaS
Archives
- Today
- Total
융융이'Blog
Sequelize (세팅, 모델링) 본문
Sequelize는 nodejs에서 데이터베이스를 ORM으로 바꿔주는 모듈이다. 만약 데이터베이스를 mySQL이나 postgres를 사용한다면 유용하게 데이터베이스를 구축하고 raw쿼리를 사용하지 않고 쉽게 쿼리문을 작성할 수 있게 한다.
세팅
console창
npm i sequelize mysql2
npm i -g sequelize-cli
sequelize init
위에 같은 콘솔을 입력하면 config/config.json 파일이 생기고 각종 sequelize 관련된 폴더들이 생성될 겉이다.
config/config.json
{
"development": {
"username": "root",
"password": PASSWORD,
"database": DATABASE_NAME,
"host": "127.0.0.1",
"port": 3306,
"dialect": "mysql"
},
"test": {
"username": "root",
"password": PASSWORD,
"database": DATABASE_NAME,
"host": "127.0.0.1",
"port": 3306,
"dialect": "mysql"
},
"production": {
"username": "root",
"password": PASSWORD,
"database": DATABASE_NAME,
"host": "127.0.0.1",
"port": 3306,
"dialect": "mysql"
}
}
혹시 몰라서 config.json 대신에 config.js로 세팅을 해보았지만 여러군대에서 문제가 생기는 바람에(내장 모듈에서 json파일형식을 통해서 값을 받아오도록 지정해둠....) json형태로만 가능하다는 점이다. 알고보니 잘 js로 바꿀수 있다네요...
sequelize db:create
sequelize cli로 config.json기반으로 데이터베이스가 생성이 된다.
만약 db:drop
을 실행하면 해당 데이터베이스가 drop된다.
데이터모델링
var fs = require('fs');
var path = require('path');
var basename = path.basename(__filename);
const Sequelize = require('sequelize');
require('dotenv').config();
const env = process.env.NODE_ENV || 'development';
const db = {};
const sequelize = new Sequelize(
process.env.DATABASE, process.env.DB_USERNAME, process.env.DB_PASSWORD, {
host: process.env.DB_HOST,
dialect: 'mysql',
}
)
//이 부분은 생성된 테이블을 sequelize에서 모델을 넣어준다.(단 관계형 데이터모델은 따로 넣어줘야한다.)
fs
.readdirSync(__dirname)
.filter(file => {
return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
})
.forEach(file => {
var model = sequelize['import'](path.join(__dirname, file));
db[model.name] = model;
});
Object.keys(db).forEach(modelName => {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
db.User = require('./user.js')(sequelize, Sequelize);
db.Post = require('./post.js')(sequelize, Sequelize);
db.Comment = require('./comment.js')(sequelize, Sequelize);
db.Hashtag = require('./hashtag.js')(sequelize, Sequelize);
//작성자와 게시글
db.User.hasMany(db.Post, {foreignKey: 'PostId', as: 'posts'});
db.Post.belongsTo(db.User, {as : 'writer'});
//게시글과 댓글
db.Post.hasMany(db.Comment, {as: 'comments'});
db.Comment.belongsTo(db.Post, {as: 'post'});
//대댓글
db.Comment.hasMany(db.Comment, {as: 'sub_comment'});
//작성자와 좋아요글
db.User.belongsToMany(db.Post, { through: 'Like_Post'});
db.Post.belongsToMany(db.User, { through: 'Like_Post'});
//작성글과 해시태그
db.Post.belongsToMany(db.Hashtag, { through: 'PostHashTag'});
db.Hashtag.belongsToMany(db.Post, { through: 'PostHashTag'});
각각의 모델들을 User.js, Post.js, Comment.js 등 models폴더 안에서 정의를 해준 뒤 관계형 데이터모델을 만들어준다.
app.js
...
const { sequelize } = require('./models');
// // 실시간으로 sequelize table 생성 확인
sequelize.sync();
...
sequelize.sync()를 실행하면 models/index.js을 참고하여 테이블을 생성하지만 이미 존재하는 테이블은 수정되지 않는다. 그렇게 원하는 테이블로 바꾸기 위해서 해당 테이블을 삭제후 변경해주거나 직접 mysql문을 통해서 변경하자
'2022이전 > node.js' 카테고리의 다른 글
CROS (0) | 2020.01.21 |
---|---|
express의 app.js의 설정 주의하기 (0) | 2020.01.15 |
패스워드 저장(이론) (0) | 2020.01.13 |
node 내장 모듈(OS, path, url, qureystring ) (0) | 2020.01.13 |
노드 내장 객체 알아보기 (0) | 2020.01.13 |