Transaction이란?
- 데이터베이스의 상태를 변화시키기 위해 수행하는 논리적인 작업의 단위이자 데이터베이스 장애 발생시 데이터를 복구하는 작업의 단위
- 여러 단계의 데이터베이스 처리를 하나의 처리처럼 다루는 기능
Transaction 적용 방법 - Sequelize
- transaction 선언 : Sequelize의 transaction method를 사용한 선언 방법
- const transaction = await sequelize.transaction()
- transaction 걸기 : Database에 CRUD가 일어나는 sequelize method 사용시 매개변수의 형태로 transaction을 걸어주기
- transaction commit : 하나의 transaction이 성공적으로 끝났을 때, 데이터베이스에 적용하고 저장하며 현재 트랜잭션을 종료하는 역할
- await transaction.commit()
- transaction rollback : 하나의 transaction 처리가 비정상적 종료되어 원자성이 깨져 트랜잭션이 행한 모든 연산을 취소하고 원래 상태로 되돌리는 역할. throw error를 할경우 에러 발생시, 서버가 멈추는 반면 rollback은 에러발생시 에러 알람이 뜨고 rollback을 하면서 원래 상태대로 돌아가기에 유동적이면서 안전
- await transaction.rollback()
Transaction 특징
- ACID : 원자성, 일관성, 독립성, 지속성을 일컫는 말
- 원자성 : 트랜잭션이 DB에 모두 반영되거나 전부 안되어야 한다는 것
- 일관성 : 트랜잭션 작업 처리 결과가 항상 일관되어야 한다는 것
- 독립성 : 어느 트랜잭션이라도 다른 트랜잭션의 연산에 끼어들 수 없다는 것
- 지속성 : 트랜잭션이 정상 처리됬을 땐 결과가 영구 반영되어야 한다는 것