일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- elementAt
- 생명주기
- Filter
- collection
- animation
- ReactNative
- union
- function
- Foreign Key
- mongoose
- react native
- enum
- Swift
- Service
- MINUS
- map
- Generic
- recyclerview
- vuex
- class component
- Interface
- docker-compose
- list
- Kotlin
- lifecycle
- docker
- AWS
- ConstraintLayout
- LiveData
- CLASS
- Today
- Total
개발 일기
Sequelize-cli 간단한 사용방법 본문
Sequelize
Sequelize는 여러 DB를 지원하는 Promise 패턴 기반의 Node.js ORM 입니다.
트랜잭션 , 관계 설정 , 즉시 로딩 , 읽기 전용 복제등을 포함해 많은 기능을 제공합니다.
ORM ?
ORM은 자동으로 DBMS의 데이터를 객체 형태로 변환하여 객체 지향적인 개발을 할수가 있습니다.
저는 Sequelize-cli을 통해서 만들어보도록 하겠습니다. ( 명령어를 통해서 데이터베이스 작업을 도와줄수 있습니다. )
npm i --save sequelize mysql2
npm i --global sequelize-cli
sequelize init
이런 작업을 진행을 하면 다음과 같이 4가지의 폴더가 생성이 됩니다.
config - DB 연결 정보를 저장합니다.
migrations - migrations에 필요한 데이터가 저장됩니다.
models - DB Model 정의를 저장합니다.
seeders - Default 데이터를 정의할수가 있습니다.
Config
DB 연결 정보를 설정합니다.
{
"development": {
"username": "root", // DB 사용자명
"password": "123456", // DB 패스워드
"database": "test_database_dev", // DB 이름
"host": "127.0.0.1", // DB 주소
"dialect": "mysql", // DBMS
"operatorsAliases": false // 연산자 (최신에는 1 OR 0 으로 표현)
},
"test": {
"username": "root",
"password": "123456",
"database": "test_database_test",
"host": "127.0.0.1",
"dialect": "mysql",
"operatorsAliases": false
},
"production": {
"username": "root",
"password": "123456",
"database": "test_database_prod",
"host": "127.0.0.1",
"dialect": "mysql",
"operatorsAliases": false
}
}
Model
DB Model을 정의할수가 있습니다. (타입)
'use strict';
module.exports = (sequelize, DataTypes) => {
const Post = sequelize.define('Post', {
message: DataTypes.STRING,
user_id : DataTypes.INTEGER,
profile_image : {
type: DataTypes.STRING(200), // 자료형
allowNull: false, // Null 혀용 여부
comment: '테스트 숫자', // 설명
}
}, {});
Post.associate = function(models) {
// associations can be defined here
};
return Post;
};
Migrations
변경사항이나 관련된 정보를 기록해놓는 파일들입니다!.
ex) sequelize migration:generate --name [migrate file 명]
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.addColumn('Posts', 'user_id' , Sequelize.INTEGER);
},
down: (queryInterface, Sequelize) => {
return queryInterface.removeColumn('Posts' , 'user_id');
}
};
이런식으로 작성을 해서 sequelize db:migrate 통해서 실제 DB작업을 변경하였습니다.
seeders
기본값들을 정의할수가 있습니다.
sequelize seed:generate --name [파일 이름]
---------------- [파일 이름] ---------------
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.bulkInsert('People', [{
name: 'John Doe',
isBetaMember: false
}], {});
},
down: (queryInterface, Sequelize) => {
return queryInterface.bulkDelete('People', null, {});
}
};
[실습]
제일 먼저 디비를 생성하도록 하겠습니다.
sequelize db:create
이제 실제로 Model을 만들어 보도록 하겠습니다.
sequelize model:generate --name Post --attributes message:string,profile_img:string
성공을 하면 migrations 폴더와 models에 파일이 생성이 된걸 확인 할수가 있습니다.
이제 migration 파일을 적용하기 위해서는 sequelize db:migrate을 터미널에 입력하시면 됩니다.(up 실행)
만약에 되돌리고 싶은 경우에는 sequelize db:migrate:undo을 사용하시면 됩니다.
이제 ./models 폴더에 index.js에 해당 Model을 추가 시키도록 하겠습니다.
db.Post = require('./post')(sequelize, Sequelize);
만약에 Migration이 필요가 없는 경우에는 sequelize.sync({alter : true or force : ture}) 설정을 해서 좀더 편하게 진행을 할수가 있습니다. (db:migrate 을 할 필요가 없습니다.)
다만 force 같은 경우에는 DB를 다 삭제하고 다시 만듭니다.
alter 같은 경우에는 컬럼에 변경된 내용을 적용을 합니다. (Production 에서는 사용하지 말라고 권고 하고 있습니다.)
Create
await models.Post.create({message : "message" , user_id : 2 , profile_image : "image" })
GET
await models.Post.findAll({raw:true})
UPDATE
await models.Post.update({message: 'message2'}, {where: {user_id: 2 }})
DELETE
await models.Post.destroy({where: {user_id: 2}})
더 자세한 내용은 여기를 통해서 확인 할수가 있습니다.
'서버 > Node.js' 카테고리의 다른 글
JWT 사용자 인증 구현 (0) | 2020.08.04 |
---|---|
TypeGraphQL ? (0) | 2020.06.05 |
mongoose query builder ? (0) | 2020.05.28 |
mongoose ? (0) | 2020.05.27 |
AWS s3 Image Upload (0) | 2020.05.26 |