개발자 '쑥말고인절미'
[Express.js] 서버 시작과 동시에 디비에 테이블 생성하기 본문
서버를 시작할 때 동시에 DB에 필요한 테이블이 생성되도록 구현해보겠다.
나는 DB안에 dataset이라는 테이블과 data_temperature라는 테이블을 생성해줄 것이다.
dataset 테이블에는 id, name, type, 생성시간, 수정시간 컬럼을 만들어 줄 것이고,
data_temperature 테이블에는 id, temperature, 생성시간, 수정시간 컬럼을 만들어 줄 것이다.
아래는 전체 트리인데 클릭되어 있는 두 파일인 models 폴더의 data_temperature.js 파일과 dataset.js 파일만 중요하게 생각하면 된다.
DB에 생성해줄 테이블의 구성을 models 폴더에 작성해보겠다. 나는 dataset이란 테이블과 data_temperature라는 테이블을 생성할 것이다. 이제 models 폴더에 dataset.js 파일을 생성하고 다음과 같이 작성해주자.
module.exports = (sequelize, DataTypes) =>{
const Dataset = sequelize.define('dataset', {
name:{
type: DataTypes.STRING(50),
allowNull : false
},
type:{
type: DataTypes.INTEGER,
allowNull : false
},
}, {timestamps:true});
return Dataset;
};
id 컬럼은 테이블이 생성되면 자동으로 추가되기 때문에 따로 코딩을 해주지 않았다. 입력하고자 하는 컬럼인 name, type, 생성날짜, 수정날짜는 위와 같이 코딩하면 되는데 생성날자와 수정날짜는 timestamps를 true로만 설정해주면 아래처럼 컬럼 createdAt, updatedAt 컬럼이 잘 생성된다. name과 type 컬럼은 어떤 타입으로 데이터가 입력되고 null값을 허용하는지 여부를 작성해주었다.
그 다음 data_temperature 테이블 구성을 작성해보겠다. dataset과 동일한 경로인 models 폴더 아래에 data_temperature.js 파일을 생성하고 다음과 같이 작성해주자.
module.exports = (sequelize, DataTypes) =>{
let data = {};
data.temperature = {
type: DataTypes.DOUBLE,
allowNull : false,
};
const DataTemp = sequelize.define('data_Temperature', data, {timestamps:true});
return DataTemp;
};
data_temperature 테이블에는 id, temperature, 생성시간, 수정시간 컬럼을 추가해 줄것이다. id는 자동으로 생성되기 때문에 코딩해주지 않아도 된다. 생성시간, 수정시간 컬럼을 생성하기 위해 timestaps을 true로 작성해준다. temperature 컬럼에 DOUBLE형으로 입력되게 코딩해주고 NULL값 여부를 작성해주었다.
그 다음 sequdlize.define() 함수를 이용하여 define(테이블명, 객체, 옵션(필수작성아님)) 형태로 작성해주면 되고, temperature 객체가 저장된 변수 data를 객체부분에 입력해주면 된다. 그리고 생성시간, 수정시간이 저장되도록 timestaps를 true로 작성해준다.
자, 이제 models폴더의 index.js 파일로 넘어가보겠다. 아래와 같이 sequelize를 위해 반들어준 db라는 변수에 위에서 만들었던 Dataset과 Datatemp를 저장해주겠다. 그 다음 hasMany() 메소드를 이용하여 1개의 Dataset에 여러 개의 DataTemp가 저장될 수 있도록 해준다. Dataset은 1개이지만 그 안에 여러 개의 DataTemp 데이터가 생성될 수 있다는 의미다.
const path = require('path');
const Sequelize = require('sequelize');
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const db = {};
const sequelize = new Sequelize(config.database, config.username, config.password, config);
db.sequelize = sequelize;
db.Sequelize = Sequelize;
db.Dataset = require('./dataset')(sequelize, Sequelize);
db.DataTemp = require('./data_temperature')(sequelize, Sequelize);
db.Dataset.hasMany(db.DataTemp);
module.exports = db;
hasMany() 메소드를 사용해서 테이블을 만들어보면 data_temperature 테이블에 아래와 같이 id, temperature, 생성시간, 수정시간 이외에 datasetId라는 컬럼이 생성된다. 이 컬럼에 저장되는 값들은 dataset테이블과 매칭하기 위한 값이다.
이제 서버를 돌려보면 연결된 DB에 테이블이 아래와 같이 생성되는 것을 확인할 수 있다.
참고링크
https://runebook.dev/ko/docs/sequelize/class/lib/sequelize.js~sequelize#instance-method-define
Sequelize - 이것이 주요 클래스이며, 시퀀싱 할 진입 점입니다. 정적 메소드 요약 and (args : ... string
runebook.dev
'STUDY > Vue.js & Express.js & JS' 카테고리의 다른 글
[express] sequelize seeders를 이용하여 정적으로 데이터 넣어주기 (0) | 2022.06.30 |
---|---|
[에러] GET http://localhost:3000/... 404 (Not Found) (0) | 2022.06.27 |
[vue.js] vue2-echarts사용하기 (0) | 2022.06.13 |
[에러]Client does not support authentication protocol requested by server; consider upgrading MySQL client (0) | 2022.06.08 |
[vue.js]npm run serve 멈춤현상 (0) | 2022.06.07 |