Server

REST API 서버 만들기 (5) - Sequelize Model, Migration

donghune 2020. 4. 1. 21:09

<참고>

REST API 서버 제작 수업을 듣고 포스팅을 하는 게시글 입니다.

서버 개발자가 아니고, 노드를 전문적으로 사용하는 개발자가 아니기에 오류가 있을 수 있습니다.

 

윈도우로 진행하시는 분들은 콘솔 명령어 수행 시 GitBash 사용을 권장드립니다.


이번 강의에서 작업 할 내용

  • Model 생성하기
  • Migration 하기
  • Seeder 생성하기

Model & Migration 파일 생성하기

ORM 기반으로 작업을 하기에 Model 이 있고 그 Model 클래스에 맞추어 DB를 생성해주기 위한 Migration 파일이 있습니다.

 

쉽게 말해

Mysql -> Sequelize -> Model -> Use! 이렇게 되는것이죠

그리고 Model은 항상 최근에 적용시킨 Migration 파일과 구조가 동일 하여야 정상적으로 접근이 가능합니다.

 

Model 과 Migration 파일을 생성해보도록 하겠습니다.

`sequelize model:generate --name user --attributes "nickname:String,password:String"`

 

명령어를 간단하게 보면

[--name user] user 라는 이름의 모델에

[--attributes "nickname:String,password:String"] String 타입의 nickname 과 String 타입의 password 를 가지고 있는

모델을 만들어라 라는 명령어 입니다.

 

명령어를 입력하면 New model 과 New migration 파일들이 만들어 진것을 볼 수 있습니다.

 

우선 migrations/v1 폴더의 새로 추가된 파일을 아래와 같이 수정 해주도록 합시다.

nickname 과 password는 null을 허용 하면 안됨으로 allowNull : false를 추가해주도록 합니다.

user.model.js 도 파일이름을 변경 해주고 아래와 같이 수정해주도록 합니다.

음? id와 createAt, updateAt은 어디있나요?

id 는 auto_increment 옵션을 가지고 있으므로 따로 설정해주지 않아도 됩니다.

createAt과 updateAt은 timestamps가 true 라면 자동으로 기입이 됨으로 이 또한 따로 적어주지 않아도 됩니다.

 

sequelize.define('user', {...}) 부분도 sequelize.define('User', {...}) 로 변경해주도록 합니다.

나중에 외부에서 접근하는 모델명이 바로 'User' 이부분 입니다.

 

associate 함수는 나중에 Foreign Key를 설정해주기 위해서 빈 함수로 준비해줍니다.

toJSON을 재정의 하여 id와 nickname만 출력되도록 합니다.


Migration 하기

이렇게 Model 과 Migration 파일을 준비 하였으면 본격적인 Migration을 해보도록 하겠습니다.

`sequelize db:create` : DB를 생성합니다.

`sequelize db:migrate` : DB를 Migration 합니다.

MySql에 접속하여 정상적으로 적용되었는지 확인을 해주도록 합니다.

보다시피 DB가 정상적으로 생성이 되었고 Table Column 옵션도 잘 적용되어 있는 것을 볼 수 있습니다.


Seeder 생성하기

Seeder는 DB를 생성하자마자 필수적으로 가지고 있어야 하는 정적 데이터를 넣을때 사용합니다.

하지만 지금 상황에서는 테스트 데이터를 넣는 방향으로 사용을 해보도록 하겠습니다.

 

Seeder 파일을 하나 생성해주도록 합시다.

`sequelize seed:generate --name dummy-data

그리고 아래와 같이 작성을 해주도록 합니다.

그 다음 `sequelize db:seed:all` 명령어를 통해 작성한 시드파일을 DB에 적용시켜 보도록 하겠습니다.

DB에도 정상적으로 들어간 것을 확인 해주도록 합시다

굳 :)


다음 강의에서는 앞서 작성하였던 user.controller.js 를 수정해보도록 하겠습니다.