[Node.js] Sequelize1 - 모델 정의하기

2해승·2022년 9월 7일
0

[Node.js] Sequelize

목록 보기
1/1

ORM이란?

ORM(Object Relational Mapping)이란 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 것을 말한다.
쿼리가 아닌 메서드로 데이터를 조작할 수 있어 직관적이고 프로그래밍에 집중할 수 있도록 도와주는 것이 가장 큰 장점이다.

예를 들면,

  • MYSQL : SELETE * FROM users;
  • ORM : users.findALL();

이와 같이 테이블과 매핑된 객체의 메서드를 통해 쿼리를 조작한다.

Sequelize

sequelize는 node.js의 대표적인 ORM으로 Promise 문법을 사용한다.
ORM의 특징은 특정 DB에 종속되지 않아 어떤 DB를 사용하던지 연결만 되면 동일한 메서드로 쿼리 수행이 가능하다.

개발환경
Ubuntu
express-generator
MYSQL


sequelize 설치 및 환경 구성

$ npm install mysql2 sequelize sequelize-cli
$ sequelize init

/config/config.json

sequelize를 사용하기위한 환경 설정

"development": {
    "username": "root", // DB사용자명
    "password": "",     // DB패스워드
    "database": "",     // DB명
    "host": "127.0.0.1",
    "dialect": "mysql"
},

/models/index.js

Model을 정의하고 관계 설정

  1. models 폴더에 있는 모든 js파일을 불러옴
  2. db 객체에 model을 정의하고 반환함
  3. associate 메서드를 통해 model 사이의 관계를 정의함

app.js

models/index.js를 바탕으로 실제 model을 등록

const models = require('./models/index.js');

models.sequelize.sync().then(() => {
  console.log('DB 연결 성공');
}).catch(err => {
  console.log("DB 연결 실패");
  console.log(err);
})

sync 메서드를 통해 이미 만들어진 테이블에 model을 매핑할 수 있고 DB에 없는 테이블일 경우 정의된 model을 바탕으로 테이블을 생성할 수 있다.

$ npm start

"DB 연결 성공" 로그가 출력되면 sequelize가 연동된 것이다.




Model 정의 및 옵션 부여하기 - sequelize-cli

커맨드 명령어를 실행하게되면 새로운 model과 migration이 생성된다.

기본 형태

$ sequelize model:create --name TABLE_NAME --attributes "COLUMN1:type, COLUMN2:type, COLUMN3:type"
$ sequelize model:create --name users --attributes "u_id:integer, ud_id:integer, email:string, password:string"
  • model : models/users.js 생성
  • migration : migrations/[시간]-create-users.js

models/users.js

모델이 정의만 된 초기 상태이므로 원하는 모델에 맞게 아래처럼 옵션을 부여한다.

'use strict';
const {
  Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
  users.init({
    u_id: DataTypes.INTEGER,
    ud_id: DataTypes.INTEGER,
    email: DataTypes.STRING,
    password: DataTypes.STRING
  }, {
    sequelize,
    freezeTableName: true,
    modelName: 'users',
  });
  return users;
};

migrations/[시간]-create-users.js

cli를 통해 모델을 생성하면 3개의 필드가 자동으로 생성된다.

  • id
  • createdAt
  • updatedAt

users.js에서 옵션이 추가되고 수정될 경우 users.js 과 migration 파일의 테이블 정의를 동일하게 맞춘 후 아래 명령어를 실행해주어야한다.

$ sequelize db:migrate

cli를 통해 모델을 생성한 경우 테이블 이름이 복수형으로 바뀌기 때문에 원치 않을 경우 설정을 별도로 해야한다.
{freezeTableName: true}


서버를 실행하여 테이블이 정상적으로 생성되었는지 확인한다.

$ npm start

모델 정의 옵션

필드옵션

  • allowNull {default:true} : NOT NULL / NULL 조건 판별
  • autoIncrement {default:false} : 자동 증가 옵션
  • primaryKey {default:false} : 기본키 옵션
  • type : Data Type 옵션


데이터타입

  • DataTypes.STRING // VARCHAR(255)
  • DataTypes.STRING(40) // VARCHAR(40)
  • DataTypes.INTEGER // INTEGER
  • DataTypes.FLOAT
  • DataTypes.DATE



[sequelize 공식문서]
https://sequelize.org/docs/v6/core-concepts/model-basics/

profile
노드 취준생

0개의 댓글