contents
CAP 이론은 컴퓨터 과학자 에릭 브루어(Eric Brewer)가 처음 발표하여 브루어의 정리라고도 알려져 있으며, 분산 시스템 설계의 기본 원칙입니다. 이 이론은 어떤 분산 데이터 저장소든 다음 세 가지 보장 사항 중 최대 두 가지만을 제공할 수 있다고 말합니다.
- Consistency (일관성)
- Availability (가용성)
- Partition Tolerance (파티션 허용성)
이는 분산 시스템을 설계할 때 반드시 트레이드오프(trade-off)를 해야 함을 의미합니다. 각 구성 요소와 트레이드오프에 대해 자세히 살펴보겠습니다.
세 가지 보장 사항
1. 일관성 (Consistency) 🔗
일관성은 모든 읽기 요청이 가장 최근의 쓰기 결과를 받거나 오류를 받는 것을 의미합니다. 일관성 있는 시스템에서는 모든 노드가 동시에 동일한 데이터를 봅니다. 시스템에 데이터를 쓰면, 이후 그 데이터에 대한 모든 요청은 새로운 값을 반환합니다.
- 비유: 그룹 채팅방에 있는 모든 사람이 동시에 정확히 동일한 메시지 기록을 봅니다. 메시지는 모든 사람에게 보이거나 아무에게도 보이지 않습니다. 다른 사용자들 사이에 지연이나 순서가 맞지 않는 메시지는 없습니다.
2. 가용성 (Availability) ✅
가용성은 모든 요청이 (오류가 아닌) 응답을 받는 것을 의미하지만, 그 응답이 가장 최근의 쓰기 결과를 포함한다는 보장은 없습니다. 가용성이 높은 시스템에서는 일부 노드가 다운되더라도 클라이언트가 요청을 보내면 항상 응답을 받습니다.
- 비유: ATM은 항상 계좌 잔액을 조회할 수 있게 해줍니다. 다른 지점에서 방금 입금했다면 몇 초 정도 오래된 정보일 수는 있지만, "죄송합니다, 지금은 답변할 수 없습니다."와 같은 오류 화면은 절대 표시하지 않습니다. 항상 작동합니다.
3. 파티션 허용성 (Partition Tolerance)
파티션 허용성은 노드 간 네트워크에 의해 임의의 수의 메시지가 손실되거나 지연되더라도 시스템이 계속 작동하는 것을 의미합니다. 간단히 말해, 서버들을 연결하는 네트워크가 끊어지더라도("네트워크 파티션") 시스템은 작동해야 합니다.
- 비유: 회사의 서울과 뉴욕 데이터 센터 간의 인터넷 연결이 끊겼습니다. 파티션 허용성은 서울과 뉴욕의 서버들이 서로 통신할 수 없음에도 불구하고 계속해서 기능을 수행해야 함을 의미합니다.
핵심 트레이드오프: 왜 세 가지 모두를 가질 수 없는가 ⚖️
둘 이상의 컴퓨터에서 실행되는 실제 분산 시스템에서는 네트워크 장애가 필연적입니다. 이는 파티션 허용성(P)은 선택이 아니라 필수 요구사항임을 의미합니다. 파티션 허용성이 없는 시스템은 네트워크에 작은 결함이 생기는 순간 완전히 실패할 것입니다.
따라서 CAP 이론의 실제 트레이드오프는 항상 네트워크 파티션이 발생했을 때 일관성(C) 과 가용성(A) 사이에서 이루어집니다.
스스로에게 이렇게 물어야 합니다: "내 시스템의 노드들이 서로 통신할 수 없을 때, 그들은 무엇을 해야 하는가?"
시나리오 1: 일관성과 파티션 허용성 선택 (CP)
CP 시스템은 불일치를 방지하기 위해 가용성을 희생하기로 선택합니다.
- 파티션 발생 시: 만약 노드가 가진 데이터가 최신 버전임을 보장할 수 없다면(가장 최근의 쓰기를 가진 노드와 통신할 수 없기 때문에), 응답을 거부합니다. 잠재적으로 오래된 데이터를 반환하는 대신 오류를 반환하거나 타임아웃됩니다.
- 비유: 네트워크 장애로 은행 지점들이 서로 통신할 수 없게 되었습니다. 당신이 두 다른 지점에서 계좌의 동일한 10만원을 인출하는 것을 방지하기 위해, 지점들은 인출 처리를 중단합니다(가용성을 포기). 그들은 가용성보다 정확성을 선택한 것입니다.
- 예시: MongoDB (기본 설정), Redis, 그리고 PostgreSQL과 같은 많은 관계형 데이터베이스.
시나리오 2: 가용성과 파티션 허용성 선택 (AP)
AP 시스템은 가용성을 보장하기 위해 일관성을 희생하기로 선택합니다.
- 파티션 발생 시: 모든 노드는 다른 노드에 도달할 수 없다는 것을 알더라도 요청에 계속 응답합니다. 이는 한 사용자가 한 노드에서 오래된 데이터를 읽는 동안 다른 사용자가 다른 노드에 새 데이터를 쓸 수 있음을 의미합니다. 시스템은 네트워크 파티션이 해결되면 이러한 불일치를 해소하기 위해 노력합니다. 이를 최종적 일관성(eventual consistency) 이라고 합니다.
- 비유: 네트워크 장애 중에도 소셜 미디어 사이트는 여전히 게시물을 보고 "좋아요" 버튼을 누를 수 있게 해줍니다. 당신의 "좋아요"는 로컬 서버에 저장되었다가 나중에 메인 시스템과 동기화될 수 있습니다. 당신이 보고 있는 피드가 약간 오래된 버전일 수 있지만, 서비스는 여전히 작동하고 있습니다(가용성).
- 예시: Amazon DynamoDB, Cassandra, CouchDB.
CA는 어떤가?
CA(일관성 및 가용성) 시스템은 어떤 네트워크 파티션도 허용할 수 없는 이론적인 시스템입니다. 이는 단일 서버 데이터베이스와 같은 비분산 시스템에서만 가능합니다. CAP 이론은 분산 시스템에 적용되므로, CA 케이스는 일반적으로 현대적이고 확장 가능한 아키텍처에서 실용적인 선택으로 간주되지 않습니다.
결론적으로, CAP 이론은 설계자들이 피할 수 없는 네트워크 장애에 직면했을 때 일관성과 가용성 사이에서 중요한 트레이드오프를 하도록 강제하는 분산 시스템의 기본 원칙입니다. CP 시스템과 AP 시스템 사이의 선택은 전적으로 구축하려는 애플리케이션의 특정 요구사항에 따라 달라집니다.
references