본문 바로가기

시스템 디자인

CAP 정리란?

출처 : 위키피디아 "CAP Theorem"

CAP 정리

이제는 더이상 맞지 않지만 시스템 디자인에 있어서 Tradeoff가 있다는 것을 설명하려는 노력이다. CAP 정리의 CAP은 각각 Consistency, Availability, Partition Tolerance의 약자로 다른 맥락에서는 다른 의미를 가지지만 적어도 CAP 정리에서는  각각 다음과 같은 의미를 지닌다.

 

 

Consistency(일관성)

항상 최신의 데이터를 반환하는 것.

 

 

Availability(가용성)

모든 요청이, 어떤 노드에 요청을 보내든 의미 있는 응답을 받는 것. 요청이 성공 했다는 내용이든 실패했다는 내용이든 상관없이 응답을 받을 수 있다면 "Available"하다고 판단함. 

 

 

Partition Tolerance(파티션 용인)

네트워크에 두 개 이상의 분할이 발생하는 경우에도 시스템이 작동하도록 허용하는 것을 말한다.  

 

 

CAP Theorem과 CA

세 가지 중에 최대 두 가지만 만족시킬 수 있다는 것이 CAP Theorem의 내용이다. 즉, CA 혹은 CP 또는 AP만이 만족 가능하며 CAP 세 가지를 모두 충족시킬 수 있는 경우는 없다는 것이다. 이때 CA는 이해하기 쉽다. 만약 네트워크 단절(파티션)이 발생하지 않는다면 모든 노드가 최신 데이터를 반환할 수 있을 것이다. 

 

 

CP와 AP

만약 파티션이 발생했을 때도 시스템이 작동하게 하려면 Consistency나 Availability 하나는 포기를 해야 한다. 왜 그럴까? 파티션이 발생하면 각 파티션들은 반대쪽(혹은 다른쪽)에서 무슨 일이 일어나고 있는지 알 수 없다. 네트워크 상 분절이 일어났기 때문에 서로 통신이 불가능하다. 따라서 각 파티션에 서로 다른 데이터가 쓰일 수 있으며, 더 최신 데이터가 다른 쪽에 쓰였음에도 옛날 데이터를 반환하게 될 수도 있다. 즉 파티션 상태에서도 가용성을 지키기 위해서는 일관성을 포기해야 하고, 일관성을 지키기 위해서는 파티션 상태에서 가용성을 포기해야 하는 것이다.