ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • express-generator, Sequelize 설치 및 사용법
    Programming/Node.js 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

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

    'Programming > Node.js' 카테고리의 다른 글

    express, jwt 사용자 인증 기능 구현 (1)  (0) 2021.07.20
    mac nvm 설치, node 버전 관리  (0) 2021.07.06

    댓글

Designed by Tistory.