[typescript] async/await를 사용한 데이터베이스 트랜잭션 처리 방법

Node.js에서 데이터베이스 작업을 수행할 때 트랜잭션은 중요한 부분입니다. TypeScript의 async/await를 사용하여 데이터베이스 트랜잭션을 수행하는 방법에 대해 알아보겠습니다.

Prerequisites

해당 예시를 실행하기 위해서는 다음 패키지가 설치되어 있어야 합니다:

데이터베이스 연결 설정

먼저, 데이터베이스에 연결하는 설정부터 시작해봅시다.

import { createConnection, Connection } from 'typeorm';

async function connectDatabase(): Promise<Connection> {
  return await createConnection({
    type: 'mysql',
    host: 'localhost',
    port: 3306,
    username: 'username',
    password: 'password',
    database: 'database',
    entities: [`${__dirname}/entity/*.ts`],
    synchronize: true,
  });
}

export default connectDatabase;

위의 코드에서 createConnection 함수를 사용하여 MySQL 데이터베이스에 연결합니다.

트랜잭션 처리

이제 async/await를 사용하여 데이터베이스 트랜잭션을 처리하는 방법을 살펴봅시다.

import { getConnection } from 'typeorm';
import connectDatabase from './db';

async function performTransaction() {
  const connection = await connectDatabase();
  const queryRunner = connection.createQueryRunner();

  await queryRunner.connect();
  await queryRunner.startTransaction();

  try {
    // 트랜잭션 내에서의 데이터베이스 작업 수행
    await queryRunner.query('INSERT INTO table1 ...');
    await queryRunner.query('UPDATE table2 ...');

    await queryRunner.commitTransaction();
  } catch (err) {
    await queryRunner.rollbackTransaction();
  } finally {
    await queryRunner.release();
  }
}

위의 코드에서 performTransaction 함수 내에서 queryRunner를 생성하여 트랜잭션을 시작하고 데이터베이스 작업을 수행한 후, 성공적으로 작업이 완료되면 트랜잭션을 커밋하고, 에러가 발생했을 경우 롤백합니다.

이제 TypeScript의 async/await를 사용하여 데이터베이스 트랜잭션을 처리하는 방법을 이해하였습니다.

참고 자료