[NestJS] TypeORM을 통한 트랜잭션 관리Node.js2023. 4. 30. 19:02
      Table of Contents
        
서론
NestJS에서 관계가 묶여있는 여러 테이블에 INSERT를 해야하는 경우가 있습니다.
이 글에서는 TypeORM을 통해 트랜잭션을 관리해보겠습니다.
트랜잭션 관련 글
https://puleugo.tistory.com/142
데이터베이스 트랜잭션이란?
트랜잭션(Transaction) 트랜잭션: 데이터베이스 관리 시스템에서의 최소 상호작용의 단위 개요 데이터베이스 트랜잭션은 데이터베이스에서 수행되는 일련의 작업이며 모두 단일한 논리적 작업 단
puleugo.tistory.com
https://puleugo.tistory.com/143
트랜잭션 격리 수준
데이터베이스 트랜잭션 격리 수준 데이터베이스 트랜잭션의 격리 수준은 격리성(각각의 트랜잭션은 서로 간섭없이 독립적으로 수행되어야한다는 규칙)의 견고함 정도를 말합니다. 트랜잭션 격
puleugo.tistory.com
코드를 보여줘.
UserService에서 oauth 로그인을 진행하는 코드입니다.
export class UserService {
	constructor(
        @InjectRepository(User)
        private readonly userRepository: Repository<User>,
        @InjectRepository(UserAuth)
        private readonly userAuthRepository: Repository<UserAuth>,
        @InjectRepository(UserAuthProvider)
        private readonly userAuthProviderRepository: Repository<UserAuthProvider>,
        private readonly dataSource: DataSource,
      ) {}
    async joinUserByOauth(data: {
        providerUsername: string;
        providerName: string;
    }): Promise<User> {
    const userAuthProvider = await this.userAuthProviderRepository.findOne({
        where: {
            name: data.providerName,
        },
    });
    
   
    const queryRunner = this.dataSource.createQueryRunner();
    await queryRunner.connect();
    
    // 트랜잭션 시작
    await queryRunner.startTransaction();
    try {
        const user = await this.userRepository.save({});
        const userAuth = new UserAuth();
        userAuth.provider = userAuthProvider;
        userAuth.providerId = userAuthProvider.id;
        userAuth.username = data.providerUsername;
        userAuth.user = user;
        userAuth.userId = user.id;
        await this.userAuthRepository.save(userAuth);
        // 커밋
        await queryRunner.commitTransaction();
        return user;
    } catch (e) {
    	// 롤백
        await queryRunner.rollbackTransaction();
    } finally {
    // 적용
    await queryRunner.release()
	}
}'Node.js' 카테고리의 다른 글
| [NestJS] eslint를 작성해보자. (0) | 2023.08.23 | 
|---|---|
| 원클릭 회원가입 승인 구현(telegram bot, AWS s3, Flutter, Nest.js) (0) | 2023.07.21 | 
| [Jest] it vs test (0) | 2023.03.04 | 
| [NestJS] Forever를 사용하여 영구적인 실행을 해봅시다. (0) | 2023.01.18 | 
| [NestJS 에러] node @nestjs/schematics:module --name=auth --no-dry-run --no-skip-import --language="ts" --source-root="src" --spec --no-flat (0) | 2023.01.17 | 
@임채성 :: 푸르고 개발 블로그
            글 내용 중 잘못되거나 이해되지 않는 부분은 댓글을 달아주세요! 감사합니다! 문의: puleugo@gmail.com