DB의 가장 작은 작업 단위. 하나라도 실패하면 실패, 모든 작업이 성공하면 트랜잭션 성공.
Atomicity(원자성)
All or Nothing. 모두 성공하거나 실패한다. 예시) 계좌이체
(1)A의 계좌에서 출금 하고 (2)이를 B의 계좌로 송금한다.
(1)은 성공하고 (2)는 실패했다면 출금한 돈은 사라지게 된다.
이러한 경우 모든 작업을 실패처리 해야한다. (Rollback)
Consistency(일관성)
트랜잭션 전과 후의 상태가 같아야 한다.Isolation(격리성)
모든 트랜잭션은 다른 트랜잭션으로부터 독립되어야 한다.예시) 사용자 A, B가 C의 계좌로 동시에 1,000원을 계좌이체 한다.
C의 계좌에 10,000원이 있다고 가정하면, 12,000원이 되어야한다.
동시에 같은 데이터에 접근할 경우 Isolation level을 적용한다.
Durability(지속성)
트랜잭션이 성공적으로 수행되었다면 해당 트랜잭션에 대한 로그가 남아야한다. 트랜잭션의 범위는 connection을 기준으로 한다.
예) Spring - @Transactional
```
@Transactional
public void doUpdateInsert(){
dao.update();
dao.insert();
}
```
method 간에(dao.update(), dao.insert()) connection 객체를 전달하지 않아도 한 트랜잭션으로 묶어서 실행
특징
참고
https://www.youtube.com/watch?v=urpF7jwVNWs
https://hanamon.kr/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98%EC%9D%98-acid-%EC%84%B1%EC%A7%88/