테마
트랜잭션과 회복
트랜잭션(transaction)은 데이터베이스 상태를 바꾸는 논리적 작업 단위다. 계좌 이체처럼 여러 번의 읽기·쓰기가 한 덩어리로 성공하거나 한꺼번에 취소되어야 하는 일을 묶는다. 회복(recovery)은 장애가 나서 데이터베이스가 손상됐을 때 장애 이전의 정상 상태로 되돌리는 작업이다. 실기 시험은 ACID 네 특성의 이름과 뜻, REDO와 UNDO의 구분, 회복 기법의 이름, RTO와 RPO를 묻는다.
ACID
트랜잭션은 네 성질을 지켜야 하며 머리글자를 따서 ACID라 한다. 이 성질이 없으면 이체 도중 장애로 돈이 한쪽에서만 빠질 수 있다.
| 특성 | 뜻 |
|---|---|
| 원자성 | 모두 반영(커밋, commit)되거나 전혀 반영되지 않아야(롤백, rollback) 한다 |
| 일관성 | 실행을 마치면 언제나 제약 조건을 지키는 일관된 상태가 된다 |
| 독립성 | 동시에 실행되는 다른 트랜잭션이 끼어들 수 없다 |
| 영속성 | 완료된 결과는 시스템이 고장 나도 남는다 |
원자성은 Atomicity, 일관성은 Consistency, 독립성은 Isolation, 영속성은 Durability다. 독립성은 격리성, 영속성은 지속성이라고도 부른다.
REDO와 UNDO
회복은 로그(log)를 이용한다. 로그는 트랜잭션이 언제 시작했고 어떤 항목을 어떤 값에서 어떤 값으로 바꿨는지, 언제 커밋했는지를 차례로 적은 기록이다. 장애 뒤 DBMS(DataBase Management System, 데이터베이스 관리 시스템)는 로그를 보고 트랜잭션마다 두 작업 중 하나를 고른다.
| 작업 | 대상 | 하는 일 |
|---|---|---|
| REDO 재실행 | 로그에 시작과 커밋이 모두 있는 트랜잭션 | 이전 값을 이후 값으로 다시 쓴다 |
| UNDO 취소 | 시작은 있지만 커밋이 없는 트랜잭션 | 이후 값을 이전 값으로 되돌린다 |
커밋된 작업은 영속성 때문에 살리고, 끝나지 않은 작업은 원자성 때문에 없던 일로 만든다.
회복 기법
| 기법 | 방식 | 필요한 작업 |
|---|---|---|
| 즉시 갱신(immediate update) | 부분 완료 전이라도 변경을 바로 DB에 반영 | REDO와 UNDO |
| 지연 갱신(deferred update) | 커밋될 때까지 DB 반영을 미룸 | REDO만 |
| 검사점 | 로그에 검사점을 기록해 두고 그 뒤부터만 회복 | REDO와 UNDO |
| 그림자 페이징 | 원래 페이지를 그림자로 두고 사본에만 쓰다가 장애 시 그림자로 복귀 | UNDO 불필요 |
즉시 갱신(immediate update)은 커밋 전에 DB가 바뀔 수 있어 UNDO가 필요하고, 지연 갱신(deferred update)은 커밋 전에는 DB를 건드리지 않아 REDO만 한다. 검사점(checkpoint) 기법은 로그 전체를 훑지 않고 마지막 검사점 이후만 보면 되므로 회복 시간이 줄어든다. 그림자 페이징(shadow paging)은 로그 기반 회복을 대신하는 방식이라 로그 없이 회복하고 UNDO도 필요 없다. 다만 동시에 실행되는 트랜잭션이 같은 페이지 표를 고치면 충돌하기 쉬워 트랜잭션을 하나씩 차례로 실행할 때 알맞다. 시험에서는 즉시 갱신을 즉각 갱신, 지연 갱신을 연기 갱신, 검사점을 체크포인트, 그림자 페이징을 그림자 페이지 대체라고도 부른다.
RTO와 RPO
재해 복구 계획에서 "얼마나 빨리, 어디까지" 되살릴지를 숫자로 정하는 두 지표가 있다.
| 지표 | 뜻 | 예 |
|---|---|---|
| RTO | 중단 시점부터 복구되어 다시 가동될 때까지 허용 시간 | 장애 후 4시간 안에 복구 |
| RPO | 복구했을 때 데이터를 되살릴 수 있는 기준 시점 | 1시간 전 백업 시점까지 복구 |
RTO(Recovery Time Objective, 목표 복구 시간)는 시간의 길이이고, RPO(Recovery Point Objective, 목표 복구 시점)는 데이터 손실을 얼마까지 감수할지를 정하는 시점이다. RPO가 1시간이면 최대 1시간 분량의 데이터를 잃을 수 있다는 뜻이다.
시험 포인트
- ACID: 원자성·일관성·독립성·영속성. "모두 반영되거나 전혀 반영되지 않음" → 원자성.
- 로그에 시작과 커밋이 있으면 REDO, 시작만 있으면 UNDO.
- "트랜잭션이 부분 완료되기 전이라도 즉시 DB에 반영" → 즉시(즉각) 갱신, REDO·UNDO 모두 사용. 지연(연기) 갱신은 REDO만.
- "업무 중단 후 복구되어 가동될 때까지의 시간" → RTO. "데이터를 복구할 수 있는 기준점" → RPO.
