SQL 작업을 쉽게 할 수 있도록 도와주는 라이브러리
시퀄라이즈 명령어 사용하기 위해 sequelize-cli 설치

mysql2는 MySQL DB가 아닌 드라이버(Node.js와 MySQL을 이어주는 역할)
npx sequelize init으로 시퀄라이즈 구조 생성

위 처럼 진행할 시 package.json을 제외하고 config/config.json 이라는 환경 변수 파일이 하나 생성 된다.
// config.json
{
"development": {
"username": "이름",
"password": "비밀번호",
"database": "sehema 이름",
"host": "host ip",
"dialect": "어떠한 db인지"
}
}
로 기입해준다!
이후 models 폴더를 만든 후 sequelize를 사용할 수 있게 파일을 만들어 선언해 준다
// sequelize.js
const Sequelize = require('sequelize');
const env = process.env.NODE_ENV || 'development';
const config = require('../config/config')[env];
const db = {};
const sequelize = new Sequelize(config.database, config.username, config.password, config);
db.sequelize = sequelize;
module.exports = db;
이후 선언해 준 sequlize 파일을 import 해와서 db를 연결 시켜준다
sequelize.sync({ force: false })
.then(() => {
console.log('데이터베이스 연결 성공');
})
.catch((err) => {
console.error(err);
});
sequelize의 model은 sql에서 테이블을 의미
공식문서 참조
https://sequelize.org/docs/v6/core-concepts/model-basics/
class User extends Sequelize.Model {
static initiate(sequelize) {
User.init({
name: {
type: Sequelize.STRING(20),
allowNull: false,
unique: true,
},
age: {
type: Sequelize.INTEGER.UNSIGNED,
allowNull: false,
},
}, {
sequelize, // static init의 매개변수와 연결되는 옵션
timestamps: false, // 자동으로 날짜 컬럼을 추가하는 옵션
underscored: false, // 스네이크 케이스로 바꾸는 옵션 ('_'붙일지 말지)
modelName: 'User', // 모델 이름
tableName: 'users', // 실제 데이터베이스의 테이블 이름
paranoid: false, // deletedAt 컬럼을 생성하는 옵션
charset: 'utf8', // 한글 설정
collate: 'utf8_general_ci', // 한글 설정
});
}
static associate(db) {
db.User.hasMany(db.Comment, { foreignKey: 'commenter', sourceKey: 'id' });
}
};
sequelize의 기능 중 timestamps는 현재 false로 되어 있지만, default값은 true이다. 만약 true 일시 자동으로 createdAt, updatedAt이 생성되어, 만들어진 시간, 업데이트 된 시간을 자동으로 기입하게 해준다.
위 처럼 테이블을 초기화(init) 시켜 만들어 준다. 하지만 원래 sql이라면 아래처럼
기본키를 지정하고, autoIncrement를 통해 자동으로 숫자가 올라가게 해줘야 하지만,
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
}
sequelize는 위와 같이 해주지 않아도 id를 자동으로 넣어주기 때문에 위 코드를 생략이 가능하다.
