Programming/Node.js

express-generator, Sequelize 설치 및 사용법

jarvis_ 2021. 7. 18. 17:41

안녕하세요. 자비스입니다.

node.js api 서버 개발시 필요한 express, sequilize 설치 및 사용방법 관련하여 기록합니다.

 

설치에 앞서 node 및 npm 설치가 필요합니다.

 

프로젝트 신규 생성

node.js express framework 는 프로젝트 초기 설정이 까다로운 편입니다.

편리하게 초기 프로젝트 생성을 도와주는 express-generator 으로 생성을 해보겠습니다. 

 

npm을 이용해 express-generator 전역 설치

$npm i -g express-generator

 

express 프로젝트 생성하기

$ express <프로젝트 명> --view=pug

 

npm 모듈 설치

$ cd <프로젝트 이름>
$ npm install

설치가 완료되면 npm start를 통해 express-generator으로 생성한 프로젝트를 실행해보자. 

정상적으로 구동되면 터미널에서 아래와 같은 로그를 확인할 수 있다.

프로젝트이름@0.0.0 start /Users/jarvis/Documents/ExpressSample/Sample
> node ./bin/www

 

sequelize 설치 및 사용

앞서 express-generator 을 사용하여 신규 프로젝트를 생성했다.

데이터베이스를 관리하기 위한 ORM인 sequelize를 설치 및 사용방법에 알아보자.

 

현재 개발중인 프로젝트에서 ORM sequelize 를 선택한 이유는 다음과 같습니다.

1. db 스키마, 모델 관리

2. 간단한 쿼리를 코드로 작성

3. 재사용이 용이하여 작업 속도 향상을 기대

 

프로젝트 루트로 이동, sequelize, mysql 모듈 설치

$ npm install --save sequelize
$ npm install --save mysql2

 

sequelize-cli 설치

$ npm install -g sequelize-cli

 

기본 설정 파일 생성

$ sequelize init:config --config config/config.json

 

생성된 파일 확인

{
  "development": {
    "username": "root",
    "password": null,
    "database": "database_development",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "test": {
    "username": "root",
    "password": null,
    "database": "database_test",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "production": {
    "username": "root",
    "password": null,
    "database": "database_production",
    "host": "127.0.0.1",
    "dialect": "mysql"
  }
}

 

 

models 폴더를 생성

$ sequelize init:models

 

생성된 파일 확인

'use strict';

const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const db = {};

let sequelize;
if (config.use_env_variable) {
  sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
  sequelize = new Sequelize(config.database, config.username, config.password, config);
}

fs
  .readdirSync(__dirname)
  .filter(file => {
    return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
  })
  .forEach(file => {
    const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes);
    db[model.name] = model;
  });

Object.keys(db).forEach(modelName => {
  if (db[modelName].associate) {
    db[modelName].associate(db);
  }
});

db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;

 

user 테이블 생성

models 폴더에 user.js 파일을 생성한다. user.js에 생성 할 컬럼정보를 정의한다.

module.exports = (sequelize, DataTypes) => {
    return sequelize.define('user', {
        useremail: {
            type: DataTypes.STRING(20),
            allowNull: false,
            unique: true,
        },
        password: {
            type: DataTypes.STRING(100),
            allowNull: false,
        },
        name: {
            type: DataTypes.STRING(10),
            allowNull: false,
        },
    }, {
        timestamps: false,
    });
}

 

 

 

 

 

 

 

 

app.js 파일에 sequelize 초기화

var sequelize = require('./models').sequelize;

var app = express();

sequelize
  .sync()
  .then(() => console.log('connected database'))
  .catch(err => console.error('occurred error in database connecting', err))

//테이블 변경시 주석해제 후 동기화 필요
// db.sequelize.sync({ force: true }).then(() => {
//   console.log("Drop and re-sync db.");
// });

 

router / users.js 동작 확인

var express = require('express');
var router = express.Router();
var { User } = require('../models/index');

/* GET users listing. */
router.get('/', async (req, res) => {
  const users = await User.findAll()
  const result = []

  for (const user of users) {
    result.push({
      email: user.useremail,
      name: user.name,
      password: user.password
    })
  }

  res.send(result)
})

module.exports = router;

 

기본적인 db 조회 테스트가 끝났으면 CRUD는 문제 없겠네요.

실제 프로젝트에서 퍼블릭하게 호출되면 이슈가 발생되겠죠.

다음시간에는 이를 보완 할 수 있는 JWT token 설치 및 사용방법을 알아보겠습니다.

 

작업했던 소스는 git에 올려두었습니다.

https://github.com/jarvisBae/ExpressSequelizeSample

참고만 하시되 처음부터 하나씩 따라해보시는걸 추천드립니다.