DB
[ACID] Atomicity - 원자성
gracelove91
2024. 2. 28. 09:45
원자성.
여기서 말하는 원자성이란 더 이상 쪼갤 수 없다는 의미다.
원자성에 앞서 트랜잭션에 대해 간단히 정리하자.
What is transaction
- 하나의 작업단위로 볼 수 있는 쿼리들의 집합이다.
- 예를 들자면 송금을 들 수 있다.
- Transaction BEGIN
- 돈을 보내는 사람의 계좌의 잔액을 읽는다. (SELECT)
- 돈을 보내는 사람의 계좌에서 돈을 출금한다. (UPDATE)
- 돈을 받는 사람의 계좌에 돈을 입금한다. (UPDATE)
- Transaction COMMIT OR ROLLBACK
트랜잭션 안에 있는 쿼리들은 모두 성공해야한다. 만약 실패하는 쿼리가 있다면 트랜잭션 내에 있는 모든 쿼리들의 결과는 롤백되어야 한다.
커밋이 되면 변경사항을 기록한다. 그런데.. 커밋이 된 게 아니라, 아직 트랜잭션이 진행 중이라면? 트랜잭션 안에 있는 단일 쿼리의 결과는 어디에 저장하지? 데이터베이스에 따라 다르다. 어떤 데이터베이스는 메모리에 올리고, 어떤 데이터베이스는 실제로 디스크에 쓰기도 한다. 트랜잭션 안에 있는 한 쿼리가 실패하거나, 아님 데이터베이스 시스템이 죽거나 등의 이유로 원자성에 의해 롤백이 되어야 하는데, 데이터베이스에 따라 롤백 작업이 굉장히 긴 시간을 소요하기도 한다.
만약 원자성이 없다면..?
Ex ) 송금 (ACCOUNT 의 ID 가 1 인 계좌에서 ID 가 2인 계좌로 100원을 송금한다.)
1. SELECT BALANCE FROM ACCOUNT WHERE ID = 1;
2. UPDATE ACCOUNT SET BALANCE - 100 WHERE ID = 1;
3. 데이터베이스 죽어버림
????? 내돈..
## 결론
Atomicity 의 의미 : 트랜잭션은 더이상 쪼갤 수 없는 하나의 작업이다!