[트랜잭션(Transaction) 개념]
트랜잭션은 "데이터베이스 관리 시스템에서 논리적 작업 단위로 수행되는 작업 단위"이다.
여기서 말하는 "데이터베이스 관리 시스템"이란 트랜잭션의 성공과 실패가 분명하고 상호 독립적이며, 일관되고 믿을 수 있는 시스템을 의미한다.
일상에서 만나볼 수 있는 트랜잭션은 은행에서 계좌이체 시스템이 있다.
트랜잭션을 사용하지 않을 경우 어떤 일이 발생할 수 있는지 확인해보자.
예를 들어 A, B가 동시에 잔고가 0원인 한 계좌로 계좌이체를 했을 시 A의 100원 계좌이체 작업이 종료되지 않았을 땐 아직 잔고가 0원이기 때문에 0원->100원으로 변경하는 작업을 수행할 것이다. A의 계좌이체가 종료되기 전 B의 100원 계좌이체 작업이 진행된다면 해당 계좌의 잔고는 아직 0원으로 기록되어 있기 때문에 A와 동일하게 0원->100원으로 변경시킨다.
100원씩 두 곳에서 계좌이체를 했지만 잔고는 100원으로 남게 될 것이다. 혹은 동시에 실행을 하면서 충돌이 발생해 데이터가 날아가 버리는 결과로 이어질 수 있다.
그렇기 때문에 데이터베이스의 트랜잭션은 어떠한 경우에도 데이터가 온전한 상태로 유지되어야 하며 이러한 기능을 하기 위해 반드시 지켜져야 할 4가지 특징이 있다.
[트랜잭션(Transaction) 특징(ACID)]
4가지 특징의 첫 글자를 따서 ACID라 칭한다.
-
원자성(Atomicity)
-
일관성(Consistency)
-
독립성(Isolation)
-
지속성(Durability)
원자성(Atomicity)
트랜잭션 안에 있는 작업은 모두 데이터베이스에 반영되던가 아예 반영되지 않아야 하며 오류, 실패 발생 시 모든 작업은 취소되어야 한다.
예를 들어 계좌이체시 오류가 발생하면 반드시 원래 상태로 되돌려야 한다. 중간단계는 존재하면 안 됨.
일관성(Consistency)
트랜잭션이 실행을 완료하면 일관성 있는 데이트베이스 상태를 유지한다.
시스템의 고정 요소는 수행 전과 수행 완료 후의 상태가 같아야 한다.
예를 들어 계좌이체 종료 후 이체받은 계좌의 총액과 이체한 계좌의 총액의 합은 계좌이체 하기 전과 동일해야 한다.
고립성(Isolation)
하나의 트랜잭션이 실행 중일 땐 다른 트랜잭션은 대기하여야 하며 실행 중인 트랜잭션이 완전히 종료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다.
개념 설명시 들었던 예 참조.
지속성(Durability)
트랜잭션이 완료되면 주기억장치가 아닌 디스크와 같은 보조기억장치에 저장되거나 그렇지 않더라도 영구적으로 반영되야 한다. (트랜잭션이 실행되면 *.ldf파일에, 트랜잭션이 완료(COMMIT)되면 *.mdf파일에 변경이 적용된다)
[트랜잭션(Transaction)의 상태]
활동(Active) |
트랜잭션이 실행 중에 있는 상태. |
장애(Failed) |
트랜잭션 실행에 오류가 발생하여 중단된 상태. |
철회(Aborted) |
트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태. |
부분 완료(Partially Committed) |
트랜잭션이 정상 실행 되고 Commit 연산이 실행되기 직전의 상태. |
완료(Committed) |
트랜잭션이 정상 종료되고 Commit 연산을 실행한 상태. |
'DB > MS-SQL' 카테고리의 다른 글
[MSSQL] UPDATE, DELETE (0) | 2020.04.21 |
---|---|
[MSSQL] Transaction 사용법(Commit, Rollback) (0) | 2020.04.20 |
[MSSQL] INSERT문 (0) | 2020.04.16 |
[MSSQL] Create Table, Alter Table, Drop Table (0) | 2020.04.13 |
[MSSQL] SELECT문 (0) | 2020.04.10 |