프로그래밍 언어/NODE JS

데이터베이스 세팅하기 (1)

· 코딩마이데이

이번 절에서는 MySQL과 시퀄라이즈로 데이터베이스를 설정합니다.

로그인 기능이 있으므로 사용자 테이블이 필요하고, 게시글을 저장할 게시글 테이블도 필요합니다. 해시태그를 사용하므로 해시태그를 사용하므로 해시태그 테이블도 만들어야 합니다.

models 폴더 안에 users.js와 post.js, hastag.js로 생성합니다.

 

models/user.js

const Sequlize = require("sequelize");

module.exports = class User extends Sequlize.Model {
  static init(sequelize) {
    return super.init(
      {
        email: {
          type: Sequlize.STRING(40),
          allowNull: true,
          unique: true,
        },
        nick: {
          type: Sequlize.STRING(15),
          allowNull: false,
        },
        password: {
          type: Sequlize.STRING(100),
          allowNull: true,
        },
        provider: {
          type: Sequlize.STRING(10),
          allowNull: false,
          defaultValue: "local",
        },
        snsId: {
          type: Sequlize.STRING(30),
          allowNull: true,
        },
      },
      {
        sequelize,
        timestamps: true,
        underscored: false,
        modelName: "User",
        tableName: "users",
        paranoid: true,
        charset: "utf-8",
        collate: "utf8_general_ci",
      }
    );
  }

  static associate(db) {}
};

 

사용자 정보를 저장하는 모델입니다. 이메일, 닉네임, 비밀번호를 저장하고, SNS 로그인을 했을 경우에는 provider와 snsId를 저장합니다. provider가 local이면 로컬 로그인을 한 것이고, kakao면 카카오 로그인을 한 것입니다. 기본적으로 로컬 로그인이라 가정해서 defaultValue를 local로 주었습니다.

테이블 옵션으로 timestamps와 paranoid가 true로 주어졌으므로 createdAt, updatedAt, deletedAt 컬럼도 생성됩니다.

 

models/post.js

const Sequelize = require("sequelize");

module.exports = class Post extends Sequelize.Model {
  static init(sequelize) {
    return super.init(
      {
        content: {
          type: Sequelize.STRING(140),
          allowNull: false,
        },
        img: {
          type: Sequelize.STRING(200),
          allowNull: true,
        },
      },
      {
        sequelize,
        timestamps: true,
        underscored: false,
        modelName: "Post",
        tableName: "posts",
        paranoid: false,
        charset: "utf8mb4",
        collate: "utf8mb4_general_ci",
      }
    );
  }

  static associate(db) {}
};

 

게시글 모델은 게시글 내용과 이미지 경로를 저장합니다. 게시글 등록자의 아이디를 담은 컬럼은 나중에 관계를 설정핼 때 시퀄라이즈가 알아서 생성합니다.

 

models/hashtag.js

const Sequelize = require("sequelize");

module.exports = class Hashtag extends Sequelize.Model {
  static init(sequelize) {
    return super.init(
      {
        title: {
          type: Sequelize.STRING(15),
          allowNull: false,
          unique: true,
        },
      },
      {
        sequelize,
        timestamps: true,
        underscored: false,
        modelName: "Hashtag",
        tableName: "hashtags",
        paranoid: false,
        charset: "utf8mb4",
        collate: "utf8mb4_general_ci",
      }
    );
  }

  static associate(db) {}
};

 

해시태스 모델은 태그 이름을 저장합니다. 해시태그 모델을 따로 두는 것은 나중에 태그로 검색하기 위해서입니다.

'프로그래밍 언어 > NODE JS' 카테고리의 다른 글

데이터베이스 세팅하기 (3)  (0) 2025.10.17
데이터베이스 세팅하기  (0) 2025.10.14
프로젝트 구조 갖추기 (2)  (0) 2025.10.08
프로젝트 구조 갖추기 (1)  (0) 2025.10.05
쿼리 수행하기  (0) 2025.10.02