Skip to content

Latest commit

 

History

History
127 lines (120 loc) · 4.71 KB

sequelize.md

File metadata and controls

127 lines (120 loc) · 4.71 KB

sequelize

: node.js 의 ORM(Object Releaition Mapping) 모듈이다.

how to use?

npm install sequelize sequelize-cli

위 명령어를 통해 sequelize 모듈과 sequelize-cli 모듈을 받아온다.
sequelize-cli는 cli로 모델을 쉽게 생성할 수 있다.
다음 명령어를 통해 초기화를 한다.

> sequelize init

root 디렉토리에 아래와같은 디렉토리/파일이 생긴다.
여기서 root 디렉토리는 현제 작업하고있는 프로젝트의 최상위 디렉토리를 말한다.
예시로 npm init으로 초기화한 디렉토리를 말한다.

|-- config
|   `-- config.json
|-- migrations     
|-- models
|   `-- index.js   
|-- seeders        

sequelize 디렉토리별 정의

  • config : DB설정파일, 사용자이름, DB이름, 비밀번호 등이 들어가 있다.
  • migrations : Git과 비슷하게 DB변화하는 과정을 추측해나아가는 정보로 실제 DB에 반영할 수 있고 취소할 수 있다.
  • models : DB 각 테이블의 정보 및 필드타입을 정의하고 하나로 모은다.
  • seeders : table에 기본 데이터를 넣고싶을때 사용한다.

디렉토리를 정리해보자

root에는 너무많은 디렉토리, 소스코드, 설정파일들이 있다
우리는 저 많은 디렉토리들을 하나의 디렉토리로 정리하여 묶을 필요가 있다.
먼저 위에서 생성했던 파일들을 제거하자. 그리고 .sequelizerc 파일을 프로젝트 최상위에 생성한다.
그후 .sequelizerc 파일을 아래와 같이 작성한다.

// .sequelizerc
const path = require('path');

module.exports = {
    'config': path.resolve('src/db/config/config.json'),
    'models-path': path.resolve('src/db/models'),
    'seeders-path': path.resolve('src/db/seeders'),
    'migrations-path': path.resolve('src/db/migrations')
}

sequelize init 를 통해 초기화하면 root에 /src/db 경로로 sequelize 구성 파일과 디렉토리가

설정

config/config.json 에 들어가면 json 형식으로 DB 정보가 작성되어있을것이다.

{
  "development": {
    "username": "root",
    "password": null,
    "database": "database_development",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "test": {
    "username": "root",
    "password": null,
    "database": "database_test",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "production": {
    "username": "root",
    "password": null,
    "database": "database_production",
    "host": "127.0.0.1",
    "dialect": "mysql"
  }
}

처음으로 sequelize를 초기화 했으면 기본적으로 development에 입력되어있는 DB정보로 개발이 이루어 질것이다.
자신이 설정한 mysql DB에 따라 정보를 수정한다. 개발을 할것이기에 development 에 있는 정보를 수정하자 참고로 password는 String 형으로 받아야 된다 그러므로 큰따음표(")로 묶어줘야한다.
안그러면 ERR_INVALID_ARG_TYPE 에러가 발생할것이다
필자는 비밀번호가 1234였는데 비밀번호를 큰따음표(")로 안묶어서 에러때문에 2시간동안 고생했다

DB모델링

간단하게 User라는 table 모델을 만들게되면

sequelize model:generate --name User --attributes id:integer, name:string

model/user.js가 아래처럼 만들어진다. (2020, 12, 20 기준)

'use strict';
const {
  Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
  class User extends Model {
    /**
     * Helper method for defining associations.
     * This method is not a part of Sequelize lifecycle.
     * The `models/index` file will call this method automatically.
     */
    static associate(models) {
      // define association here
    }
  };
  User.init({
    id: DataTypes.INTEGER,
    name: DataTypes.STRING
  }, {
    sequelize,
    modelName: 'User',
  });
  return User;
};

이렇게 user.js 라는 파일이 model 디렉토리 안에 생기고, Users 라는 테이블이 생기는데
Users로 모델이 생성된 이유는 기본적으로 sequelize에서 자동으로 첫글자는 대문자, 복수형 로 변환해준다.

if모델을 수정했다면

> sequelize db:migrations

이 명령어를 꼭 입력해줘야한다, 이유는 모델이 수정이 되도 최종적으로 DB에 반영하는것은
migrations 폴더 안에있는 [타임스탬프]-create-user.js형식의 파일이다.

DB모델 반영

server를 실행할 파일에 models/index.js를 연결해주면 설계한대로 반영이 될것이다.

참고

  • 자동으로 생기는 attribute: id, createdAt, updatedAt