daily

23.04.28. sequelize로 mySQL migration하기

Juhyuck 2023. 4. 29. 11:48
728x90

mongoose를 이용해서 mongoDB를 쓸 때 보다, 초기에 설정할 것이 많다. 

 

cli로 모델을 설정하는건 익숙치 않다보니, 요약해서 정리해봤다.

 

환경은 mode.js 에서 미들웨어로 express를 쓰고, ORM으로 sequelize를, DB는 mySQL을 사용하는 경우이다.

로그인 기능을 구현하기 위해 JWT를 사용하고, 쿠키에 저장하는 방식을 쓰기 위해 cookie-parser도 설치해야 한다.

# 라이브러리 설치
npm install express sequelize mysql2 cookie-parser jsonwebtoken

# sequelize-cli, nodemon 라이브러리를 DevDependency로 설치합니다.
# 서비스에 쓰는 툴이 아니라 개발에만 사용하기 때문에, -D 옵션으로 DevDependency로 설치하는 것
npm install -D sequelize-cli nodemon

# 설치한 sequelize를 초기화 하여, sequelize를 사용할 수 있는 구조 생성
npx sequelize init

그 다음, 기본적인 컬럼 값에 대한 설정을 sequelize-cli을 통해서 해준다.

# 기본 모델 생성
# Users 모델
npx sequelize model:generate --name Users --attributes email:string,password:string
# sequelize로 모델을 만들어라 이름은 Users 들어갈 내용은 email(string), password(string)
# 명령어를 직역하면 위와 같다.

# UserInfos 모델
npx sequelize model:generate --name UserInfos --attributes UserId:integer,name:string,age:integer,gender:string,profileImage:string

# Posts 모델
npx sequelize model:generate --name Posts --attributes UserId:integer,title:string,content:string

# Comments 모델
npx sequelize model:generate --name Comments --attributes UserId:integer,PostId:integer,comment:string

그 다음, migrations 폴더에 만든 모델 내용에 제한조건들을 추가해주고,

config.json에 DB사용자 이름, 비밀번호, DB이름, 연결 주소 등 값을 수정해서 DB와 연결할 수 있게 해준다.

# ./migrations/의 모델을 수정: migrations의 모델을 위에 간단하게 만든것에서 
## 컬럼의 제한조건(allowNull, autoIncrement, primaryKey 등)을 추가해주는 등의 수정 해준다.

# ./config/config.json 파일 설정
## DB와 연결하기 위한 설정을 config.json파일에 작성해준다.

그 다음, sequelize-cli로 DB를 생성하고, 마이그레이션을 진행한다.

# config/config.json에 설정된 DB를 생성
npx sequelize db:create

# 해당 프로젝트에 Migrations에 정의된 Posts 테이블을 MySQL에 생성
npx sequelize db:migrate

Sequelize로 비즈니스 로직을 구현하기 위한 데이터의 조각들과 각 데이터를 연결(1:N, N:1, N:M...)하고, 테이블을 만들고, 데이터베이스와 연결할 수 있다.

 

이전 MongoDB를 사용할 때 mongoose와 유사한 역할을 하지만, 더 많은 데이터베이스(mySQL, MariaDB, PostgreSQL, SQLite 등)을 다룰 수 있기도 하고... 해서 차이를 다른 글에서 정리해봐야 겠다.