ORM(Object-relational Mapping)으로 분류되는 시퀄라이즈는, 자바스크립트 객체와 데이터의 릴레이션을 매핑해주는 도구입니다. 즉, 자바스크립트의 구문을 알아서 SQL로 바꿔줍니다.
1. sequalize 설치하기
- sequilize-cli : 시퀄라이즈 명령어를 실행하기 위한 패키지
- mysql2는 MySQL과 시퀄라이즈를 이어주는 드라이버
$ npm i express morgan numjucks sequelize sequelize-cli mysqul2
$ npm i -D nodemon
- 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) |
INT | INTEGER |
TINYINT | BOOLEAN |
DATETIME | DATE |
INT UNSIGNED | INTEGER.UNSIGNED |
NOT NULL | allowNull: false |
UNIQUE | unique: 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를 입력