5. 원자성
트랜잭션은 모 아니면 도(All or Nothing)
💡
Tip
원자성(Atomicity) 어원
하나의 트랜잭션은 Atom, 원자와 같이 더 이상 분해될 수 없는 단위인 것처럼 처리되어야 한다는 것
→ 원자성이란, 더 이상 분해될 수 없는 최소한의 작업 단위
따라서 하나의 트랜잭션 내에 존재하는 모든 쿼리(작업 단계)는 전부 성공해야하며, 만약 하나의 쿼리라도 실패할 경우, 이전에 성공했던 모든 쿼리들은 롤백(Rollback)되어야 함
또한 트랜잭션 수행 중에 DB가 다운될 경우, 다운 전까지 성공적으로 수행되었던 모든 쿼리들은 롤백되어야함
1-1. 원자성 정리
정리하면,
원자성이란 하나의 작업 중에 일부 내용만 적용되거나 하는 일이 발생하지 않도록 도와주는 특성이라고 볼 수 있으며,
트랜잭션은 둘 중 하나로 명확해야함
A. 하나의 작업(트랜잭션)을 완전하게 처리하거나,
B. 하나의 작업에서 세부 작업 단계 중에 하나의 단계라도 문제가 발생했을 경우에는 작업 전체를 중지하거나 처음부터 다시 수행하도록 하거나
1-2. 원자성이 보장되지 않는 상황을 가정한 시나리오
다음의 Account 테이블에서 Account 1의 잔액(Balance)에서 2,000원을 Account 2에게 이체한다고 가정
Account 테이블
| ACCOUNT_ID | BALANCE |
|---|---|
| 1 | 10,000 |
| 2 | 5,000 |
sql
BEGIN; -- 트랜잭션 시작
-- Account 1의 잔액이 2,000원 이상인지 조회
SELECT BALANCE FROM ACCOUNT WHERE ACCOUNT_ID = 1;
-- Account 1의 잔액 2000원 출금
UPDATE ACCOUNT SET BALANCE = BALANCE - 2000 WHERE ACCOUNT_ID = 1;
-- (?)Database down.Database가 다운되어 서버를 재 시작(restart) 후 Account 1의 잔액 조회
sql
SELECT BALANCE FROM ACCOUNT WHERE ACCOUNT_ID = 1;조회 결과,
| ACCOUNT_ID | BALANCE |
|---|---|
| 1 | 8,000 (?) |
| 2 | 5,000 |
→ 원자성이 보장되지 않으면 데이터의 일관성(Consistency)도 깨지게 됨
Last updated on