0. 개요
시퀄라이즈는 node.js ORM이다.
Postgres, MySQL, MariaDB, SQLite, Microsoft SQL Server를 지원한다.
3차 웹 프로젝트에서 MySQL DB를 사용하기 위해서 Sequelize를 사용해보자!
1. 설치
yarn add sequelize sequelize-cli mysql2
- sequelize: RDB와 매핑되도록 해주는 ORM 패키지
- sequelize-cli: commandline for sequelize
- mysql2 : mysql과 연결을 위해 필요한 패키지
2. 초기 설정
✔️ sequelize init
- sequelize 명령어 확인
-h 옵션으로 명령어를 확인할 수 있다.
npx sequelize -h
아래 명령어를 입력하면 초기 폴더 구조가 생긴다.
npx sequelize init
✔️ config/config.ts
초기에는 json 파일로 생성됐지만 나는 ts 파일로 변경해서 작성했다.
import dotenv from "dotenv";
dotenv.config();
const config = {
development: {
username: process.env.DB_USERNAME || "root",
password: process.env.DB_PASSWD,
database: process.env.DB_DBNAME || "test",
host: process.env.DB_HOST || "localhost",
dialect: "mysql",
},
};
export default config;
✔️ models/index.ts
config/config.ts 파일의 설정 값을 읽어와서 sequelize를 생성한다.
import { Sequelize } from "sequelize";
import config from "../config/config";
const sequelize = new Sequelize(config.development.database, config.development.username, config.development.password, {
host: config.development.host,
dialect: "mysql",
timezone: "+09:00",
dialectOptions: { charset: "utf8mb4", dateStrings: true, typeCast: true },
define: {
timestamps: true,
},
});
export { sequelize };
이때 생성한 sequelize 객체를 연결해보자.
server.listen(port, async () => {
console.log(`정상적으로 서버를 시작하였습니다. http://localhost:${port}`);
// authenticate 메소드로 연결 확인
await sequelize
.authenticate()
.then(async () => {
console.log("connection success");
})
.catch((e: Error) => {
console.log(e);
});
});
authenticate 메소드를 붙여주면 MySQL 연결 여부를 알 수 있다.
✔️ Migrations
이 폴더의 설정을 통해 테이블을 변경할때 migrations 파일을 통해서 실제 DB에 반영할 수 있다.
현업에서는 실제 DB에 반영하는 것은 로직을 짜는 코드가 아닌 새로운 프로젝트에서 코드를 만들어서 PR하고 코드리뷰를 통해 데이터베이스에 적용한다고 한다.
migration파일로 rollback 할 수도 있다.
✔️ Seeders
시드 데이터 생성하는 폴더이다.
주로 샘플 데이터를 사용한다.
반응형
'프로젝트 개발 기록 > [개발] node.js | nest, express' 카테고리의 다른 글
[TypeScript+Express] Redis로 Refresh Token 관리 (0) | 2022.06.21 |
---|---|
[TypeScript + Express] Error handling (2) | 2022.06.17 |
TypeScript + Node.js + Express 에서 프로젝트 시작하기 (0) | 2022.06.06 |
[Node.js] mongoose에서 새로운 필드 추가하기 (0) | 2022.05.01 |
댓글