예전에 학습했던 내용들이지만, 기억이 희미해져 이번에 정리해놓으려 합니다.
데이터베이스에서 일어나는 트랜잭션의 안전성을 보장하기 위해 필요한 성질들이다.
하나의 트랜잭션에 속한 모든 작업이
전부 성공하거나 전부 실패
해서 결과를 예측할 수 있어야 한다.
SQL에서도 마찬가지로 특정 쿼리를 실행했는데 부분적으로 실패하는 부분이 있다면 전부 실패하도록 구현되어 있다.
데이터베이스의 상태가
일관
되어야 한다는 성질이다. 트랜잭션 이후의 데이터베이스의 상태는 이전과 같이 유효해야 한다.
여기서 말하는 일관되다
는 뜻은 데이터 값을 말하는 것이 아니다. 트랜잭션이 이후에도 데이터베이스의 제약/규칙 (not null 등)을 만족해야 한다는 뜻
이다.
모든 트랜잭션은
다른 트랜잭션으로부터 독립
되어야 한다는 뜻이다.
실제로 동시에 여러 개의 트랜잭션들이 수행될 때, 각 트랜젝션은 고립(격리)되어 있어 연속으로 실행된 것과 동일한 결과를 나타낸다.
격리성을 지키는 각 트랜젝션은 철저히 독립적이기 때문에 다른 트랜젝션의 작업 내용을 알 수 없으며, 트랜잭션이 동시에 실행될 때와 연속으로 실행될 때의 데이터베이스 상태가 동일해야 한다.
하나의 트랜잭션이 성공적으로 수행되었다면, 해당 트랜잭션에 대한
로그 (기록)
가 남아야 한다. 만약 Runtime 오류나 시스템 오류가 발생하더라도 해당 기록은 영구적이어야 한다는 뜻이다.
해당 트랜잭션은 실패로 돌아가고 롤백(rollback) 된다.