데이터베이스에서 무언가 하나를 처리하는데 필요한
트랜젝션을 위한 성질이다.
예시 : 계좌이체
내가 -> A라는 사람에게 계좌이체를한다.
내 계좌에서 10만원 를 빼고
A에게 10만원을 추가한다.
만약
내 계좌에서는 돈이빠져나간 흔적이있는데
A의 계좌에 돈이 들어오지않았다면 ?
돈은 사라진것, 공기가되었다. 있었는데 없었습니다.
이러한 안정성을 보장하기 위해서 ACID라는 성질을 유지해줘야한다.
데이터베이스에서 트랜젝션이 발생할때 (계좌이체라고 생각하자)
그것에 대한 안정성을 보장할수있는 성질 : ACID
A : Atomicity
C : Consistency
I : Isolation
D : Durability
원자성 : 하나의 트랜젝션 내에서는 모든 연산이 성공하거나 모두 실패해야 한다.
하나의 트랜잭션이 성공하려면 -> 무조건 성공해야하고
실패할 요소가 보이면 -> 무조건 실패해야한다.
어중간한건 없다. 모아니면 도 그런거아닐까.
계좌이체하는 과정을 취소시키는부분이 Roll Back 롤백이라고한다.
일관성 : 하나의 트랜잭션 전 후에 데이터베이스가 일관된 상태를 유지해야한다.
예시 :
내가 예금을 하나 만들려고한다.
은행에서 예금은 항상 이름을 받아서 예금을 만들었다.
하지만 갑자기 이름이없는 예금을 만들려고한다.
내가 들고있는 계좌에서 이름을 빼주세요 이런것
어떤 데이터베이스에 특정 제약조건을 건다면
그 조건에 맞지않는 트랜잭션에 대해서는 처리를 하지않는다.
고립성 : 각각의 트랜젝션은 독립적, 서로의 연산을 확인받거나 영향을 줄 수 없다.
A가 B에게 5천원 송금
A가 C에게 5천원 송금
A에는 1만원이 빠져나간것으로 보이지만
B에게 보낸것과 C에게 보낸것은 서로 독립적이다.
두개가 서로에게 영향을준다면 그것을 실패한 트랜잭션이다.
지속성,내구성 : 하나의 성공된 트랜젝셔넹 대한 로그가 기록되고 영구적으로 남는다.
내가 B계좌로 5천원 이체 은행서버에서는 201 OK 응답
하지만 은행에 서버에러가 났다.
다시 은행어플가서 기록을봣는데 5천원 이체한 기록이 있다.
ACID는 금융쪽에서 꼭 지켜서 데이터베이스를 설계해야한다.