본문 바로가기

Newly I Learned

NoSQL, Cassandra

NoSQL과 Cassandra: 분산 시스템 시대의 데이터베이스 선택

이번 글에서는 분산 시스템 관련 데이터베이스의 새로운 물결인 NoSQL과 그 대표 주자 중 하나인 Cassandra DB에 대해 깊이 있게 다뤄보려고 한다. 왜 기존의 데이터베이스로는 급증하는 데이터를 감당하기 어려워졌는지부터 시작해, NoSQL이 가져온 변화와 그 이면의 한계점 및 주의사항까지 살펴보도록 하자.


1. ⚙️ RDBMS의 한계: 왜 NoSQL이 필요해졌는가?

전통적인 관계형 데이터베이스(RDBMS)는 데이터의 정합성과 무결성을 최우선으로 하는 ACID (원자성, 일관성, 고립성, 지속성) 특성을 철저히 준수한다.

하지만 인터넷 트래픽과 데이터양이 폭발적으로 증가하면서 RDBMS는 근본적인 한계에 부딪히기 시작했다.

  • 확장성의 한계: RDBMS는 기본적으로 하나의 강력한 서버에 의존하는 수직 확장(Scale-up) 방식을 취한다. 이는 비용적, 물리적 한계가 명확하다.
  • 가용성 및 성능 저하: 데이터가 너무 커지면 Join 연산 시 성능 저하가 발생하며, 단일 서버 장애 시 전체 서비스의 가용성(Availability)이 위협받는다.

이러한 배경에서 대규모 트래픽을 저렴한 서버 여러 대에 분산하여 처리하는 수평 확장(Scale-out)이 가능한 새로운 데이터베이스 패러다임이 요구되었다.


2. ✨ NoSQL의 등장과 특징

NoSQL(Not Only SQL)은 RDBMS가 가지는 확장성의 한계를 극복하기 위해 등장한 데이터베이스의 총칭이다.

  • 수평 확장 (Scale-out): 저렴한 범용 서버 여러 대에 데이터를 분산 저장하여 성능을 높인다.
  • 유연한 스키마 (Schema-less): 정형화되지 않은 다양한 형태의 데이터를 저장하기 쉽다.
  • 다양한 모델: Key-Value, Document, Column Family, Graph 등 서비스의 목적에 최적화된 모델을 선택할 수 있다.

3. 💡 NoSQL의 이론적 배경: CAP 정리와 BASE 모델

NoSQL을 이해하는 핵심은 분산 시스템의 철학을 담고 있는 CAP 정리(CAP Theorem)ACID vs BASE 패러다임의 변화에 있다.

