Sequelize
Sequelize
Sequelize는 관계형 데이터베이스를 위한 nodejs ORM입니다.
환경설정
• 설치하기
npm을 통해 sequelize와 해당 Database의 패키지를 설치합니다.
npm install --save sequelize
npm install --save pg pg-hstore # Postgres
npm install --save mysql2
npm install --save mariadb
npm install --save sqlite3
npm install --save tedious # Microsoft SQL Server
npm을 통해 sequelize-cli를 설치합니다. sequelize-cli는 터미널에서 sequelize 명령어를 입력하게 해주는 도구입니다.
npm install --save-dev sequelize-cli
설정하기
sequelize-cli로 애플리케이션 안에 Database의 빈프로젝트를 초기화 해줍니다. 빈프로젝트는 config, migrations, models, seeders 폴더 트리로 구성되어 있습니다.
npx sequelize-cli init
• database configuration
config.js에 sequelizer와 연동할 Database를 설정을 합니다.
{
"development": {
"username": "db-username",
"password": "db-password",
"database": "db-name",
"host": "dp-address",
"dialect": "postgres"
},
"test": {
"username": "db-username",
"password": "db-password",
"database": "db-name",
"host": "dp-address",
"dialect": "postgres"
},
"production": {
"username": "db-username",
"password": "db-password",
"database": "db-name",
"host": "dp-address",
"dialect": "postgres"
}
}
• sequelize configuration
.sequelizerc는 sequelize-cli의 환경을 설정할 수 있는 파일입니다.
const path = require('path');
module.exports = {
'config': path.resolve('config', 'database.json'),
'models-path': path.resolve('db', 'models'),
'seeders-path': path.resolve('db', 'seeders'),
'migrations-path': path.resolve('db', 'migrations')
};
- Local Database
터미널에 whoami를 입력하여 user name을 확인할 수 있습니다. - Google Cloud SQL Database
sequelize cli
sequelize cli를 통해 Model, Migration, Seed 단계를 거쳐 Database를 만들 수 있습니다.
Migration이란 Model Schema를 정의하고, 이를 테이블에 옮기는 것을 의미합니다.
• Model 만들기
Database Model을 만듭니다.
npx sequelize-cli model:generate --name User --attributes firstName:string,lastName:string,email:string
• Migration 실행하기
Migration을 Database에 옮깁니다.
npx sequelize-cli db:migrate
• Migration 취소하기
옮긴 Migration을 취소할 수 잇습니다.
npx sequelize-cli db:migrate:undo
• Seed
Seed는 테이블에 데이터를 삽입하는 것을 의미합니다.
Seed 만들기
Seed를 만듭니다.
npx sequelize-cli seed:generate --name demo-user
Seed Database에 넣기 Seed를 Database에 넣어줍니다.
npx sequelize-cli db:seed:all
Seed 취소하기
npx sequelize-cli db:seed:undo
API
• Model
Model은 Database Table의 구조를 sequelize가 표현하는 것을 의미합니다.
Model 정의
sequelize.define
: 함수를 통해 모델을 정의할 수 있습니다.
extends model
: 상속을 통해 모델을 정의할 수 있습니다.
모델의 스키마 데이터 타입은 다음과 같습니다.
- STRING
- TEXT
- BOOLEAN
- INT
- REAL
- DOUBLE
- DECIMAL
- …
모델 Validation
Model Sync
sequelize.sync
를 통해 Database와 Model을 동기화 합니다.
Time Stamp
sequelize는 table을 만들때, 자동으로 createdAt, updatedAt을 column에 넣습니다. 이는 option으로 비활성화 할 수 있습니다.
Model Define Example Code
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define("User", {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: DataTypes.INTEGER,
defaultValue: new Date(),
},
}, {
timestamps: false,
});
return User;
}
Model-DB Connection Example Code
const db = require("./database/models");
db.sequelize.sync().then((req) => console.log("model is synchronized with db"));
• Validation
https://sequelize.org/v5/manual/models-definition.html#validations
Database 다루기
• Create
• Read
Database를 조회합니다.
- findAll: 전체 Database를 조회합니다.
- findByPk: Primary Key로 Database를 조회합니다.
- findOne: 조건에 맞는 Database 한개를 조회합니다.
- findOrCreate: 조건에 맞는 Database를 조회하고 없으면 Databae를 만듭니다.
- findAndCountAll: 전체 Database를 조회하고 갯수 반환합니다.
- 탐색 Sequelize Query
Model API를 통해 다양한 조건으로 탐색할 수 있습니다.
attribute를 통해 특정 coulumn만 가져올 수 있습니다.
where을 통해 탐색 조건을 정의할 수 있습니다. (where은 기본적으로 and와 같습니다.)
op를 통해 다양한 조건 연산을 할 수 있습니다.
order를 통해 정렬된 Data를 받을 수 있습니다.
limit를 통해 가져올 Data 개수를 정의할 수 있습니다.
const { User } = require("./models");
const { Op } = require("sequelize");
User.findAll({
attributes: ["name", "age"],
where: {
name: "minho"
age: {
[Op.gt]: 30
},
[Op.or]: [
{ location: "yong-in" },
{ occupation: "engineer" }
]
order: [
["birth", "DESC"]
]
}
})
참조 자료
• sequelize quick tutorial
• squelize basic 1
• squelize basic 2
• squelize basic 3