
트랜잭션의 ACID 속성 중 일관성(Consistency)은 데이터의 무결성과 정확성을 보장하는 중요한 요소다. 일관성은 트랜잭션이 실행된 후 데이터베이스가 유효한 상태를 유지하도록 보장하며, 이를 위반하면 데이터 손상 또는 불일치 문제가 발생할 수 있다.
일관성(Consistency)이란?
일관성은 크게 두 가지 유형으로 구분된다.
- 데이터의 일관성
- 데이터 모델에 정의된 제약조건(참조 무결성, 외래 키 등)을 만족하는 상태
- 데이터베이스의 정확성과 신뢰성을 보장하는 기본 요소
- 일관된 읽기(Consistent Read)
- 트랜잭션이 변경된 데이터를 즉시 읽을 수 있는지에 대한 보장
- 특히 분산 환경에서 중요한 의미를 가짐
데이터베이스 시스템은 데이터 무결성과 읽기 일관성을 유지하면서 성능, 속도, 확장성 사이에서 균형을 찾아야 한다.
데이터의 일관성과 불일치
데이터의 일관성
데이터의 일관성은 데이터베이스 관리자(DBA)가 정의한 데이터 모델과 제약 조건에 의해 강제된다. 대표적인 제약 조건은 다음과 같다.
- 참조 무결성
- 데이터 타입 제약
- 사용자 정의 제약
참조 무결성은 한 테이블이 다른 테이블을 참조할 때, 해당 참조가 유효해야한다는 것이다. 원자성과 함께 데이터 손상을 방지한다.
데이터 불일치 예시
-
재고 관리 시스템의 불일치
- 상황: 주문 테이블의 주문량(100개)과 실제 재고 테이블의 수량(80개)이 불일치
- 원인: 동시 주문 처리 과정에서의 경쟁 상태(Race Condition)
-
결제 시스템의 불일치
- 상황: 결제 완료 기록은 있으나 주문 상태가 '결제 대기 중'으로 남아있는 경우
- 원인: 트랜잭션 처리 중 시스템 장애
- 영향: 이중 결제 위험 및 주문 처리 지연
-
학사 관리 시스템의 불일치
- 상황: 최대 정원이 30명인 강의에 31번째 학생이 수강신청
- 원인: 동시 수강신청 처리 중 경쟁 상태 발생
일관된 읽기(Consistency Read)
일관된 읽기는 트랜잭션이 데이터를 읽을 때 일관된 상태의 데이터를 보장받는 것을 의미한다. 특히 분산 데이터베이스 환경에서 중요한 의미를 가진다.
해결 방법
-
동기 복제(Synchronous Replication)
- 모든 복제본이 즉시 동기화
- 강한 일관성 보장
- 성능 저하 가능성
-
비동기 복제(Asynchronous Replication)
- 시간차를 두고 복제본 동기화
- 성능 향상
- 일시적 불일치 허용
일관성 모델(Consistency Model)
일관성 모델은 분산 시스템에서 데이터의 일관성을 보장하는 방식을 정의한다. 크게 강한 일관성과 약한 일관성으로 구분된다.
강한 일관성(Strong Consistency)
- 모든 노드가 항상 동일한 최신 데이터를 가짐
- 데이터 변경 시 즉시 모든 노드에 반영
- 장점: 데이터의 정확성 보장
- 단점: 성능 저하, 가용성 감소
- 적용: 금융 거래, 재고 관리 등 정확성이 중요한 시스템
약한 일관성(Weak Consistency)
- 최종 일관성(Eventual Consistency)
- 일시적 불일치를 허용하고, 시간이 지나면 모든 노드가 동일한 데이터를 가지게 됨
- 적용: SNS, 콘텐츠 플랫폼 등
- 인과적 일관성(Causal Consistency)
- 인과 관계가 있는 작업들 간의 순서만 보장
- 독립적인 작업들은 다른 순서로 실행 가능
일관성 모델 비교
| 특성 | 강한 일관성 | 최종 일관성 |
|---|---|---|
| 데이터 상태 | 항상 최신 상태 | 일시적 불일치 허용 |
| 성능 | 상대적으로 낮음 | 상대적으로 높음 |
| 적용 환경 | 금융, 결제 시스템 | SNS, 콘텐츠 플랫폼 |
| 복구 가능성 | 높음 | 제한적 |
마치며
데이터베이스 시스템에서 일관성은 데이터의 정확성과 신뢰성을 보장하는 중요한 특성이다. 시스템의 특성과 요구사항에 따라 적절한 수준의 일관성을 선택하는 것이 중요하며, 이는 다음과 같은 요소들을 고려해야 한다.
- 시스템의 성능 요구사항
- 데이터의 중요도
- 사용자 경험
- 비즈니스 요구사항
결과적으로, 데이터베이스 시스템은 각 시스템의 특성에 맞는 적절한 일관성 수준을 선택해야 한다.
이 글은 Udemy의 【한글자막】 데이터베이스 엔지니어링 ( Database Engineering ) 마스터하기!강의를 토대로 공부한 내용을 정리한 것입니다.