
(1) 자바스크립트 코드 상의 Member 모델과
(2) COWORK 데이터베이스에 있는 Members 테이블을 연동하기 위해 필요한 작업정리
npm install mysql2 sequelize sequelize-cli
sequelize-cli는 Sequelize로 데이터베이스 작업을 하기 위한 필수 요건은 아니지만 이 패키지가 제공하는 다양한 명령어를 사용해서 프로젝트를 세팅하는 것이 좋다.
npx sequelize init
config, migrations, models, seeders 디렉토리 생성
config/config.json 파일 생성
models/index.js 파일 생성
// ./config/config.json
// ... 생략
development: {
username: 'root',
password: '123123123',
database: 'COWORK',
host: '127.0.0.1',
dialect: 'mysql',
},
// ...생략
npx sequelize db:create --env development
config.json 파일의 development 객체의 내용대로 MySQL 서버에 접속해서 COWORK 데이터베이스를 생성한다.
{ database : "이름" } 으로 설정한 이름으로 데이터베이스를 생성한다--env development 옵션을 주지 않아도 기본으로 development 옵션이 적용되기 때문에 생략해도 된다.
npx sequelize model:generate --name Member --attributes name:string,team:string,position:string,emailAddress:string,phoneNumber:string,admissionDate:date,birthday:date,profileImage:string
/migrations 디렉토리에 (생성일자 및 시간)-create-member.js 파일이 생성된다.
데이터베이스에 Members 테이블을 생성하는 코드가 담겨있는 파일이다
id 프로퍼티(컬럼)를 sequelize-cli 가 자동으로 코드에 추가해준다.
createdAt, updatedAt 프로퍼티도 기본으로 생성되는데, defaultValue 속성을 추가할 수 있다.
// /migrations/(생성일자 및 시간)-create-member.js
// ...
createdAt: {
allowNull: false,
type: Sequelize.DATE,
defaultValue: Sequelize.fn('now') // 현재 시간으로 기본값을 설정하는 함수
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE,
defaultValue: Sequelize.fn('now')
}
// ...
/models 디렉토리에 member.js 파일이 생성된다.
npx sequelize db:migrate
/migrations 디렉토리에 있는 모든 마이그레이션 파일들의 내용을 파일명에 있는 '생성일자 및 시간' 순서대로 수행하는 명령이다.
npx sequelize seed:generate --name initialMembers
Members 테이블에 넣을 seed 데이터 삽입 코드가 있는 initialMembers라는 이름의 파일을 생성한다.
/seeders 디렉토리 안에 (생성일자 및 시간)-initialMembers.js 파일이 생성된다.파일 코드에 실제로 넣을 seed 데이터에 해당하는 JSON 형식의 직원 정보 배열 추가 후,
npx sequelize db:seed:all
위 명령어로 Members 테이블에 Seed 데이터 추가한다.
// models/member.js
'use strict';
const { Model } = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class Member extends Model {} // sequelize 의 Model 클래스를 확장해서 Member Model 이 된다.
Member.init(
{
id: { // /migrations/(생성일자 및 시간)-create-member.js 에서 id 프로퍼티를 가져와서 추가한다.
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: DataTypes.INTEGER, // moduel.exports 의 두 번째 인자로, sequelize.DataTypes.INTEGER 과 동일하다.
},
name: DataTypes.STRING,
team: DataTypes.STRING,
position: DataTypes.STRING,
email: DataTypes.STRING,
phoneNumber: DataTypes.STRING,
admissionDate: DataTypes.DATE,
birthday: DataTypes.DATE,
profileImage: DataTypes.STRING,
},
{
sequelize,
modelName: 'Member',
},
);
return Member;
};
// models/index.js
const Sequelize = require('sequelize');
const config = require('../config/config.json');
// config.json 에서 가져온 값으로 sequelize 인스턴스를 만든다.
const { database, username, password, host, dialect } = config.development;
const sequelize = new Sequelize(database, username, password, {
host,
dialect,
});
// 위 member.js 의 첫 번째 인자로 sequelize 인스턴스 객체, 두 번째 인자로 DataTypes 객체를 넘겨서 Member 모델을 만든다.
const Member = require('./member')(sequelize, Sequelize.DataTypes);
const db = {};
db.Member = Member; // 다른 모델들도 추가될 수 있으므로 db 객체에 담아서 exports 한다.
module.exports = db;
const express = require('express');
const app = express();
const db = require('./models'); // ./models/index.js 에서 exports 한 db를 꺼내온다.
const { Member } = db;