트랜잭션의 ACID 속성이란 데이터베이스에서 트랜잭션(작업의 논리적 단위)의 안정성과 신뢰성을 보장하기 위해 반드시 충족되어야 하는 네 가지 핵심 원칙을 의미한다.
- 트랜잭션의 ACID 속성
- 원자성(Atomicity)
: 트랜잭션이 안전성 보장을 위해 가져야 할 성질 중의 하나로 시스템에서 한 트랜잭션의 연산들이 모두 성공하거나, 전부 실패되는 성질을 말한다. 즉, 트랜잭션 안의 작업들이 하나의 단위로 실행되고 중간에 오류가 발생하면 모두 롤백되어 이전 상태로 되돌아간다.
- 일관성(Consistency)
: 데이터베이스의 상태가 일관되어야 한다는 성질로 하나의 트랜잭션 이전과 이후, 데이터베이스의 상태는 이전과 같이 유효해야 한다는 의미이다. 즉, 하나의 트랜잭션이 발생하고 난 후의 데이터베이스는 데이터베이스의 제약이나 규칙을 만족해야 한다는 의미이다.
- 격리성(Isolation)
: 모든 트랜잭션은 다른 트랜잭션으로부터 독립되어야 한다는 뜻으로 실제로 동시에 여러개의 트랜잭션들이 수행될 때 각 트랜잭션은 고립되어 있어 연속으로 실행된 것과 동일한 결과를 나타낸다. 즉, 동시에 여러 트랜잭션이 실행되어도 서로 간섭하지 않으며 각 트랜지션은 다른 트랜잭션의 진행 내역을 알 수 없다.
- 지속성(Durability)
: 하나의 트랜잭션이 성공적으로 수행되었다면, 해당 트랜잭션에 대한 로그가 남아야 한다는 의미이다. 만약 런타임 오류나 시스템 오류가 발생하더라도 해당 기록은 영구적으로 존재야하 한다.
- 트랜잭션의 격리 수준
트랜잭션의 격리 수준은 동시에 여러 트랜잭션이 처리될 때 트랜잭션끼리 얼마나 격리되어 있는지를 나타내는 정도이다.

1. Serializable
: 가장 엄격한 수준으로 트랜잭션을 순차적으로 진행시켜야 한다. 그리고 하나의 트랜잭션이 실행되는 동안 다른 트랜잭션은 대기해야 한다. 격리성이 가장 높으며 교착상태가 일어날 확률이 높고 성능적인 측면에서는 가장 떨어진다.
2. Repeatable read
: 특정 행을 조회할 때, 항상 같은 데이터를 응답하는 것을 보장하는 격리 수준으로 하나의 트랜잭션이 이미 수정한 행을 다른 트랜잭션이 수정할 수 없도록 막는다. 그러나 새로운 행을 추가하는 것은 막지 않기 때문에 이후에 추가된 행이 발견될 수 있다.
3. Read committed
: 커밋이 완료된 트랜잭션의 변경사항만 다른 트랜잭션이 조회할 수 있도록 허용하는 격리 수준이다. 다만, 어떠한 트랜잭션이 접근한 행을 다른 트랜잭션이 수정을 하는 것은 가능하다.
4. Read uncommitted
: 커밋 되지 않은 트랜잭션의 데이터 변경을 다른 트랜잭션이 조회하는 것을 허용하는 가장 낮은 격리 수준에 대항하지만 속도는 가장 빠르다. 데이터의 무결성을 위해 가능한 한 사용하지 않는 것이 권장되지만, 대량의 데이터를 대략적으로 집계하는 데에 사용된다.
- 트랜잭션 격리 수준에 따라 발생할 수 있는 문제점
1. 팬텀 리드(Phantom Read)
같은 조건의 쿼리를 두 번 실행했는데, 두 번째 실행 시에 더 많은(또는 더 적은) 행이 나타나는 경우이다. 이는 새로운 행이 삽입되거나 삭제되었기 때문에 발생한다.

Serializable을 제외한 모든 격리 수준(Repeatable Read, Read Committed, Read Uncommitted)에서 발생하는 문제이다.
- Transaction 1에서 나이가 12 이상인 회원을 조회한다
- Transaction 2에서 나이가 15인 회원 B를 추가한다
- Transaction 1에서 나이가 12 이상인 회원을 조회한다
➡️ 1번과 3번 과정은 동일한 쿼리를 보냈는데도 조회 결과가 다르다.
2. 반복 불가능한 조회(Non-repeatable Read)
같은 데이터를 두 번 읽었는데 값이 달라지는 현상이다. 그 두 번 사이에 다른 트랜잭션이 해당 데이터를 수정 또는 삭제하여 결과가 다르게 나타나는 현상이다. 즉, 읽을 때마다 값이 달라질 수 있다는 의미이다.

✅팬텀리드 vs 반복불가능한 조회
팬텀 리드는 INSERT나 DELETE 쿼리에 의해 다른 행이 선택되어 데이터 정합성이 깨지는 것을 의미하고,
반복 가능하지 않은 조회는 UPDATE 쿼리에 의해 행 값이 변경되어 데이터 정합성이 깨지는 것이다.
3. 더티 리드(Dirty Read)
한 트랜잭션이 아직 커밋되지 않은(즉, 확정되지 않은) 데이터를 다른 트랜잭션이 읽는 현상이다. 만약 첫 번째 트랜잭션이 롤백된다면, 두 번째 트랜잭션이 잘못된 데이터를 읽은 셈이 되어 일관성이 깨진다.

마지막 2개의 단계를 보면 Transaction 2가 Commit되기 전에 Transaction 1에서 Select를 했는데 아직 커밋하지 않은 결과가 조회되고 있다. 이후 Transaction 2가 롤백된다면 Transaction 1은 잘못된 데이터를 조회한 것이 된다.
- 정리하자면
| 격리 수준 | Phantom Read | Non-Repeatable Read | Dirty Read |
| Serializable | ❌ | ❌ | ❌ |
| Repeatable Read | ⭕️ | ❌ | ❌ |
| Read Committed | ⭕️ | ⭕️ | ❌ |
| Read Uncommited | ⭕️ | ⭕️ | ⭕️ |
참고자료
[데이터베이스] 트랜잭션의 ACID 성질 - 하나몬
트랜잭션이란 여러 개의 작업을 하나로 묶은 실행 유닛을 말한다. 데이터베이스 트랜잭션은 ACID라는 특성을 가지고 있다. ACID는 데이터베이스 내에서 일어나는 하나의 트랜잭션(transaction)의 안
hanamon.kr
https://leeeeeyeon-dev.tistory.com/121
트랜잭션 격리 수준과 격리 수준에 따른 문제점
1. 트랜잭션 격리성트랜잭션은 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위를 말한다.트랜잭션에는 ACID라는 네 가지 특징이 있다. 그 중 격리성(Isolation)은 트랜잭션 수행
leeeeeyeon-dev.tistory.com
'Programming > Database' 카테고리의 다른 글
| [DB] DDL, DML, DCL (0) | 2025.10.29 |
|---|