트랜잭션 수행 후에도 데이터 모델의 모든 제약 조건(기본키, 외래키, 도메인 제약 조건 등)을 만족하는 것.
제약 조건을 위반하면 트랜잭션은 중단된다.
제약 조건 예시
ex) 모든 계좌는 잔고가 있어야 한다 → 작업 실행 후 잔고가 없으면, 트랜잭션 중단 [코드 예시 : AccountService.remit()]
ex) 특정 컬럼의 데이터 타입이 정수형이다 → 작업 실행 후 문자열 값이 저장되려고 하면, 트랜잭션 중단
나머지 3가지 속성과 다른 점
Consistency는 다른 속성들과는 달리 DB의 속성이라기 보단 Application의 속성이다.
즉, DB가 아닌 Application에서 관리해야 할 책임이 있다.
물론 외래키 제약 조건과 같이 DB에서 검증해주는 기능도 있지만
본질적으로는 Application에서 데이터가 유효한 지 아닌 지를 검증하고, DB는 데이터를 저장할 뿐이어야 한다.
(Joe Hellerstein은 하더와 로이터의 논문에서 ACID의 C는 약어를 만들기 위해 끼어들었고,
당시에 그리 중요하지 않았다고 말했다)
Isolation
어떤 트랜잭션이 특정 데이터를 접근하는 도중에는, 다른 트랜잭션이 해당 데이터를 접근하지 못하도록 막는 것.
즉, Race Condition과 비슷한 개념.
격리의 수준이 높을수록 성능이 낮아짐.
일반적으로 하나의 Row에 대한 얘기이다.
(Lock은 DB, File, Table, Page, Block, Column, Row 등 다양한 수준을 지원하지만,
가장 많이 쓰이는 Lock은 Row 수준의 Lock이다.)
Atomicity는 하나의 트랜잭션 내부에서의 얘기라면,
Isolation은 여러 개의 트랜잭션들 간의 얘기
Durability
데이터가 손실될 염려 없이 안전한 저장소를 제공하는 것
즉, 한 번 성공적으로 Commit된 트랜잭션은 영구적으로 손상 없이 보존됨을 보장하는 것을 의미
시스템이 정상일 때 뿐만 아니라,
데이터베이스나 OS의 이상 종료와 같은 시스템 장애, HW 결함 등에도 견딜 수 있다는 것을 말한다
트랜잭션 연산 기록을 하드 디스크에 로그로 남기고
시스템 장애가 발생하면 그 로그를 사용해 장애 발생 시점으로 복원하는 것으로 지속성을 실현하고 있다.
질문
트랜잭션이 안전하게 수행된다는 것을 보장하는 성질인 ACID에 대해 각각을 상세히 설명해주세요
연관 챕터
66