HTTP Authorization 로 토큰 보내기 / 받기토큰 인증 구현try-catch 에러 처리throw 에러 발생시키기instanceof 로 에러 타입 확인SQL_CALC_FOUND_ROWS, found_rows()를 이용한 pagination 구현camelCase, snake_case 로, DB와 code에서 각각의 Naming Rule 통일코드 퀄리티 를 위한 고려사항Faker api를 이용해서 필요한 가짜 데이터를 생성하는 API 구현A. 우리가 그동안 mysql2 모듈을 사용하면서, CRUD 를 위해서 직접 SQL문을 작성했어야 했다.
ex)
`SELECT * FROM table1` ;
`INSERT INTO table2 (col1, col2) VALUES (val1, val2)`
Mongoose나 Sequelize는 이러한 SQL을 직접 작성하지 않고, 데이터 객체를 만든 후에 메소드를 이용해서 자동으로 SQL문이 입력되는 것처럼 작성된다.
Mongoose : MongoDB 관리
Sequelize : MySQL, mariaDB 등 다양한 DBMS를 지원하지만 MongoDB 를 지원하진 않는다.
우리는 지금까지 mariaDB를 이용해 왔으므로 Sequelize 에 대해서 기본적인 사용방법을 간단하게 알아보자.
npm i sequelize
const { Sequelize, DataTypes } = require('sequelize'); // 모듈 불러오기
const sequelize = new Sequelize('test', 'root', 'password', {
host: 'localhost',
dialect: 'mariadb' // 사용할 DBMS 설정
});
// 사용할 테이블 생성
const User = sequelize.define('User', {
name: {
type: DataTypes.STRING,
allowNull: false
},
age: {
type: DataTypes.INTEGER,
allowNull: false
},
email: {
type: DataTypes.STRING,
allowNull: false,
unique: true
}
}, {
schema: 'mySchema' // 스키마 지정
});
(async () => {
try {
await sequelize.authenticate(); // DB 연결 확인
console.log('Connection has been established successfully.');
await sequelize.sync({ force: true }); // DB 동기화
// INSERT : INSERT INTO User (name, age, email) VALUES ('Alice' , 25, 'alice@example.com') ;
await User.create({
name: 'Alice',
age: 25,
email: 'alice@example.com'
});
// SELECT : SELECT * FROM User WHERE age >= 20 ;
const users = await User.findAll({
where: {
age: {
[Sequelize.Op.gte]: 20 // >= 20
}
}
});
console.log(JSON.stringify(users, null, 2));
// UPDATE
const [updatedCount, updatedRows] = await User.update(
{ age: 26 },
{
where: {
name: 'Alice'
}
}
);
// DELETE
const deletedCount = await User.destroy({
where: {
name: 'Alice'
}
});
console.log(`Number of users deleted: ${deletedCount}`);
} catch (error) {
console.error('Unable to connect to the database:', error);
} finally {
await sequelize.close();
}
})();