ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [first project] 4일차 회고 / 백엔드 기초 환경 세팅 및 DB 구축 2
    project 2022. 4. 8. 09:47
    반응형

    백엔드 기초 환경 세팅 2

     

    이제 데이터베이스 생성과 sequelize 세팅은 되었고 테이블을 생성하면 된다.

    우선 이번 프로젝트의 스키마이다. 이것을 짜놓고 보면서 테이블을 생성하는게 개인적으로 직관적이고 빠른 편이었다.

     

    user 모델 (테이블)

    npx sequelize model:generate --name user --attributes email:string,password:string,nickname:string

     

    interest 모델

    npx sequelize model:generate --name interest --attributes name:string

     

    group 모델

    npx sequelize model:generate --name group --attributes name:string,desc:string,interet_id:integer

     

    post 모델

    npx sequelize model:generate --name post --attributes title:string,content:string,total_likes:integer,user_id:integer,group_id:integer

     

    comment 모델

    npx sequelize model:generate --name comment --attributes post_id:integer,user_id:integer,content:string

    이렇게 모두 생성하면 models 폴더에 차곡차곡 테이블들이 쌓여있을 것이다! 
    추가 수정한 부분 post 모델의 total_likes는 기본값이 0이어야 해서 수정해주었다.

    // models/post.js
    ...
    post.init({
        title: DataTypes.STRING,
        content: DataTypes.STRING,
        total_likes: {		    <----
          type: DataTypes.INTEGER,      <---- 이 세줄의 형식처럼 변경해주기
          defaultValue: 0		    <----
        },
        user_id: DataTypes.INTEGER,
        group_id: DataTypes.INTEGER
      }, ...

    이렇게만 하면 스키마처럼 화살표그어진 부분, 즉 테이블간의 관계가 설정이 아직 되어있지 않다! 
    그래서 models 폴더에서 하나씩 수정해준다.

    models/user.js

    static associate(models) {
          // define association here
          models.user.hasMany(models.comment, {
            foreignKey: "user_id",
            sourceKey: "id"
          });
          models.user.hasMany(models.post, {
            foreignKey: "user_id",
            sourceKey: "id"
          });
          models.user.belongsToMany(models.group, {
            through: "user_group",
            foreignKey: "user_id",
          });
        }

     

    models/interest.js

    static associate(models) {
          // define association here
          models.interest.hasMany(models.group, {
            foreignKey: "interest_id",
            sourceKey: "id"
          })
        }

     

    models/group.js

    static associate(models) {
          // define association here
          models.group.belongsToMany(models.user, {
            through: "user_group",
            foreignKey: "group_id",
          })
          models.group.hasToMany(models.post, {
            foreignKey: "group_id",
            sourceKey: "id"
          })
          models.group.belongsTo(models.interest, {
            foreignKey: "id",
            sourceKey: "interest_id"
          })
        }

     

    models/post.js

    static associate(models) {
          // define association here
          models.post.belongsTo(models.group, {
            foreignKey: "group_id",
            sourceKey: "id"
          })
          models.post.belongsTo(models.user, {
            foreignKey: "user_id",
            sourceKey: "id"
          });
          models.post.hasMany(models.comment, {
            foreignKey: "post_id",
            sourceKey: "id"
          });
        }

     

    models/comment.js

    static associate(models) {
          // define association here
          models.comment.belongsTo(models.user, {
            foreignKey: "user_id",
            sourceKey: "id"
          });
          models.comment.belongsTo(models.post, {
            foreignKey: "post_id",
            sourceKey: "id"
          });
        }

     

    테이블 간의 관계 설정을 마무리했다면migrations 폴더 내 파일들을 통해 DB와 일치화 작업을 해준다.

    npx sequelize db:migrate

     


     

    이 과정까지 마치면 DB 구축이 완료되었다. 
    그리고 .env 파일을 이용했기 때문에 .gitignore파일을 생성해서 작성해준다.

    // .gitignore
    .env
    node_modules

     

    일단 이 정도로 프로젝트의 백엔드 기본 환경 세팅 및 DB 구축이 완료되었다!


     

    반응형
Designed by LEO.