inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core

QueryRunner 커스텀 데코레이터 만들기 & Transaction Interceptor 적용하기

영상을 멈추고 한번 풀어 보았습니다.

253

rhkdtjd_12

작성한 질문수 138

0

//query-runner.decorator.ts

import {
  ExecutionContext,
  InternalServerErrorException,
  createParamDecorator,
} from '@nestjs/common';
import { QueryRunner } from 'typeorm';

export const QueryRunnerDecorator = createParamDecorator(
  (data: unknown, context: ExecutionContext): { qr: QueryRunner } => {
    const req = context.switchToHttp().getRequest();

    if (!req.queryRunner) {
      throw new InternalServerErrorException('queryRunner가 없습니다.');
    }

    return {
      qr: req.queryRunner,
    };
  },
);

 

//posts.controller.ts

@Post()
  @UseGuards(AccessTokenGuard)
  @UseInterceptors(TransactionInterceptoer)
  async postPosts(
    @User('id') userId: number,
    @Body() body: CreatePostDto,
    @QueryRunnerDecorator() qr: QueryRunner,
  ) {

.... 중략
}

트랜잭션을 interceptor로 관리하는것을 배워서 너무 유익하고 100점 만점의 100점 꿀팁이었습니다.

https://www.npmjs.com/package/typeorm-transactional

해당 라이브러리를 원래 사용 했으나, 마음에 들지 않았었는데 덕분에 interceptor로 대체 할 수 있을것 같습니다 좋은 강의 만들어 주셔서 감사합니다!

javascript typescript rest-api nestjs backend

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.
rhkdtjd_12님, 트랜잭션 관리에 대한 실습 과정에서 유익한 정보를 얻으신 것 같아 기쁩니다.
NestJS와 TypeORM을 활용한 TransactionInterceptor의 구현 방법을 배운 것은,
프로젝트에서 트랜잭션을 보다 세련된 방법으로 관리할 수 있는 좋은 시작점이 될 것입니다.

제공해주신 코드에서 사용된 @QueryRunnerDecorator는 커스텀 데코레이터를 통해 현재 요청의 queryRunner
가져오는 예제로 보입니다. 이러한 방식은 코드의 중복을 줄이고, 체계적인 트랜잭션 관리로 이어질 수 있습니다.

또한 언급해주신 ‘typeorm-transactional’ 라이브러리 대신 인터셉터를 활용하게 되신 것에 만족하신 듯 하여 기쁩니다.
앞으로도 NestJS를 활용한 백엔드 개발에서 깊이 있는 지식과 실질적인 팁들을 많이 얻으시길 바랍니다.

감사합니다!

cascade 질문

0

40

1

@types/bcrypt 설치과정이 누락된것같습니다.

0

49

1

process.env port key 에러

0

47

1

추상화

0

50

1

[공유] DTO optional 필드가 undefined로 잡혀 TypeORM 조건이 깨지는 현상

0

101

2

where 키워드가 들어가는 메서드와 아닌 메서드

0

57

1

BearerTokenGuard에서 db를 조회해서 유저 정보를 불러오는 이유?

0

72

1

app.controller app.service 는 지워도되나요?

0

70

1

@JoinColumn을 쓰는 경우와 안쓰는 경우의 차이

0

79

1

포트 3000에서 listen하는 곳까지 넘어가지 않습니다.

0

68

1

PickType 사용 시 `as const`를 꼭 사용해야 하나요?

0

103

2

socket connect 오류

0

98

2

강의를 들으면서 궁금한 점

0

97

2

DELETE 요청의 반환값은 어떤 기준으로 결정하는 게 좋을까요?

0

60

2

커리큘럼 질문

0

100

2

put 요청은 언제

0

90

3

typeorm VS prisma

0

351

2

142 강의 > 4:00 > 포스트멘 활용 관련 질문 드립니다.

0

78

2

User 데코레이터 버그 수정 전달드립니다.

0

67

1

git 주소 부탁드립니다.

0

113

2

nest g resource 명령어 에러

0

99

2

로그인 엔드포인트 관련 질문

0

85

2

yarn으로 express 다운 후 node 2_server.js 실행 안되는 경우

0

148

3

"흔히 사용되는 메서드" 강의 관련 질문입니다~

0

95

2