토픽 214 / 224·비교표
무결성, 트랜잭션, 병행제어
선언적 무결성 vs 절차적 무결성
| 항목 | 선언적 무결성 | 절차적 무결성 |
|---|---|---|
| 구현 | DDL 제약조건(PK, FK, CHECK) | 트리거, 프로시저 |
| 장점 | 간단, 성능 우수 | 유연, 복잡 규칙 |
| 단점 | 복잡 규칙 표현 한계 | 구현 복잡, 성능 부하 |
참조동작: CASCADE vs RESTRICT vs SET NULL
| 항목 | CASCADE | RESTRICT | SET NULL |
|---|---|---|---|
| 동작 | 자식 연쇄 삭제/수정 | 자식 존재 시 거부 | 자식 FK를 NULL로 |
| 안전성 | 위험(연쇄 삭제) | 안전(거부) | 중간(NULL 허용 시) |
| 적합 | 강한 종속 관계 | 참조 보호 | 선택적 관계 |
ACID vs BASE
| 항목 | ACID | BASE |
|---|---|---|
| 적용 | RDBMS | NoSQL/분산 시스템 |
| 일관성 | 강한 일관성(즉시) | 최종 일관성(지연) |
| 가용성 | 트랜잭션 중 제한 | 기본 가용성 우선 |
| 상태 | 확정적(Committed) | 소프트 상태(변할 수 있음) |
| 적합 | 금융, 결제 | SNS, 이커머스 장바구니 |
격리수준: Read Uncommitted → Serializable
| 항목 | Read Uncommitted | Read Committed | Repeatable Read | Serializable |
|---|---|---|---|---|
| Dirty Read | 발생 | 방지 | 방지 | 방지 |
| Non-Repeatable | 발생 | 발생 | 방지 | 방지 |
| Phantom Read | 발생 | 발생 | 발생 | 방지 |
| 동시성 | 최대 | 높음 | 중간 | 최저 |
| 기본 설정 | - | Oracle, PG | MySQL InnoDB | - |
Dirty Read vs Non-Repeatable Read vs Phantom Read
| 항목 | Dirty Read | Non-Repeatable Read | Phantom Read |
|---|---|---|---|
| 원인 | 미커밋 데이터 읽기 | UPDATE 커밋 | INSERT/DELETE 커밋 |
| 변화 | 유령 데이터 | 같은 행 값 변경 | 행 수 변경 |
| 위험도 | 가장 심각 | 중간 | 범위 쿼리 영향 |
| 방지 수준 | Read Committed 이상 | Repeatable Read 이상 | Serializable |
비관적 vs 낙관적 vs MVCC 동시성 제어
| 항목 | 비관적(Pessimistic) | 낙관적(Optimistic) | MVCC |
|---|---|---|---|
| 가정 | 충돌 빈번 | 충돌 드묾 | - |
| 잠금 | 사전 잠금(Lock) | 잠금 없음, 사후 검증 | 읽기 무잠금 |
| 충돌 처리 | 차단(대기) | 커밋 시 롤백 | 버전 관리 |
| 동시성 | 낮음 | 높음 | 높음 |
| 적합 | 쓰기 위주 | 읽기 위주 | 범용(현대 DBMS) |
공유락 vs 배타락 vs 의도락
| 항목 | 공유락(S-Lock) | 배타락(X-Lock) | 의도락(Intent Lock) |
|---|---|---|---|
| 용도 | 읽기 보호 | 쓰기 보호 | 테이블 수준 잠금 의도 |
| 다른 읽기 | 허용 | 차단 | 계층적 잠금 관리 |
| 동시성 | 높음 | 낮음 | 충돌 사전 감지 |
2PL 변형: Basic vs Strict vs Rigorous
| 항목 | Basic 2PL | Strict 2PL | Rigorous 2PL |
|---|---|---|---|
| 잠금 유지 | Growing/Shrinking | 배타락 완료까지 유지 | 모든 잠금 완료까지 유지 |
| 연쇄 롤백 | 가능 | 방지 | 방지 |
| 엄격도 | 유연 | 안전 | 가장 엄격 |
| 동시성 | 높음 | 중간 | 최저 |
MVCC vs Locking
| 항목 | MVCC | Locking |
|---|---|---|
| 읽기 잠금 | 불필요(무잠금) | 공유락 필요 |
| 동시성 | 높음 | 낮음 |
| 공간 | 증가(구 버전 유지) | 절약 |
| 정리 | 가비지 컬렉션 필요 | 불필요 |
| 대표 | PostgreSQL, Oracle | 전통적 RDBMS |
Snapshot Isolation vs Serializable
| 항목 | Snapshot Isolation | Serializable |
|---|---|---|
| 읽기 | 스냅샷 기반(무잠금) | 잠금 또는 SSI |
| Write Skew | 허용(비직렬화) | 방지 |
| 성능 | 높음(읽기 무블로킹) | 낮음(잠금/검증 오버헤드) |
| Phantom Read | 방지 | 방지 |
교착상태 해결: 예방 vs 탐지 vs 타임아웃
| 항목 | 예방(Prevention) | 탐지(Detection) | 타임아웃(Timeout) |
|---|---|---|---|
| 방식 | 접근 순서 고정 | Wait-for Graph 순환 | 일정 시간 초과 시 롤백 |
| 시점 | 사전 차단 | 사후 처리 | 사후 처리 |
| 오버헤드 | 높음 | 그래프 분석 비용 | 간단 |
| 정확도 | 높음 | 높음 | 낮음(오판 가능) |
Wait-Die vs Wound-Wait
| 항목 | Wait-Die(비선점) | Wound-Wait(선점) |
|---|---|---|
| Old→Young 요청 | 대기(Wait) | 선점(Young 롤백) |
| Young→Old 요청 | 죽음(자신 롤백) | 대기(Wait) |
| 롤백 대상 | 항상 Young | 항상 Young |
| 특징 | Old이 기다림 | Old이 밀어냄 |
타임스탬프 vs 2PL vs MVCC vs 낙관적 제어
| 항목 | Timestamp Ordering | 2PL | MVCC | 낙관적 |
|---|---|---|---|---|
| 잠금 | 비잠금 | 잠금 기반 | 다버전 | 비잠금 |
| 교착상태 | 없음 | 가능 | 없음 | 없음 |
| 충돌 처리 | 롤백(빈번) | 대기/차단 | 버전 관리 | 사후 검증 |
| 적합 | 읽기 위주 | 범용 | 범용 | 읽기 위주 |
REDO vs UNDO
| 항목 | REDO(재실행) | UNDO(취소) |
|---|---|---|
| 대상 | 커밋된 트랜잭션 | 미완료 트랜잭션 |
| 방향 | Forward Recovery | Backward Recovery |
| 저장 | After Image(변경 후 값) | Before Image(변경 전 값) |
| 용도 | 장애 후 재적용 | 롤백, MVCC 과거 버전 |
WAL vs Shadow Paging
| 항목 | WAL | Shadow Paging |
|---|---|---|
| 방식 | 로그 선행 기록 | 페이지 복사 |
| I/O | 순차 I/O(빠름) | 랜덤 I/O(느림) |
| 성능 | 우수 | 비효율 |
| 채택 | 거의 모든 RDBMS | 레거시 |
전체 체크포인트 vs 퍼지 체크포인트
| 항목 | 전체 체크포인트 | 퍼지 체크포인트 |
|---|---|---|
| 방식 | 모든 더티 페이지 일괄 플러시 | 점진적 플러시 |
| 서비스 | 일시 정지 발생 | 운영 중 수행(무중단) |
| 채택 | 레거시 | 현대 DBMS 표준 |
ARIES vs Shadow Paging vs 즉시갱신
| 항목 | ARIES | Shadow Paging | 즉시갱신 |
|---|---|---|---|
| 방식 | 3단계(Analysis-Redo-Undo) | 페이지 복사 | 로그 기반 |
| 기반 | WAL | 페이지 관리 | WAL |
| 표준 | 사실상 표준 | 단순, 비효율 | 단순 |
Wait-Die (비선점) vs Wound-Wait (선점)
| 구분 | Wait-Die (비선점) | Wound-Wait (선점) |
|---|---|---|
| 제안자 | Rosenkrantz et al. (1978) | Rosenkrantz et al. (1978) |
| Old → Young 요청 | 대기(Wait) | 선점(Wound) — Young을 롤백시킴 |
| Young → Old 요청 | 죽음(Die) — 자신이 롤백 | 대기(Wait) |
| 롤백 대상 | 항상 Young 트랜잭션 | 항상 Young 트랜잭션 |
| 특징 | 비선점, Old이 기다림 | 선점, Old이 밀어냄 |
| 재시작 | 롤백된 Young이 동일 TS로 재시작 | 롤백된 Young이 동일 TS로 재시작 |