CKtrace's Devlog
[DB] - 트랜잭션 본문
Concept of Transaction
트랜잭션, Transaction은 작업 하나를 수행하기 위해 필요한 DB의 연산들을 모아놓은 것으로 DB에서 논리적인 작업의 단위가 되며, DB에 장애가 발생했을 때 데이터를 복구하는 작업의 단위 또한 됩니다.
대게 DB 연산은 SQL 문으로 표현되기 때문에 트랜잭션을 작업 수행에 필요한 SQL 문들의 집합으로 생각해도 됩니다.
Why transactions are needed?
그 이유는 바로 트랜잭션을 관리함을 통해 DB의 회복과 병행 제어가 가능해져,
결과적으로 DB가 일관된 상태를 유지 가능하게 해 주기 때문입니다.
트랜잭션으로 관리하는 것들에는 데이터를 DB에 삽입하기 위한 INSERT 문, DB에 저장된 데이터를 삭제하기 위한 DELETE 문, DB의 데이터를 수정하기 위한 UPDATE 문이 존재합니다.
Characteristics of Transactions
위 그림과 같이 트랜잭션이 성공적으로 처리되어 DB의 무결성과 일관성이 보장되기 위해서는 네 가지 특성을 무조건 만족해야 합니다.
위 네 가지 특성인 원자성, 일관성, 격리성, 지속성을 ACID라 합니다.
- ACID에서 A에 해당하는 Atomicity(원자성) → 구성하는 연산들이 모두 정상적으로 실행되거나 하나도 실행되지 않아야 하는 all-or-nothing 방식 의미하며, 이것은 트랜잭션을 수행하다 장애가 발생해 작업 완료 실패라면 작업을 시도하며 처리했던 연산들을 모두 취소하고 DB를 트랜잭션 작업 전의 상태로 되돌리는 것입니다.
- ACID에서 C에 해당하는 Consistency(일관성) → 트랜잭션이 성공적으로 작업을 수행한 후에도 DB가 일관된 상태를 유지해야 하는 것을 의미합니다.
- ACID에서 I에 해당하는 Isolation(격리성) → 현재 수행 중인 트랜잭션이 작업을 완료할 떄까지 트랜잭션이 생성한 중간 연산 결과에 다른 트랜잭션들에게 접근 권한이 없다는 것을 의미합니다.
- ACID에서 D에 해당하는 Durability(지속성) → 트랜잭션이 성공적으로 작업을 완료한 후 DB에 반영한 수행 결과는 어떠한 경우에도 손실되지 않고 영구적이어야 함을 의미하며 이것은 시스템에 장애가 발생해도 트랜잭션 작업 결과는 소멸되지 않고 DB에 그대로 남아 있어야 한다는 것입니다.
Operations of Transaction
트랜잭션의 수행과 관련해 자주 사용되는 연산에는 commit 연산(작업 완료를 의미), rollback 연산(작업 취소를 의미)이 있습니다.
commit 연산
→ Transaction이 성공적으로 작업을 수행되었음을 선언하는 연산
→ commit 연산이 실행된 후에야 트랜잭션의 수행 결과가 DB에 반영되어 DB가 일관된 상태를 지속적으로
유지하게 됩니다.
rollback 연산
→ Transaction이 작업을 실패했음을 선언하는 연산
→ rollback 연산이 실행된 후에는 Transaction이 지금까지 실행한 연산의 결과가 취소되고 실행 이전의 상태로
돌아갑니다. (모순 발생 방지)
Status of Transaction
위 그림은 트랜잭션의 다섯 가지의 상태를 보여줍니다.
트랜잭션의 다섯 가지 상태는 아래와 같이 존재합니다.
- 활동 상태
- 부분 완료 상태
- 완료 상태
- 실패 상태
- 철회 상태
각 상태에 대해 하나씩 알아보도록 하겠습니다.
1. Active Status
Transaction이 수행되기 시작한 후 현재 수행 중인 상태를 Active status, 활동 상태라고 합니다.
활동 상태로 존재하는 Transaction은 상황에 따라 부분 완료 상태나 실패 상태가 됩니다.
2. Partially Committed Status
Transaction의 마지막 연산이 실행된 이후의 상태를 Partially Committed Status, 부분 완료 상태라고 합니다.
이 상태의 Transaction은 모든 연산의 처리가 끝났지만 트랜잭션이 수행된 최종적인 결과가 DB에 반영되지 않은 상태입니다.
3. Committed Status
Transaction이 성공적으로 작업이 완료되어 commit 연산을 실행한 상태를 Committed Status, 완료 상태라고 합니다.
부분 완료 상태와 달리, 트랜잭션이 이 상태가 되면 트랜잭션이 수행한 최종 결과를 DB에 반영되며, 새로운 일관된 상태가 되면서 트랜잭션 종료가 이루어집니다.
4. Failed Status
여러 이유로 장애가 발생해 트랜잭션의 수행이 중단된 상태를 Failed Status, 실패 상태라고 합니다.
트랜잭션을 더이상 정상적으로 수행 불가능할 때 실패 상태가 됩니다.
5. Aborted Status
Transaction을 수행하는 데 실패해 rollback 연산을 실행한 상태를 Aborted Status, 철회 상태라고 합니다.
이 상태가 되면 여태껏 실행한 Transaction 연산을 모두 취소하고 Transaction이 수행되기 전의 DB 상태로 되돌리면서 Transaction이 종료됩니다.
이상으로 트랜잭션에 대한 글을 마치도록 하겠습니다.
긴 글이었지만 읽어주셔서 감사하다는 말씀드리며, 다음에는 더 좋은 글로 찾아뵙도록 하겠습니다!
감사합니다.
'DB' 카테고리의 다른 글
[DB] - 정규화 (0) | 2022.06.29 |
---|---|
[DB] - 함수 종속 (0) | 2022.06.28 |
[DB] - 데이터베이스 설계 및 이상 현상 (0) | 2022.06.27 |
[DB] - 삽입 SQL (ESQL) (0) | 2022.06.27 |
[DB] - 뷰 (0) | 2022.06.27 |