CS 스터디 (DB) 23 - 트랜잭션의 특성은 무엇인가요?
트랜잭션이란?
- 트랜잭션은 데이터베이스에서 하나의 논리적인 작업 단위를 구성하는 연산들의 집합입니다.
- 트랜잭션은 반드시 모두 성공하거나, 전부 실패(롤백) 해야 하며, 이를 통해 데이터의 정합성과 안정성을 유지합니다.
트랜잭션의 4가지 특성 (ACID)
- Atomicity(원자성): 트랜잭션 내의 모든 작업이 성공적으로 수행되거나 모두 롤백됩니다.
- Consistency(일관성): 트랜잭션 전후 데이터는 항상 정의된 규칙(제약조건 등)을 만족해야 합니다.
- Isolation(격리성): 트랜잭션이 진행 중인 데이터는 다른 작업에서 볼 수 없습니다.
- Durability(지속성): 트랜잭션이 커밋되면, 그 결과는 시스템이 장애를 겪더라도 절대 사라지지 않아야 합니다.
영속성을 보장하는 방법
- 영속성은 커밋된 트랜잭션의 결과가 시스템 장애 후에도 유지됨을 보장하는 것입니다.
- 이를 위해 DBMS는 WAL(Write-Ahead Logging) 전략을 사용합니다.
WAL(Write-Ahead-Loggin)란?
변경 내용을 데이터 파일에 쓰기 전에 트랜잭션 로그(redo log)에 먼저 기록한 후 COMMIT 수행합니다. 이는 시스템이 장애로 중단되더라도 로그를 기반으로 복구가 가능하다는 장점이 있습니다.
DBMS별 WAL 적용 방식
- 대부분의 주요 DBMS는 WAL 또는 유사한 로그 기반 전략을 통해 트랜잭션의 영속성과 복구 기능을 구현하고 있습니다.
DBMS | WAL 구현 방식 |
PostgreSQL | pg_wal/ 디렉토리 |
Oracle | redo log, archive log, undo tablespace |
MySQL (InnoDB) | redo log, undo log |
SQL Server | Transaction Log |
Redo Log vs Undo Log
항목 | redo log (앞으로 갈 준비) | undo log (뒤로 갈 준비) |
목적 | 커밋된 변경사항을 복구 (재적용) | 롤백을 위한 이전 상태 보관 |
쓰는 시점 | 변경 직후 | 변경 전에 이전 값 백 |
사용 시점 | 장애 복구 | 롤백, MVCC 스냅샷 조회 시 |
물리적/논리적 | 물리적 로그 (Page 단위) | 논리적 로그 (Row 단위) |
InnoDB 저장 위치 | ib_logfile0/1 → redo log file | undo segment (테이블스페이스 내부) |
- Undo log는 INSERT, UPDATE, DELETE 로 변경되기 전의 데이터를 백업하며, MVCC를 구현, 트랜잭션 격리 유지와 롤백에 사용됩니다.
- Redo log는 커밋된 변경 내용을 기록해 장애 발생 시 복구를 가능하게 하며, 트랜잭션 커밋 시 즉시 디스크에 기록되도록 설정하는 것이 권장됩니다.