일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- cookie
- typeORM
- jest
- Nest.js
- Sequelize
- 자료구조
- AWS
- JavaScript
- dfs
- react
- game
- Python
- MySQL
- 게임
- nodejs
- MongoDB
- Dinosaur
- class
- mongoose
- Bull
- nestjs
- 공룡게임
- flask
- GIT
- TypeScript
- Queue
- Express
- 정렬
- OCR
- Today
- Total
목록Bull (6)
포시코딩
개요 면접 보다가 어느 개발자분께서 내 프로젝트에 대해 아주 흥미로운 질문을 한 적이 있다. "Bull과 Event-Emitter를 통해 동시성 문제를 해결하셨다고 했는데 만약 서버가 여러 대라면 그대로 동작할까요?" 잠시 생각해보니 Job을 생성하고 대기하는 service와 Job을 감지하고 꺼내 쓰는 consumer 및 service가 각기 다른 서버에서 동작할 경우 둘 다 길을 잃어 제대로 동작하지 않겠구나란 생각을 했다. 한번도 고려해보지 않은 문제라 솔직하게 생각해보지 않았고 따로 한번 알아보겠다고 했던 기억이 난다. 면접이 끝난뒤부터 이 숙제는 계속 날 따라다녔다. 해당 문제를 어떻게 구현시킬까? 서버를 한 대 더 배치한 후 로드 밸런싱을 통해 테스트해봐야 하나? 그럼 local로 동작하는 R..
개요 어제 브로커에 메시지 브로커와 이벤트 브로커가 있고 각각 RabbitMQ와 Kafka가 유명하다는걸 알아봤는데 각각에 대해 더 자세히 살펴보자. RabbitMQ AMQP를 구현한 메시지 브로커. AMQP란? Advanced Message Queueing Protocol의 줄임말로 MQ의 오픈소스에 기반한 표준 프로토콜을 의미. 가끔 AMQP 프로토콜이라 부르는 곳도 있는데 AMQP의 P가 프로토콜 이므로 프로토콜 프로토콜이 되어 맞지 않다. AMQP를 구성하는 요소로는 Exchange, Queue, Binding이 있다. Exchange 생산자로부터 수신한 메시지를 큐나 다른 exchange로 분배하는 라우터 역할 수신한 메시지를 분배하기 위해 Exchange Type이라는 라우팅 알고리즘을 사용한..
개요 https://4sii.tistory.com/422 https://4sii.tistory.com/423 https://4sii.tistory.com/428 https://4sii.tistory.com/456 이전에 작성됐던 동시성 문제 관련 글들은 적용하며 겪은 시행착오에 대한 내용이라면 이번 글은 성공적으로 완성된 모임 참여 로직에 대한 전체적인 설명이 내용이 되겠다. 흐름을 돕기 위해 코드 중간중간 console.log()로 설명을 추가했다. 들어가기 앞서 이제부터 코드를 볼건데 코드만 보면 이해하기 어렵기 때문에 이해를 돕기 위해 그림으로도 그려봤다. 보다가 흐름이 이해가 가지 않는다면 위로 올라와 어떤 메서드에서 어떤 흐름으로 진행되고 있는지 한번 보고나서 코드를 보면 도움이 될 것이다. 클..
개요 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 위 글에서 이어진다. 프로젝트 시작 전 최대한 생길 수 있는 문제에 대해 기술적인 해답을 얻고 들어가기로 했으나 내가 담당했던 동시성 문제는 끝내 완벽하게 해결하지 못..
개요 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 boardJoinInfo = await this.joinRepository.find({ where: { boardId }, }); if (board.joinLimit { if (join.userId 4sii.tistory.com 이전 포스팅에서 이어진다. 이전에 고민했던 동시성 문제에 대해 Queue 디자인 패턴을 활용해 해..
코드 Back-End: Nest.js - boards.service.ts async joinGroup(boardId: number, userId: number) { const board = await this.getBoard(boardId); const boardJoinInfo = await this.joinRepository.find({ where: { boardId }, }); if (board.joinLimit { if (join.userId === userId) { throw new ConflictException('이미 join 했습니다.'); } }); const queryRunner = this.dataSource.createQueryRunner(); await queryRunner.conn..