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 서버 접속 정보 설정
...
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 프로퍼티 추가
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
저 같은 경우에는 아래코드를 수정했습니다.
const {username, password, database, host, dialect} = config;
const sequelize = new Sequelize (database, username, password, host, dialect)
const {username, password, database } = config;
const sequelize = new Sequelize (database, username, password, config)
이렇게 수정을 하니깐 에러가 사라지고 잘 동작 합니다.!!