ETC -

데이터베이스 MySQL세팅하기 Sequelize

  • -

Sequelize

MySQL 작업을 쉽게 할 수 있도록 도와주는 라이브러리가 있는데, 바로 시퀄라이즈(Sequelize)이다.

Sequelize를 사용하는 이유

시퀄라이즈를 쓰는 이유는 자바스크립트 구문을 알아서 SQL로 바꿔주기 때문이다. 따라서 SQL 언어를 직접 사용하지 않아도 자바스크립트만으로 MySQL을 조작할 수 있고, SQL을 몰라도 MySQL을 다룰 수 있게 된다.

sequelize 설치

👉🏻Sequelize를 사용하기 위해 필요한 패키지들 설치

npm install mysql2 sequelize sequelize-cli

sequelize-cli는 Sequelize로 데이터베이스 작업을 하기 위한 필수 요건은 아니지만 이 패키지가 제공하는 다양한 명령어를 사용해서 프로젝트를 세팅하는 것이 좋습니다.

👉🏻Sequelize를 사용하는 프로젝트의 이상적인 구조를 만들기 위해 필요한 디렉토리 및 파일 생성

npx sequelize init

config, migrations, models, seeders 디렉토리 생성 
config/config.json 파일 생성 
models/index.js 파일 생성

👉🏻config.json 파일 중 development 객체에 MySQL 서버 접속 정보 설정

// ./config/config.json
...
development: {
    username: 'root',
    password: '123123123',
    database: 'react-nodebird',
    host: '127.0.0.1',
    dialect: 'mysql',
  },
...

👉🏻react-nodebird 데이터베이스 생성

npx sequelize db:create --env development
  • config.json 파일의 development 객체의 내용대로 MySQL 서버에 접속해서 react-nodebird 데이터베이스를 생성함 
  • --env development 옵션을 주지 않아도 기본으로 development 옵션이 적용되기 때문에 생략해도 됨

👉🏻Members 테이블 생성 마이그레이션 파일 및 Member 모델 파일 생성

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 테이블을 생성하는 코드가 담겨있는 파일)
  • models 디렉토리에 member.js 파일이 생성됨(나중에 Members 테이블을 제어하기 위해 연동해서 사용할 Member 모델의 코드가 담겨있는 파일)
  • id 프로퍼티(컬럼)를 sequelize-cli가 자동으로 코드에 추가해줌
  • (생성일자 및 시간)-create-member.js 파일에서 createdAt, updatedAt 프로퍼티에 defaultValue 속성 주기

👉🏻데이터베이스에 Members 테이블 생성

npx sequelize db:migrate

migrations 디렉토리에 있는 모든 마이그레이션 파일들의 내용을 파일명에 있는 '생성일자 및 시간' 순서대로 수행하는 명령, 현재는 6.에서 생성된 마이그레이션 파일 하나만 있기 때문에 해당 파일의 내용만 수행

👉🏻Members 테이블에 넣을 seed 데이터 생성

npx sequelize seed:generate --name initialMembers
  • Members 테이블에 넣을 seed 데이터 삽입 코드가 있는 initialMembers라는 이름의 파일을 생성 
  • (생성일자 및 시간)-initialMembers.js 파일이 생성됨 
  • 코드에 실제로 넣을 seed 데이터에 해당하는 JSON 형식의 직원 정보 배열 추가

👉🏻Member 모델 코드에 빠져있는 id 프로퍼티 추가

// ./models/member.js 
class Member extends Model {}
  Member.init(
    {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: DataTypes.INTEGER,
      },
...

👉🏻Members 테이블에 Seed 데이터 추가

npx sequelize db:seed:all

여기까지 모두 하셨다면 서버를 실행시키면 데이터베이스 관련된 작업을 진행하면 됩니다.

👉🏻Error: Dialect needs to be explicitly supplied as of v4.0.0

근데 여서 만약에 다음과 같은 에러가 나오면 "Error: Dialect needs to be explicitly supplied as of v4.0.0"
models/index.js을 다시 보면서 new Sequelize쪽에서 뭔가 리턴을 하는지 않아는지 확인하면 됩니다.

Error: Dialect needs

저 같은 경우에는 아래코드를 수정했습니다.

// models/index.js
// 수정전
const {username, password, database, host, dialect} = config;
const sequelize = new Sequelize(database, username, password, host, dialect)
// models/index.js
// 수정후
const {username, password, database } = config;
const sequelize = new Sequelize(database, username, password, config)

이렇게 수정을 하니깐 에러가 사라지고 잘 동작 합니다.!!

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.