트랜잭션
트랜잭션은 데이터베이스 내에서 수행되는 작업의 최소 단위로, 데이터베이스의 무결성을 유지하면서 데이터베이스의 상태를 변화시키는 기능을 수행합니다.
필요성
1. 트랜잭션은 데이터베이스에 장애가 발생했을 때 데이터를 복구하는 작업의 단위가 됩니다.
2. 트랜잭션은 다수의 사용자가 동시에 사용할 수 있도록 제어 작업을 하는 데 중요한 단위로 사용됩니다.
따라서 데이터베이스 무결성과 일관성을 보장하려면 작업을 수행하는데 필요한 연산들을 하나의 트랜잭션으로 정확하게 정의하고 관리하는 것이 중요합니다. 일반적으로 데이터베이스를 변경하는 INSERT 문, DELETE 문, UPDATE 문의 실행을 트랜잭션으로 관리!
ACID
트랜잭션이 성공적으로 처리되어 데이터베이스의 무결성과 일관성을 보장하기 위해 만족해야 하는 4가지 특성
원자성
- 트랜잭션에 포함된 작업은 전부 수행되거나 아니면 전부 수행되지 말아야 함을 의미합니다. (all-or-nothing 방식)
- 만약 트랜잭션을 수행하다가 장애가 발생하여 작업을 완료하지 못했다면, 지금까지 실행한 연산 처리를 모두 취소하고 데이터베이스를 트랜잭션 작업 전의 상태로 되돌려 트랜잭션의 원자성을 보장해야 합니다.
- 트랜잭션의 원자성을 보장하면 트랜잭션을 구성하는 연산 중 일부만 처리한 결과를 데이터베이스에 반영하는 일이 없게 됩니다.
일관성
- 트랜잭션이 성공적으로 수행된 후에도 데이터베이스가 일관된 상태를 유지해야 함을 의미합니다.
- 트랜잭션이 수행되기 전에 데이터베이스가 일관된 상태였다면 트랜잭션의 수행이 완료된 후 결과를 반영한 데이터베이스도 또 다른 일관된 상태가 되어야 합니다.
격리성
- 현재 수행 중인 트랜잭션이 완료될 때까지 트랜잭션이 생성한 중간 연산 결과에 다른 트랜잭션들이 접근할 수 없음을 의미합니다.
- 일반적으로 데이터베이스 시스템에서는 여러 트랜잭션이 동시에 수행되지만 각 트랜잭션이 독립적으로 수행될 수 있도록 다른 트랜잭션의 중간 연산 결과에 서로 접근하지 못하게 합니다. (동시성 제어)
순서대로 하나씩 수행되는 것과 같은 결과를 얻을 수 있도록 제어하는 기능을 통해 사용자들은 트랜잭션들이 동시에 수행되는 것처럼 느끼면서도 순서대로 하나씩 수행되는 것처럼 정확하고 일관된 결과를 얻을 수 있습니다.
지속성
- 트랜잭션이 성공적으로 완료된 후 데이터베이스에 반영한 수행 결과는 어떠한 경우에도 손실되지 않고 영구적이어야 함을 의미합니다.
- 즉, 시스템에 장애가 발생하더라도 트랜잭션 작업 결과는 없어지지 않고 데이터베이스에 그대로 남아 있어야 합니다.
- 트랜잭션의 지속성을 보장하려면 시스템에 장애가 발생했을 때 데이터베이스를 원래 상태로 복구하는 회복 기능이 필요합니다.
트랜잭션의 연산
트랜잭션의 수행과 관련하여 주로 사용되는 연산에는 작업 완료를 의미하는 commit 연산과 작업 취소를 의미하는 rollback 연산이 있습니다.
Commit
트랜잭션의 수행이 성공적으로 완료되었음을 선언하는 연산으로, 커밋 연산이 실행된 후 트랜잭션의 수행 결과가 데이터베이스에 반영되어 데이터베이스가 일관된 상태를 지속적으로 유지하게 됩니다.
Rollback
트랜잭션의 수행이 실패했음을 선언하는 연산으로, 롤백 연산이 수행되면 트랜잭션이 지금까지 실행한 연산의 결과가 취소되고 트랜잭션이 수행되기 전의 상태로 돌아갑니다.
트랜잭션의 상태
'Computer Science > Database' 카테고리의 다른 글
Join 알고리즘 (0) | 2022.07.20 |
---|---|
NoSQL과 종류 (0) | 2022.03.29 |
`이상현상과 정규화 (0) | 2022.02.22 |
JOIN의 종류 (0) | 2022.02.19 |
`서브쿼리와 뷰 (0) | 2022.02.19 |