본문 바로가기

외부 활동/immersion

NestJS TypeORM 트랙젝션 (queryRunner)

queryRunner

 

 

NestJS TypeORM 트랙젝션에서 사용하는 queryRunner 트랙젝션을 관리하는 사용되는 객체입니다.

queryRunner 트랙젝션을 시작하고, 트랙젝션에 쿼리를 실행하고, 트랙젝션을 커밋하거나 롤백하는 기능을 제공합니다.

 

트랙젝션을 시작하려면 queryRunner.beginTransaction() 메서드를 사용합니다.

트랙젝션에 쿼리를 실행하려면 queryRunner.query() 메서드를 사용합니다.

트랙젝션을 커밋하려면 queryRunner.commitTransaction() 메서드를 사용합니다.

트랙젝션을 롤백하려면 queryRunner.rollbackTransaction() 메서드를 사용합니다.

 

다음은 NestJS TypeORM 트랙젝션에서 queryRunner 사용하는 예입니다.

 

async function saveUser(user: User) {
  // 트랙젝션 시작
  const transaction = await this.connection.beginTransaction();

  // 트랙젝션에 쿼리를 실행
  await this.connection.query(`
    INSERT INTO users (name, email) VALUES 
    (${user.name}, ${user.email})
  `);

  // 트랙젝션을 커밋
  await transaction.commit();
}

예는 트랙젝션을 시작하고, 트랙젝션에 쿼리를 실행하고, 트랙젝션을 커밋하는 방법을 보여줍니다.

 

 

NestJS에서 TypeORM을 사용하여 트랜잭션 처리를 하는 방법은 여러가지 방법이있습니다.

https://moca9012.tistory.com/147

 

TypeOrm 트랙잭션의 적용

https://velog.io/@ljh305/Transaction-ACID-Lock-qsm3wctj Transaction / ACID / Lock 서비스에서 가장 치명적인 문제는 데이터의 오염이다.중요한 데이터를 오염시키지 않기 위해트랜잭션을 만들어 성공했을때는 모

moca9012.tistory.com

 

하지만 NEST의 공식문서에서는 queryRunner를 사용하여 트랜잭션을 처리하는것을 지향하고 있다.

내가 생각했을 때 queryRunner를 지향하는 이유로는 아래와 같다.

 

 

1. queryRunner는 수동으로 트렌젝션을 제어 하기 때문에 사용자가 상황에 맞게 유연하게 처리를 할 수 있다.

2. 테스트코드를 작성하여 테스트를 진행할 때에도 DI(Dependency Injection)를 사용하여 테스트 용이성을 높일 수 있다.

 

 

 

또한 이전 회의에서는  querybuilder의 더 많은 사용을 해보자는 의견이 나왔다.

그 이유로는 queryRunnermanager 객체보다 querybuilder가 더 많은 기능을 가지고 있으며

더 자세하게 데이터를 가져 올 수 있다는 점이다.

 

 

쿼리 러너보다 쿼리 빌더가 where,join  등등 실제 sql에서 사용하는 분법을 사용하며 

 더 많은 객체와 메소드를 다룰수 있다는 것은 물론 확실한 사실이다.

 

하지만 queryRunner의manager 객체로도 우선 필요한 데이터를 DB에서 찾고 저장하는데 다른 장애를 느끼지 못했으며

불편함 또한 전혀 없었다.

그래서 우선은 굳이 문제가 발견되지 않았는데 더 많은 기능을 제공한다는 이유로 querybuilder를 사용을 지향해보자는 점에서는 

더 회의를 진행해보며 결정해야 할것 같다.

 

 

차후 프로젝트를 진행하다가 queryRunner의manager 객체를 사용해서 데이터를 컨트롤하는데 한계를 느꼈을 때 querybuilder의 사용을 고려해 보는게 나을것 같다는게 현재 나의 생각이다.

우선 오늘 스터디를 진행하며 다시 이야기를 해봐야겠다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'외부 활동 > immersion' 카테고리의 다른 글

NEST 트랜잭션 부하테스트 [JMeter]  (0) 2023.08.07
TypeOrm 트랙잭션의 적용  (0) 2023.07.23