[데이터베이스] ACID와 CAP
데이터의 무결성과 일관성
- 무결성 (integrity): 데이터가 올바른가, 데이터에 결점이 없는가
- 동의어: 정확성(correctness), 완전성(completeness), 신뢰성(reliability), 유효성(validation)
- 무결성 위반: 올바르지 않은(잘못된) 데이터가 저장됨
- 무결성 위반 예
- 숫자형 데이터에 문자열이 존재하는 경우
- 중복을 허용하지 않는 데이터가 중복 저장된 경우
- null 값을 허용허지 않는 데이터에 null 값이 존재하는 경우
- 무결성 유지를 위한 방법
- 올바른 데이터가 저장된 상태를 유지할 수 있도록 데이터 저장 및 변경 시 검증 과정을 거친다.
- 데이터베이스가 제공하는 네 가지 무결성 제약조건을 설정한다.
- 도메인 제약조건: 데이터베이스가 지원하는 자료형을 사용하여 일치하는 유형의 데이터만 저장될 수 있도록 한다.
- 엔티티 제약조건: 기본키를 사용하여 null 값을 가질 수 없는 데이터인 경우 null 값을 가질 수 없도록 한다.
- 참조 무결성 제약조건: 외래키를 사용하여 참조하는 테이블이 참조되는 테이블의 기본키를 참조하도록 하여 올바른 데이터를 가질 수 있도록 한다.
- 유니크 제약조건: 기본키 또는 유니크키를 사용하여 데이터가 중복되어 저장될 수 없도록 한다.
- 일관성 (consistency): 데이터가 서로 일치하는 가
- 동의어: 정합성
- 정합성 위반: 데이터가 서로 일치하지 읺음
- 정합성 위반 예: 동일한 데이터가 서로 다른 테이블에 분산되어 존재하는 경우 하나의 테이블의 데이터만 변경 사항을 적용하고 다른 테이블의 데이터는 그대로 유지할 때 데이터 일관성을 위반한다.
- 일관성 유지를 위한 방법: 데이터베이스가 제공하는 외래키 제약조건을 통해 테이블 간 관계를 설정함으로써 두 테이블에 동일한 데이터가 저장될 수 있도록 한다.
트랜잭션 ACID 특성
ACID란 데이터베이스의 트랜잭션이 안전하게 수행되는 것을 보장하기 위해 트랜잭션이 가져야 하는 네 가지 특성을 말한다.
- 원자성 (atomicity): 트랜잭션의 작업들은 모두 성공하거나 모두 실패해야 한다. 작업이 성공적으로 수행되다가 하나의 작업이 실패하면 이전의 성공된 작업은 모두 취소되어야 한다. 작업의 일부만 성공하거나 일부만 실패해서는 안 된다.
- 일관성 (consistency): 트랜잭션이 성공한 이후에 데이터베이스는 일관된 상태를 유지해야 한다. 트랜잭션이 수행되기 전에 데이터베이스가 일관된 상태였다면 트랜잭션의 수행이 완료된 후 데이터베이스는 또 다른 일관된 상태가 되어야 한다.
- 격리 (isolation): 트랜잭션은 다른 트랜잭션의 진행 사항에 대해 알 수 없어야 한다. 한 트랜잭션의 작업이 다른 트랜잭션의 작업을 방해하지 않아야 한다. 격리 수준은 성능에 영향을 준다. 격리 수준이 높을수록 성능이 낮아진다.
- 내구성 (durability): 성공적으로 완료된 트랜잭션의 작업 결과는 어떠한 시스템 실패에도 손실되지 않고 영구적으로 유지되어야 한다.
CAP
- 일관성 (consistency):
- 가용성 (availability):
- 분할 허용성 (partition tolerance):
Comments