시퀄라이지는 노드에서 DB작업을 쉽게 해주는 ORM이다. (자바스크립트 객체와 DB를 매핑해주는 도구로, JSP에서 마이바티스를 생각하면 편하다) 시퀄라이즈를 사용하면 자바스크립트 구문으로 쿼리문을 날려줄 수 있다.
참고) Roles (Owner) > Database (스키마)
1. psql postgres : 다시 postgres 접속
2. create database study; : study 라는 이름의 데이터베이스 생성
3. create user testuser with encrypted password '1234'; : testuser라는 이름의 유저 생성, 비밀번호는 1234
4. ALTER USER testuser CREATEDB; : testuser에게 createdb권한 부여
5. grant all privileges on database study to testuser; : study db에 대한 전권 testuser에게 부여
- \list 로 데이터베이스 리스트 보기
- \dt 로 테이블 리스트 보기
- \connect study : 해당 데이터베이스로 연결
6. psql postgres -U testuser : 해당 유저로 연결 (#은 슈퍼유저 ⇒ 은 일반유저)
{
"development": { // 개인 개발에선 development 사용
"username": "root", // rolename
"password": "root", // 설정한 비밀번호
"database": "test", // database 스키마 이름
"host": "127.0.0.1", // 로컬호스트는 127.0.0.1로 쓰기
"dialect": "postgres" // db종류
},
"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"
}
}
const Sequelize = require('sequelize');
const env = process.env.NODE_ENV || 'development'; // 개발용 환경 설정
const config = require('./config.json')[env]; // Sequelize 설정 파일
const db = {}; // 모듈화 할 때 필요한 빈 객체(이 객체가 바깥으로 모듈이 된다)
// Sequelize 인스턴스화(config 파일에 있는 정보 여기에 담아줌)
const sequelize = new Sequelize(config.database, config.username, config.password, config);
db.Sequelize = Sequelize; // 비어있는 db객체에 Sequelize 패키지 넣기
db.sequelize = sequelize; // 비어있는 db객체에 Sequelize 인스턴스 넣기
module.exports = db; // 모듈화
// DB 테이블 생성 모듈
const {sequelize} = require('./config');
// DB 테이블 생성
// 개발 중에는 기존 테이블을 삭제하고 데이터베이스를 다시 동기화해야 할 수 있다. force: true다음 코드로 사용
// db.sequelize.sync({ force: true }).then(() => {
// console.log("Drop and re-sync db.");
// });
sequelize.sync();
/**
* Account 테이블 만들기
* @param {Sequelize}
* @param {DataTypes}
* 회원번호, 회원아이디, 비밀번호, 전화번호, 상태, 가입일
*/
module.exports = (Sequelize, DataTypes) => {
return Sequelize.define('account', { // 테이블 이름 (자동으로 복수형으로 바뀌게 됨)
userid: { // PK값은 자동으로 생성해주기 때문에 신경안써도됨
type: DataTypes.STRING(20), // type : 자료형
allowNull: false, // allowNull : Null 여부
},
password: {
type: DataTypes.STRING(20),
allowNull: false,
},
phoneno: {
type: DataTypes.STRING(50),
allowNull: true,
},
status: { // 회원 상태 여부 (참이면 회원가입 중 거짓이면 회원 탈퇴중)
type: DataTypes.BOOLEAN,
allowNull: false
},
date: {
type: DataTypes.DATE,
allowNull: false,
defaultValue: Sequelize.literal('now()') // 회원이 생길 때 자동으로 날짜가 등록이 됨
},
}, {
timestamps: false, // 생성일을 Sequelize가 자동으로 생성하지 말라는 옵션
underscored: true, // Snake Case를 권장한다는 옵션
})
}
const express = require('express');
const router = express.Router();
const { Account } = require('../config');
// 회원가입 post
router.post('/signup', function(req, res, next){
Account.create({ // ID는 자동으로 생성됨 (PK)
userid : "test1",
password : "testpw1",
phoneno : "01000000001",
status : "TRUE"
})
.then((result) => {
res.status(200).json(result);
})
.catch((err) => {
console.error(err);
next(err);
})
});
module.exports = router;
db.Account = require('../models/account)(sequelize, Sequelize)
models.exports = db;
공통적으로 사용하는 설정값을 dotenv에 담아 사용하면 한결 편리하다.
DATABASE = "DB이름"
DB_HOST = "127.0.0.1"
DB_USER = "계정이름"
DB_PASS = "비밀번호"
DB_DIALECT = "DB종류" // postgres
const Sequelize = require('sequelize');
require("dotenv").config(); // dotenv 모듈, config메소드사용
const db = {}; // 모듈화 할 때 필요한 빈 객체
// process.env 을 통해 .env에 작성한 데이터를 뽑아 사용할 수 있다
const sequelize = new Sequelize(process.env.DATABASE, process.env.DB_USER, process.env.DB_PASS, {
host: process.env.DB_HOST,
dialect: process.env.DB_DIALECT
});
db.Sequelize = Sequelize; // 빈 db객체에 Sequelize 패키지 넣기
db.sequelize = sequelize; // 빈 db객체에 Sequelize 인스턴스 넣기
db.Account = require('../models/account')(sequelize, Sequelize);
module.exports = db; // 모듈화