[NodeJS] 시퀄라이즈 (Sequalize)

Elen li·2022년 1월 7일
0

ORM(Object-relational Mapping)으로 분류되는 시퀄라이즈는, 자바스크립트 객체와 데이터의 릴레이션을 매핑해주는 도구입니다. 즉, 자바스크립트의 구문을 알아서 SQL로 바꿔줍니다.

1. sequalize 설치하기

  • sequilize-cli : 시퀄라이즈 명령어를 실행하기 위한 패키지
  • mysql2는 MySQL과 시퀄라이즈를 이어주는 드라이버

$ npm i express morgan numjucks sequelize sequelize-cli mysqul2
$ npm i -D nodemon

  • 실행
    $ npx sequelize init
  • MySQL과 연동할 때에는 config 폴더 안의 config.json 정보가 사용되는데, 이 설정은 process.env.NODE_ENV가 development일 때 적용됨

2. 모델 정의하기

  • MySQL에 정의한 테이블을 시퀄라이즈에서 정의

  • MySQL의 테이블은 시퀄라이즈의 모델과 대응됨

  • 시퀄라이즈는 기본적으로 모델 이름은 단수형, 테이블 이름은 복수형으로 사용

  • init 메서드

    • 테이블에 대한 설정
    • 첫번째 인수: 테이블 컬럼에 대한 설정
      • 시퀄라이즈는 알아서 id를 기본 키로 연결하므로 id 컬럼은 적어줄 필요가 없음
    • 두번째 인수: 테이블 자체에 대한 설정
  • associate 메서드

    • 다른 모델과의 관계를 적음
const Sequelize = require('sequelize');

module.export = class User extends Sequelize.Model {
    static init(sequelize) {
        return super.init({}, {});
    }
    static associate(db) { }
}

2-1. MySQL vs 시퀄라이즈 자료형

MySQL시퀄라이즈
VARCHAR(100)STRING(100)
INTINTEGER
TINYINTBOOLEAN
DATETIMEDATE
INT UNSIGNEDINTEGER.UNSIGNED
NOT NULLallowNull: false
UNIQUEunique: true
DEFAULT now()defaultValue: Sequelize.NOW

2-2. 테이블 옵션

  • sequelize: static init 메서드의 매개변수와 연결되는 옵션으로 db.sequelize 객체를 넣어야 함.
  • timestamps: true이면 시퀄라이즈는 createdAt과 updatedAt 컬럼을 추가합니다. 각각 로우가 생성될 때와 수정될 때의 시간이 자동으로 입력됨.
  • underscored: 시퀄라이즈는 기본적으로 테이블명과 컬럼명을 캐멀 케이스(camel case)로 만듦. 이를 스네이크 케이스로 바꾸는 옵션
  • modelName: 모델 이름을 설정할 수 있음. 노드 프로젝트에서 사용
  • tableName: 실제 데이터베이스의 테이블 이름이 됨. 기본적으로는 모델 이름을 소문자 및 복수형으로 만듦. 모델 이름이 User라면 테이블 이름은 users가 됨
  • paranoid: true로 설정하면 deletedAt이라는 컬럼이 생김. 로우를 삭제할 때 완전히 지워지지 않고 deletedAt의 값이 null인 로우(삭제되지 않았다는 뜻)를 조회. (나중에 로우를 복원하기 위함)
  • charset 과 collate: 각각 utf8과 utf8_general_ci로 설정해야 한글이 입력됨. 이모티콘도 입력하고 싶을 경우, utf8mb4와 utf8mb4_general_ci를 입력
profile
Android, Flutter 앱 개발자입니다.

0개의 댓글