[DB] Transaction? ACID?
2022. 3. 5. 17:48ㆍMajor`/DB
트랜잭션 (Transaction)
- 여러 작업들을 하나로 묶은 단위
- 그렇게 묶여진 한 그룹단위 작업들은 모두 실행되거나 모두 실행되지 않는다 :: All-Or-Nothing
트랜잭션이 필요한 이유?
Example) "A 은행 → B 은행으로 돈 보내기"
1. 일단 A 은행에서 보낼 돈을 출금해야 한다
2. B 은행으로 출금한 돈 보내기
여기서 (1) 과정을 마치고 은행 시스템이 마비되면?
"돈은 A 은행에서 출금이 되었지만 해당 돈이 송금되지 않고 증발한다"
>> Transaction을 통해서 데이터의 유효성을 보장해야 한다
ACID?
- 데이터의 유효성을 보장하기 위해서, 트랜잭션의 특징들의 앞글자를 딴 단어
Atomicity (원자성)
- 모든 작업이 반영되거나 모두 롤백되는 특성
>> COMMIT? ROLLBACK?
- "Atomicity"를 통해서 오류가 발생해도 데이터 손실/손상이 방지된다
Consistency (일관성)
- 트랜잭션 작업이 시작되기 전에 DB 상태가 일관된 상태였다면 → 트랜잭션 작업이 종료되어도 DB 상태가 일관적이어야 한다
- 데이터는 미리 정의된 규칙에서만 수정이 가능한 특성을 의미
>> 숫자 컬럼에는 숫자만, 문자열 컬럼에는 문자열만 저장되도록 보장
- "Consistency"를 통해서 데이터의 오류/손상 때문에 데이터 무결성에 의도치 않은 결과가 발생하지 않는다
Isolation (고립성)
- 트랜잭션 작업 수행 중에는 다른 트랜잭션에 영향을 주면 안되고, 다른 트랜잭션으로부터 간섭을 받아도 안된다
- 트랜잭션 자신은 고립된 상태에서 수행되어야 한다
Durability (지속성)
- 한번 COMMIT된 트랜잭션의 내용은 영원히 적용된다