반응형
01. typeorm transaction
typeorm에서 제공하는 기능으로 여러번의 테이블 작업이 필요할때 일관성의 안전을 위해서 사용하는 것이라고 보면 좋을꺼같다.
즉 한번이라도 잘못되면 멈수고 롤백되야 하는경우 데이터의 불일치가 절대로 있으면 안되는 경우 라고 생각하면 되는데
내경우에는 아직은 시작단계이기 때문에 회원가입으로 예시를 보여주려고 한다.
참고로 위의 경우가 아니면 기존에 사용햇던 방법이 더 낫다.
여기서 중요한것은 try catch finally까지 묶어야 되는것이고
성공시에는 트랜잭션 확정 실패시에는 db가 망가지면안되니까 그전으로 롤백 마지막은 트랜지션을 꺼준다 왜냐 쿼리가 계속 진행되면 db가 다운된다잉 ㅠㅠ
constructor(
@InjectRepository(Users)
private userRepository: Repository<Users>,
// 데이터소스추가
private dataSource: DataSource,
) {}
async Join(
email: string,
password: string,
name: string,
nickname: string,
phone: string,
) {
const queryRunner = this.dataSource.createQueryRunner();
// db에 연결
await queryRunner.connect();
// 트랜잭션을 시작
await queryRunner.startTransaction();
try {
// 회원가입
await queryRunner.manager.getRepository(Users).save({
email,
password: hashedPassword,
name,
nickname,
phone,
});
await queryRunner.commitTransaction();
return true;
} catch (error) {
await queryRunner.rollbackTransaction();
} finally {
await queryRunner.release();
}
}
반응형