* 트랜잭션 (Transaction)
- 대용량 데이터 동기화 등을 처리하다 보면 개발자가 트랜잭션을
어떻게 처리 하느냐에 따라 데이터의 정합성 등에 영향을 주게 된다.
그래서 백엔드 개발자로서 트랜잭션은 중요한 개념이다.
* 트랜잭션 상태
- 위에서 알게된 Commit과
Rollback은 트랜잭션이 어떤 상태일 때 발생할 수 있을까
- Active : 트랜잭션이 실행 중이며 동작 중인 상태
- Partially Committed : 트랜잭션이 실행되고 데이터 변경을 DB에 적용 전 메모리 공간에만 변경해놓을상태.
- Committed : 트랜잭션이 정상적으로 완료 상태. 즉 실제로 메모리에서 DB에 데이터를 쓴 상태. Rollback 불가능.
- Failed : 오류로 트랜잭션 실패 상태.
- Aborted : 트랜잭션이 취소 상태. 트랜잭션 실행 이전 데이터로 돌아감.
* ACID
1) 원자성 (Atomicity)
- 모두 수행되었거나, 되지 않았거나를 보장함.
- all or nothing
- commit 이전에는 메모리 버퍼에 저장한다든지 실패하면 디스크에 반영하지 않는 방식
2) 일관성 (Consistency)
- 트랜잭션이 완료된 다음의 상태에서도 트랜잭션이 일어나기전 상황과 동일하게 일관성을 보장해야함.
- 그래서 constraints, trigger 등을 통해 DB에 정의된 rules을 transaction이 위반했다면 rollback 해야 한다.
[예시 : 패트 -> 매트]
위에 예시를 다시 가지고 와서 주디와 송송의 계좌에는 현재 각각 200만원, 100만원이 있다.
패트 계좌 : 200 만원
매트 계좌 : 100 만원
이때 주디가 210만원을 추가 이체한다고 생각해보자.
그럼 주디의 계좌는 -10만원이 된다.
그런데 account 테이블에 balance가 음수가 될 수 없다는 제약사항이 있다.
CREATE TABLE account (
...,
balance INT,
check (balance >= 0)
)
그렇다면 210만원을 이체하는 UPDATE문은 일관성을 깨뜨리기 떄문에 Inconsistent 실패하게 된다.
그래서 롤백함.
3) 격리성(Isolation)
- 각각의 트랜잭션이 서로 간섭 없이 독립적으로 수행되는 것을 말함.
- 다양한 Isolation level을 제공한다.
[ 예시 : 패트 -> 매트 ]
동시에 트랜잭션이 실행하는 경우 문제가 생길 수 있다. 그래서 isolation은 트랜잭션에서 중요한 특징이다.
패트 계좌 : 200 만원
매트 계좌 : 100 만원
1) 패트 -> 매트 10만원 이체 트랜잭션 시작
< 패트 >
read( balance ) => 200만원
write( balance = 190만원 )
< 매트 >
read( balance ) => 100만원
2) 이때 매트가 자신의 계좌에 40만원 입금 트랜잭션 시작
read(balance)
write(balance = 140만원)
write(balance = 110만원)
4) 지속성(Durability)
- 성공적으로 수행된 트랜잭션은 영구적으로 데이터베이스에 작업의 결과가 저장되어야 함.
- 시스템 장애가 발생해도 원래 상태로 복구하는 기능이 있다.
'Computer Science > DB' 카테고리의 다른 글
스키마란? (1) | 2024.12.18 |
---|---|
B tree, B+ tree 개념 (0) | 2024.12.18 |
Transaction_Isolation_level (0) | 2024.11.28 |
DB의 Index(인덱스) (1) | 2024.11.28 |
DB Connections (1) | 2024.11.25 |