공부하기/Database
[Database] 트랜잭션과 ACID 원칙에 대해 정리해보자
다섯자두
2025. 3. 10. 15:44
Transcation 개념
▶︎ 정의
사용자 관점에서 트랜잭션은, 데이터베이스에서 수행되는 작업의 논리적 단위이다.
예를 들어 ``내 계좌로의 입급``, ``다른 계좌로의 출금`` 등이 있겠다.
그렇다면 개발자 관점에서 트랜잭션은? 작업의 동시성 제어, 그리고 회복의 단위라고 말할 수 있다.
여러 개의 쿼리문이 모여 하나의 트랜잭션을 이룬다.
▶︎ 주요 명령어
BEGIN, ROLLBACK, COMMIT 이 있다.
☑️ BEGIN / START
트랜잭션의 시작을 선언한다.
☑️ ROLLBACK
트랜잭션의 중단을 선언한다. 모든 변경 사항을 되돌려 원래 상태로 복구한다.
- 트랜잭션이 시작(BEGIN)되기 전으로 데이터가 복구된다.
✓ SAVEPOINT (선택적 롤백)
트랜잭션 내에서 save point를 지정하여 특정 시점까지만 롤백할 수 있다.
☑️ COMMIT
트랜잭션의 완료를 선언한다. 변경된 데이터를 데이터베이스에 영구적으로 저장한다.
- 트랜잭션 결과로 변경된 데이터가 확정되어, 다른 트랜잭션에서도 변경 사항을 볼 수 있게 된다.
Transcation의 원칙
흔히 ACID라고 잘 알려져 있는 트랜잭션의 원칙에 대해 알아보자. 모든 트랜잭션은 아래 원칙들을 보장하여야 한다.
▶︎ Atomicity, 원자성
All or Nothing.
트랜잭션을 이루는 쿼리문들이 모두 반영되거나, 모두 취소되어야 한다.
ex) 중간에 장애가 발생할 경우, 전체가 취소되어야 한다.
▶︎ Consistency, 일관성
트랜잭션 전후로 데이터베이스의 무결성이 유지되어야 한다.
ex) A가 50만원을 B의 계좌로 이체했다면, A의 계좌에서 정확히 50만원이 빠지고 B의 계좌에 정확히 50만원이 추가되어야 한다.
▶︎ Isolation, 고립성
동시에 실행되는 트랜잭션들이 서로 간섭하지 않도록 보장하여, 각 트랜잭션이 순차적으로 실행되는 것처럼 보여야 한다.
즉, 한 트랜잭션이 완료되기 전에는 그 변경사항을 다른 트랜잭션이 볼 수 없도록 한다.
- 제대로 보장되지 않는다면 데이터 불일치 문제가 발생한다. (ex. Dirty Read, Unrepeatable Read, Phantom Read, ...)
- ``동시성 제어(Concurrency Control)``를 통해 고립성을 보장한다.
▶︎ Durability, 영속성
성공적으로 완료된 트랜잭션의 결과는 데이터베이스에 영구적으로 반영되어야 한다.