1. 트랜잭션의 개념 및 특징 (ACID) ★★★
트랜잭션은 데이터베이스의 상태를 변화시키는 하나의 논리적 작업 단위다.
| 특징 | 설명 | 비고 |
| 원자성 (Atomicity) | 트랜잭션의 연산은 모두 반영되거나, 전혀 반영되지 않아야 함 (All or Nothing) | 회복(Recovery) 관련 |
| 일관성 (Consistency) | 실행 완료 후 DB는 언제나 일관된 상태를 유지해야 함 | 무결성 제약 조건 등 |
| 고립성 (Isolation) | 실행 중인 트랜잭션에 다른 트랜잭션이 끼어들 수 없음 | 병행 제어 관련 |
| 영속성 (Durability) | 성공 완료된 결과는 시스템 장애가 발생해도 영구적으로 보존됨 | 회복 관련 |
2. 트랜잭션의 상태 ★
- Active (활동): 실행 중인 상태
- Partially Committed (부분 완료): 마지막 연산 종료 후 Commit 직전 상태
- Committed (완료): 성공적 종료 후 변경 내용 DB 반영
- Failed (실패): 장애 발생으로 중단된 상태
- Aborted (철회): 트랜잭션 취소 및 수행 전 상태로 복구(Rollback)
3. 병행 제어 (Concurrency Control) ★★★
다수의 트랜잭션이 동시에 실행될 때 일관성을 해치지 않도록 제어하는 기술이다.
병행 제어 미비 시 문제점 (반드시 암기)
- 갱신 분실 (Lost Update): 이전 트랜잭션의 수정 내용이 덮어써짐
- 모순성 (Inconsistency): 여러 트랜잭션이 동시 실행되어 데이터 불일치 발생
- 연쇄 복구 불가능 (Cascading Rollback): 한 트랜잭션 취소 시 다른 트랜잭션도 취소해야 하는데 불가능한 상황
- 비완료 의존성 (Dirty Read): 실패한 트랜잭션이 쓴 데이터를 다른 트랜잭션이 읽음
병행 제어 기법
- 로킹 (Locking): 데이터에 접근 전 Lock을 획득하고 종료 후 Unlock
- 2단계 로킹 규약 (2-Phase Locking): 확장 단계(Lock만 가능)와 수축 단계(Unlock만 가능)로 구분하여 직렬성 보장. 교착상태(Deadlock) 발생 가능성 존재.
- 타임스탬프 순서 (Timestamp Ordering): 시스템이 부여한 시간표(Timestamp) 순서대로 실행. 교착상태 미발생.
- 낙관적 검증 (Optimistic Validation): 일단 실행 후 종료 시점에 검증.
- 다중 버전 병행 제어 (MVCC): 데이터의 여러 버전을 관리하여 판독 성능 향상.
4. 회복 (Recovery) ★★
트랜잭션 실행 중 장애 발생 시 이전의 일관된 상태로 되돌리는 기법.
로그 기반 회복 기법
- 지연 갱신 (Deferred Update): 트랜잭션 완료(Commit) 전까지 DB에 기록하지 않고 로그에만 저장. Redo만 가능.
- 즉시 갱신 (Immediate Update): 연산 중 즉시 DB에 반영. 로그를 통해 Redo와 Undo 모두 가능.
주요 명령어
- Redo (재실행): 로그를 이용해 실패한 트랜잭션 결과를 재적용 (Commit된 경우)
- Undo (취소): 로그를 이용해 변경된 내용을 원래대로 복구 (Commit 안 된 경우)
5. 트랜잭션 고립 수준 (Isolation Level) ★★
표준 SQL(ISO/ANSI)에서 정의한 고립 수준이다. 아래로 갈수록 고립성 강도와 오버헤드가 증가한다.
- Read Uncommitted: 커밋되지 않은 데이터도 읽음 (Dirty Read 발생)
- Read Committed: 커밋된 데이터만 읽음 (대부분 DB 기본 설정)
- Repeatable Read: 트랜잭션 내 동일 데이터 재판독 시 결과 동일 보장
- Serializable: 가장 엄격. 트랜잭션 직렬화 실행
특히 ACID 특징, 병행 제어 미비 시의 문제점, 2단계 로킹 규약은 매년 출제되는 단골 문제다.
'Data Science > SQL' 카테고리의 다른 글
| 데이터베이스 시스템 아키텍처 | 구동 방식 비교(터미널,신/제로 클라이언트) (0) | 2026.03.29 |
|---|---|
| [SQL] 공기업/공공기관 통계직렬 전공시험 대비, DB 핵심 요약 (0) | 2026.02.28 |
| [SQL/오답] 학습 경로 분석: LEAD 함수를 이용한 연속 과목 쌍 찾기 (Leetcode3764 Hard) (0) | 2026.02.20 |
| [SQL/오답] 연속 행동 패턴 분석: 그룹화 기법(DATE_SUB)을 활용한 스트릭 계산 (Leetcode3832 Hard) (0) | 2026.02.20 |
| [SQL/오답] 유저별 지배적 반응과 비율 계산 (Leetcode3808 Medium) (0) | 2026.02.20 |