일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- mongoose
- OCR
- Bull
- AWS
- react
- typeORM
- Queue
- Nest.js
- MongoDB
- TypeScript
- 공룡게임
- GIT
- 정렬
- flask
- Express
- cookie
- MySQL
- dfs
- nodejs
- game
- 자료구조
- JavaScript
- nestjs
- Dinosaur
- 게임
- class
- Python
- Sequelize
- jest
- Today
- Total
목록nestjs (11)
포시코딩
Guard import { ExecutionContext, Injectable, UnauthorizedException } from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; import { SamlStrategy } from './saml.strategy'; @Injectable() export class SamlAuthGuard extends AuthGuard('saml') { constructor(private readonly samlStrategy: SamlStrategy) { super(); } canActivate(context: ExecutionContext) { const request = context.switchTo..
지금까지는 회원가입 과정에서의 서비스 단에서 비밀번호를 암호화해왔다. 기존 코드 auth.service.ts import * as bcrypt from 'bcrypt'; @Injectable() export class AuthService { async signupBuyer(body: signupBuyerDTO) { const { password } = body; const passwordHash = await this.hashPassword(password); body.passwordHash = passwordHash; // 회원가입 로직 } private async hashPassword(password: string) { return bcrypt.hashSync(password, 10); } } 하..
개요 면접 보다가 어느 개발자분께서 내 프로젝트에 대해 아주 흥미로운 질문을 한 적이 있다. "Bull과 Event-Emitter를 통해 동시성 문제를 해결하셨다고 했는데 만약 서버가 여러 대라면 그대로 동작할까요?" 잠시 생각해보니 Job을 생성하고 대기하는 service와 Job을 감지하고 꺼내 쓰는 consumer 및 service가 각기 다른 서버에서 동작할 경우 둘 다 길을 잃어 제대로 동작하지 않겠구나란 생각을 했다. 한번도 고려해보지 않은 문제라 솔직하게 생각해보지 않았고 따로 한번 알아보겠다고 했던 기억이 난다. 면접이 끝난뒤부터 이 숙제는 계속 날 따라다녔다. 해당 문제를 어떻게 구현시킬까? 서버를 한 대 더 배치한 후 로드 밸런싱을 통해 테스트해봐야 하나? 그럼 local로 동작하는 R..
개요 나는 이전까지 middleware를 통해 jwt를 통한 로그인 기능을 직접 구현하기만 해봤던지라 이전 프로젝트에서 passport, nest.js의 guard를 활용해 로그인 기능을 구현한 팀원의 코드를 이해하고자 직접 코드를 작성해보며 정리해봤다. 그 과정에서 참고한 내용 출처는 다음과 같다. 이전 프로젝트에서 로그인 기능을 담당해준 팀원의 코드 https://github.com/chalkak2023/Chalkak-Backend GitHub - chalkak2023/Chalkak-Backend: 찰칵! 당신의 순간을 담을게요. 찰칵! 당신의 순간을 담을게요. Contribute to chalkak2023/Chalkak-Backend development by creating an account o..
Nest.js에서 request 요청에 대해 어떤 흐름을 갖는지 파악해보자. 내 나름대로 한글 설명도 덧붙여봤다. Incoming request 요청 들어옴 Globally bound middleware 앱 전체에서 공통으로 사용될 미들웨어가 등록되어 있는 경우, 이 단계에서 실행 Module bound middleware 해당 모듈에서만 사용될 미들웨어가 등록되어 있는 경우, 이 단계에서 실행 Global guards 앱 전체에서 사용될 가드(guard)가 등록되어 있는 경우, 이 단계에서 실행 Controller guards 해당 컨트롤러에서만 사용될 가드가 등록되어 있는 경우, 이 단계에서 실행 Route guards 해당 라우트(route)에서만 사용될 가드가 등록되어 있는 경우, 이 단계에서 실..
Class와 Factory Nest.js에서 Class와 Factory는 모두 컴포넌트를 정의하는 방법 중 하나이다. 공통적으로 의존성 주입(Dependency Injection)을 구현하는데 사용된다. 다만 목적과 사용 방법에서 차이가 있다. Class 일반적으로 @Injectable() 데코레이터를 사용하여 Nest.js에게 해당 클래스가 컴포넌트임을 알린다. @Inject() 데코레이터를 사용하여 다른 컴포넌트에서 해당 클래스를 주입할 수 있다. 클래스는 한 번 정의되면 프로그램 전체에서 공유되며, 필요한 곳에서 인스턴스화 된다. 컴포넌트가 필요한 모든 곳에서 동일한 인스턴스를 공유해야 하는 경우에 사용된다. 생성자 인자를 통해 의존성을 주입받는다. 생성자에서 인스턴스화되는 서비스에 대한 참조를 쉽..
개요 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..
개요 클라이언트 서버 localhost:3000 을 react로 운영중이고 백엔드 서버 localhost:8080 을 Nest.js로 운영중인 상황이다. controller @Post(':id/join') async joinGroup(@Param('id') boardId: number, @Req() req: Request) { console.log(req.cookies); } Nest.js 서버에 이런 코드가 있는데 쿠키를 세팅해놓고 요청을 해도 계속 [Object: null prototype] {} 이 값만 반환한다. 신기한건 Insomnia 상에서 테스트할 땐 잘 된다는거.. 그래서 처음에는 클라이언트쪽 문제로 생각했다. 시행착오 axios의 문제가 아닐까해서 이전 프로젝트에서 fetch를 통해 로그..
개요 어떤 게시글(Boards)에 대해 '참여하기' 기능이 있어 해당 게시글에서 '참여하기' 버튼을 누르면 제한된(joinLimit) 숫자 내에서 유저가 참여하게끔 기능을 구현하고자 한다. 그럼 먼저 테이블이 두 개가 필요하다. 게시글 테이블: Boards 해당 게시글에 대해 참여한 유저를 담는 테이블: Join 유저 테이블도 필요한데 이번 과정에선 생략 FK 설정 entity를 통해서 설정이 가능하다. 게시글과 join은 1:N 관계이므로 OneToMany가 되어야 한다. board.entity.ts import { // ...생략 } from 'typeorm'; import { Join } from './join.entity'; @Entity({ schema: 'nestjs_sample', name:..