일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- OCR
- flask
- Dinosaur
- dfs
- 자료구조
- MongoDB
- TypeScript
- Sequelize
- jest
- 공룡게임
- nestjs
- cookie
- JavaScript
- 게임
- Express
- class
- Python
- MySQL
- GIT
- game
- mongoose
- Queue
- AWS
- 정렬
- react
- Bull
- nodejs
- Nest.js
- typeORM
- Today
- Total
목록Sequelize (7)
포시코딩
개요 A의 포인트를 차감하고 B의 포인트를 올려주는 로직이 있을 때 A의 포인트를 차감했는데 어떤 이유로 인해 B의 포인트를 올려주지 못하는 에러가 발생했을 때 수습하기 힘든 문제가 발생할 것이다. 하지만 만약 두 행동에 대해 트랜잭션으로 묶여 있었다면 A의 데이터가 변화한 뒤에 문제가 생겨도 트랜잭션의 롤백 처리로 인해 트랜잭션으로 묶인 모든 행동들을 없던 일로 만들 수 있다. 때문에 위와 같은 결제 처리 관련 로직에서 많이 사용하며 한번에 연속적으로 DB에서 수행되야 하는 일들에도 트랜잭션을 사용한다. 나는 프로젝트에서 order를 등록할 때 포인트가 차감되야 하는 상황을 트랜잭션으로 묶어볼 것이다. 사용 방법 기존의 코드를 보면 다음과 같다. 변경 전 service // ...생략 await thi..
개요 반복되는 JOIN과 GROUP BY, 그리고 Sub Query까지 사용되고 있는 쿼리문을 만들었을 때 Sequelize를 통해 해당 데이터를 뽑아내야 한다면 막막할 것이다. 내가 그랬고, 그정도까지 Sequelize에 숙달되지도 않았고 매달릴 시간도 없어서 그냥 직접 MySQL과 연동하여 쿼리문 그대로 날리는 모듈을 만들어 사용할 생각을 하고 있었는데 혹시나 하는 마음에 검색해봤더니 Sequelize를 통해서도 쿼리문을 그대로 사용할 수 있었다. 사용 방법 const { QueryTypes } = require("sequelize"); const { sequelize } = require("../sequelize/models/index"); static findAll(userId) { return ..
개요 좋아요 테이블을 만들었는데 자동생성되는 createdAt이랑 updatedAt이 필요 없을 것 같아 migration할 때 둘 다 안 만들어지게 한다음 테이블을 생성했다. Likes 테이블 넣을 정보가 별로 없어 간단하게 코드 구현해서 평소처럼 Model.create() 했는데 에러가 발생했다. (create()뿐만 아니라 findOne() 종류를 포함해 모든 명령어가 다 안되고 있었을 것이다.) 원인 파악 에러 메시지를 뽑아보니 테이블을 만들 때 제외했던 createdAt이랑 updatedAt을 다루고 있었다. 나는 분명 제외해서 만들었고 Like modeld에도 다 없는거 확인했는데..? sequelize에서 자체적으로 createdAt, updatedAt을 같이 다루게 되있는 것 같았다. 그럼..
개요 sequelize를 처음 사용하며 익숙하지 않아 겪는 여러 문제에 대해 직접 해보고 잘 적용된 방법들을 정리한 글 계속 추가될 예정이며 대부분의 기능들은 [공식문서 - queryInterface] 를 통해 직접 참고할 수 있다. 아래 내용들은 모두 migration 파일을 생성하여 진행하는 과정들이며 생성 방법과 실행 방법은 다음과 같다. 생성 방법 npx sequelize migration:generate --name test 실행 방법 npx sequelize db:migrate 컬럼명 변경 /** @type {import('sequelize-cli').Migration} */ module.exports = { async up (queryInterface, Sequelize) { await qu..
개요 Comments 테이블을 생성했는데 깜빡하고 deletedAt 컬럼에 allowNull: true를 안줘버렸다. 원래 같았으면 테이블을 삭제하고 다시 만들었을텐데 FK 설정 등 해당 테이블에 대해 진행한게 벌써 좀 많아져서 간단히 삭제하고 다시 만들 수 없는 상황이었다. sequelize가 아니었으면 alter 써서 변경해주면 끝이었을텐데 하며 sequelize에서 지원하는 기능을 찾아봤고 다행히 존재했다. 방법 먼저 migration file을 만든다. npx sequelize migration:generate --name change-column 만들어진 js 파일에서 아래와 같이 수정해준다. 'use strict'; /** @type {import('sequelize-cli').Migratio..
개요 Sequelize를 통해 이미 종속을 진행할 두 테이블을 만들었다는 가정하에 진행한다. 그냥 디비버같은 DBMS 툴에서 설정해줘도 되지만 Sequelize의 생태계를 이해하기 위해 테스트 겸 구현해봤다. 준비 Users 테이블 Tokens 테이블 * Users.userId 와 Tokens.userId를 1 대 다 관계로 설정할 것이다. 외래키 설정 npx sequelize migration:generate --name fk-token 먼저, 위 명령어를 통해 외래키 설정을 위한 migration file을 하나 생성해준다. /migrations 폴더에 어쩌구-fk-token.js 파일이 생겼을것이다. 열어서 기본틀에 아래와 같이 추가로 작성해준다. 'use strict'; /** @type {imp..
Sequelize란? Node.js의 대표적인 ORM인 Sequelize는 MySQL, PostgreSQL, MariaDB 등 많은 RDBMS를 지원하고 Promise 기반으로 구현되었기 때문에 비동기 로직을 편리하게 작성할 수 있다. MongoDB 사용할 때 Mongoose를 사용해봤다면 이해하기 쉬울것이다. 설치 및 세팅 DB 생성 npm i sequelize mysql2 npm i sequelize-cli -D npx sequelize init 설치하면 아래와 같은 폴더구조가 생긴다. 내 프로젝트 폴더 이름 ├── models │ └── index.js ├── config │ └── config.json ├── migrations ├── seeders ├── package-lock.json └── ..