# [Node.js] Sequelize 기초 및 개념

## ORM

* Object Relational Mapping의 약자로 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 것
    
* SQL query가 아닌 직관적인 코드로 데이터를 조작할 수 있어 객체 지향 프로그래밍에 집중할 수 있다.
    

## Sequelize

* MySQL, MaraiDB, MS SQL 등 관계형 데이터베이스를 위한 promise 기반 Node.js ORM 도구
    
* promise 기반으로 구현되었기 때문에 비동기 로직을 편리하게 작성할 수 있다.
    

## Sequelize 설치

```basic
npm install sequelize sequelize-cli mysql2 // sequelize 설치
sequelize init // sequelize 초기화
```

sequelize init을 완료하면 해당 작업 경로에 config, migrations, models, seeders와 같은 폴더들이 생긴다.

```basic
.
├── config 
├── migrations 
├── models  
├── seeders 
```

* config : 데이터베이스 설정 파일, 사용자 이름, DB 이름, 비밀번호 등의 정보가 들어있음
    
* migrations : 데이터베이스의 변화하는 과정들을 추적해나가는 정보로 실제 데이터베이스에 반영할 수 있음
    
* models : 데이터베이스 각 테이블의 정보 및 필드 타입을 정의하고 하나의 객체로 만들어 사용
    
* seeders : 테이블에 기본 데이터를 넣을 때 사용
    

## model 생성

```basic
sequelize model:generate --name Customer --attributes id:integer,name:string, email:string, phone:string, address:string
```

## model 옵션

* type - DataTypes : STRING, INTEGER, FLOAT, DOUBLE, BOOLEAN ...
    
* allowNull - Boolean : Null 허용 여부 (default: true)
    
* defaultValue - any : 기본값 설정(default: null)
    
* unique - Boolean : 유일한 값 여부 (default: false)
    
* primaryKey - Boolean : primary key 여부 (default: false)
    
* autoIncrement - Boolean : 자동으로 값을 1씩 증가 (default: false)
    

## model 예시

```javascript
customer.init({ 
id: { type: DataTypes.INTEGER, 
    allowNull: false, 
    primaryKey: true,
    autoIncrement: true}, 
name: { type: DataTypes.STRING, allowNull: false }, 
email: { type: DataTypes.STRING, allowNull: false }, 
phone: { type: DataTypes.STRING, allowNull: false }, 
address: { type: DataTypes.STRING, allowNull: true } 
}, { 
sequelize, 
timestamps: false, 
modelName: 'customer', 
});
```

### 참고자료

[https://sequelize.org/](https://sequelize.org/)

[https://resilient-923.tistory.com/276](https://resilient-923.tistory.com/276)
