회복과 병행 제어 (Recovery and Concurrency Control)
데이터베이스 관리 시스템(DBMS)에서 트랜잭션(Transaction)은 하나의 작업을 수행하기 위해 필요한 여러 연산들의 집합을 의미합니다. 이러한 트랜잭션이 안정적이고 일관성 있게 실행되도록 하기 위해서는 회복 기법과 병행 제어가 매우 중요합니다.
트랜잭션의 4대 특성 (ACID)
- 원자성 (Atomicity) : 트랜잭션 내의 모든 연산은 전부 수행되거나 전혀 수행되지 않아야 합니다.
장애가 발생하면 수행 중인 모든 작업이 취소(rollback)되어야 하며, 'all-or-nothing' 원칙이라 합니다. - 일관성 (Consistency) : 트랜잭션이 완료된 후에도 데이터베이스는 항상 일관된 상태여야 합니다.
예를 들어, 은행 계좌 이체 시 이전과 이후의 전체 잔액 합계가 변하지 않아야 합니다. - 격리성 (Isolation) : 동시에 수행되는 트랜잭션들은 서로 간섭하지 않아야 합니다.
한 트랜잭션이 완료될 때까지 다른 트랜잭션이 그 데이터를 접근하지 못하게 합니다. - 지속성 (Durability) : 성공적으로 완료된 트랜잭션의 결과는 영구적으로 저장되어야 하며, 시스템 장애가 발생해도 유지되어야 합니다.
트랜잭션 주요 연산
- commit : 트랜잭션 작업 완료 및 변경 내용을 확정
- rollback : 트랜잭션 작업 취소, 장애 발생 시 변경 내용 모두 되돌림
트랜잭션 장애 원인
- 처리 대상 데이터 부재 (예: 삭제된 데이터 접근)
- 잘못된 데이터 입력
- 논리적 연산 오류
데이터베이스 시스템 장애 유형
- 트랜잭션 장애 : 트랜잭션 자체 오류
- 시스템 장애 : 운영체제나 DBMS 다운
- 미디어 장애 : 저장장치 고장
저장장치 종류
- 휘발성 저장장치 : 전원이 꺼지면 데이터 소실 (예: RAM)
- 비휘발성 저장장치 : 전원과 상관없이 데이터 유지 (예: 하드디스크, SSD)
- 안정 저장장치 : 데이터 안정적으로 보관
데이터베이스 회복기법
로그(Log)와 덤프(Dump)
Dump : 전체 데이터베이스 내용을 일정 주기로 다른 저장장치에 백업합니다.
Log : 트랜잭션 실행 시 이전 값과 새로운 값을 별도 파일에 기록해, 장애 시 복구에 사용됩니다.
회복 연산
- Redo (재실행) : 트랜잭션을 처음부터 다시 실행하여 변경 내용을 반영
- Undo (취소) : 로그를 따라 장애 전 상태로 복구
로그 회복기법 종류
1. 즉시 갱신 회복기법 (Immediate Update)
- 트랜잭션 수행 도중에도 로그를 바로 기록
- 트랜잭션 완료 전 장애 발생 시 → Undo 수행
- 트랜잭션 완료 후 장애 발생 시 → Redo 수행
2. 지연 갱신 회복기법 (Deferred Update)
- 트랜잭션 완료 전에는 로그 기록 내용을 무시하고 버림 (Commit이 안 되었으므로)
- 트랜잭션 완료 후 장애 발생 시 → Redo 수행
검사시점 회복기법 (Checkpoint)
주기적으로 검사시점을 만들어 시스템 상태를 저장하고, 장애 발생 시 이 검사시점 이후부터 복구를 시작합니다. 이로 인해 복구 시간과 부하가 줄어듭니다.
미디어 회복기법
일정 주기로 전체 데이터베이스를 백업하여 미디어 장애 발생 시 복원합니다.
병행 수행 (Concurrency Control)
여러 트랜잭션이 동시에 수행되면 처리 시간이 단축되지만, 데이터의 갱신 분실, 모순, 연쇄 복귀와 같은 문제도 발생할 수 있습니다.
- 갱신 분실 : 두 트랜잭션이 같은 데이터를 수정하면서 한쪽의 변경이 덮어써 짐
- 모순성 : 동시 처리 결과 데이터가 일관성을 잃음
- 연쇄 복귀 : 한 트랜잭션의 rollback이 다른 트랜잭션까지 영향을 미침
스케줄 종류
- 직렬 스케줄 : 트랜잭션들이 순차적으로 실행됨
- 비직렬(병행) 스케줄 : 트랜잭션들이 동시에 실행됨
로킹(Locking) 기법
데이터에 대한 공용 Lock(Shared Lock)과 전용 Lock(Exclusive Lock)을 통해 동시 접근을 제어합니다.
Lock 종류 | 다른 트랜잭션의 READ 허용 여부 | 다른 트랜잭션의 WRITE 허용 여부 |
---|---|---|
공용 Lock (Shared Lock) | O (허용) | X (불허) |
전용 Lock (Exclusive Lock) | X (불허) | X (불허) |
Deadlock (교착상태) : 두 개 이상의 트랜잭션이 서로 상대방이 해제해주길 기다리며 무한 대기하는 상태를 말합니다.
예를 들어, 트랜잭션 A가 자원 1을 점유하고 자원 2를 기다리는 동안, 트랜잭션 B는 자원 2를 점유하고 자원 1을 기다리면 서로 대기 상태에 빠집니다.
참고 용어 정리
- input(), output() : 하드디스크에서 데이터를 읽고 쓰는 연산
- read(), write() : 프로그램 내부에서 데이터를 읽고 쓰는 연산
- 확장 단계 : 트랜잭션이 Lock만 설정 가능하며, Unlock은 불가능한 단계
- 축소 단계 : Unlock만 가능하며, 새로운 Lock 설정은 불가능한 단계
본 글은 데이터베이스 트랜잭션 관리의 핵심 개념인 회복 기법과 병행 제어에 대해 상세히 정리한 내용입니다. 트랜잭션의 안정성과 효율성을 위한 기본 원칙과 기술들을 이해하는 데 도움이 되길 바랍니다.
'공부 > 데이터베이스' 카테고리의 다른 글
[데이터베이스] DB 데이터베이스 권한 관리 완벽 정리 (0) | 2025.06.15 |
---|---|
[데이터베이스] DB 정규화 (Normalization) (0) | 2025.06.15 |
[데이터베이스] DB 데이터베이스 설계 및 인덱싱 완벽 정리 (2) | 2025.06.15 |
[데이터베이스] DB DML 심화 – 집계, 조인, 서브쿼리, 뷰 (0) | 2025.06.15 |
[데이터베이스] DB DML 기본 – INSERT & SELECT (0) | 2025.06.15 |