Apache Cassandra는 고가용성, 선형 확장성을 가진 분산 NoSQL 데이터베이스다. Facebook이 개발하고 Apache가 관리한다. 마스터리스(masterless) 아키텍처로 단일 장애점이 없다.
핵심 아키텍처
Ring 구조: 모든 노드가 동등한 역할
Node A ─── Node B
│ │
Node D ─── Node C
파티션 키 → 일관된 해싱 → 담당 노드 결정
복제 전략: SimpleStrategy / NetworkTopologyStrategy
Replication Factor(RF): 데이터 복제 수 (보통 3)
데이터 모델 비교 (RDBMS vs Cassandra)
| 개념 | RDBMS | Cassandra |
|---|
| 테이블 | 행/열 | 파티션/행/열 |
| 조인 | 지원 | 미지원 (쿼리 중심 설계) |
| 트랜잭션 | ACID | 경량 트랜잭션(LWT) |
| 인덱스 | 보조 인덱스 | 파티션 키 + 클러스터링 컬럼 |
| 확장 | 수직 확장 | 수평 선형 확장 |
CQL (Cassandra Query Language)
sql
-- 키스페이스 생성
CREATE KEYSPACE blog
WITH replication = {
'class': 'NetworkTopologyStrategy',
'dc1': 3 -- DC당 복제 수
};
-- 테이블 생성 (쿼리 중심 설계)
CREATE TABLE blog.articles_by_user (
user_id UUID,
created TIMESTAMP,
article_id UUID,
title TEXT,
tags SET<TEXT>,
PRIMARY KEY ((user_id), created, article_id)
) WITH CLUSTERING ORDER BY (created DESC);
-- 삽입
INSERT INTO blog.articles_by_user
(user_id, created, article_id, title, tags)
VALUES (
uuid(), toTimestamp(now()), uuid(),
'카산드라 입문', {'db', 'nosql'}
);
-- 조회 (파티션 키 필수)
SELECT * FROM blog.articles_by_user
WHERE user_id = 550e8400-e29b-41d4-a716-446655440000
AND created > '2024-01-01'
LIMIT 20;
일관성 레벨 (Consistency Level)
쓰기/읽기 시 동의해야 하는 복제본 수:
ONE : 1개 (빠름, 약한 일관성)
QUORUM: 과반수 (균형)
ALL : 전체 (강한 일관성, 느림)
강한 일관성: 읽기_CL + 쓰기_CL > RF
예: QUORUM + QUORUM (RF=3: 2+2 > 3)
관련 문서