(Node.js) Sequelize CRUD

Mirrer·2022년 9월 19일
0

Node.js

목록 보기
9/12
post-thumbnail

Sequelize CRUD

Sequelize는 각각의 메서드를 통해 CRUD를 구현

CRUD는 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능인 Create(생성), Read(읽기), Update(갱신), Delete(삭제)를 묶어서 일컫는 말이다.

또한 사용자 인터페이스가 갖추어야 할 기능(정보의 참조, 검색, 갱신)을 가리키는 용어로서도 사용된다.

DatabaseSQL문을 사용하여 CRUD의 기능을 구현하는데, 여기서 SQL문이란 관계형 데이터베이스 시스템(RDBMS)에서 자료를 관리 및 처리하기 위해 설계된 언어를 뜻한다.

대표적인 SQL문의 종류는 다음과 같다.

CRUD조작SQL
Create생성INSERT
Read읽기SELECT
Update갱신UPDATE
Delete삭제DELETE

이전 포스팅에서 설명했듯 SequelizeDB 작업을 쉽게 할 수 있도록 JavaScript 객체와 관계형 데이터베이스를 서로 연결해주는 도구라고 설명했다.

그래서 SequelizeCRUD 작업을 JavaScript를 통해 만들며, 작성된 SequelizePromise를 반환하므로 then이나 async / await문법을 사용할 수 있다.

이번 포스팅에서는 SequelizeCRUD를 구현하는 메서드들에 대해서 설명해보겠다.


본 예제는 아래의 Users 시퀄라이즈 모델을 참조한다.

module.exports = class User extends Model {
  static init(sequelize) {
    return super.init({
      email: {
        type: DataTypes.STRING(30),
        allowNull: false,
        unique: true,
      },      
      password: {
        type: DataTypes.STRING(100),
        allowNull: false,
      },
      nickname: {
        type: DataTypes.STRING(30),
        allowNull: false,
      },
	  age: {
        type: DataTypes.INTEGER,
        allowNull: false,
      },
    }, {
      modelName: 'User',
      tableName: 'users',
      charset: 'utf8',
      collate: 'utf8_general_ci',
      sequelize,
    });
  }
};


레코드(ROW) Create

create 메서드를 사용하여 필드를 생성한다.

  • SQL
INSERT INTO users (email, nickname, password, age) VALUES('aaa@naver.com', 'Mirrer', 'aaabbb', 20);
  • Sequelize
User.create({
  email: 'aaa@naver.com',
  nickname: 'Mirrer',
  password: 'aaabbb',
  age: 20,
});

레코드(ROW) Read

findAll, findOne 메서드를 사용하여 필드를 조회한다.

findAll

findAll모든 데이터를 조회

  • SQL
SELECT * FROM users;
  • Sequelize
User.findAll({
  		:
  		:
});

findOne

findOne하나의 데이터를 조회

  • SQL
SELECT * FROM users LIMIT 1;
  • Sequelize
User.findOne({
  		:
  		:
});

attributes

attributes는 데이터의 특정 필드를 조회

  • SQL
SELECT email FROM users;
  • Sequelize
User.findAll({
  attributes: ['email'],
});

where

where은 데이터의 특정 필드를 조건부 조회

Op객체를 사용하여 데이터 쿼리시 연산자를 적용

  • SQL
SELECT nickname, age FROM users WHERE nickname = 'Mirrer' AND age > 15;
  • Sequelize
User.findAll({
  attributes: ['nickname', 'age'], 
  where: {
    nickname: 'nickname',
    age: {[Op.gt]: 15} // [Op.gt] = 초과(>)
  }
});

사용되는 Op객체 종류는 다음과 같다.

Op객체기능
Op.gt초과
Op.gte이상
Op.lt미만
Op.lte같지 않음
Op.or또는
Op.in배열 요소 중 하나
Op.notIn배열 요소와 모두 다름

order

order는 데이터의 특정 필드를 정렬

  • SQL
SELECT nickname FROM users ORDER BY age DESC;
  • Sequelize
User.findAll({
  attributes: ['nickname'],
  order: [['age', 'DESC']]
});

중첩(nested)order2차원 배열로 지정

  • SQL
SELECT nickname FROM users ORDER BY age DESC, email ASC;
  • Sequelize
User.findAll({
  attributes: ['nickname'],
  order: [
    ['age', 'DESC'],	
  	['email', 'ASC'],	
  ]
});

limit

limit은 조회할 레코드의 갯수를 지정

  • SQL
SELECT nickname FROM users ORDER BY age DESC LIMIT 10;
  • Sequelize
User.findAll({
  attributes: ['nickname'],
  order: [['age', 'DESC']],
  limit: 10, // 10개의 데이터를 조회
});

offset

offset은 조회할 레코드의 시작인덱스를 지정

  • SQL
SELECT nickname FROM users ORDER BY age DESC LIMIT 10 OFFSET 0;
  • Sequelize
User.findAll({
  attributes: ['nickname'],
  order: [['age', 'DESC']],
  offset: 0 // 0번 인덱스부터 
  limit: 10, // 10개의 데이터를 조회
});

레코드(ROW) Update

update메서드를 사용하여 필드를 수정한다.

  • SQL
UPDATE users SET nickname = 'Mirrer2' WHERE age = 20;
  • Sequelize
User.update({
  nickname: 'Mirrer2'
}, {
  where: { 
    age: 20 
  }
});

레코드(ROW) Delete

destory메서드를 사용하여 필드를 삭제한다.

  • SQL
DELETE FROM users WHERE nickname = 'Mirrer';
  • Sequelize
User.destory({
  where: { nickname: 'Mirrer' }
});

관계 쿼리(JOIN)

include메서드를 사용하여 테이블간의 관계를 정의한다.

User, Post 테이블이 1:N(일대다) 관계일 때 아래와 같이 관계를 정의한다.

  • Sequelize
const user = await User.findOne({
    include: [{
        model: Post
    }]
});

변수 user에는 프로미스의 결과물인 모델이 반환되며, 이를 통해 다른 테이블을 데이터를 사용할 수 있다.


참고 자료

Node.js 공식문서
Node.js 교과서 - 조현영
React로 NodeBird SNS 만들기 - 제로초

profile
memories Of A front-end web developer

0개의 댓글