'Sequelize' 에 대해 알아보자!

프로젝트를 하면서 서버 개발은 PHP를 기반으로 하는 프레임워크인 Laravel을 가장 많이 사용했다.

이번에 새로운 프로젝트를 진행하면서 Laravel 대신 Nodejs를 사용하게 되었다.

서버의 제일 기본적인 역할은 DB를 탐색하여 프론트에서 요청하는 사항에 맞게 데이터를 돌려주는 역할이다. Laravel은 컨트롤러에서 쉽게 쿼리문을 DB에 보내 탐색할 수 있다. 하지만 Nodejs는 'Sequelize' 라는 라이브러리를 사용하여 MySQL에 접근해야 한다.

즉, 'Sequelize'를 사용하면 자바스크립트 코드로 MySQL을 제어할 수 있게 된다.

이론적인 자세한 내용은 나도 오늘 처음 만져보기에 모른다. 어떻게 사용하는지에 대해 차근차근 알아보자!

시작하기 전 준비물!

1. Nodejs
2. MySQL

1. sequelize-cli 를 설치해주자.

> npm i sequelize mysql2
> npm i -g sequelize-cli

i 는 install 의 약자이고 둘 다 사용해도 문제없다.
-g 는 sequelize-cli 를 전역에 설치한다는 의미로 설치를 마치고 아무 커맨드 창에서나 sequelize 를 호출할 수 있다.

2. sequelize 를 프로젝트 폴더에 설치하자.

> sequelize init

위 명령어를 입력했지만 "이 시스템에서 스크립트를 실행할 수 없으므로 파일을 로드할 수 없습니다" 이렇게 뜰 수도 있다. 권한에 맞지 않는 실행이으로 뜨는 에러다.

만약 위 설명과 같은 문제가 생긴다면 아래의 코드를 입력해주자.

> Set-ExecutionPolicy RemoteSigned

그리고 다시 sequelize init 를 입력하면 config, models, migrations, seeders 폴더가 생성된다.

3. config.json 을 수정하여 DB를 연결해주자.

/* config/config.json */

{
  "development": {
    "username": "root", // DB 계정
    "password": "", // DB 비밀번호
    "database": "test", // DB 이름
    "host": "127.0.0.1", // DB 주소
    "dialect": "mysql",
    "operatorsAliases": false
  },
  "test": {
    "username": "root",
    "password": null,
    "database": "database_test",
    "host": "127.0.0.1",
    "dialect": "mysql",
    "operatorsAliases": false
  },
  "production": {
    "username": "root",
    "password": null,
    "database": "database_production",
    "host": "127.0.0.1",
    "dialect": "mysql",
    "operatorsAliases": false
  }
}

주석이 달린 부분을 자신의 DB에 맞게 수정해주자.

4. 모델 정의하기.

migration을 할 수 있는 두 가지 방법이 존재한다. '직접 파일을 만들어 정의하기', '명령어로 정의하기'

1) 직접 파일을 만들어 정의하기

models 폴더를 보면 index.js 파일이 존재한다.
index.js 파일은 models 폴더 내에 있는 파일들을 읽고, 그것들을 모델로 정의한다. 

그렇다면 models 파일 안에 임의로 user.js 파일을 생성해 보자

/* models/user.js */

module.exports = (sequelize, DataTypes) => { 
  return sequelize.define('user', { 
    useremail: { 
      type: DataTypes.STRING(20), 
      allowNull: false, 
      unique: true, 
    }, 
    password: { 
      type: DataTypes.STRING(100), 
      allowNull: false, 
    }, 
    name: { 
      type: DataTypes.STRING(10), 
      allowNull: false, 
    }, 
  }); 
}

id, createdAt, updateAt 은 자동으로 생성해준다.

models/index.js에 user.js의 존재를 알려주자.

db.User = require('./user')(sequelize, Sequelize);

요렇게 한 줄 추가 시켜주자.

프로젝트 파일에 app.js 파일을 생성해주고 아래의 코드를 입력해주자.

var sequelize = require('./models').sequelize; 

sequelize.sync();

그리고 node로 app.js를 실행시켜주면 마이그레이션이 된다.

> node app

 

2) 명령어로 정의하기

파일을 만들고 코드를 쓰는 것이 귀찮은 사람은 한 줄의 명령어로 모델을 정의할 수 있다.

명령어 기본 문법

sequelize model:create --name TABLE_NAME  --attributes "COLUMN1:type, COLUMN2:type, COLUMN3:type"

예) User 모델을 생성하는 명령어

sequelize model:create --name user --attributes nickName: string, passWord: string

migrations 에 날짜가 적힌 js 파일, models에는 user.js 파일이 생성되었다.

sequelize db:migrate

이 명령어를 입력하면 마이그레이션이 완료된다.

 

더 다양한 조건을 추가하고 싶으면 아래 표를 참고하자.

이름 Type Attribute Description
type String , DataTypes    
allowNull Boolean default: true null가능, 불가능
defaultValue any default: null 초기 값
unique String , Boolean default: false 겹치는 값의 존재 가능 여부
primaryKey Boolean default: false  
field String default: null  
autoIncrement Boolean default: false 값을 1씩 증가해서 저장
comment String default: null  
references String , Model default: null  
references.model String , Model    
references.key String default: 'id'  
onUpdate String    
onDelete String    
get Function    
set Function    

 

출처

https://www.hahwul.com/2017/08/powershell-execution-of-scripts-is.html

https://medium.com/wasd/node-js%EC%97%90%EC%84%9C-mysql-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-1-b4b69ce7433f

'Develop > Node.js' 카테고리의 다른 글

[Nodejs] 실패 없이 무료로 HTTPS 등록하기  (0) 2020.06.20
PM2 80, 443포트 사용  (0) 2020.06.20
[Nodejs] Multer - Formdata 전송  (0) 2020.05.25

+ Recent posts