https://ko.wikipedia.org/wiki/ACID

https://johngrib.github.io/wiki/ACID/

https://jusths.tistory.com/213

https://d2.naver.com/helloworld/407507

Atomicity (원자성)

트랜잭션내의 작업들의 일부분만 반영되지 않음을 의미한다. 모두 반영되거나 반영되지 않거나 둘중 하나여아 한다.

Consistency (일관성)

데이터는 언제나 일관성있게 유지되어야함을 의미한다. 무결정 제약조건에 위반되지 않음을 보장한다. DB 관점이 아닌 어플리케이션 관점에서 넓게 본다면, 단순히 참조무결성, 유일성 등의 의미외에 값의 범위, 길이, 허용 되는 값 등의 비즈니스 속성으로도 볼 수 있다.

Isolation (격리성)

트랜잭션 수행 도중 다른 트랜잭션의 연산에 영향을 받지 않음을 의미한다. 트랜잭션 밖에서는 트랜잭션 중간 과정의 데이터를 볼수 없음을 뜻한다. 즉, 완료된 이후의 데이터만 볼수있고, 수행 도중의 불안정한 데이터을 보게되지 않음을 의미한다.

하지만, 격리성은 성능에 영향을 많이 미치게 되어, 많은 DBMS들은 여러 격리 수준으로 나누어서 유연하게 관리한다.

[MySQL] 트랜잭션의 격리 수준(isolation level)

Durability (지속성)

성공적으로 완료된 트랜잭션의 데이터는 유지됨을 의미한다.


Lock과 MVCC

ACID를 보장하기 위해 Lock을 사용할 수 있다. 하지만, 많은 동시 Lock의 경우 성능저하를 초래할수 있고, 데드락의 문제가 발생할 수 있다.

Lock의 대안으로 데이터의 별도 복사본으로 관리하는 MVCC(Multi Version Concurrency Control)가 있다. 다른 트랜잭션에게 복사본의 데이터를 제공하여 Lock으로 인해 발생하는 문제를 회피하는 방법이다.