[DB 데이터베이스] 트랜잭션 (Transaction) 개념 및 특성
트랜잭션(Transaction)이란?
트랜잭션
이란 데이터베이스의 상태를 변화시키는 한 개의 논리적 작업 단위를 의미합니다.
SQL을 이용하여 데이터베이스에 접근하는 것을 말하는데, 이 때 논리적 작업 단위는 SQL 한 문장을 의미하는 것은 아닙니다.
예를 들어, “포스트를 작성하여 블로그에 올리기”라는 작업을 하나의 트랜잭션으로 볼 수 있습니다.
이는 Insert 문을 사용하여 데이터를 추가하고, Select 문을 통해 블로그의 최신 상태를 유지하는 과정을 포함합니다.
따라서 이 두 가지 작업을 합한 것이 하나의 트랜잭션이라고 할 수 있습니다.
1. 트랜잭션의 성질 (Properties of a Transaction)
1) 원자성 (Atomicity)
한 개의 트랜잭션 연산은 데이터베이스에 모두 반영되거나, 아무것도 반영되지 않아야 함을 보장하는 성질입니다.
→ All or Nothing
즉, 트랜잭션 내에서 한개의 연산이라도 오류가 발생한다면, 해당 트랜잭션은 모두 취소되어야 합니다.
2) 일관성 (Consistency)
트랜잭션이 수행되기 전과 후에 데이터베이스가 일관된 상태를 유지하도록 하는 성질입니다.
즉, 트랜잭션이 시작되기 전에 데이터베이스가 일관된 상태였다면, 트랜잭션 실행 후에도 데이터베이스는 여전히 일관된 상태여야 합니다.
일관성은 데이터 무결성을 유지하며, 데이터베이스의 제약 조건을 항상 만족시켜야 합니다.
3) 독립성 (Isolation)
하나의 트랜잭션이 실행되는 동안 다른 트랜잭션이 해당 연산에 접근할 수 없음을 보장하는 성질입니다.
즉, 수행 중인 트랜잭션이 완료될 때까지, 다른 트랜잭션에서 해당 결과를 참조 할 수 없습니다.
여러 트랜잭션이 동시에 처리 될 때, 각 트랜잭션은 서로 간섭하지 않고 독립적으로 실행되어야 하며, 최종 결과는 임의의 순서대로 트랜잭션들이 수행된 결과와 같아야 합니다.
4) 지속성 (Durability)
지속성은 트랜잭션이 성공적으로 완료되었다면, 그 결과는 영구적으로 반영되어야 함을 보장하는 성질입니다.
시스템에 장애가 발생하더도 해당 결과는 손실되지 않아야 합니다.
지속성은 데이터베이스가 정상적으로 동작하지 않는 경우에도 데이터의 무결성과 일관성을 유지하는 데 필수적입니다.
이 네 가지 속성(원자성
, 일관성
, 독립성
, 지속성
)을 통해 데이터베이스는 트랜잭션 처리 중 발생할 수 있는 다양한 오류와 문제를 효과적으로 관리하고, 데이터 무결성을 유지할 수 있습니다.
2. 트랜잭션의 연산 (Transaction Operations)
Commit
하나의 트랜잭션이 성공적으로 끝나 데이터베이스가 일관된 상태에 있을 때, 관리자에게 작업이 완료되었음을 알려주는 연산입니다.
예를 들어, 은행 계좌 이체 트랜잭션이 성공적으로 완료된 후
Commit
연산이 실행되면, 송금과 입금 모두 데이터베이스에 영구적으로 기록됩니다.
Rollback
트랜잭션이 부분적으로 완료되었거나 비정상적으로 종료되었을 경우, 원자성을 보장하기 위해 해당 트랜잭션이 수행한 모든 연산을 취소하는 연산입니다.
예를 들어, 은행 계좌 이체 중 네트워크 오류로 인해 일부 작업만 완료된 경우
Rollback
연산이 실행되면, 송금과 입금 작업 모두 취소되어 트랜잭션 이전의 상태로 돌아갑니다.
이 두 연산은 데이터베이스 트랜잭션 관리에서 핵심적인 역할을 하며, 시스템의 안정성과 신뢰성을 보장합니다.
트랜잭션이 정상적으로 완료되면 Commit
연산을 통해 데이터가 영구적으로 저장되고, 예외 상황이나 오류가 발생하면 Rollback
연산을 통해 데이터가 안전하게 복원됩니다.
3. 트랜잭션의 상태 (Transaction States)
트랜잭션의 상태는 5가지이며 처리 과정은 아래와 같습니다.
Active (활동)
현재 트랜잭션이 수행 중인 상태입니다.
이 단계에서는 트랜잭션이 시작되어 여러 연산을 수행하고 있으며, 다양한 연산을 통해 데이터를 조작하고 수정합니다.
Failed (실패)
트랜잭션 실행 중 오류가 발생해서 중단된 상태입니다.
오류는 시스템 충돌, 데이터 무결성 위반, 자원 부족 등 다양한 원인으로 발생할 수 있습니다.
이 단계에서는 처리 중이던 연산이 모두 취소됩니다.
Aborted (철회)
트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태입니다.
Rollback 연산은 트랜잭션이 수행한 모든 변경 사항을 취소하고, 데이터베이스를 트랜잭션이 시작되기 전 상태로 되돌립니다.
이는 데이터 무결성을 유지하고 시스템 일관성을 보장하기 위해 필요합니다.
Partially Committed (부분 완료)
트랜잭션 연산이 성공적으로 끝났지만, Commit 연산이 실행되기 전 상태입니다.
이 상태에서는 트랜잭션이 완료될 준비가 되었지만, 최종적으로 데이터를 영구적으로 저장하는 Commit 연산이 실행되기 전 단계입니다.
Committed (완료)
트랜잭션이 성공적으로 종료되어 Commit 연산을 수행한 상태입니다.
Commit 연산은 트랜잭션이 수행한 모든 변경 사항을 데이터베이스에 영구적으로 반영합니다.
이 상태에서는 트랜잭션이 정상적으로 완료되었으며, 모든 변경 사항이 확정됩니다.
Comments powered by Disqus.