[shortly-mvc] Sequelize 사용 설정 및 이해

parkjh9370·2022년 3월 12일
0

참조: https://velog.io/@wmc1415/%EB%A7%88%EC%9D%B4%EA%B7%B8%EB%A0%88%EC%9D%B4%EC%85%982-%EC%A0%95%EB%A6%AC

urls 테이블의 스키마

+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| id        | int          | NO   | PRI | NULL    | auto_increment |
| url       | varchar(255) | YES  |     | NULL    |                |
| title     | varchar(255) | YES  |     | NULL    |                |
| visits    | int          | YES  |     | NULL    |                |
| createdAt | datetime     | NO   |     | NULL    |                |
| updatedAt | datetime     | NO   |     | NULL    |                |
+-----------+--------------+------+-----+---------+----------------+

Part 1 - Sequelize 및 CLI 도구 이용

1. sequelize 설치

sequelize는 promise 기반의 Node.js ORM으로서 우리가 쓰는 MySQL을 위한 프로그램이다. ORM은 Object Relational Mapping의 약자로 객체 지향 언어에서 관계형 데이터베이스에 접근할 수 있도록 도와주는 중간 다리 역할로 보면된다. 쉽게 말해 데이터 베이스와 소통할 수 있게 해준다.

명령어 : npm i sequelize

2. sequelize-cli 설치

sequelize-cli가 마이그레이션을 할 수 있도록 돕는 툴로, CLI에서 모델을 생성해주거나, 스키마 적용을 할 수 있도록 돕는다고 한다.

마이그레이션은 Git과 같은 버전 컨트롤 시스템처럼 데이터베이스의 변경 사항을 추적하고 알 수 있게 한다. 또한 마이그레이션은 자바스크립트 파일로서 두 개의 함수를 밖으로 내보내는데 하나는 마이그레이션을 수행하는 up이고, 다른 하나는 마이그레이션 실행을 취소하는 down이다.

명령어 : npm i —save-dev sequelize-cli


Project bootstrapping

1. Bootstrapping (초기 단계 설정)

cli를 통해 ORM을 잘 사용할 수 있도록 bootstraping(프로젝트 초기 단계를 자동으로 설정할 수 있도록 도와주는 일)을 해줘야 한다.

빈 프로젝트를 만드는 명령어 : npx sequelize-cli init

이 명령어를 사용하면 다음과 같은 폴더가 만들어진다.

1) config : 데이터베이스에 연결하는 방법을 CLI에 알려주는 구성 파일이 포함되어 있습니다.
2) models : 프로젝트의 모든 모델을 포함합니다.
3) migrations : 모든 마이그레이션 파일 포함
4) seeders : 모든 시드 파일을 포함합니다.

2. Configuration

먼저 cli와 데이터베이스를 연결하는 방법을 알아야 한다.
config/config.json 파일을 열면 json 파일로 작성되어 있다.

{
  "development": {
    "username": "root",
    "password": null,
    "database": "database_development",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "test": {
    "username": "root",
    "password": null,
    "database": "database_test",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "production": {
    "username": "root",
    "password": null,
    "database": "database_production",
    "host": "127.0.0.1",
    "dialect": "mysql"
  }
}

여기서 db에 연결하려면 development(개발)의 paasword, database를 적어준다
database의 경우 내가 만들 schema 이름이다.

설정한 이름으로 schema를 만들어주려면 npx sequelize db:create

Creating the first Model (and Migration)

1. 모델 생성

CLI config file을 제대로 설정하였다면 이제 첫 모델과 마이그레이션을 생성해야 한다.

url, title, visits 필드를 생성해야 합니다.
id, createdAt, updatedAt 필드는 자동으로 생성 해야 한다.

다음과 같은 명령어를 통해 마이그레이션 생성 가능

npx sequelize-cli model:generate --name url --attributes url:string,title:string,visits:integer

migrations와 models 폴더에도 각 파일이 잘 생성된 것을 확인

🔎 model name
이때 중요한 점은 모델 명을 단수로 표기한다. 마이그레이션 후에는 알아서 복수로 바뀌기 때문이다.

🔎 migration을 하는 이유?
개발을 하다 보면 sequelize의 테이블을 추가하거나 스키마를 변경해야 할 때가 있습니다.
보통 이런 작업을 할 때는 sequlize-cli를 설치하여서 사용합니다.
스키마를 변경하기 위해서는 보통 sequelize.drop을 통해 테이블을 제거한 뒤에 sequelize.sync()를 수행해여야 하는데 drop을 수행하게 되면 테이블에 있던 데이터가 모두 삭제가 됩니다. 만약 운영 중이었다면 소중한 데이터가 백업하지 못하고 날아가게 되기 때문에 무척 치명적일 수 있습니다.
테이블을 안 날리고 데이터베이스의 스키마와 컬럼을 바꿀 수 있을까 찾아보니 sequelize cli의 migration 기능을 이용하면 쉽게 해결할 수 있다.
출처: https://jw910911.tistory.com/87

2. 모델 정의

visits 의 경우 defalutValue값이 0 이기 때문에 테이블을 생성하기 전 다음과 같이 수정해야 줘야 한다.

models/url.js

 visits: {
      type: DataTypes.INTEGER,
      defaultValue: 0
    }

3. Running Migration

npx sequelize-cli db:migrate

이를 실행하면 해당 Table이 생성되는 것을 볼 수 있다.

0개의 댓글