Not Only SQL - 기존의 RDB가 가진 한계를 깨기 위해 나온 새로운 방식의 데이터베이스들을 통칭한다.
RDB는 정해진 틀이 엄격하고 데이터의 무결성을 지키는데 목숨을 건다. 하지만 동시 접속 트래픽이 많은 환경에서는 오히려 RDB의 꼼꼼함이 독이 된다.
한대의 서버를 Scale-up하는 것에 한계가 있고, Scale-out하고 싶어도 RDB는 여러 대 사이에서 락을 걸고 쿼럼을 맞추기가 너무 무겁고 느리다.
정합성과 확장성 사이에서, 확장성을 극대화하기 위해 정합성의 일부를 의식적으로 포기한 시스템이 NoSQL이다.
카산드라는 태어날 때부터 '서버 한 대로는 부족하다. 무조건 여러 대가 팀으로 움직인다'는 전제로 만들어진 데이터베이스이다.
여러대의 서버가 동등하게 원형으로 모여서, 데이터를 골고루 나눠 갖고, 서로 복제본을 챙겨주며 절대 죽지 않는 시스템을 만드는 DB이다.
<동작 방식>
1. 파티션 키 (Partition Key): 첫 번째 목적지 찾기
데이터(예: user_id = 'merong')가 들어오면, 카산드라는 이 키를 해시 함수(Hash Function)라는 마법 상자에 넣는다.
입력: merong
출력: -152348721 (엄청나게 큰 숫자 중 하나)
역할: 이 숫자가 속한 범위를 관리하는 서버가 첫 번째 저장소(Primary Replica)가 된다. 예를 들어 -2억 ~ 0 사이는 1번 서버 담당이라면, 데이터는 일단 1번 서버로 간다.
2. 복제 (Replication): 옆집으로 복사하기
카산드라는 복제 계수(Replication Factor, RF)라는 설정값을 미리 알고 있다. 만약 RF = 3이라면:
1단계: 파티션 키로 찾은 1번 서버에 데이터를 저장한다.
2단계: 링(Ring) 모양의 구조에서 1번 서버의 시계 방향 바로 다음 서버(2번 서버)에 복사본을 보낸다.
3단계: 또 그 다음 서버인 3번 서버에 마지막 복사본을 보낸다.
결과적으로: 하나의 데이터가 1번(원본), 2번(복제), 3번(복제) 서버에 나란히 저장된다.
AWS의 완전 관리형 key-value/document 스토어.
DynamoDB는 데이터가 늘어나면 내부적으로 창고(partition)을 계속 쪼갠다.
1. 처음에는 partition 1개에 데이터를 다 넣는다
2. 데이터가 10GB가 넘거나, 요청량이 설정한 한계를 넘으면 창고를 2개로 쪼개고 파티션 키 범위에 따라 데이터를 나눠 담는다.
3. 이 과정을 무한히 반복한다. 그래서 데이터가 10TB가 되어도 성능이 떨어지지 않는다.
<파티션 분할 과정>
1. 임계치 도달: 1번 파티션이 10GB에 도달하거나, 설정한 RCU/WCU 성능 한계에 부딪힌다.
2. 새 창고 확보: AWS가 뒤에서 몰래 2번 파티션(새 서버)을 준비한다.
3. 데이터 이사 (Split): 1번 파티션에 있던 데이터를 해시 범위(Hash Range)에 따라 절반으로 나눈다.
예: 해시값이 0~50인 데이터는 1번에 남기고, 51~100인 데이터는 2번으로 옮긴다.
4. 완료: 이제 테이블은 2개의 물리적인 서버에 나누어 저장된 상태가 된다.
| 비교 항목 | Apache Cassandra | AWS DynamoDB |
|---|---|---|
| 서비스 형태 | 오픈소스 (설치형/관리형 선택) | 완전 관리형 (Serverless) |
| 관리 부담 | 높음 (서버 설치, 패치, 복제 직접 수행) | 매우 낮음 (AWS 자동 관리) |
| 확장 방식 | 노드(Node) 물리적 추가 | 처리량(RCU/WCU) 수치 조절 |
| 복제 방식 | 복제 계수(RF) 직접 설정 (보통 3) | 3개 가용 영역(AZ) 자동 복제 |
| 일관성 제어 | 쿼럼(Quorum) 수치 미세 조정 (0~N) | 결과적/강한 일관성 중 선택 |
| 비용 모델 | 서버 대수당 고정 비용 (24시간 가동) | 쓴 만큼 지불 (Pay-as-you-go) |
| 특장점 | 특정 클라우드 종속 없음 (어디서든 실행) | AWS 생태계(Lambda 등)와 강력한 결합 |