1. Node 프로젝트 가계부 만들기 (DB 구성)

2020. 8. 23. 01:17프로젝트/가계부 - 초기 개발

가계부 Back-Server 코드 리팩토링 되었습니다. 이쪽 링크에서 확인 해주세요.

https://crispypotato.tistory.com/category/%EA%B0%80%EA%B3%84%EB%B6%80%20%EC%A0%9C%EC%9E%91%20%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8/JavaScript

 

'가계부 제작 프로젝트/JavaScript' 카테고리의 글 목록

 

crispypotato.tistory.com

 

1. express설치

 

npm install express-generator -g

 

2. express구성

디비 구성하기위한 모듈 설치

npm i mysql2, sequelize, sequelize-cli 

 

3. DB 생성

CREATE DATABASE 데이터 베이스 이름 CHARACTER SET UTF8;

CHARACTER SET UTF8 = > 테이블의 문자 형식을 UTF8로 만든다.

 

4. sequelize 구성

명령어 터밀널에 sequelize init 입력

 

sequelize init 입력하면 

config폴더와 migration 폴더와 model 폴더가 생성된다

 

우선 config폴더에 config파일로 디비를 연결한다

 

DB와 sequelize연결

config.json

config에 값을 알맞게 넣어주면된다

"username": "디비 유저이름",
"password": "비밀번호",
"database": "디비이름",
"host": "127.0.0.1",
"dialect": "mysql"

 

app.js에 밑에 사진 처럼 적어준다

const models = require("./models/index.js");

models.sequelize.sync().then(() => {
  console.log(" DB 연결 성공");
}).catch(err => {
  console.log("연결 실패");
  console.log(err);
})

 

app.js

 

 

 

 

여기서 디비 구성은 유저 : 가계부는  1:n 관계이다. 

유저의 pk키나, 유니크키를 이용해 가계부에 외래키를 주어야 한다.

가계부에 외래키를 받을 컬럼을 하나 생성해준다.

모델 생성

sequelize model:create --name account_users --attributes "userId:string, password:string, salt:string"

유저 테이블

sequelize model:create --name account_lists --attributes "userIndex:integer, bigCategory:string, smallCategory:string, card:string, cost:integer, date:string"

가계부 테이블

sequelize model:create --name 모델 명 --attributes "컬럼명:데이터 타입, 컬럼명2:데이터 타입2" 형식으로 생성

 

migrations과 models안에 내용을 바꿔 줘야한다

migrations를 이런 형식으로 변경해준다

 

유저와 가계부 내용은 1:N 관계이다 그러므로 

model 파일에있는 model도  1:N에 맞게 이렇게 바꿔준다

 

유저 테이블

유저 테이블

현재 테이블명 . hasMany( models.외래키로 받을테이블명)

'use strict'
module.exports = (sequelize, DataTypes) => {
  const accountUser = sequelize.define('account_users', {
    userId: {
      type: DataTypes.STRING,
      allowNull: false
    },
    password: {
      type: DataTypes.STRING,
      allowNull: false
    },
    salt: {
      type: DataTypes.STRING,
      allowNull: false
    }
  }, {})
  accountUser.associate =  (models) => {
    accountUser.hasMany(models.account_lists)
  }
  return accountUser
}

 

가계부테이블

가계부 테이블

현재테이블 . belongTo(models.외래키를 보내는곳,{

 foreignKey:"외래키를 받을 해당하는 컬럼"

})

'use strict'
module.exports = (sequelize, DataTypes) => {
  const accountList = sequelize.define('account_lists', {
    userIndex: {
      type: DataTypes.INTEGER,
      allowNull: false
    },
    bigCategory: {
      type: DataTypes.STRING,
      allowNull: false
    },
    smallCategory: {
      type: DataTypes.STRING
    },
    card: {
      type: DataTypes.STRING,
      allowNull: false
    },
    cost: {
      type: DataTypes.INTEGER,
      allowNull: false
    },
    date: {
      type: DataTypes.STRING,
      allowNull: false
    }
  }, {})
  accountList.associate =  (models) => {
    accountList.belongsTo(models.account_lists, {
      foreignKey: "userIndex"
    })
  }
  return accountList
}

 

 

sequelize db:migrate

명령어를 입력 후 서버를 실행시켜주면된다.

 

 

sequelize db:migrate 은 migration에있는 up 코드를 실행하고,

sequelize db:migrate:undo migration에있는 down 코드를 실행.

 

이렇게 초기 설정을 구성했다.

728x90
반응형