Sequelize 이란? 그리고 사용법 (Express.js)
[비슷한 느낌]
python 의 peewee
java 의 jpa
nodejs 의 Sequelize
Sequelize는 node.js 에서 mysql등 RDMS 를 쉽게 다룰수 있게 도와주는 라이브러리 입니다.
결코말해 ORM(Object Relational Mapping) 이라고 할수 있습니다.
ORM이 뭔지 간단하게 말씀드리면, Object Relational Mapping의 약자입니다.
뜻 그대로 객체와 관계적인 매핑 ! 프로그래밍 언어의 객체와 데이터베이스의 데이터를 자동으로 매핑(연결) 해주는 도구 입니다.
결론은 프로그래밍 언어로 데이터베이스를 조작 가능합니다.
설치를 해봅시다.
Sequelize 설치 (DB는 mysql 기준으로 설명합니다.)
npm install --save sequelize
npm install --save mysql2
//터미널에서 sequelize를 편리하게 하는 도구
npm install -g --save-dev sequelize-cli
//전역 터미널에서 sequelize를 초기화해주는 도구입니다.
//이 명령어를 치게되면, config, models, migrations, seeders 폴더가 자동으로 생기게 됩니다.
sequelize init
- config : 데이터베이스 연결에 필요한 정보들을 담아둔 폴더. 개발, 운영, 테스트 등 상황에 맞는 데이터베이스 정보를 사용할 수 있다.
- migrations : 데이터베이스의 변경 기록을 담은 파일들을 보관하는 폴더. 데이터베이스에 적용하거나 이전 설정으로 되돌릴 수 있다.
- models : 각 테이블에 대한 필드 타입 및 정보를 정의하고 테이블에 대한 객체를 모아준다.
- seeders : 테이블에 자동으로 기본 데이터를 넣고 싶은 경우에 사용한다.
먼저
config 폴더 안의 config.json 에서 연결할 데이터베이스 정보를 기입 합니다.
{
"development": {
"username": "",
"password": "",
"database": "",
"host": "",
"dialect": ""
}
}
index.js 에서 아래 코드를 작성해주세요. models 폴더안의 index.js 파일은 관계형 데이터베이스와 작성한 모델들을 매핑해주는 기능을 해서 ORM의 코어역할을 수행합니다.
import config from '../config/config.js';
객체 생성
const db = {};
sequelize 와 db 연결
config 객체로 데이터베이스 정보를 가지고 온 뒤, Sequelize() 로 DB와 연결합니다.
let sequelize = new sequelize(
config[env].database,
config[env].user,
config[env].password,
config[env]
);
Model이 작성된 파일을 찾아 db 객체에 삽입합니다.
readdirSync(__dirname)
.filter(file => {
return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
})
.forEach(file => {
const model = require(join(__dirname, file))(sequelize, DataTypes);
db[model.name] = model;
});
Model 간 관계를 설정합니다.
Object.keys(db).forEach((modelName) => {
db[modelName].associate(db);
});
db 객체에 시퀼라이즈 삽입합니다.
db.sequelize = sequelize;
db.Sequelize = Sequelize;
export default db;
db객체는 이제, sql 쿼리문없이 객체 자체로, 데이터를 조작 할수 있습니다.
마지막 서버 연결
import db from '../db/models';
db.sequelize
.sync({ force: false })
.then(() => {
console.log('✅ DB Connected!');
})
.catch((err) => {
console.error(err);
});
이제 모델과, 시퀼라이즈의 연결이 모두 끝났습니다.