DB의 상태를 변경시키는 작업의 단위
여러 개의 명령어를 하나의 논리적 단위로 묶어 작업의 일부만 적용되는 현상을 방지하여
작업의 완전성을 보장해줌
트랜잭션의 ACID 는 4가지 주요 특징의 첫글자를 따서 만들어졌다.
| 특성 | 의미 | 예시 |
|---|---|---|
| Atomicity (원자성) | 트랜잭션의 모든 연산이 완전히 수행되거나 전혀 수행되지 않아야 함 | 계좌 이체 시 출금과 입금이 모두 성공하거나 둘 다 실패해야 함 |
| Consistency (일관성) | 트랜잭션 실행 전후의 데이터베이스 상태가 일관되어야 함 | 계좌 간 이체 후 총 잔액의 합은 이체 전과 동일해야 함 |
| Isolation (격리성) | 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않아야 함 | 동시에 여러 계좌 이체가 일어나도 각 거래는 독립적으로 처리됨 |
| Durability (지속성) | 성공적으로 완료된 트랜잭션의 결과는 영구적으로 반영되어야 함 | 이체 완료 후 시스템 장애가 발생해도 거래 내역은 보존됨 |
✍️트랜잭션 격리수준(Transaction Isolation Level)
동시에 여러 트랜잭션이 처리될 때, 트랜잭션끼리 얼마나 서로 고립되어 있는지를 나타냄
- Read Uncommitted (가장 낮은 격리수준)
- 다른 트랜잭션에 의해 커밋되지 않은 데이터를 읽을 수 있음
- Dirty Read, Non-Repeatable Read, Phantom Read 모두 발생 가능
- 성능은 가장 좋지만, 데이터 일관성이 가장 낮음
- Read Committed
- 커밋된 데이터만 읽을 수 있음
- Dirty Read 방지, 하지만 Non-Repeatable Read와 Phantom Read는 여전히 발생 가능
- 대부분의 데이터베이스 시스템의 기본 격리수준
- Repeatable Read
- 트랜잭션이 시작되기 전에 커밋된 내용에 대해서만 조회 가능
- Dirty Read, Non-Repeatable Read 방지, 하지만 Phantom Read는 여전히 발생 가능
- 동일한 쿼리를 실행했을 때 항상 같은 결과를 보장
- Serializable (가장 높은 격리수준)
- 가장 엄격한 격리수준으로, 완벽한 읽기 일관성 제공
- Dirty Read, Non-Repeatable Read, Phantom Read 모두 방지
- 성능은 가장 낮지만, 데이터 일관성이 가장 높음
- Dirty Read: 커밋되지 않은 데이터를 읽는 현상
- Non-Repeatable Read: 같은 쿼리를 여러 번 실행했을 때 결과가 다른 현상
- Phantom Read: 같은 쿼리를 여러 번 실행했을 때 이전에 없던 레코드가 나타나는 현상
| Isolation Level | Dirty Read | Non-Repeatable Read | Phantom Read |
|---|---|---|---|
| Read Uncommitted | ○ | ○ | ○ |
| Consistency | - | ○ | ○ |
| Isolation | - | - | ○ |
| Durability | - | - | - |

| 연산 | 설명 |
|---|---|
| redo (재실행) | 가장 최근에 저장한 데이터베이스 복사본을 가져온 후 로그를 이용해 복사본이 만들어진 이후에 실행된 모든 변경 연산을 재실행하여 장애가 발생하기 직전의 데이터베이스 상태로 복구 (전반적으로 손상된 경우에 주로 사용) |
| undo (취소) | 로그를 이용해 지금까지 실행된 모든 변경 연산을 취소하여 데이터베이스를 원래의 상태로 복구 (변경 중이었거나 이미 변경된 내용만 신뢰성을 잃은 경우에 주로 사용) |