99클럽 코테 스터디 19일차 DB CAP 이론
728x90
  • DB
    • Index
      • Index 작동 원리
      • Index 종류
        • B-Tree 인덱스
        • Hash Indexes
        • Bitmap Index
        • GIST(Generalized Search Tree)
        • R-Tree
        • Full Text Index
        • Spatial Index
        • Trie(Prefix Tree) Index
        • Covering Index
  • 영속성
  • 트랜잭션
  • ORM
  • ACID
  • N+1 문제
  • DB 정규화
  • Data Replication
  • sharding 전략
  • CAP 이론

CAP 이론

일관성(Consistency), 가용성(Availability), 분할 내성(Partition tolerance) 의 약자 이며, 이 세 가지 속성 중에서 동시에 모두를 만족시킬 수 없다는 이론

  • 일관성(Consistency)
    • 데이터를 저장하는 장비가 1대 또는 100대 이던지 간에 모든 장비에서 동일한 데이터가 저장되어 있어야 한다는 속성.
      사용자가 데이터를 업데이트한 후에는 모든 조회(질의)가 최신 값으로 일관되게 응답해야 한다는 것을 포함함. 일관성이 높은 시스템에서는 데이터가 변경될 때 모든 복제본이 동시에 업데이트 되어야 하며, 이로 인해 성능이 저하될 수 있음.
  • 가용성(Availablity)
    • 가용성은 죽지 않은 상태의 모든 서버는 클라이언트에게 항상 정상 처리 응답을 보내주어야 한다는 것을 의미함. 가용성이 높은 시스템은 어떠한 시스템의 오류가 있더라도 사용자에게 서비스를 지속적으로 제공함.
      하지만 이 경우 일관성을 완전히 보장하기 어려울 수 있음. 예를 들어, 네트워크 오류로 일부 노드가 접근 불가능할 때도 나머지 노드에서 서비스가 계속되어야 함.
  • 분할 내성(Partition tolerance)
    • 분할 내성은 클러스터가 여러 대 동작하고 있을 때, 해당 클러스터 사이에 접속이 단절되어 서로 통신을 할 수 없는 상황에서도 시스템이 잘 동작해야 한다는 것.
      네트워크의 일부가 장애로 인해 나머지 네트워크와 통신이 불가능해도 시스템은 이를 감지하고 대처할 수 있어야함. 분할 내성이 보장된 시스템은 네트워크 오류에 강한 반면, 이로 인해 일관성이나 가용성을 손상시킬 수 있음.
  • Index 작동 원리

왜 불가능?

  1. 일관성과 분할 내성을 동시에 보장하려면 가용성이 저하될 수 있음.
    • 네트워크 분할이 발생하면, 일관성을 유지하기 위해서는 모든 데이터 복사본이 동일한 최신 상태를 유지해야함.
      이 경우, 일부 노드에 접근할 수 없다면 시스템은 사용자의 요청에 응답을 제공할 수 없게 됨. 즉, 모든 요청에 대해 정확한 응답을 제공하기 위해 일부 요청을 거절해야 하므로 가용성이 저하됨.
  2. 가용성과 분할 내성을 동시에 보장하려면 일관성이 저하될 수 있음.
    • 시스템이 항상 응답을 제공하도록 설계된 경우(가용성), 네트워크 분할 중에도 요청을 계속 받아들임. 그러나 분할된 네트워크의 한쪽에서 변경된 데이터가 다른 쪽으로 즉시 전파되지 않을 수 있으므로, 사용자는 최신 상태가 아닌 데이터를 받게 될 수 있음. 이는 일관성을 손상시킴.

이론적으로 분산 시스템은 이 세 가지 중 최대 두 가지 속성만을 완벽하게 만족시킬 수 있으며, 세 번째 속성은 어느 정도 타협해야함. 따라서 시스템을 설계할 때 어떤 속성을 우선시할지 선택하는 것은 응용 프로그램의 요구 사하오가 용도에 따라 결정되어야 함.

MySQL 에서의 CAP 이론

  • MySQL 은 기본적으로 일관성(Consistency) 와 가용성(Availability) 에 중점을 두고 설계된 데이터베이스 관리 시스템임. 그러나 CAP 이론의 전제 하에 어떤 데이터베이스 시스템도 모든 조건을 완벽하게 충족시킬 수 없기 때문에, 특정 설정과 환경에 따라 성능과 속성의 우선순위가 달라질 수 있음.
  1. 일관성
    • MySQL 은 ACID 속성을 충족시킴. ACID 는 Atomic(원자성), Consistency(일관성), Isolation(독립성), Durability(지속성) 의 약자로, 각 트랜잭션이 데이터베이스의 일관된 상태를 유지하도록 보장함.
    • 데이터베이스가 항상 정확하고 일관된 상태를 유지해야 한다는 일관성의 요구를 충족시킴.
  2. 가용성
    • MySQL 은 복제(Replication) 기능을 통해 가용성을 향상 시킬 수 있음. master-slave 또는 master-master 복제를 설정하여 가용성을 높이고, 어떤 노드가 실패하더라도 서비스의 중단 없이 데이터에 계속 접근할 수 있도록 함.
    • 사용자 요청에 대하 높은 가용성을 제공할 수 있음
  3. 분할 내성
    • MySQL 은 기본적으로 분할 내성을 지원하지 않음. 일반적인 MySQL 설치에서는 네트워크 분할이 발생하면 일부 노드가 다른 노드와 통신할 수 없게 될 때, 데이터 일관성을 유지하기 위해 일부 요청 처리를 중단할 수 있음.
      그러나 MySQL Cluster 와 같은 특정 기술을 사용하여 분할 내성을 향상시킬 수 있으며, 이 경우 네트워크 분할 시에도 클러스터 내에서 서비스가 계속 작동하도록 설계할 수 있음.

결론적으로, MySQL 은 주로 일관성과 가용성을 중시하며, 특정 구성과 추가 기술을 사용하여 분할 내성을 어느정도 제공이 가능함. 그러나 기본적으로 CAP 이론에서 분할 내성은 완벽하게 지원이 되지 않으며, MySQL 의 사용 및 구성에 있어 이 점을 고려해야함.

728x90