트랜잭션(Transaction)
트랜잭션이란 질의(query)를 하나의 묶음 처리해서 만약 중간에 실행이 중단되었을 경우,
처음부터 다시 실행하는 Rollback을 수행하고, 오류업싱 실행을 마치면 commit을 하는 실행 단위를 의미합니다.
- 즉 한 번 질의가 실행되면 질의가 모두 수행되거나 모두 수행되지 않는 직업수행의 논리적 단위입니다.
트랜잭션의 예시
-
친구에게 10,000원을 송금하는 상황을 가정합니다.
-
내가 친구에게 송금한다면, 나의 계좌에서 10,000원을 차감하고 친구의 계좌에 10,000원을 증가시켜야 하는데, 알 수 없는 오류로 인해 나의 계좌에서는 10,000원이 줄었지만 친구 계좌에서는 10,000원이 증가 되지 않았습니다.
-
이렇게 된다면 어떻게 해야할까?..엄청 난감한 상황이죠.
-
이러한 경우가 생기지 않도록 중간에 오류가 발생하면 다시 처음부터 송금을 하도록 하는 것이 rollback입니다.
-
오류 없이 정상적으로 송금이 되었다면 정상적으로 실행이 끝났으므로 commit을 합니다.
-
이렇게 송금 과정을 하나의 트랜잭션이라고 볼 수 있습니다.
-
트랜잭션을 작업수행의 논리적 단위라고 하였는데, 때문에 DBMS의 성능은 초당 트랜잭션실행수(TPS: Transaction per second)로 측정합니다.
트랜잭션 사용 이유
- 트랜잭션은 DB 서버에 여러 개의 클라이언트가 동시에 엑세스하거나 응용프로그램이 갱신을 처리하는 과정에서 중단될 수 있는 경우 데이터 부정합을 방치하고자 할 때 사용합니다.
- 부정합이 발생하지 않으려면 프로세스를 병롤로 처리하지 않도록 하여 한 번에 하나의 프로세스만 처리하도록 하면 되는데 ,이는 효율이 너무 떨어집니다.
- 즉, 병렬로 처리할 수 밖에 없는 현실적인 상황으로 인해 부정합을 방지하고자 트랜잭션을 사용하는 것입니다.
특성(ACID)
원자성(Atomicity)
트랜잭션의 작업이 부분적으로 실행되거나 중단되지 않는것을 보장하는 것을 말합니다.
즉, All or Nothing의 개념으로서 작업 단위를 일부분만 실행하지 않는 것을 의미합니다.
- 트랜잭션에서 원자성은 수행하고 있는 트랜잭션에 의해 변경된 내용을 유지하면서, 이전에 commit된 상태를 임시 영역에 따로 저장함으로써 보장합니다.
- 즉, 현재 수행하고 있는 트랜잭션에서 오류가 발생하면 현재 내역을 날려버리고 임시 영역에 저장했던 상태로 rollback합니다.
일관성(Consistency)
트랜잭션이 성공적으로 완료되면 일관적인 DB상태를 유지하는 것을 말합니다.
여기서 말하는 일관성이란, 위의 송금 예제에서 금액의 데이터 타입이 정수형(Integer)인데, 갑자기 문자열(String)이 되지 않는 것을 말합니다.
- 즉, 송금 전후 모두 금액의 데이터 타입은 정수형이어야 한다는 것이 일관성입니다.
- 트랜잭션에서 일관성은 트랜잭션 수행 전,후에 데이터 모델의 모든 제약조건(기본키,외래키,도메인,도메인 제약조건 등)을 만족하는 것을 통해 보장합니다.
- 예를 들어 Movie와 Video 테이블이 있을 때 Video 테이블에 Movie 테이블의 primary key인 movie_id가 외래키로 존재한다고 가정하겠습니다.
- 만약 Movie_id의 제약조건이 Movie 테이블에서 변경되면 ,Video 테이블에서도 movie_id가 변경되어야 합니다.
격리성(Isolation)
- 트랜잭션 수행시 다른 트랜잭션의 작업이 끼어들지 못하도록 보장하는 것을 말합니다.
- 즉, 트랜잭션끼리는 서로를 간섭할 수 없습니다.
지속성(Durability)
- 성공적으로 수행된 트랜잭션은 영원히 반영이 되는 것을 말합니다.
- commit을 하면 현재 상태는 영원히 보장됩니다.