DB
Mysql ACID 란?
Lee_SJ
2025. 2. 16. 19:36
1. ACID란 무엇인가?
ACID는 데이터베이스 트랜잭션의 4가지 필수 속성으로, 안정성과 신뢰성을 보장하는 개념입니다.
✅ ACID 4가지 속성
속성 | 설명 | 예시 |
Atomicity (원자성) | 트랜잭션은 모두 반영되거나, 전혀 반영되지 않아야 함 | 송금 중 오류 발생 시, 돈이 빠져나가거나 들어오지 않도록 보장 |
Consistency (일관성) | 데이터베이스의 일관성이 유지되어야 함 | 계좌 이체 후에도 총 금액이 변하지 않아야 함 |
Isolation (고립성) | 여러 트랜잭션이 서로 영향을 주지 않아야 함 | 동시에 같은 계좌에서 출금해도 한 번만 출금됨 |
Durability (지속성) | 트랜잭션이 완료되면 데이터가 영구적으로 저장 | 시스템이 다운되어도 커밋된 데이터는 유지됨 |
2. MySQL이 ACID를 보장하는 방식
MySQL은 InnoDB 스토리지 엔진을 사용하여 ACID를 보장합니다.
MySQL이 ACID를 보장하는 주요 자료구조와 알고리즘을 살펴보겠습니다.
3. Atomicity (원자성) – 트랜잭션 로그 (Redo/Undo Log)
💡 트랜잭션은 부분적으로 실행되지 않으며, 모두 실행되거나 아무것도 실행되지 않아야 함.
✅ MySQL의 원자성 보장 방식
- MySQL은 Undo Log(롤백 로그) 를 사용하여 원자성을 유지합니다.
- 만약 트랜잭션이 실패하면 Undo Log를 통해 이전 상태로 되돌림(Rollback).
📌 자료구조 & 알고리즘
자료구조 | 설명 |
Undo Log (로그 파일) | 변경 전 데이터를 기록하여 롤백 가능하도록 함 |
Write-Ahead Logging (WAL) | 트랜잭션 로그를 먼저 기록 후 실제 데이터 변경 |
📌 트랜잭션 실행 예시
START TRANSACTION; UPDATE accounts SET balance = balance - 100 WHERE id = 1; UPDATE accounts SET balance = balance + 100 WHERE id = 2; COMMIT; -- 모든 작업이 완료되면 반영 |
중간에 장애 발생 시 → Undo Log를 사용하여 롤백!
4. Consistency (일관성) – 데이터 무결성 제약조건
💡 트랜잭션 수행 전후 데이터베이스의 상태가 유지되어야 함.
✅ MySQL의 일관성 보장 방식
- 무결성 제약조건 (Integrity Constraints)
- PRIMARY KEY, FOREIGN KEY, CHECK, UNIQUE 등을 이용하여 데이터의 일관성 유지.
- 트랜잭션 일관성
- 트랜잭션이 실행되기 전과 후의 데이터 상태를 보장.
📌 자료구조 & 알고리즘
자료구조 | 설명 |
B+ Tree (인덱스 구조) | 데이터 정합성을 유지하며 빠르게 조회 가능 |
Foreign Key (외래키 무결성 제약) | 부모-자식 관계를 유지하여 데이터 정합성 보장 |
📌 외래키 제약 조건 예시
CREATE TABLE orders ( id INT PRIMARY KEY, user_id INT, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ); |
사용자가 삭제되면 연결된 orders 데이터도 자동으로 삭제됨 → 데이터 일관성 유지.
5. Isolation (고립성) – 트랜잭션 격리 수준 (Isolation Levels)
💡 각 트랜잭션이 독립적으로 실행되어야 함.
✅ MySQL의 고립성 보장 방식
MySQL은 4가지 트랜잭션 격리 수준(Isolation Level) 을 지원합니다.
- READ UNCOMMITTED: 다른 트랜잭션이 커밋되지 않은 데이터를 읽을 수 있음 (Dirty Read 발생).
- READ COMMITTED: 커밋된 데이터만 읽을 수 있음 (Non-Repeatable Read 발생 가능).
- REPEATABLE READ (기본값): 같은 트랜잭션에서 동일한 데이터를 여러 번 읽어도 변하지 않음 (Phantom Read 발생 가능).
- SERIALIZABLE: 가장 엄격한 격리 수준, 트랜잭션을 순차적으로 실행.
📌 자료구조 & 알고리즘
자료구조 | 설명 |
MVCC (Multi-Version Concurrency Control) | 트랜잭션 간 충돌을 줄이고, 과거 데이터를 관리 |
Row-Level Locking (행 단위 잠금) | 특정 행만 잠가 동시성 문제 해결 |
Gap Lock (갭 락) | REPEATABLE READ에서 팬텀 리드 방지 |
6. Durability (지속성) – Redo Log & Checkpointing
💡 트랜잭션이 성공적으로 완료되면 데이터는 영구적으로 저장됨.
✅ MySQL의 지속성 보장 방식
- Redo Log (재실행 로그) 를 사용하여, 트랜잭션이 커밋된 후에도 데이터를 복구 가능.
- Checkpoint(체크포인트)를 생성하여, Redo Log를 주기적으로 디스크에 기록.
📌 자료구조 & 알고리즘
자료구조 | 설명 |
Redo Log (재실행 로그) | 디스크에 데이터가 저장되기 전, 변경 사항을 기록하여 복구 가능 |
Double Write Buffer (이중 기록 버퍼) | 데이터 손실 방지를 위해 한 번 더 기록 |
Checkpoint (체크포인트) | 주기적으로 디스크에 저장하여 Redo Log 크기 최소화 |
📌 Redo Log 동작 예시
START TRANSACTION; UPDATE accounts SET balance = balance - 500 WHERE id = 1; COMMIT; -- Redo Log에 기록 후 디스크 반영 |
만약 서버가 다운 되어도 Redo Log를 이용해 데이터 복구 가능!
7. 결론: MySQL의 ACID 보장 방식 요약
ACID 속성 | MySQL 보장 방식 | 자료구조 & 알고리즘 |
Atomicity (원자성) | 트랜잭션 실패 시 롤백 | Undo Log, WAL |
Consistency (일관성) | 무결성 제약 유지 | B+ Tree, Foreign Key |
Isolation (고립성) | 트랜잭션 격리 수준 제공 | MVCC, Row Locking, Gap Lock |
Durability (지속성) | 트랜잭션 커밋 후 영구 저장 | Redo Log, Checkpoint |