express-generator, Sequelize 설치 및 사용법
안녕하세요. 자비스입니다.
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
참고만 하시되 처음부터 하나씩 따라해보시는걸 추천드립니다.