Sequelize

Code_Builder·2024년 8월 17일
0
post-thumbnail

sequelize 란?

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 작업

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 이거처럼 관계 정의 가능)

  • 1:1 관계 (belongsTo)
const User = sequelize.define('User', {
    username: DataTypes.STRING,
});

const Profile = sequelize.define('Profile', {
    bio: DataTypes.TEXT,
});

// 1:1 관계 설정
User.hasOne(Profile);
Profile.belongsTo(User);
  • 1:N 관계 (hasMany)
const User = sequelize.define('User', {
    username: DataTypes.STRING,
});

const Post = sequelize.define('Post', {
    title: DataTypes.STRING,
});

// 1:N 관계 설정
User.hasMany(Post);
Post.belongsTo(User);
  • N:M 관계(다대다 관계,belongsToMany)
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' });
  • N:1 관계(hasMany)
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 기반

비동기 작업을 지원하는 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 라이브러리가 있는게 참 신기하고 앞으로 쫌 더 써보면서 사용법을 익혀봐야겠다

profile
사소한일에도 최선을 다하기

0개의 댓글

관련 채용 정보