JS의 객체와 DB의 관계를 연결해주는 도구 ORM(Object Relational Mapping).
DB를 변경하는 것이 자유로움
Raw query로 구현된 DB의 경우, 다른 DB로 바꾸려고 할 때 DB에 맞게 raw query를 새로 작성해야됨. ORM을 사용한다면 ORM의 속성값만 변경하면 DB를 자유롭게 바꿀 수 있음.
DB 또는 테이블의 속성이 변경되었을 때 수정하는 것이 효율적임.
Raw query로 구현한 DB의 경우 테이블에 속성(컬럼)을 추가할 때 기존에 있던 데이터들의 새로운 컬럼값을 API에서 일일이 수정해야됨. ORM을 사용하면 sequelize의 모델을 수정하면 API에서 raw query 수정 없이 컬럽값에 대한 정보를 추가할 수 있음.
// 1
npm install express sequelize mysql2
// 2
npm install -D sequelize-cli nodemon
sequelize db:create // config/config.json 설정 db 생성
sequelize db:drop // config/config.json 설정 db 삭제
sequelize model:generate // migration, model 생성 (column의 속성 지정 가능)
sequelize db:migrate // migrations를 토대로 MySQL에 테이블 생성
sequelize db:migrate:undo // 최근 db:migrate 취소
sequelize seed:generate // seeder의 파일을 이용해 각 테이블에 데이터 삽입
npx sequelize initsequelize를 초기화하여 sequelize가 사용 가능한 구조 생성.

위 구조가 생성됨.
1. config: config.json - 데이터베이스에 연결하기 위한 설정 데이터가 JSON 형식으로 들어가있음.
2. migrations
3. models: index.js - 절대 삭제 x
4. seeders: 파일 이동 x
npx sequelize db:createMigration: sequelize-cli를 통해 MySQL에 테이블 생성.
Model: 특정 table, column의 속성값을 입력하여 MySQL과 express 프로젝트 연결. 다시 말해, migrate로 생성된 테이블을 JS에서 사용할 수 있게 만들어주는 도구.
npx sequelize model:generate --name Posts --attributes title:string,content:string,password:string
models와 migrations에 각각 파일(posts.js, yyyymmddhhmmss-create-posts.js)이 생성됨.
npx sequelize db:migrate
migrations 폴더의 파일들로 MySQL에 테이블이 생성됨.
Migrations의 각 파일들을 수정해서 원하는 요구사항에 맞게 변경이 가능함. (예: allowNull, autoIncrement, primaryKey, type, defaultValue, unique 등등)
수정 후(이미 db:migrate를 했다면 db:migrate:undo) db:migrate
Models 파일들도 Migrations 파일들과 마찬가지로 원하는 요구사항에 맞게 변경이 가능함.