데이터베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위로
여기서 데이터베이스의 상태 변화는 SELECT, UPDATE, INSERT, DELETE 와 같은 행동으로
질의어(SQL)를 이용하여 데이터베이스에 접근 하는 것을 의미
여기서 작업의 단위는 질의어 한문장이 아닌
다시말해, 트랜잭션은 데이터베이스의 상태를 변화시키는 기능을 수행하기 위한 하나 이상의 질의문을 모아 놓은 하나의 작업 단위를 뜻함
트랜잭션은 ACID라는 특성을 가지고 있음
ACID
데이터베이스 내에서 일어나는 하나의 트랜잭션의 안전성을 보장하기 위해 필요한 성질로
크게 4가지로 구분됨
1) Atomicity ( 원자성 )
트랜잭션이 안전성 보장을 위해 가져야 할 성질 중의 하나
- 트랜잭션을 구성하는 연산들이 모두 정상적으로 실행되거나 하나도 실행되지 않아야 한다는 all-or-nothing 방식을 의미
- 트랜잭션을 수행하다가 장애가 발생하여 작업을 완료하지 못했다면,
지금까지 실행한 연산들 모두 취소하고 데이터베이스를 트랜잭션 작업 전의 상태로 되돌려 트랜잭션의 원자성을 보장 - 이처럼 트랜잭션의 원자성을 보장하려면 장애가 발생했을 때 데이터베이스의 원래 상태로 복구하는 회복 기능이 필요
2) Consistency ( 일관성 )
데이터베이스의 상태가 일관되어야 한다는 성질
- 트랜잭션이 성공적으로 수행된 후에도 데이터베이스가 일관성 있는 상태를 유지해야 함을 의미
- 즉, 트랜잭션이 수행되기 전에 데이터베이스가 일관된 상태였다면 트랜잭션의 수행이 완료된 후
결과를 반영한 데이터베이스도 또 다른 일관된 상태를 되어야 함 - ex ) 계좌 이체 진행 시 진행 전의 돈의 합과 진행 후의 돈의 합이 같아야 함
3) Isolation ( 격리성 )
모든 트랜잭션은 다른 트랜잭션으로부터 독립되어야 함
- 현재 수행 중인 트랜잭션이 완료될 때까지 트랜잭션이 생성한 중간 연산 결과에 다른 트랜잭션들이 접근할 수 없을 의미
- 시스템에서 여러 트랜잭션이 동시에 수행되지만 각 트랜잭션이 독립적으로 수행될 수 있도록
다른 트랜잭션의 중간 연산 결과에 서로 접근하지 못하게 함 - 이를 통해 사용자들은 트랜잭션들이 동시에 수행되는 거처럼 느끼면서도
순서대로 하니씩 수행되는 것처럼 정확하고 일관된 결과를 얻을 수 있게 됨 - ex ) A가 B에게 500원을 보내고 있는데 다른 트랜잭션이 끼어들어 B에게 돈을 보낼 수 없음
A가 먼저 B에 대한 트랜잭션을 완료한 후에 시행이 됨
4) Durability ( 지속성 )
하나의 트랜잭션이 성공적으로 수행되었다면, 해당 트랜잭션에 대한 로그가 남아야하는 성질
- 트랜잭션이 성공적으로 완료된 후 데이터베이스에 반영한 수행 결과는 어떠한 경우에도 손실되지 않고 영구적이어야 함을 의미
- 시스템에 장애가 발생하더라도 트랜잭션 작업 결과는 없어지지 않고 데이터베이스에 그대로 남아있어야 한다
- 트랜잭션의 지속성을 보장하려면 시스템에 장애가 발생했을 때 데이터베이스를 원래 상태로 복구하는 회복 기능이 필요
DB를 사용할 때 질의문을 날리면 바로 데이터 베이스에 반영이 되는 것이 아닌,
DB에 반영되는 시점은 트랜잭션 연산이 성공적으로 완료되는 시점에 실제 데이터 베이스에 반영이 됨
트랜잭션 연산에는 commit 과 rollback 두 가지 과정이 있음
트랜잭션의 연산
commit 연산
- 한개의 논리적 단위(트랜잭션)에 대한 작업이 성공적으로 끝나 데이터베이스가 다시 일관된 상태에 있을 때,
이 트랜잭션이 행한 갱신 연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산
rollback 연산
- 하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성을 깨뜨렸을 때, 이 트랜잭션의 일부가
정상적으로 처리되었더라도 트랜잭션의 원자성을 구현하기 위해 이 트랜잭션이 행한 모든 연산을 취소(Undo)하는 연산 - Rollback 시에는 해당 트랜잭션을 재시작하거나 폐기함
연산을 수행할 때 크게 5가지 상태가 존재함
트랜잭션의 상태
활성(Active) : 트랜잭션이 정상적으로 실행중인 상태
실패(Failed) : 트랜잭션 실행에 오류가 발생하여 중단된 상태
철회(Aborted) : 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태
부분 완료(Partially Committed) : 트랜잭션의 마지막 연산까지 실행했지만, Commit 연산이 실행되기 직전의 상태
완료(Committed) : 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태
Reference Path
'CS' 카테고리의 다른 글
SQL Injection (0) | 2023.01.09 |
---|---|
교착상태 (Deadlock) (0) | 2023.01.09 |
정규화 (0) | 2022.12.27 |
B+Tree (0) | 2022.12.11 |
Hash / Hash Table (0) | 2022.12.10 |