Node.js 환경에서 사용되는 ORM(Object-Relational Mapping) 라이브러리
(쉽게 말해서 mybatis, ibatis xml 페이지에 해괴망측하고 복잡한 쿼리를 손수 한땀 한땀 안짜도 되는)
아주 편리한 ORM 이라고 생각하면 쉬움
데이터베이스의 테이블을 JavaScript 클래스 형태로 정의 가능 각 클래스는 테이블의 구조를 나타내며, 각 필드는 테이블의 열(column)을 나타냄
예시 코드
User 모델 정의예시
const { Sequelize, DataTypes } = require('sequelize');
const sequelize = new Sequelize('database', 'username', 'password', {
host: 'localhost',
dialect: 'mysql'
});
const User = sequelize.define('User', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
username: {
type: DataTypes.STRING,
allowNull: false,
unique: true
},
password: {
type: DataTypes.STRING,
allowNull: false
}
});
CRUD 작업을 간단한 메서드로 수행 가능
예시 코드
생성(Create):
const newUser = await User.create({ username: 'john_doe', password: 'password123' });
읽기(Read):
const user = await User.findOne({ where: { username: 'john_doe' } });
업데이트(Update):
user.password = 'new_password';
await user.save();
삭제(Delete):
await user.destroy();
Sequelize는 테이블 간의 관계 정의 가능
(JPA 에 있는 1:1 ,1:N , N:M(다대다) , N:1 이거처럼 관계 정의 가능)
const User = sequelize.define('User', {
username: DataTypes.STRING,
});
const Profile = sequelize.define('Profile', {
bio: DataTypes.TEXT,
});
// 1:1 관계 설정
User.hasOne(Profile);
Profile.belongsTo(User);
const User = sequelize.define('User', {
username: DataTypes.STRING,
});
const Post = sequelize.define('Post', {
title: DataTypes.STRING,
});
// 1:N 관계 설정
User.hasMany(Post);
Post.belongsTo(User);
const Student = sequelize.define('Student', {
name: DataTypes.STRING,
});
const Course = sequelize.define('Course', {
title: DataTypes.STRING,
});
// N:M 관계 설정
Student.belongsToMany(Course, { through: 'Enrollment' });
Course.belongsToMany(Student, { through: 'Enrollment' });
const User = sequelize.define('User', {
username: DataTypes.STRING,
});
const Post = sequelize.define('Post', {
title: DataTypes.STRING,
});
// N:1 관계 설정
Post.belongsTo(User); // 여러 개의 Post가 하나의 User를 가리킴
User.hasMany(Post); // 하나의 User가 여러 개의 Post를 가짐
비동기 작업을 지원하는 Promise 기반의 API를 제공하여 데이터베이스 작업을 비동기적으로 수행할 수 있으며, async/await 문법을 사용할 수 있음
async function createUser() {
try {
const user = await User.create({ username: 'jane_doe', password: 'securepassword' });
console.log(user);
} catch (error) {
console.error('Error creating user:', error);
}
}
NodeJs 에서도 ORM 라이브러리가 있는게 참 신기하고 앞으로 쫌 더 써보면서 사용법을 익혀봐야겠다