본문 바로가기
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되면 그 결과는 시스템이 꺼져도 영구적으로 보존되어야 한다.

 

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