![[Database] 트랜잭션이란?](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWWEBS%2FbtsIcpXvMRS%2FbfqR0ej0uTIhqoVj5qJR4K%2Fimg.png)
트랜잭션이란?
데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위를 의미한다. 트랜잭션은 여러 개의 작업을 하나의 단위로 묵어서 처리하여, 데이터베이스의 일관성(Consistency)을 유지한다.
일관성을 유지한다는 것은 트랜잭션이 수행된 후 데이터베이스는 일관된 상태를 유지해야함을 의미한다. 트랜잭션 전후에 유효한 상태를 유지하는 것을 의미한다.
트랜잭션의 특징 - ACID
트랜잭션은 아래 4가지 상태를 만족해야 한다.
- 원자성 (Atomicity)
- 일관성 ( Consistency)
- 격리성 (Isolation)
- 지속성 (Duration)
원자성 (Atomicity)
원자성이란 하나의 트랜잭션이 갖는 모든 작업을 모두 성공하거나 실패해야 한다. 하나의 작업이라도 실패하게 된다면 해당 트랜잭션은 실패한 것이기 때문에 데이터베이스에 적용해서는 안 된다.
일관성 (Consistency)
일관성이란 트랜잭션의 수행 결과가 일관성을 갖어야 함을 의미한다. 트랜잭션 전후의 결과가 올바른 상태를 갖어야 한다.
- 일관성 유지 예시
- 고객 A → 고객 B 15000원 입금
- 고객 A의 잔고 - 15000
- 고객 B의 잔고 + 15000
- 일관성 깨지는 예시
- 고객 A → 고객 B 15000원 입금
- 고객 A의 잔고 - 15000
- 장애 발생
- 고객 A의 잔고는 감소하였으나, 고객 B의 잔고는 변화가 없다.
일관성이 깨지는 경우 롤백 처리를 하여 고객 A의 잔고를 이전 값으로 되돌린다.
격리성 (Isolation)
트랜잭션 A가 실행되고 있을 때 트랜잭션 B가 동시에 실행된다면 두 트랜잭션은 격리된 상태에서 실행해야 한다. 트랜잭션이 완전히 완료될 때까지 다른 트랜잭션의 연산에 끼어들 수 없다.
지속성 (Durability)
트랜잭션이 수행된 결과는 영구적으로 유지되어야 한다. 즉, 시스템에 장애가 발생하더라도 트랜잭션의 결과가 데이터베이스에 유지되어야 한다.
트랜잭션의 연산
Commit
트랜잭션이 완전히 완료된다면, 모든 변경 사항을 데이터베이스에 반영하는 것을 의미한다.
Rollback
트랜잭션이 수행하는 업무 중에 하나라도 실패하게 된다면, 데이터베이스 일관성을 유지하기 위해 트랜잭션이 수행한 모든 업무를 롤백 처리한다. 즉, 정상적으로 수행된 업무 마저도 롤백처리를 한다.