회고록 (24.06.03 - 24.06.09)

JSLEE·2024년 6월 9일

1. 공부했던 내용들

  • HTTP Authorization 로 토큰 보내기 / 받기
  • BookShop API에 토큰 인증 구현
  • try-catch 에러 처리
  • throw 에러 발생시키기
  • instanceof 로 에러 타입 확인
  • 도서 조회 페이지에서, 로그인 했을 때의 respond body와 로그인하지 않았을 때의 respond를 구별하여 구현
  • 도서 조회 페이지에서, SQL_CALC_FOUND_ROWS, found_rows()를 이용한 pagination 구현
  • camelCase, snake_case 로, DB와 code에서 각각의 Naming Rule 통일
  • 코드 퀄리티 를 위한 고려사항
  • Faker api를 이용해서 필요한 가짜 데이터를 생성하는 API 구현

2. 궁금했던 점들

Q. 수업 중에 mysql2 모듈은 low-level 드라이버이고, 더 편리한 Mongoose나 Sequelize 같은 모듈이 있다고 했는데 어떤 식으로 더 편리하게 사용하는 걸까?

A. 우리가 그동안 mysql2 모듈을 사용하면서, CRUD 를 위해서 직접 SQL문을 작성했어야 했다.

ex)

`SELECT * FROM table1` ;
`INSERT INTO table2 (col1, col2) VALUES (val1, val2)`

MongooseSequelize는 이러한 SQL을 직접 작성하지 않고, 데이터 객체를 만든 후에 메소드를 이용해서 자동으로 SQL문이 입력되는 것처럼 작성된다.

Mongoose : MongoDB 관리
Sequelize : MySQL, mariaDB 등 다양한 DBMS를 지원하지만 MongoDB 를 지원하진 않는다.

우리는 지금까지 mariaDB를 이용해 왔으므로 Sequelize 에 대해서 기본적인 사용방법을 간단하게 알아보자.

  1. 모듈 설치
npm i sequelize
  1. 기초 설정
const { Sequelize, DataTypes } = require('sequelize'); // 모듈 불러오기
const sequelize = new Sequelize('test', 'root', 'password', {
  host: 'localhost',
  dialect: 'mariadb' // 사용할 DBMS 설정
});
  1. 테이블 생성
// 사용할 테이블 생성 
const User = sequelize.define('User', {
  name: {
    type: DataTypes.STRING,
    allowNull: false
  },
  age: {
    type: DataTypes.INTEGER,
    allowNull: false
  },
  email: {
    type: DataTypes.STRING,
    allowNull: false,
    unique: true
  }
}, {
  schema: 'mySchema' // 스키마 지정
});
  1. CRUD
(async () => {
  try {
    await sequelize.authenticate(); // DB 연결 확인
    console.log('Connection has been established successfully.');

    await sequelize.sync({ force: true }); // DB 동기화

    // INSERT : INSERT INTO User (name, age, email) VALUES ('Alice' , 25, 'alice@example.com') ; 
    await User.create({
      name: 'Alice',
      age: 25,
      email: 'alice@example.com'
    });

    // SELECT : SELECT * FROM User WHERE age >= 20 ; 
    const users = await User.findAll({
      where: {
        age: {
          [Sequelize.Op.gte]: 20 // >= 20
        }
      }
    });
    console.log(JSON.stringify(users, null, 2));

    // UPDATE
    const [updatedCount, updatedRows] = await User.update(
      { age: 26 },
      {
        where: {
          name: 'Alice'
        }
      }
    );
    

    // DELETE
    const deletedCount = await User.destroy({
      where: {
        name: 'Alice'
      }
    });
    console.log(`Number of users deleted: ${deletedCount}`);

  } catch (error) {
    console.error('Unable to connect to the database:', error);
  } finally {
    await sequelize.close();
  }
})();
profile
공부한 내용들을 정리하기 위해 사용하는 블로그입니다.

0개의 댓글