[DB] 데이터베이스 ACID vs CAP

dyomi·2024년 9월 16일

ACID와 CAP은 각각 데이터베이스에서 데이터의 무결성과 분산 시스템의 트레이드오프를 설명하는 개념이다.

ACID

ACID는 Atomicity 원자성(트랜잭션의 모든 작업이 성공하거나 전혀 수행되지 않음), Consistency 일관성(트랜잭션 후 데이터는 무결성 규칙을 따름), Isolation 격리성(트랜잭션이 독립적으로 실행되며, 다른 트랜잭션의 중간 결과에 영향을 받지 않음), Durability 지속성(트랜잭션이 완료된 후 그 결과는 영구적으로 저장됨)을 나타내며, 주로 관계형 데이터베이스의 일관성과 무결성을 유지하면서 트랜잭션이 안전하게 수행되도록 보장하는 것을 목표로 한다. (성능보단 데이터 무결성에 초점을 둠)

CAP

CAP은 분산 데이터베이스 시스템(cassandra, mongoDB)에서 트레이드오프를 설명하는 이론이다. 각각 Consistency 일관성 (모든 노드가 동일한 데이터를 가지는 것), Availability 가용성(시스템이 항상 응답할 수 있는 것), Partition tolerance 파티션 허용성 (네트워크 분할 시에도 시스템이 지속적으로 운영되는 것)을 나타내며, 캡 이론에 따르면 이 세 가지 속성 중 두 가지만 선택이 가능하다.

예를들어 CP는 일관성과 파티션 허용성을 유지하지만, 가용성이 떨어질 수 있고, AP는 가용성과 파티션 허용성을 유지하지만 일관성이 떨어질 수 있다. CA는 일관성과 가용성을 유지하지만, 파티션 허용성은 포기해야한다.

이 세 가지를 동시에 만족시킬 수 없는 이유는 일관성을 유지하려면, 네트워크 분할 동안 노드들이 사용자 요청에 응답하지 않고 대기해야 하므로 가용성이 떨어진다. 반대로 가용성을 유지하려면 네트워크 분할 동안에도 데이터를 처리해야 함으로 일부 노드는 최신 데이터를 가지지 않게 되어 일관성이 손상된다. 따라서 파티션 허용성을 보장하려면 일관성과 가용성 중 하나를 포기해야한다.



🌟 추가 질문


📍 CAP에서 파티션 분할을 막을 수 없다 그러면 CP나 AP일 것이다. 어떤 차이가 있는가?

CP는 일관성과 파티션 분할은 허용하되 가용성을 포기하고, AP는 가용성을 가져가는 대신 일관성을 포기한다.

여기서 가용성을 포기한다는 것은 시스템 접근이 불가능하다는 것을 의미하고, 네트워크 파이션이 일어나면 시스템이 아애 멈추는 것을 의미한다.

반대로 가용성을 살리되 일관성을 유지하지 않는다는 것은 2개의 노드가 있을 때 파티션이 되고 가용성을 살리게 되면 서로 다르게 업데이트가 될 수 있고, 따라서 일관성을 버리게 된다.

분산 데이터베이스 시스템에서 Eventual Consistency 이라는 개념이 있다. 이것은 consistency 일관성을 포기하지만, 이 두 개의 노드가 따로 작동할 때 일관성은 맞지 않아도 결과적으로 다시 네트워크 분할이 해결되면 서로 맞춰서 정합성을 만들어 내는 것을 의미한다.

어느 시점에 노드 간에 정합성이 없을 수 있지만, 크게 중요한 데이터가 아닐 경우 이러한 AP를 선택하는 것이 적합할 수 있고, 각각의 데이터베이스 시스템마다 CP를 채택했는지, AP를 채택했는지 확인해보면 좋다.

Cassandra: AP 시스템으로, 대규모 데이터를 분산 저장하면서 가용성을 중요시한다. 네트워크 분할 시에도 각 노드는 계속해서 데이터를 쓸 수 있지만, 모든 노드에 동일한 데이터가 일관되게 저장되는 것을 보장하지는 않는다.

MongoDB (Replica Set 구성 시): 일관성과 네트워크 분할 허용을 중시하는 설정에서는 CP로 동작한다. 즉, 최신 데이터를 보장하려고 할 때 가용성을 포기할 수 있습니다.


📍 분산 데이터베이스에서 한 클러스터의 노드는 몇 개가 적당할까?

1개가 죽어도 나머지 2개가 처리를 할 수 있도록 최소 3개일 것이다. 하나만 남는다면 리스크가 될 것이다.

노드 수를 결정할 때는 노드 수가 늘어날수록 확장성은 늘어나겠지만, 그만큼 처리량도 늘어날 것이다. 예를 들어 데이터의 일관성을 가지고 간다 했을 때 모든 노드가 같은 데이터를 가지고 있어야 한다면, 데이터가 어디에 쓰여져도 모든 노드들이 복제본을 가짖고 있어야 하고 따라서 시간이 굉장히 오래걸릴 수 있다.

따라서 데이터의 양과 성능적 이슈 등을 고려해 노드를 구성해야 한다.



참고 자료
[Database] ACID, BASE, CAP 이론과 DB 선택 방법
출처: https://woogong80.tistory.com/10 [IT에서 일하는 비(非) 개발자 이야기:티스토리]

profile
기록하는 습관

0개의 댓글