01. Sequelize
- Sequelize란?
==> ORM(Object Relational Mapping)으로써 Javascript 객체(Object)와 데이터베이스의 관계를 연결 해주는 도구
==> Node.js 환경에서는 TypeORM, Prisma, Sequelize 등 다양한 ORM이 존재한다.
==> Sequelize와 같은 ORM은 여러가지의 관계형 데이터베이스(RDB)를 사용할 수 있다. RDB 종류에는 MySQL, Oracle, MariaDB, PostgreSQL등이 있다. - Sequelize vs, mongoose
==> mongoose는 ODM(Object Document Mapping)으로 Javascript의 객체를 Document와 연결한다.
==> mongoose는 지원하는 데이터베이스는 MongoDB만 존재한다.
==> mongoose의 경우 Schema의 형태로 컬렉션(Collection)에 대한 속성을 설정 / Sequelize의 경우 Model의 형태로 테이블(Table)의 속성을 설정할 수 있다.

- ORM의 장점
- 과거에는 ORM을 사용하지 않고 모든 코드를 SQL을 사용하는 Raw Query 형태로 구현하여 사용하였다.
- 프로덕션에서 사용하는 DB가 언제바뀔 지 알 수 없다.
==> 서비스 중인 프로덕션의 모든 Raw Query코드를 MySQL에서 Oracle로 변경하는 것을 고려하거나
==> Oracle로 변경하지 않고 어려운 현재 상황을 감내하고 계속 MySQL을 쓸 때
==> ORM을 도입하였을 경우 속성값만 변경할 경우 언제든지 자유롭게 DB를 변경할 수 있게 되어 개발할 때 선택의 폭이 넓어지게 된다. - 데이터베이스에서 사용하는 DB 또는 Table 속성이 변경되었을 때 빠르게 수정이 가능하다.
- Sequelize 라이브러리 설치
- npm init -y (package.json 생성)
- npm install express sequelize mysql2 (express, sequelize MySQL 설치)
- npm install -D sequelize-cil nodemon (sequelize-cli, nodemon 라이브러리를 DevDependency로 설치
- sequelize init (설치한 sequelize를 초기화 하여, sequelize를 사용할 수 있는 구조를 생성)
[Directory Structure]
내 프로젝트 폴더 이름
├── models
│ └── index.js
├── config
│ └── config.json
├── migrations
├── seeders
├── package-lock.json
└── package.json
- 구조 설명
- models 폴더 안에 index.js가 생성
==> sequelize 모델을 편리하게 사용할 수 있게 해주는 파일 - config 폴더 안에 config.json파일 생성
==> 데이터베이스에 연결하기 위한 설정 데이터가 JSON 형식으로 들어감 - migrations폴더 생성
- seeder 폴더 생성
==> 생성된 폴더나 파일들은 임의로 옮기거나 삭제하면 안된다. sequelize-cli는 정해진 경로에 있는 파일을 사용하고 저장하기 때문에 임의로 옮기거나 삭제하면 오동작 할 가능성이 높다.
- models 폴더 안에 index.js가 생성
- Sequelize와 RDBMS 연결
// config/config.json
{
"development": {
"username": "root",
"password": "4321aaaa",
"database": "express_sequelize_init",
"host": "express-database.clx5rpjtu59t.ap-northeast-2.rds.amazonaws.com",
"dialect": "mysql"
},
"test": {
// ...
},
"production": {
// ...
}
}
- 설정 수정하기
- username: MySQL에서 사용하는 사용자 이름
- password: MySQL에서 사용하는 사용자 암호
- database: Sequelize와 연결할 DB명
==> DB가 존재하지 않다면 sequelize-cli를 이용해 생성할 수 있다. - host: Sequelize와 연결할 MySQL의 엔드포인트(주소)
- dialect: Sequelize와 연결할 DB엔진
==> mysql, postgres, mariadb 등
- Sequelize DB 생성
==> config.json 파일을 수정했다면 저장 > 터미널에 sequelize db:create를 누르고 DB를 생성한다. > MySQL을 Refresh하면 파일이 생성된 것을 확인할 수 있다.
02. Sequelize - Migration, Model
- Sequelize Model, Migration 생성
- sequelize model:generate --name Posts --attributes title:string,content:string,password:string
(attributes 부분은 원하는 양식으로 바꾸면 된다.)
- sequelize model:generate --name Posts --attributes title:string,content:string,password:string
[Directory Structure]
내 프로젝트 폴더 이름
├── models
│ ├── index.js
│ └── posts.js
├── config
│ └── config.json
├── migrations
│ └── 20230118144300-create-posts.js
├── seeders
├── package-lock.json
└── package.json
- Migration을 이용해 Table 생성하기
- sequelize db:migrate
(migrations폴더에 정의된 migration 파일들과 MySQL의 테이블을 맵핑시킨다.)
- sequelize db:migrate
- Sequelize-cli 이용하기
- sequelize db:create
==> config/config.json에 설정한 database를 생성 - sequelize db:drop
==> confir/config.json에 설정한 database를 Drop - sequelize model:generate
==> migration 과 model을 생성 / 각 Column의 속성을 지정해줄 수 있다. - sequelize db:migrate:undo
==> 가장 최근에 실행된 db:migration 명령을 되돌린다. - sequelize seed:generate
==> seeder 폴더에 있는 seed 파일을 이용해 각 테이블에 데이터를 삽입
- sequelize db:create
- Sequelize의 Migration
==> Sequelize의 Migration은 MySQL의 테이블을 정의 및 생성하기 위해 사용
==> migration파일에서 사용하는 설정- allowNull: Null 값을 허용하는지
- autoIncrement: AUTO_INCREMENT로 설정 (데이터를 삽입할 때 해당 컬럼에 아무런 값을 입력하지 않더라도 1씩 증가하여 고유한 값을 유지)
- primaryKey: 기본키로 설정
- type: 타입을 지정
- defaultValue: 아무런 값이 입력되지 않았을 때, 기본값을 설정 (createdAt, updateAt에서 NOW를 설정하면 현재 시간을 자동으로 삽입)
==> defaultValue: Sequelize.NOW는 defaultValue: Sequelize.fn("now")와 같아 NOW 설정시 정상적으로 반영이 되지 않는 다면 fn("now")로 수정하면 된다. - unique: 고유한 값만 들어올 수 있도록 설정
- Sequelize의 Migration 설정
==> Migration 파일을 수정했다면 sequelize db:migrate:undo (가장 최근에 실행한 db:migrate를 취소한다.)
==> 취소했다면 sequelize db:migrate을 통해 수정한 내용으로 테이블을 생성 - Sequelize의 Model
==> migration 파일은 Table 생성을 도와주면, model 파일은 DB와 실제 연결되어 사용할 수 있게 도와준다. - Sequelize의 Model 설정
==> DB에 저장되는 부분을 고려하여 설정하면 좋다.
'JavaScript Dev. > Node.js' 카테고리의 다른 글
Socket.io 란? (0) | 2023.05.08 |
---|---|
Prettier 란? (0) | 2023.05.08 |
미들웨어(Middleware) (0) | 2023.05.01 |
JWT 토큰이란? (0) | 2023.04.30 |
AWS 배포하기 (feat. EC2) (0) | 2023.04.25 |
01. Sequelize
- Sequelize란?
==> ORM(Object Relational Mapping)으로써 Javascript 객체(Object)와 데이터베이스의 관계를 연결 해주는 도구
==> Node.js 환경에서는 TypeORM, Prisma, Sequelize 등 다양한 ORM이 존재한다.
==> Sequelize와 같은 ORM은 여러가지의 관계형 데이터베이스(RDB)를 사용할 수 있다. RDB 종류에는 MySQL, Oracle, MariaDB, PostgreSQL등이 있다. - Sequelize vs, mongoose
==> mongoose는 ODM(Object Document Mapping)으로 Javascript의 객체를 Document와 연결한다.
==> mongoose는 지원하는 데이터베이스는 MongoDB만 존재한다.
==> mongoose의 경우 Schema의 형태로 컬렉션(Collection)에 대한 속성을 설정 / Sequelize의 경우 Model의 형태로 테이블(Table)의 속성을 설정할 수 있다.

- ORM의 장점
- 과거에는 ORM을 사용하지 않고 모든 코드를 SQL을 사용하는 Raw Query 형태로 구현하여 사용하였다.
- 프로덕션에서 사용하는 DB가 언제바뀔 지 알 수 없다.
==> 서비스 중인 프로덕션의 모든 Raw Query코드를 MySQL에서 Oracle로 변경하는 것을 고려하거나
==> Oracle로 변경하지 않고 어려운 현재 상황을 감내하고 계속 MySQL을 쓸 때
==> ORM을 도입하였을 경우 속성값만 변경할 경우 언제든지 자유롭게 DB를 변경할 수 있게 되어 개발할 때 선택의 폭이 넓어지게 된다. - 데이터베이스에서 사용하는 DB 또는 Table 속성이 변경되었을 때 빠르게 수정이 가능하다.
- Sequelize 라이브러리 설치
- npm init -y (package.json 생성)
- npm install express sequelize mysql2 (express, sequelize MySQL 설치)
- npm install -D sequelize-cil nodemon (sequelize-cli, nodemon 라이브러리를 DevDependency로 설치
- sequelize init (설치한 sequelize를 초기화 하여, sequelize를 사용할 수 있는 구조를 생성)
[Directory Structure]
내 프로젝트 폴더 이름
├── models
│ └── index.js
├── config
│ └── config.json
├── migrations
├── seeders
├── package-lock.json
└── package.json
- 구조 설명
- models 폴더 안에 index.js가 생성
==> sequelize 모델을 편리하게 사용할 수 있게 해주는 파일 - config 폴더 안에 config.json파일 생성
==> 데이터베이스에 연결하기 위한 설정 데이터가 JSON 형식으로 들어감 - migrations폴더 생성
- seeder 폴더 생성
==> 생성된 폴더나 파일들은 임의로 옮기거나 삭제하면 안된다. sequelize-cli는 정해진 경로에 있는 파일을 사용하고 저장하기 때문에 임의로 옮기거나 삭제하면 오동작 할 가능성이 높다.
- models 폴더 안에 index.js가 생성
- Sequelize와 RDBMS 연결
// config/config.json
{
"development": {
"username": "root",
"password": "4321aaaa",
"database": "express_sequelize_init",
"host": "express-database.clx5rpjtu59t.ap-northeast-2.rds.amazonaws.com",
"dialect": "mysql"
},
"test": {
// ...
},
"production": {
// ...
}
}
- 설정 수정하기
- username: MySQL에서 사용하는 사용자 이름
- password: MySQL에서 사용하는 사용자 암호
- database: Sequelize와 연결할 DB명
==> DB가 존재하지 않다면 sequelize-cli를 이용해 생성할 수 있다. - host: Sequelize와 연결할 MySQL의 엔드포인트(주소)
- dialect: Sequelize와 연결할 DB엔진
==> mysql, postgres, mariadb 등
- Sequelize DB 생성
==> config.json 파일을 수정했다면 저장 > 터미널에 sequelize db:create를 누르고 DB를 생성한다. > MySQL을 Refresh하면 파일이 생성된 것을 확인할 수 있다.
02. Sequelize - Migration, Model
- Sequelize Model, Migration 생성
- sequelize model:generate --name Posts --attributes title:string,content:string,password:string
(attributes 부분은 원하는 양식으로 바꾸면 된다.)
- sequelize model:generate --name Posts --attributes title:string,content:string,password:string
[Directory Structure]
내 프로젝트 폴더 이름
├── models
│ ├── index.js
│ └── posts.js
├── config
│ └── config.json
├── migrations
│ └── 20230118144300-create-posts.js
├── seeders
├── package-lock.json
└── package.json
- Migration을 이용해 Table 생성하기
- sequelize db:migrate
(migrations폴더에 정의된 migration 파일들과 MySQL의 테이블을 맵핑시킨다.)
- sequelize db:migrate
- Sequelize-cli 이용하기
- sequelize db:create
==> config/config.json에 설정한 database를 생성 - sequelize db:drop
==> confir/config.json에 설정한 database를 Drop - sequelize model:generate
==> migration 과 model을 생성 / 각 Column의 속성을 지정해줄 수 있다. - sequelize db:migrate:undo
==> 가장 최근에 실행된 db:migration 명령을 되돌린다. - sequelize seed:generate
==> seeder 폴더에 있는 seed 파일을 이용해 각 테이블에 데이터를 삽입
- sequelize db:create
- Sequelize의 Migration
==> Sequelize의 Migration은 MySQL의 테이블을 정의 및 생성하기 위해 사용
==> migration파일에서 사용하는 설정- allowNull: Null 값을 허용하는지
- autoIncrement: AUTO_INCREMENT로 설정 (데이터를 삽입할 때 해당 컬럼에 아무런 값을 입력하지 않더라도 1씩 증가하여 고유한 값을 유지)
- primaryKey: 기본키로 설정
- type: 타입을 지정
- defaultValue: 아무런 값이 입력되지 않았을 때, 기본값을 설정 (createdAt, updateAt에서 NOW를 설정하면 현재 시간을 자동으로 삽입)
==> defaultValue: Sequelize.NOW는 defaultValue: Sequelize.fn("now")와 같아 NOW 설정시 정상적으로 반영이 되지 않는 다면 fn("now")로 수정하면 된다. - unique: 고유한 값만 들어올 수 있도록 설정
- Sequelize의 Migration 설정
==> Migration 파일을 수정했다면 sequelize db:migrate:undo (가장 최근에 실행한 db:migrate를 취소한다.)
==> 취소했다면 sequelize db:migrate을 통해 수정한 내용으로 테이블을 생성 - Sequelize의 Model
==> migration 파일은 Table 생성을 도와주면, model 파일은 DB와 실제 연결되어 사용할 수 있게 도와준다. - Sequelize의 Model 설정
==> DB에 저장되는 부분을 고려하여 설정하면 좋다.
'JavaScript Dev. > Node.js' 카테고리의 다른 글
Socket.io 란? (0) | 2023.05.08 |
---|---|
Prettier 란? (0) | 2023.05.08 |
미들웨어(Middleware) (0) | 2023.05.01 |
JWT 토큰이란? (0) | 2023.04.30 |
AWS 배포하기 (feat. EC2) (0) | 2023.04.25 |