44. Node.js 숙련주차 - Sequelize (항해 19일차)

코이그·2023년 4월 21일

항해99

목록 보기
42/54

Sequelize

JS의 객체와 DB의 관계를 연결해주는 도구 ORM(Object Relational Mapping).

ORM의 장점

  1. DB를 변경하는 것이 자유로움
    Raw query로 구현된 DB의 경우, 다른 DB로 바꾸려고 할 때 DB에 맞게 raw query를 새로 작성해야됨. ORM을 사용한다면 ORM의 속성값만 변경하면 DB를 자유롭게 바꿀 수 있음.

  2. DB 또는 테이블의 속성이 변경되었을 때 수정하는 것이 효율적임.
    Raw query로 구현한 DB의 경우 테이블에 속성(컬럼)을 추가할 때 기존에 있던 데이터들의 새로운 컬럼값을 API에서 일일이 수정해야됨. ORM을 사용하면 sequelize의 모델을 수정하면 API에서 raw query 수정 없이 컬럽값에 대한 정보를 추가할 수 있음.

Sequelize 설치 & 사용법

설치

// 1
npm install express sequelize mysql2
// 2
npm install -D sequelize-cli nodemon
  1. sequelize 설치
  2. sequelize-cli: sequelize를 터미널에서 사용할 수 있는 도구

sequilize-cli 명령어

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 init

sequelize를 초기화하여 sequelize가 사용 가능한 구조 생성.

위 구조가 생성됨.
1. config: config.json - 데이터베이스에 연결하기 위한 설정 데이터가 JSON 형식으로 들어가있음.
2. migrations
3. models: index.js - 절대 삭제 x
4. seeders: 파일 이동 x

RDBMS 연결 및 sequelize DB 생성

  1. config/config.json의 development 설정
  • username, password: MySQL의 이름/암호
  • database: 데이터베이스 이름
  • host: 데이터베이스 엔드포인트
  1. npx sequelize db:create
    config/config.json 파일의 설정대로 DB를 생성함

Migration & Model

Migration: 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 파일들과 마찬가지로 원하는 요구사항에 맞게 변경이 가능함.

sequelize 메소드

Model Querying - Basics
Model Querying - Finders

profile
COYG🔴⚪

0개의 댓글