본문 바로가기
공부/데이터베이스

시퀄라이저 사용하기 1

by 야옹아옹 2021. 6. 28.

시퀄라이저

노드 기반ORM 지원 패키지 모듈이다.

https://sequelize.org/master/manual/model-querying-basics.html

 

Manual | Sequelize

Model Querying - Basics Sequelize provides various methods to assist querying your database for data. Important notice: to perform production-ready queries with Sequelize, make sure you have read the Transactions guide as well. Transactions are important t

sequelize.org

 

설치하기

// 시퀄라이저와 mysql 설치
npm i sequelize mysql2
// 시퀄라이저 명령어 사용을 위해 명령어 설치
npm i -g sequelize-cli

시작하기

시퀄라이즈 사용을 편하게 하기위해 템플릿을 가져온다. = 프로젝트 구조를 생성해준다.

sequelize init // 템플릿을 추가해준다

다양한 폴더와 파일이 자동으로 설치된다.

생성된 폴더 설명

  • config
    데이터베이스 연결정보 환경설정 파일 폴더
  • models
    테이블과 맵핑되는 모델 정의 파일을 보관 및 모델 기반 프로그래밍 처리 모듈을 제공한다
  • migrations
    데이터를 옮길때 사용
  • seeders
    서버가 시작될 때, 가지고 있어야하는 정적 데이터들을 DB에 추가해준다.

models

models 폴더에 있는 index.js는 가장 중요한 파일이다. 

models 폴더 안에 있는 파일들이 실제로 데이터베이스의 테이블과 1:1로 매핑이 된다.

 

1. index.js 수정하기

기존의 sequelize init을 사용해 만들어진 코드는 오류가 발생할 수 있어서 다시작성해준다.

'use strict';
// 경로를 위한 내장 모듈
const path = require('path');
// sequelize 패키지
const Sequelize = require('sequelize');

// 개발 모드 환경설정
const env = process.env.NODE_ENV || 'development';
// 데이터 베이스 연결 환경설정
// ../config/config.json에서 해당 env를 키로 가지는 데이터를 가져온다.
const config = require(path.join(__dirname,'..','config','config.json'))[env];

// 데이터베이스 객체
const db = {}; // 여기와 실제 데이터베이스가 연결된다.

// 데이터베이스 연결정보로 시퀄라이즈 ORM 객체를 생성한다
const sequelize = new Sequelize(config.database, config.username, config.password, confing);

// 데이터베이스와 ORM을 매핑한다.
// 이제부터 db를 통해 데이터베이스를 관리할 수 있다.
db.sequelize = sequelize; // db객체에 sequelize라는 프로퍼티 추가
db.Sequelize = Sequelize;

// 만든 db 객체를 exports 한다.
module.exports = db;

2. config를 수정해준다.

사용할 제품의 상태 [ develope, test, production ]에 맞게 데이터베이스 정보를 설정해준다. 

중요한 정보가 들어가기때문에 관리에 유의한다.

 

3. 만든 ORM을 사용하기위해 app.js에서 설정해준다.

app.js는 어플리케이션이다.

// ORM 불러오기
// 오타 조심..
const {sequelize} = require('./models/index'); // db.sequlize 객체

// 데이터베이스 연동와 자동 연동하기
sequelize.sync({force : false}) // force가 true라면 매번 테이블을 새로 생성한다.
  .then(()=>{
    console.log('데이터베이스 연결 성공');
})
  .catch((error)=>{
    console.log(`데이터베이스 연결 실패 ${error}`);
})

데이터 베이스와 연동할 때, config에 있는 정보를 가지고 연동한다.

 

4. 모델을 정의하기

테이블 모델 매핑된다.

const Sequelize = require('sequelize');

// 클래스를 사용해서 모델 만들기
module.exports = class Member extends Sequelize.Model{
  // init 메서드로 테이블 설정하기
  static init(sequelize){
    // super는 상속받는 부모 클래스를 말한다. === Sequelize.Model
    return super.init({
      // 첫번째 인수는 테이블 컬럼을 의미한다 = 속성
      name:{
        type : Sequelize.STRING(20),
        allowNull : false,
        unique : true,
      },
      age :{
        type : Sequelize.INTEGER.UNSIGNED, // 음수 X
        allowNull : false,
      },
    },
      // 두번째 인수는 테이블 자체에 대한 설정을 의미한다.
    {
      sequelize,
      timestamps: true, // 자동으로 createdAt과 updatedAt 속성 추가
      charset:'utf8',
      collate:'utf8_general_ci',
      modelName: 'Member',
      tableName:'Members',
      paranoid : true, // 삭제시, 바로 삭제가 아닌 삭제
    })
  }
}

5. 만든 모델을 models/index.js에 연결한다.

index.js는 모든 모델들을 관리하는 파일이다.

// 만든 모델 가져와서 db에 프로퍼티로 추가하기
const Member = require('./member');
db.Member = Member;
Member.init(sequelize); // super.init을 리턴받기 때문에 실행을 해줘야한다

서버가 재시작되면서 테이블이 생성된다. 

생성된 테이블 모습

id는 시퀄라이저가 자동으로 생성하는 속성이다.


참고자료

Node.js 교과서

'공부 > 데이터베이스' 카테고리의 다른 글

[MySQL] root 비밀번호 변경하기  (0) 2021.06.30
ORM이란?  (0) 2021.06.27
데이터베이스 기초  (0) 2021.06.27

댓글