Seongwon Lim

[node.js] Sequelize 사용 방법 및 Mysql 연동하기 본문

Node.js

[node.js] Sequelize 사용 방법 및 Mysql 연동하기

limsw 2022. 5. 10. 14:21
반응형

What is Sequelize?

Sequelize는 Postgres, MySQL, MariaDB, SQLite 및 Microsoft SQL Server용 promise-based 기반의 Node.js ORM이다. 견고한 트랜잭션 지원을 지원하고, 지연 로딩, 읽기 복제 등 많은 기능을 제공한다.

 

ORM은 자바스크립트 객체와 데이터베이스 간 관계를 매핑해주는 도구라고 생각하면 된다. 관계형 데이터베이스는 테이블을 사용한다.

초기 설정

$ npm init  // package.json 생성
$ npm i --save sequelize mysql2  // 모듈 설치
$ npm i -g sequelize-cli  // 콘솔에서 sequelize 명령 가능하게 하는 모듈
$ sequelize init  // 필요한 파일과 디렉토리를 자동 설치

위 명령어를 실행하면 config, migrations, models, seeders 4개의 디렉토리가 생성된다. 해당 디렉토리에 존재하는 파일에 대한 의미는 간략하게 설명하고자 한다.

  • config.json : sequelize를 사용하기 위한 환경 설정
  • models/index.js : Model(테이블)을 정의하고 관계를 설정

config.json 파일 수정하기

우리는 development 환경을 사용하기 때문에 development 부분만 수정하면 된다.


database: "nodejs" 를 통해서 필자는 스키마 이름을 nodejs로 정의했다.

{
  "development": {
    "username": "root",
    "password": "password", // 사용자 비밀번호 
    "database": "nodejs", // 이 부분을 사용하고자 하는 스키마 이름으로 변경
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
	
	...
}

<참고사항>

migrations

데이터베이스에 테이블에 필드 정보가 변경되거나 구조가 바뀌는 등과 같이 특수한 상황에서 사용된다.

seeders

seeders 파일은 서버를 실행하거나 콘솔 창에서 명령어를 실행 시 sequelize를 통해 DB에 데이터를 생성할 때 사용된다.


스키마(Database) 생성하기

터미널 콘솔에서 sequelize db:create 입력하기

→ MysqlWorkbench를 통해서 본 필자의 스키마 목록이다. nodejs가 추가된 것을 확인할 수 있다. 아직 테이블은 생성하지 않았으므로 Tables는 비어있는 것 또한 확인할 수 있다.

Model 생성하기

models/User.js으로 파일을 생성 후 모델을 정의한다.

module.exports = (sequelize, DataTypes) => {

    const Users = sequelize.define("Users", {
        id: {
            type: DataTypes.UUID,
            defaultValue: DataTypes.UUIDV4,
            primaryKey: true,
        },
        email: {
            type: DataTypes.STRING(100),
            validate: {
                isEmail: true,
            },
        },
        name: {
            type: DataTypes.STRING(100),
        },
    }, {
        charset: "utf8", // 한국어 설정
        collate: "utf8_general_ci", // 한국어 설정
        tableName: "Users", // 테이블 이름 정의
        timestamps: true, // createAt, updateAt 활성화
        paranoid: true, // deleteAt 옵션
    });

    return Users;
};

연결하기 : root directory에 app.js 생성 및 세팅하기

필자는 항상 Express 모듈을 사용하기 때문에 코드에서 해당 모듈을 불러온 것을 볼 수 있다. Express 모듈을 사용하지 않더라도 node.js와 데이터베이스를 연결하는 데에는 지장이 없다.

const express = require('express');
const app = express();

const { sequelize } = require('./models');

sequelize.sync({ force: false })
    .then(() => {
        console.log('데이터베이스 연결 성공');
    })
    .catch((err) => {
        console.error(err);
    });

app.get('/', function (req, res) {
    res.send('Hello Express')
})

app.listen(3000, () => console.log('start..'));


연결이 잘 된 것을 확인할 수 있다.


실행 명령어로 node index.js가 아니라 npm start를 사용하려면 package.json을 다음과 같이 수정하면 된다.

"name": "sequelize-example",
  "version": "1.0.0",
  "description": "",
  "main": "app.js", // 해당 부분을 index.js에서 app.js로 변경
  "scripts": {
    "start": "node app.js", // 해당 부분 추가
    "test": "echo \"Error: no test specified\" && exit 1"
  },

터미널을 이용하여 테이블 생성 확인하기

mysql에 접속 및 nodejs 스키마 사용하는 과정은 생략했다.

User.js에서 정의한 대로 필드가 생성된 것을 확인할 수 있다.

 

시간이 된다면 다음 포스팅에서는 정의한 모델을 이용해서 CURD를 해보는 예제를 살펴볼 예정이다.


출처

Comments