노드숙련강의 4-4

·2022년 12월 21일
0

study

목록 보기
21/81
post-thumbnail

로그인/회원가입 기능을 Sequelize로 구현하기(1)

models/user.js 파일 제거하기

지금 존재하는 models 폴더 안의 user.js 파일은 mongoose로 구현한 모델.
sequelize로 다시 만들겁니다!

사용자 모델 생성하기

npx sequelize model:generate --name User --attributes email:string,nickname:string,password:string

models 폴더에 user.js가 생기고, migrations 폴더에 숫자-create-user.js 같은 이름으로 파일이 하나 생겼을거예요. (숫자는 생성한 시간마다 달라요)

  • models/user.js 의 역할:
    • 데이터베이스에 읽고 쓰고, 변경하는 데이터모델이라는 형태로 구현해서 정해둔 형식대로 다루게 해주는 역할을 합니다.
    • 실제로 express내에 있는 데이터베이스 안의 테이블을 사용하기 위해서
  • migrations 안에 있는 파일의 역할:
    • 데이터베이스에 테이블을 생성하고 제거할 때 여기에 있는 파일을 사용합니다.
    • 실제 데이터베이스에 있는 테이블을 만들기 위해서

추가

모델에서는 id가 없었는데 migration 파일에는 존재함. 왜?

이 차이는 Sequelize가 "id"라는 키를 모델 데이터의 ID로 사용하도록 기본 설정 해두었기 때문에 모델에 따로 표현하지 않아도 잘 동작했던것입니다!

여기서 포인트는 ID는 있어도 되고 없어도 되는것이 아니라, 모델에 id가 없다면 Sequelize가 기본적으로 "id"가 테이블에 존재한다고 가정하고 id가 있는것처럼 동작합니다.
그렇기 때문에 테이블에 id가 존재하지 않으면 안된다는 뜻과도 같고, 테이블을 생성하는 코드인 이 파일에서 id가 존재했던것입니다.

모델과 마이그레이션 파일 수정하기

Sequelize는 데이터의 고유 ID를 기본적으로 "id" 로 저장하도록 하는데, 저희가 준비한 프론트엔드 코드는 이 고유 ID의 이름이 "id"가 아닌 "userId"여야 제대로 동작하도록 짜여 있답니다!

그렇기 때문에 id 대신 userId라는 이름으로 ID를 다루도록 수정해야 함.

models/user.js 파일 수정

'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({
    userId: {
      primaryKey: true,
      type: DataTypes.INTEGER,
    },
    email: DataTypes.STRING,
    nickname: DataTypes.STRING,
    password: DataTypes.STRING
  }, {
    sequelize,
    modelName: 'User',
  });
  return User;
};

migrations/숫자-create-user.js 파일 수정

'use strict';
module.exports = {
  up: async (queryInterface, Sequelize) => {
    await queryInterface.createTable('Users', {
      userId: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      email: {
        type: Sequelize.STRING
      },
      nickname: {
        type: Sequelize.STRING
      },
      password: {
        type: Sequelize.STRING
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      }
    });
  },
  down: async (queryInterface, Sequelize) => {
    await queryInterface.dropTable('Users');
  }
};

수정된 테이블 생성

npx sequelize db:migrate

다음과 같은 메시지가 뜨면 잘 생성된 것!

Sequelize CLI [Node: 16.14.0, CLI: 6.4.1, ORM: 6.21.2]

Loaded configuration file "config/config.json".
Using environment "development".
== 20220705113054-create-user: migrating =======
== 20220705113054-create-user: migrated (0.077s)
profile
개발자 꿈나무

0개의 댓글