공부하기/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, 영속성

성공적으로 완료된 트랜잭션의 결과는 데이터베이스에 영구적으로 반영되어야 한다.