try문 밖에서 에러 발생시 트랜잭션이 release가 안됩니다.
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문 밖에 빼신 이유가 있는지 궁금합니다.
답변 1
강의자료는 어디서 다운받나요?
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