A. CAP 정리 (Brewer's Theorem)

분산 시스템은 다음 세 가지 특성 중 단 두 가지만 동시에 만족할 수 있다.

  1. 일관성 (Consistency, C): 모든 사용자에게 동일한 최신 데이터가 보여야 한다. (RDBMS의 ACID 일관성)
  2. 가용성 (Availability, A): 시스템은 항상 사용 가능하며, 모든 요청에 대해 응답할 수 있어야 한다.
  3. 분할 내성 (Partition Tolerance, P): 네트워크 오류로 노드 간 통신이 단절(Partition)되는 상황에서도 시스템이 동작해야 한다.

실제 인터넷 환경은 네트워크 오류(P)를 피할 수 없기 때문에, 분산 DB는 현실적으로 P를 필수로 선택하고, C와 A 중 하나를 선택해야 한다. NoSQL DB들은 대개 가용성(A)과 분할 내성(P)을 선택하고, 일관성(C)을 일부 포기하는 방식으로 확장성을 확보한다.

B. ACID vs BASE

구분 ACID (RDBMS); 데이터 무결성 및 강력한 일관성 BASE (NoSQL); 확장성 및 고가용성
특징 Atomicity, Consistency, Isolation, Durability Basically Available (기본적인 가용성)
Soft state (부드러운 상태)
Eventually consistent (최종 일관성)

NoSQL은 ACID를 포기하고 BASE 모델을 채택한다. 즉, 일시적으로 데이터가 불일치할 수 있지만(Soft state), 시간이 지나면 결국 일관된 상태로 수렴하는 최종 일관성(Eventually consistent)을 허용함으로써 고가용성(Basically Available)을 확보한다.


4. 🛡️ Cassandra DB 집중 분석: 대규모 분산 환경의 해결사

Cassandra DB는 페이스북에서 개발한 뒤 아파치 프로젝트로 이관된 대표적인 Column Family 기반 NoSQL 데이터베이스다. AP(가용성 + 분할 내성)를 선택한 대표적인 사례라고 할 수 있다.

  • 특징:
    • Peer-to-Peer 분산 구조: 마스터 노드 없이 모든 노드가 동등하여 단일 장애 지점(Single Point of Failure)이 없다. 이는 최고의 고가용성을 보장한다.
    • 선형적 확장성: 노드를 추가하는 만큼 성능이 선형적으로 증가하는 뛰어난 수평 확장성을 제공한다.
    • "Always-on" 가용성: 높은 부하 환경에서도 서비스 중단 없이 운영될 수 있도록 설계되었다.

5. ⚠️ NoSQL 및 Cassandra의 한계와 주의사항

NoSQL과 Cassandra는 강력한 장점을 가졌지만, RDBMS가 아니기에 발생하는 명확한 한계주의사항이 있다.

  • NoSQL의 공통적 한계:
    • 트랜잭션 및 Join의 어려움: ACID를 완벽히 보장하는 복잡한 트랜잭션 처리나 여러 테이블에 걸친 Join 연산이 어렵다.
    • 데이터 모델링의 복잡성: 관계형 사고방식 대신 쿼리 패턴에 맞춰 데이터를 중복 저장하며 모델링해야 한다.
  • Cassandra의 주요 한계:
    • 복잡한 쿼리 제약: Primary Key나 Secondary Index가 없는 컬럼으로는 검색이 사실상 불가능하다. 복잡한 조건을 가진 Ad-hoc 쿼리에 취약하다.
    • 높은 학습 곡선: 데이터 모델링, 복제 전략(Replication Strategy), 튜닝 등 운영을 위한 학습 비용이 높다.

6. 💔 사이드 이펙트: 최종 일관성 (Eventual Consistency)과 모델링

NoSQL, 특히 Cassandra를 도입할 때 발생하는 주요 사이드 이펙트데이터 일관성 문제이다.

  • 최종 일관성 (Eventual Consistency): Cassandra는 BASE 모델에 따라 데이터가 모든 노드에 복제되는 데 시간차가 있을 수 있다. 이로 인해 짧은 순간 동안 사용자가 최신 데이터가 아닌 과거 데이터를 읽을 수 있다.
  • 쿼리 기반 모델링: RDBMS 방식처럼 데이터를 정규화하는 것은 금지된다. 읽기(Read)의 효율을 극대화하기 위해 데이터를 미리 비정규화(De-normalization)하여 중복 저장하는 것이 Cassandra 설계의 핵심이다. 만약 RDBMS처럼 모델링하면 성능을 전혀 활용할 수 없다.

7. 🧐 결론: 최적의 선택을 위한 고민

NoSQL과 Cassandra는 대규모 분산 환경에서 확장성가용성이라는 강력한 무기를 제공한다. 하지만 이는 일관성트랜잭션이라는 RDBMS의 핵심 가치를 포기하고 얻어낸 결과이다.

데이터베이스를 선택할 때는 CAP 정리의 교훈처럼, '무엇이 더 좋은가'가 아니라 '우리 서비스의 워크로드가 C, A, P 중 무엇을 최우선으로 요구하는가'에 대한 질문에 답해야 합니다. 일관성이 최우선이라면 RDBMS를, 대용량 트래픽과 가용성이 핵심이라면 NoSQL(Cassandra)을 선택하는 것이 현명한 방법이다.