일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- class
- react
- jest
- 정렬
- OCR
- Nest.js
- 공룡게임
- Python
- Sequelize
- JavaScript
- nestjs
- cookie
- Bull
- mongoose
- GIT
- game
- AWS
- MySQL
- Express
- TypeScript
- typeORM
- 자료구조
- MongoDB
- flask
- dfs
- nodejs
- Dinosaur
- 게임
- Queue
- Today
- Total
목록Nest.js (25)
포시코딩
개요 https://4sii.tistory.com/422 https://4sii.tistory.com/423 https://4sii.tistory.com/428 https://4sii.tistory.com/456 이전에 작성됐던 동시성 문제 관련 글들은 적용하며 겪은 시행착오에 대한 내용이라면 이번 글은 성공적으로 완성된 모임 참여 로직에 대한 전체적인 설명이 내용이 되겠다. 흐름을 돕기 위해 코드 중간중간 console.log()로 설명을 추가했다. 들어가기 앞서 이제부터 코드를 볼건데 코드만 보면 이해하기 어렵기 때문에 이해를 돕기 위해 그림으로도 그려봤다. 보다가 흐름이 이해가 가지 않는다면 위로 올라와 어떤 메서드에서 어떤 흐름으로 진행되고 있는지 한번 보고나서 코드를 보면 도움이 될 것이다. 클..
개요 개발하다보면 날짜 시간 관련해서 time zone 문제를 다들 겪어봤을 것이다. 전 세계 시간에 대해서도 영점이 존재하고 한국 시간은 9시간을 빼줘야 영점에 맞춰지게 된다. 어떤 날짜 시간을 저장할 때 해당 국가의 시간이 아닌 위에서 말한 영점 시간에 맞춰져 저장이 되야 하는데 이유는 이 서비스가 그 나라뿐만 아니라 다른 나라에서도 접속이 가능할거고 시차가 존재할텐데 나는 9시에 저장했는데 내가 있는 나라보다 1시간 빠른 나라에서 동시에 저장했어도 8시에 저장하게 되는 일이 생기는 이유 때문이다. TypeORM에서 자동으로 만들어 넣어주는 createdAt, updatedAt도 자동으로 그 영점에 맞춰져 저장이 되는데 내가 모임 약속 시간이라는 schedule 컬럼에 대해 string으로 받아 Ty..
개요 Node.js의 Event Emitter는 특정 이벤트에 리스너 함수를 달아서 이벤트가 발생했을 때 이를 캐치할 수 있도록 만들어진 api라고 한다. 오늘은 Nest.js에서 Event Emitter를 쓰는 법을 알아보고자 한다. 기본적으로 공식 홈페이지에서의 안내를 따랐다. https://docs.nestjs.com/techniques/events Documentation | NestJS - A progressive Node.js framework Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScri..
개요 https://4sii.tistory.com/423 [Nest.js][동시성 문제] Bull Queue - 작성중 개요 https://4sii.tistory.com/422 [동시성 문제] (1) Transaction 사용과 통 Lock 걸어버리기 코드 Back-End: Nest.js - boards.service.ts async joinGroup(boardId: number, userId: number) { const board = await this.getBoard(boardId); const boar 4sii.tistory.com 위 글에서 이어진다. 프로젝트 시작 전 최대한 생길 수 있는 문제에 대해 기술적인 해답을 얻고 들어가기로 했으나 내가 담당했던 동시성 문제는 끝내 완벽하게 해결하지 못..
개요 오늘도 헛소리 하는 다른 블로그들이 답답해서 내가 해결방법 찾아 정리해본다. 기본 세팅 app.e2e-spec.ts import { Test, TestingModule } from '@nestjs/testing'; import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from './../src/app.module'; describe('AppController (e2e)', () => { let app: INestApplication; beforeEach(async () => { const moduleFixture: TestingModule = await Te..
개요 https://velog.io/@tstunas3/TypeORM-TableInheritance 공통으로 갖는 컬럼 외에 공통 컬럼 중 특정 컬럼 값에 따라 갖게되는 컬럼이 다를 경우 Inheritance 를 통해 entity를 세팅할 수 있다. ex) User entity가 있을 때, 일반적인 회원가입과 OAuth를 통한 카카오, 구글 등의 회원가입이 있을 경우 세 회원가입을 구분해 저장하는데 쓰였음
개요 Nest.js에서 TypeORM을 쓰며 pagination(페이지네이션)을 구현하게 되어 새로 알게된 부분을 정리해보았다. Basic Repository async findAllUsers({ id, page }: FindAllUserInput): Promise { // ...생략 const allUsers = await this.users.find({ where: { id }, take: 10, skip: (page - 1) * 10, }); // ...생략 } 기본 Repository를 쓸 경우에 find를 쓰면서 where 처럼 take, skip을 써서 pagination을 구현하는 경우이다. take: 한 번에 보여줄 개수 - mysql에서의 limit을 생각하면 된다. skip: 말 그대로..
개요 https://4sii.tistory.com/421 [Nest.js][CORS] cookie를 전달받지 못하는 문제 개요 클라이언트 서버 localhost:3000 을 react로 운영중이고 백엔드 서버 localhost:8080 을 Nest.js로 운영중인 상황이다. controller @Post(':id/join') async joinGroup(@Param('id') boardId: number, @Req() req: Request) { console.lo 4sii.tistory.com 위 글과 이어진다. 위 포스팅에서는 POST 요청에서 쿠키를 전달받지 못하는 상황에 대해 해결하는 과정을 다뤘는데 이번에 물론 테스트 하는 상황이었지만 GET 요청에서 쿠키를 전달받지 못하는 상황을 겪었다. Ba..
개요 FK 종속 관계를 부여해놓은 Meetup, Join 라는 이름의 두 entity가 있는데 Meetup(모임)을 만들 때 Join(참가)에 작성자 id를 같이 넣는 로직이 있어 Meetup 데이터를 새로 만들 경우 만든 Meetup의 PK를 FK로 갖는 Join 데이터가 만들어지는 구조이다. 이번에 softDelete 없이 Meetup을 삭제하는 API를 만드는 과정에서 테스트 도중 위와 같은 에러가 발생했는데 entity를 세팅할 때 CASCADE 옵션을 주지 않았기 때문에 delete or update를 할 수 없다고 알려주고 있었다. 그래서 이번엔 예전에 해야되겠네 하고 잊었던 CASCADE 옵션을 추가해볼 것이다. 적용 방법 기존 코드 meetup.entity.ts // ...생략 @Entit..
개요 Controller - Service - Repository의 형태의 아키텍쳐로 이루어진 Nest.js 프로젝트에서 jest로 테스트 코드를 작성하려는데 아주 기본적인 틀만 가지고도 에러가 발생해 그 해결 과정에 대해 정리해보고자 한다. 일단 원래 보통 service에서 repository를 바로 inject 해오기 때문에 repository class가 따로 필요 없으나 여러 테이블을 join하거나 transaction을 쓰기에는 따로 구분 짓는 게 편하다고 생각해 custom repository를 만들게 되었다. 아래는 해당 repository의 코드다. Repository // ...import 생략 @Injectable() export class MeetupsRepository extends..