• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

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

24.01.09 18:04 작성 24.01.09 18:09 수정 조회수 137

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로 대체 할 수 있을것 같습니다 좋은 강의 만들어 주셔서 감사합니다!

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.01.11

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

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

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

감사합니다!