Nodejs Chap7 데이터베이스

jade·2025년 2월 25일

Node.js

목록 보기
10/11

sql를 따로 배워야 하는듯... 이해못함...

1. 데이터 베이스: MYSQL

데이터를 영구적으로 저장
MySQL: 관계형 데이터베이스

  • 관련성을 가지며 중복이 없는 데이터들의 집합
  • 여러 사람이 동시에 접근할 수 있고 권한을 따로 줄 수 있음
  • 다운 받는 주소: https://downloads.mysql.com/archives/installer/
  • MySQL cmd에서 작동시키기:
    "C:\Program Files\MySQL\MySQL Server 8.0\bin"
    C:\Program Files\MySQL\MySQL Server 8.0\bin>mysql -h localhost -u root -p

2. 시퀄라이즈

1) 기본 조작

js로 sql 조작할 수 있게 하는 도구

초기 터미널 설치
npm i express morgan nunjucks sequelize sequelize-cli mysql2
npm i -D nodemon
npx sequelize init : 시퀄라이즈 구조 초기화

config 파일에 password 부분을 본인 password로 변경하기

"development": {
    "username": "root",
    "password": "이부분!!!",
    "database": "database_development",
    "host": "127.0.0.1",
    "dialect": "mysql"
  }

데이터베이스 연결

sequelize.sync({ force: false })
  .then(() => {
    console.log('데이터베이스 연결 성공');
  })
  .catch((err) => {
    console.error(err);
  });

2) 모델 만들기

테이블 관계

  • 1:N 관계:
    - 시퀄라이즈에서는 hasMany, belongsTo로 표현
    - belongsTo가 있는 테이블에 컬럼이 생김
  • 1:1관계:
    - hasOne, belongsTo 로 표현

코드예제: 모델 만드는 방법 + 테이블 관계 알아보자

//models/user.js
const Sequelize = require('sequelize');

class User extends Sequelize.Model {
  static initiate(sequelize) {
    User.init({
      name: {
        type: Sequelize.STRING(20),
        allowNull: false, //notnull
        unique: true,
      },
      age: {
        type: Sequelize.INTEGER.UNSIGNED,
        allowNull: false,
      },
      married: {
        type: Sequelize.BOOLEAN,
        allowNull: false,
      },
      comment: {
        type: Sequelize.TEXT,
        allowNull: true,
      },
      created_at: {
        type: Sequelize.DATE,
        allowNull: false,
        defaultValue: Sequelize.NOW,
      },
    }, {
      sequelize,
      timestamps: false,
      underscored: false,
      modelName: 'User',
      tableName: 'users',
      paranoid: false,
      charset: 'utf8',
      collate: 'utf8_general_ci',
    });
  }

  static associate(db) {
    db.User.hasMany(db.Comment, { foreignKey: 'commenter', sourceKey: 'id' });
  }
};

module.exports = User;

comment.js에서는 hasMany가 아닌 belongsTo가 쓰인다.

//models.comment.js
static associate(db) {
    db.Comment.belongsTo(db.User, { foreignKey: 'commenter', targetKey: 'id' });
}

0개의 댓글