
Sequelize란?
Sequelize는 Node.js 환경에서 사용되는 ORM(Object-Relational Mapping) 라이브러리 입니다.
객체와 데이터베이스를 ORM 라이브러리가 매핑 시켜 JavaScript구문으로 SQL문을 직접 작성하지 않고 데이터베이스 작업을 수행 할 수 있게 해줍니다.
Sequelize의 주요 기능
- 데이터베이스 지원 : PostgreSQL, MySQL, SQLite, MSSQL 및 MariaDB와 같은 주요 관계형 데이터베이스 시스템을 지원합니다. 여러 데이터베이스 시스템을 지원하기 때문에 코드 변경없이 다른 데이터베이스로 마이그레이션이 가능합니다.
- 보안 : SQL 인젝션 공격으로 부터 애플리케이션을 보호해 주며 직접 쿼리를 작성할 때 발생할 수 있는 보안 문제를 최소화하는데 도움을 줍니다.
- 개발 속도 향상 : 객체 지향 접근 방식과 다양한 유틸리티 덕분에 개발 속도가 빨라집니다.
- 유지 보수 : 코드가 구조화 되기 때문에 유지보수에 용이합니다.
- 검증 : Sequelize는 모델 정의 시 속성에 대한 검증을 제공하기 때문에 데이터의 무결성을 보장합니다.
- Associations : 관계형 데이터베이스에서 테이블 간의 관계를 쉽게 정의하고 관리 할 수 있습니다.
기본 설정 방법
- Sequelize 기본 설정 방법 및 데이터베이스 테이블 생성 모델에 관한 짧은 설명입니다.
app.js
const express = require("express");
const path = require("path");
const dot = require("dotenv").config();
const { Sequelize, User } = require("./models");
const app = express();
app.use(express.urlencoded({ extended: false }));
// 시퀄라이즈 구성 연결 매핑
// sync 함수는 데이터 베이스를 동기화 시켜주는 메소드
// focus true : 값이 있으면 때 초기화 false 초기화 안됨
// Sequelize는 promise 기반
Sequelize.sync({ focus: true })
.then(() => {
// 연결 성공
console.log("connect sccess");
})
.catch((err) => {
// 연결 실패
console.error(err);
});
app.listen(process.env.PORT, () => {
console.log("Server On use PORT : 8080");
});
model/config.js
// dialect 사용할 데이터 베이스
const config = {
dev: {
// env 파일에 정의 되어 있는 USERNAME, PASSWORD, DATABASE, HOST를 가져옴
username: process.env.USERNAME,
password: process.env.PASSWORD,
database: process.env.DATABASE,
host: process.env.HOST,
dialect: "mysql",
},
};
module.exports = config;
model/index.js
const Sequelize = require("sequelize");
const config = require("./config");
const User = require("./users");
const sequelize = new Sequelize(
config.dev
);
// 내보내줄 빈 객체
const db = {};
db.Sequelize = sequelize;
db.User = require("./users");
// init에서 최초로 User를 실행해서 Sequelize.Model의 클래스를 User가 상속받음
User.init(sequelize);
module.exports = db;
model/users.js
const Sequelize = require("sequelize");
// User 클래스에 sequelize안의 model 클래스를 상속
class User extends Sequelize.Model {
static init(sequelize) {
// super.init() 상속 받은 부모의 함수를 실행
// init 메소드
// 첫번째 매개변수 : 컬럼에 대한 설정 값
// 두번째 매개변수 : 테이블의 자체 설정 값
return super.init(
{
// 컬럼 설정
// sequelize는 모델을 정의 할때 별도로 id 필드를 만들지 않으면 자동으로 primary key를 갖는 id 컬럼을 생성
// VARCHAR == STRING
// allowNull : null 허용 여부
// primaryKey : 기본키 설정 여부
// unique : 고유키(중복되지 않음) 사용 여부
// type: Sequelize.STRING, 선언할때 보통 require해서 sequelize를 가져올때 구조분해 해서 Datatypes을 가져와서 쓰던데 여긴 이렇게 써도 동작하는 원리가 뭐지?
// -> type: Sequelize.STRING과 Datetypes를 구조 분해해서 type: Datetypes.STRING을 사용하는 방법 둘다 맞는 방법
// STRING으로 선언하면 VARCAHR(255)로 만들어짐
// VARCHAR의 경우 1 ~ 65535 선택할 수 있지만 TEXT 타입의 경우 무조건 65535 고정
name: {
type: Sequelize.STRING,
allowNull: false,
unique: true,
},
age: {
type: Sequelize.INTEGER,
allowNull: false,
},
msg: {
type: Sequelize.TEXT,
},
},
{
// 테이블 설정
// 매개변수로 전달 받은 sequelize 작성
// timestamps : 테이블에 row을 추가 했을때 생성 시간과 업데이트 시간을 표기
// created_at과 updated_at 이라는 컬럼이 자동으로 추가
// row추가 했을때 시간을 기록해주고 수정했을때도 시간을 기록 해줌
// underscored : 기본 표기법은 스네이크 표기법으로 되어 있지만 표기법을 카멜 표기법으로 바꿈 created_at -> createdAt
// modelName : 모듈의 이름을 설정 (데이터 주고 받을때 사용)
// tableName : 테이블 이름
// paranoid : true로 설정하면 deleted_at이라는 컬럼 생성 row를 삭제 해도 데이터는 남아있고 맨 뒤에 삭제한 시간이 남게됨
// charset : 인코딩 방식 설정
// collate : 인코딩 방식 설정
sequelize,
timestamps: true,
underscored: false,
modelName: "User",
tableName: "orm_users",
paranoid: true,
charset: "utf8",
collate: "utf8_general_ci",
}
);
}
module.exports = User;728x90
'Nodejs' 카테고리의 다른 글
| [NodeJs] WebSocket을 활용한 좌석예매 하기 (0) | 2023.09.06 |
|---|---|
| [NodeJs] WebSocket을 활용한 채팅방 구현 (0) | 2023.08.31 |
| [NodeJs] Express-session 알아보기 (0) | 2023.08.30 |
| [NodeJs] JWT 알아보기 (0) | 2023.08.29 |
| [NodeJs] bcrypt를 활용한 간단한 회원가입 만들기 (0) | 2023.08.29 |