Data Consistency vs Integrity
데이터 정합성에 대한 이야기는 많이 들어서 잘 알고 있다고 생각하고 있었다.
데이터 정합성은 데이터 무결성과는 어떻게 다를까?
헷갈리는 용어를 좀 정리해봤다.
https://www.scaler.com/topics/data-consistency-in-dbms/
데이터 정합성
데이터 정합성이란 아래의 상황에서도 정보를 정합성 있게 유지하는 것을 의미한다.
- 네트워크를 통해 전달될 때
- 다른 기기의 다른 어플리케이션 사이에 전달될 때
DBMS에서 데이터 정합성은 데이터베이스 시스템의 모든 데이터 포인트들을 똑바로 읽고 쓰도록 보장하는 일련의 규칙으로 정의된다.
데이터베이스에 기록된 데이터의 트갠잭션은 데이터베이스 개발자가 정해놓은 규칙에 의해 설정된 영향을 받는 데이터만 수정해야 한다. 트랜잭션이 정확하다는 것은 데이터 자체를 보장하는 것이 아니라 프로그램에서 정의한 규칙을 위반하지 않는다는 것을 보장한다는 의미이다.
데이터 소스 간에 일관되지 않은 데이터 해석은 정확하지 않은 데이터 결과를 불러올 수 있기 때문에, 데이터를 정확하게 캡쳐하고 사용할 수 있도록 데이터에 대한 분석은 정합성 있게 이뤄져야 한다.
즉 데이터를 특정 시점에만 읽어야 하고, 전송 중에 변경되어서는 안된다.
약한 정합성 vs 강한 정합성
강한 정합성이란 primary 노드, 레플리카, 관련된 모든 노드에 존재하는 모든 데이터가 검증 규칙에 부합하고 항상 같은 상태에 있어야 한다는 것을 의미한다.
데이터베이스의 강한 정합성은 어떤 클라이언트가 데이터에 접근하던 상관 없음을 보장한다. 클라이언트들은 항상 데이터베이스 안에 설정된 규칙들에 부합하도록 업데이트된 가장 최신의 데이터만 보게 되기 때문이다.
강한 정합성은 데이터베이스의 유일한 복사본만 존재하고, 이는 연산 명령에 의해 상태가 계속 변화하는 것을 따라 유동적으로 변하며 사용자에게는 보다 명확한 데이터베이스의 상태를 제공하도록 하는 것을 목적으로 한다.
약한 정합성은 primary 노드, 레플리카, 관련된 모든 노드에 존재하는 모든 데이터가 모두 동일하다고 보장할 수 없는 것이다.
예를 들어 인도에 있는 고객들은 데이터에 접근해서 검증 규칙에 부합하는 정보들을 볼 수 있지만, 가장 최신으로 업데이트된 데이터를 볼 수 없는 것이다. 이런 경우에는 무결성에 문제가 생긴 것이다. (integrity error)
약한 정합성은 모든 노드가 같은 데이터를 가져야 한다는 보장이 없으므로 서로 다른 여러 구현체가 존재할 수 있다. 약한 정합성은 개발자는 데이터베이스에 있는 복제된 데이터의 특성에 맞게 개발해야 하기 때문에 정합성이 보장되는 경우에 비해 개발 난이도가 증가한다.
데이터 정합성 vs 데이터 무결성
데이터 정합성 | 데이터 무결성 |
---|---|
데이터 정합성은 데이터가 유용한지에 대한 것이다. DBMS의 데이터 무결성은 모든 시스템에 걸쳐 존재하는 데이터에 대한 내용이다. | 데이터 무결성은 데이터의 품질을 의미한다. 정확하고 완전한 데이터를 제공하는 상태이다. |
정합성은 데이터 형식이 옳거나 다른 데이터와 호환이 되는지를 보장 | 무결성은 데이터가 정확한지를 보장 |
정합성에서는 데이터가 일관적이지 못하거나 완전히 틀릴 수도 있음 | 무결성은 데이터 품질에 주로 집중 |
데이터 정합성은 ACID 모델이 보장하는 반면, BASE 모델은 DBMS의 높은 가용성을 보장한다.
데이터 무결성은 데이터가 정확한지에 대한 내용이다.
서로 다른 개념이기 때문에, 정합성은 지켜져도 무결성은 지켜지지 않는 경우가 있고, 무결성은 지켜져도 정합성은 지켜지지 않는 경우가 있다.
- 모든 분산 노드에 잘못된 데이터가 들어가 있다면 (나이가 -1로 설정되는 등) 정합성은 지켜졌지만 무결성은 지켜지지 않은 경우이다.
- 사용자의 데이터 수정으로 인해 서로 다른 노드에 다른 데이터가 들어가 있다면 (어떤 노드에는 나이가 20이고, 어떤 노드에는 나이가 30인 경우) 무결성은 지켜졌지만 정합성은 지켜지지 않은 경우이다.
- 이런 경우에도 관점에 따라 무결성은 지켜지지 않았다고 볼 수 있을 것 같긴 하다.