inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Slack 클론 코딩[백엔드 with NestJS + TypeORM]

typeorm transaction

try문 밖에서 에러 발생시 트랜잭션이 release가 안됩니다.

해결된 질문

268

바나나머스탱

작성한 질문수 2

1

12:00 시작된 join 매서드를 만들고 실행을 시켜보니 에러 처리를 하면 커넥션 pool이 종료되지 않는거 같습니다.

 

이메일이 중복된 user를 insert하려 할 때 new ForbiddenException이 실행이 됩니다. 하지만 finally문이 실행이 안되는거 같습니다.

async join(email: string, nickname: string, password: string) {
  const queryRunner = this.dataSource.createQueryRunner();
  await queryRunner.connect();
  await queryRunner.startTransaction();
  const user = await queryRunner.manager
    .getRepository(Users)
    .findOne({ where: { email } });
  if (user) {
    throw new ForbiddenException('이미 존재하는 사용자입니다');
  }
  const hashedPassword = await bcrypt.hash(password, 12);
  try {
    const returned = await queryRunner.manager.getRepository(Users).save({
      email,
      nickname,
      password: hashedPassword,
    });
    const workspaceMember = queryRunner.manager
      .getRepository(WorkspaceMembers)
      .create();
    workspaceMember.User = returned.id;
    workspaceMember.Workspace = 1;
    // throw new NotFoundException('롤백해봐');
    await queryRunner.manager
      .getRepository(WorkspaceMembers)
      .save(workspaceMember);
    await queryRunner.manager.getRepository(ChannelMembers).save({
      User: returned.id,
      ChannelId: 1,
    });
    await queryRunner.commitTransaction();

    return true;
  } catch (error) {
    console.error(error);
    await queryRunner.rollbackTransaction();
    throw error;
  } finally {
    console.log('이거 실행됨?');
    await queryRunner.release();
  }
}

'이거 실행됨?' 이라는 문자가 출력이 되지 않습니다.

 

여러번 반복한 후 pgAdmin에서 database activity를 살펴보니

커넥션 pool이 release되지 않고 idle 상태로 되어있습니다.

이 때문에 서버의 pool이 가득차서 서버가 종료됩니다.

 

user의 중복검사도 try문 안에 넣으면 해결되는거 같습니다. 🟩 혹시 존재하는 사용자 로직을 try문 밖에 빼신 이유가 있는지 궁금합니다.

 

 

 

node.js express nestjs typeorm

답변 1

0

제로초(조현영)

아, 넣는 게 맞습니다.

강의자료는 어디서 다운받나요?

0

114

4

질문 있습니다.

0

298

3

(강의 5:42 질문) providers를 통한 여러 개의 인스턴스 생성 & exports 통한 싱글톤 생성

0

154

2

코드 편집기 확장 프로그램

0

209

2

(질문)비밀 저장소에 접근하기 위한 인증 정보는 로컬 .env에 저장하는지?

0

145

2

(질문)외부 저장소를 통한 환경변수 불러오기 비동기 질문

0

169

3

로그인을 해도 LoggedInGuard쪽에서 false값이 나옵니다.

0

152

2

로그인방법이 고민됩니다.

0

190

2

yarn seed 명령어 실행 시 데이터 삽입 안됨

0

297

4

yarn run db:create 시에 발생하는 데코레이터 오류

0

242

2

npm run db:create 시에 발생하는 decorating 오류

0

232

2

RxJS 디버깅 질문 있습니다.

0

189

3

CacheManager에 대해 질문 있습니다.

0

174

2

로깅은 어떻게 하는게 효율적일까요?

0

224

1

CORS 질문 있습니다.

0

418

2

쿠키 옵션에 대해서 질문 있습니다.

0

184

2

로그아웃 요청이 403 forbidden 에러가 나는데 왜그런걸까요??

0

449

1

401 unauthorized문제

0

288

1

가드의 장점에 대해서 질문이 있습니다.

0

225

1

로그 관리에 대해 질문 있습니다.

0

252

2

CORS 에러 질문 있습니다.

0

319

2

배포 환경 DB 연결 질문 있습니다.

0

411

2

socket io 미 연결 문제 (nest & flutter)

1

1154

3

no elements in sequence 에러 관해서 질문이 있습니다.

0

454

1