-
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