CS

CS 스터디 (DB) 23 - 트랜잭션의 특성은 무엇인가요?

gentle-tiger 2025. 5. 23. 14:26

트랜잭션이란? 

- 트랜잭션은 데이터베이스에서 하나의 논리적인 작업 단위를 구성하는 연산들의 집합입니다. 

- 트랜잭션은 반드시 모두 성공하거나, 전부 실패(롤백) 해야 하며, 이를 통해 데이터의 정합성과 안정성을 유지합니다.

 

트랜잭션의 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는 커밋된 변경 내용을 기록해 장애 발생 시 복구를 가능하게 하며, 트랜잭션 커밋 시 즉시 디스크에 기록되도록 설정하는 것이 권장됩니다.