본문 바로가기

Javascript/NestJS

Transaction

1. 프로세스에서 발생 가능한 문제점

 

(1) 한 프로세스에서 여러가지 일을 해야 할 대 중간에 에러가 생겨 로직이 끝났다면 앞서 실행된 로직은 수행이 되고 뒤 쪽 로직이 수행되지 않는 다면 데이터 오염이 발생

(2) 이런 데이터 오염이 발생하는 문제를 해결하기 위해 ACID 트랜잭션을 사용

 

2. Transaction

(1) transaction은 처리되는 작업의 단위

(2) Business Logic 에서 굉장히 중요한 기능

(3) 서로 다른 트랜잭션들을 처리하는 도중 하나의 단위 트랜잭션에서 에러가 발생한다면 이전에 성공한 트랜잭션들을 다시 rollback 시켜 데이터 Consistency가 깨지지 않도록 해줌

(4) 모든 작업이 성공 했을 경우 commit을 통해 확정

 

3. DB의 Transaction Flow

(1) 서로 다른 Transaction을 부분적으로 처리

(2) 모든 Transaction이 정상적으로 완료되면 Commit

(3) Transaction 중 하나라도 비정상 적으로 처리되면 rollback을 수행

 

 

4. Transaction Process

 

5. TypeOrm Transaction Strategies

(1) @Transactional 데이코레이터를 사용하여 Method에서 처리하는 방법

(2) Callback Style로 처리

(3) NestJS에서는 QueryRunner를 통해 Transaction을 수행

(4) QueryRunner를 사용하면 Transaction의 Commit과 Rollback을 수동으로 제어

(5) 이런 경우 Unit Testing(단위 테스트)를 보다 쉽게 진행할 수 있고 Jest를 통한 Testing 시 Mocking이 수월함

'Javascript > NestJS' 카테고리의 다른 글

Redis  (0) 2022.12.18
이미지 업로드  (0) 2022.12.18
소셜 로그인  (0) 2022.12.18
CORS  (0) 2022.12.18
결제 시스템  (0) 2022.12.18