immersive TIL #17
sequelize란 nodejs에서 mysql을 쉽게 다룰 수 있도록 도와주는 라이브러리다.
sequelize는 ORM(Object-Relational Mapping)로 분류가 된다.
ORM은 객체와 관계형 데이터베이스의 관계를 매핑 해주는 도구이다.
ORM을 사용하면 query를 메소드로 조작할 수 있는데 메소드를 호출하면 내부적으로 쿼리가 실행된다.
sequelize 공식 문서를 참고해서 설치 할 수 있다.
sequelize는 Node.js 기반의 ORM으로 비동기 문법을 사용하는데
MYSQL같은 RDB가 시스템에 설치 되어 있어야한다.
(Mysql2 에서 async-await 사용가능)
ORM은 특정 DB의 종속되지 않는 특징을 갖고 있기 때문에
DB와 커넥션만 연결되면 어떤 DB를 사용하던지 상관없이 동일한 메소드로 쿼리 수행이 가능하다.
sequelize-cli 모듈
sequelize를 조금 더 효율적으로 사용하기 위해서 몇 개의 폴더와 파일( 스켈레톤 )을 생성
sequelize와 mysql모듈을 설치하고
npm install --save-dev sequelize-cli
명령어로 모듈을 설치한다.
npx sequelize --help
CLI 실행하면 사용법이 나온다.
sequelize init
명령어를 통해 생성된 models 폴더 안에는 index.js라는 파일이 생성된다.
//index.js파일
"use strict";
const fs = require("fs");
const path = require("path");
const Sequelize = require("sequelize");
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || "development";
const config = require(__dirname + "/../config/config.json")[env];
const db = {};
let sequelize;
if (config.use_env_variable) {
sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
sequelize = new Sequelize(
config.database,
config.username,
config.password,
config
);
}
fs.readdirSync(__dirname)
.filter(file => {
return (
file.indexOf(".") !== 0 &&
file !== basename &&
file.slice(-3) === ".js"
);
})
.forEach(file => {
const 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;
index.js파일에서 반복문으로 models폴더 내부에있는 파일들을 읽고 그파일들을 모델로 설정한다.
models폴더에서 만들고자하는 테이블의 이름으로 js파일을 만들어주고 모델을 정의하면 테이블이 생성된다.
모델을 정의하는 method는 define()이며,
sequelize.define('테이블객체 이름', 스키마 정의, 테이블 설정)로 사용할 수 있다.
module.exports = (sequelize, DataTypes) => {
const users = sequelize.define(
'users', //테이블객체 이름
{
email: DataTypes.STRING, //스키마정의
username: DataTypes.STRING,
password: DataTypes.STRING
},
{timestamps: true, //테이블 설정
}
);
timestamps
Sequelize는 테이블을 생성한 후 자동적으로 createdAt, updatedAt column을 생성한다. Database에 해당 테이블이 언제 생성되었고 가장 최근에 수정된 시간이 언제인지 추적할 수 있도록 해준다. 기능을 끄려면 false로 설정한다
이외에 paranoid , underscore 등 .. 여러 테이블 옵션이 있다.
Author And Source
이 문제에 관하여(immersive TIL #17), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@paxkk/immersive-TIL-17저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)