트랜잭션 ACID
A - Atomicity(원자성)
C - Consistency(일관성)
I - Isolation(격리성)
D - Durability(지속성)
원자성은 트랜잭션의 모든 작업이 전부 성공하거나 전부 실패하는 것입니다. 계좌이체에서 출금과 입금이 모두 완료되거나 모두 취소 되어야 합니다.
일관성은 트랜잭션 전후에 데이터 무결성이 유지되는 것 입니다. 잔액이 음수가 될 수 없다는 규칙이 항상 지켜져야 합니다.
격리성은 동시 실행되는 트랜잭션들이 서로 영향을 주지 않는 것 입니다.
지속성은 커밋된 트랜잭션이 시스템 장애가 발생해도 영구적으로 보존되는 것 입니다.
실제 프로젝트에서 Spring의 @Transaction 어노테이션을 사용해 데이터베이스 트랜잭션을 관리합니다. 하지만 중요한 점은 트랜잭션 어노테이션이 ACID를 직접 보장해주는 것이 아니라, 데이터베이스 엔진(PostgreSQL, MySQL)이 ACID를 보장한다는 것 입니다. 여기서 트랜잭션 어노테이션은 단지 트랜잭션의 시작, 커밋, 롤백을 자동으로 처리해주는 편의 기능입니다.