CS/DataBase
[DataBase] 트랜잭션 (transaction), ACID
ChaeHing
2023. 3. 28. 23:46
트랜잭션 (transaction)
- 여러 개의 작업을 하나로 묶은 실행 유닛
- 묶여있는 모든 작업들을 다 완료해야 정상적으로 종료
- 단 하나의 작업이라도 실패하면 트랙잭션에 속한 모든 작업을 실패한것으로 판단
- 모든 작업이 성공해야 트랙잭션이 성공
- 성공, 실패 두가지의 결과만 존재한다.
ACID
- 테이터베이스 트랜잭션의 성질
- 하나의 트랜잭션의 안정성을 보장하기 위해 필요
- Atomicity(원자성)
- Consitency(일관성)
- Isolation(격리성)
- Durability(지속성)
- 4가지로 구성 되어 있다.
Atomicity(원자성)
- 하나의 트랜잭션의 모든 작업들이 전부 성공하거나 전부 실패해야 한다.
- 부분적인 작업만 성공된다면 어떤 데이터는 입력되고 어떤 데이터는 입력되지 않는등 데이터가 오염 될 수 있다.
- 예를들면 회원정보에 전화번호는 입력되었는데 이름은 모른다던가, 돈을 송금했는데 송금자를 모른다던가 하는 일이 발생 할 수 있다.
- SQL에서 쿼리를 실행 했을때 한가지라도 실패하는 부분이 있다면 전부 실패하도록 되어있다.
Consitency(일관성)
- 데이터 베이스의 상태가 일관적이야 한다.
- 트랙잭션 실행후 데이터베이스의 상태는 이전과 같이 유효해야 한다.
- 데이터 베이스의 규칙이나 제약사항을 만족해야 한다.
- 예를들면 한 필드의 속성이 not null 이면, 해당 필드의 레코드를 삭제하거나, 해당 필드만 제외한 레코드를 입력하는 쿼리는 일관성을 위반한다.
Isolation(격리성)
- 모든 트랙잭션은 다른 트랙잭션으로부터 독립적이어야 한다.
- 동시에 여러개의 트랙잭션이 실행되면, 연속으로 실행된 것과 같은 결과를 가진다.
- 예를들면 계좌에 100만원이 있을때 하나의 트랙잭션은 60만원을 출금, 또 다른 트랙잭션은 50만원을 출금한다고 했을때 동시에 트랙잭션이 실행되더라도 결과는 -10만원이 아니라 60만원을 출금한뒤 50만원은 출금이 실패하는 상황이 되어야 한다. (연속적으로 실행된 결과가 발생해야 한다.)
- 두개의 트랙잭션은 같은 작업이 아닌 다른 작업(독립적) 이기 때문이다. - 작업간 격리되어 있다.
Durability(지속성)
- 트랙잭션이 성공하였다면, 해당 트랙잭션에 대한 로그가 남아야 한다.
- 시스템에러등이 발생하더라도, 해당 기록은 영구적이어야 한다.
- 예를 들면 돈을 송금했을때 송금에 성공했다면 그 이후에 은행에 어떠한 오류가 발생하더라도 송금한 내역은 남아있어야한다.