데이터베이스에서 트랜잭션 관리는 필수적인 요소이다. 데이터의 무결성을 유지하고, 동시 접근을 효율적으로 제어하며, 장애 발생 시 복구할 수 있도록 설계해야 한다. 이를 위해 트랜잭션 관리 방안을 수립하는 것이 중요하다. 이번 포스팅에서는 트랜잭션 개념과 트랜잭션 관리 방안, 그리고 트랜잭션의 상태 변화까지 알아보고자 한다!
ㅁ트랜잭션(transaction): 데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위
(트랜잭션 관리의 중요성)
하나의 트랜잭션은 여러 개의 작업(쿼리)으로 구성될 수 있으며, 모든 작업이 성공적으로 완료되어야만 데이터베이스에 반영된다. 트랜잭션 관리를 통해 다음과 같은 기능을 제공할 수 있다.
- 데이터 무결성 유지
- 동시 접근 제어(락을 사용)
- 장애 발생 시 복구 기능 제공
ACID 속성
트랜잭션이 올바르게 수행되기 위해서는 ACID 속성을 준수해야 한다. ACID는 다음 네 가지 속성으로 구성된다.
- 원자성(Atomicity): 트랜잭션의 모든 연산이 완전히 수행되거나 전혀 수행되지 않아야 한다
- 일관성(Consistency): 트랜잭션이 실행된 후에도 데이터베이스가 일관된 상태를 유지해야 한다
- 격리성(Isolation): 동시에 실행되는 트랜잭션이 서로 영향을 주지 않아야 한다
- 지속성(Durability): 트랜잭션이 완료된 후에도 결과가 영구적으로 저장되어야 한다
트랜잭션 제어 기능들
트랜잭션을 효과적으로 관리하기 위해 다양한 트랜잭션 제어 기능을 제공한다. 대표적인 트랜잭션 제어 기능은 다음과 같다.
1. 트랜잭션 시작과 종료
- BEGIN TRANSACTION: 트랜잭션의 시작을 명시적으로 선언한다.
- 커밋(COMMIT): 모든 작업을 정상적으로 수행한 후 변경 사항을 데이터베이스에 영구적으로 반영한다.
- 롤백(ROLLBACK): 오류 발생 시 변경 사항을 취소하고 트랜잭션을 초기 상태로 되돌린다.
※ 트랜잭션의 상태 변화
트랜잭션은 수행 중 특정 상태를 거치며 최종적으로 커밋되거나 롤백된다. 각각의 상태에서 데이터의 접근성과 잠금 상태가 다르게 동작한다.
① 커밋(Commit) 혹은 롤백(Rollback) 하기 전 상태
- 모든 데이터의 변경 사항은 데이터베이스 버퍼(Database Buffer)에 저장된다.
- 현재 트랜잭션을 수행하는 사용자는 자신이 변경한 데이터를 SELECT 문을 통해 볼 수 있지만 "다른 사용자는 그 변경된 내용을 확인할 수 없다"
- 트랜잭션이 변경한 데이터(Row)는 잠금(Lock) 상태에 놓이며, 다른 사용자가 해당 데이터를 수정할 수 없다.
- 이러한 방식은 Row Level Locking Mechanism을 기반으로 한다.
② 커밋(Commit) 한 후의 상태
- 트랜잭션 내에서 변경된 데이터가 데이터베이스에 영구적으로 반영된다.
- "다른 모든 사용자가 해당 데이터를 조회할 수 있다"
- 해당 데이터(Row)에 설정된 잠금(Lock)이 해제된다.
2. 동시성 제어
- 낙관적 동시성 제어(Optimistic Concurrency Control): 트랜잭션 간 충돌이 드물다고 가정하고, 변경 사항을 최종적으로 검증하여 충돌이 발생하면 롤백하는 방식이다.
- 비관적 동시성 제어(Pessimistic Concurrency Control): 트랜잭션이 실행되는 동안 락을 걸어 충돌을 사전에 방지하는 방식이다.
3. 트랜잭션의 격리 수준 설정(성능과 동시성 최적화)
- READ UNCOMMITTED: 커밋되지 않은 데이터를 읽을 수 있어 성능은 좋지만 일관성이 낮다.
- READ COMMITTED: 커밋된 데이터만 읽을 수 있어 데이터의 일관성을 보장한다.
- REPEATABLE READ: 동일한 데이터를 여러 번 조회해도 결과가 변하지 않도록 보장한다.
- SERIALIZABLE: 가장 높은 수준의 격리를 제공하지만 성능이 저하될 수 있다.
트랜잭션 관리는 데이터베이스 시스템의 신뢰성과 성능을 보장하는 중요한 요소이다. ACID 속성을 준수하면서 적절한 트랜잭션 제어 기능을 활용하면 안정적인 데이터베이스 운영이 가능하다! 중요 또 중요
'DBMS > 데이터베이스' 카테고리의 다른 글
[데이터베이스] SQL 연습문제 (0) | 2025.02.06 |
---|---|
[데이터베이스] SQL JOIN문 (0) | 2025.02.06 |
[데이터베이스] 대표적인 데이터 모델링 기법 4가지 (0) | 2025.02.06 |
[데이터베이스] 표준화 명세서와 정규화 과정 (0) | 2025.02.05 |
[데이터베이스] 빅데이터(Big Data) (2) | 2024.07.03 |