본문 바로가기
database

트랜잭션과 ACID

by cactuslog 2025. 3. 23.
트랜잭션은 하나의 작업 단위를 묶은 것으로
이 안에 있는 여러 작업은 모두 성공하거나 하나라도 실패하면
전부 실패한 것으로 처리한다.

 

예를 들어 A가 B에게 10000원을 계좌 이체 한다고 할 때 A의 잔고는 10000원 감소하고 B의 잔고는 10000원 증가해야 한다.

 

계좌 이체는 이렇게 2가지 작업이 하나의 작업처럼 동작해야 한다.

 

두 작업 중 하나만 성공하면 심각한 문제가 발생된다.

 

트랜잭션을 사용하면 두 작업 다 성공해야 저장하고, 하나라도 실패하면 이전 상태로 돌아갈 수 있다.

 

모든 작업이 성공해서 데이터베이스에 정상 반영되는 것을 Commit이라 한다

 

작업 중 하나라도 실패해서 이전으로 되돌리는 것을 Rollback이라 한다.

 

트랜잭션의 특성 ACID

Atomicity 원자성

트랜잭션 안의 작업은 모두 실행되거나 아무것도 실행되지 않아야 한다.

 

A가 B에게 10000원을 계좌이체 한다고 할 때 A의 잔고는 10000원 감소하고 B의 잔고는 10000원 증가해야 한다.

 

이 중 하나라도 실패하면 전체 작업이 Rollback 되어야 한다

 

Consistency 일관성

모든 트랜잭션은 일관성 있는 데이터베이스 상태를 유지해야 한다.

 

트랜잭션이 수행된 후에도 데이터가 제약 조건을 반드시 만족해야 한다.

 

ex) NOT NULL, UNIQUE, Foreign Key 등등

 

Isolation 격리성

동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리한다.

 

예를 들면 두 사용자가 동시에 같은 상품의 재고를 갱신하는 경우, 한 트랜잭션이 끝나기 전까지 다른 트랜잭션은 그 데이터를 읽거나 수정 못하게 해야한다.

 

격리성을 너무 완벽하게 보장하면 트랜잭션을 순차적으로 실행해야한다.

 

이렇게 할 경우 동시 처리 성능이 매우 안 좋아진다.

 

이런 문제로 인해 ANSI 표준은 트랜잭션의 격리 수준을 4단계로 나누어 정의했다.

 

  • READ UNCOMMITED(커밋되지 않은 읽기)
  • READ COMMITTED(커밋된 읽기)
  • REPEATABLE READ(반복 가능한 읽기)
  • SERIALIZABLE(직렬화 가능)
높은 격리 수준일수록 트랜잭션 간 간섭을 강하게 차단하여 일관성은 향상된다.
사용하는 메커니즘에 따라 MVCC 또는 락 기반이 되며, 일부 수준에서는 락으로 인한 성능 저하가 발생할 수 있다.

예를 들어, REPEATABLE READ는 대부분 MVCC로 처리되기 때문에 성능이 뛰어난 반면, SERIALIZABLE은 읽기조차 락을 걸어야 해서 동시성이 크게 떨어질 수 있다.

MVCC 이해하기

 

MVCC 깊게 이해하기: Undo Log 기반 다중 버전 동시 제어의 원리

InnoDB 스토리지 엔진을 사용하는 mysql 기준으로 정리한다. MVCC (Multi Version Concurrency Control) 여러 트랜잭션이 동시에 같은 데이터를 조회하거나 수정할 때 서로 간섭하지 않고도 일관된 데이터를 읽

cactuslog.tistory.com

Isolation Level 이해하기

 

Isolation Level - 트랜잭션 격리 수준 깊게 이해하기

InnoDB 스토리지 엔진을 사용하는 mysql 기준으로 정리한다. 먼저 MVCC와 undo log, read view에 대한 이해가 필요하다. MVCC 깊게 이해하기: Undo Log 기반 다중 버전 동시 제어의 원리InnoDB 스토리지 엔진을

cactuslog.tistory.com

 

Durability 지속성

트랜잭션이 성공적으로 Commit되면 그 결과는 시스템이 꺼져도 영구적으로 보존되어야 한다.

 

중간에 시스템이 문제가 생겼다해도 데이터베이스 로그 등을 사용해서 성공한 트랜잭션 내용을 복구해야 한다.