Tech Review - Apache Cassandra 기본 개념 및 테스트

도넛🤤·2025년 4월 28일
post-thumbnail

1. 개요

이번 포스팅에서는 분산형 NoSQL 데이터베이스인 Apache Cassandra를 설치하고, 기본 개념 학습부터 주요 쿼리 실습, 그리고 cassandra-stress 도구를 활용한 대용량 데이터 삽입 및 트래픽 테스트까지의 과정을 다루어 보려고 합니다.

Apache Cassandra는 뛰어난 확장성과 고가용성을 지원하는 데이터베이스로, 대규모 데이터를 빠르게 처리해야 하는 시스템에서 널리 사용되고 있습니다.

이 글에서는 다음과 같은 과정을 정리합니다.

  1. Cassandra의 핵심 개념과 아키텍처 이해
  2. Docker를 이용한 간편 설치 및 환경 구축
  3. Cassandra Query Language(CQL) 를 통한 기본 데이터 조작
  4. cassandra-stress를 사용한 대용량 데이터 Insert 트래픽 테스트
  5. 테스트 결과 분석 및 주요 인사이트 도출

Tech Review 포스팅은 저의 학습을 정리하고, Cassandra를 처음 접하는 분들부터, 실제 데이터베이스 성능 테스트를 직접 경험해보고 싶은 분들까지 모두 참고할 수 있도록 구성했습니다. 감사합니다.🙂

📄 공식 홈페이지 : https://cassandra.apache.org/
📄 공식 문서 페이지 : https://cassandra.apache.org/doc/latest/
📄 cassandra-stress 명령어 공식 가이드: https://cassandra.apache.org/doc/latest/cassandra/tools/cassandra_stress.html


2. Cassandra 리뷰를 선택한 이유

최근 시스템은 수평적 확장성과 무중단 서비스를 요구하는 경우가 많아졌습니다.
특히 대용량 트래픽 환경에서는 전통적인 RDBMS로는 처리 성능에 한계가 발생할 수 있습니다.

Apache Cassandra는 다음과 같은 강력한 특성을 가지고있어서 선택했습니다.

  1. 수평 확장(Scalability) : 서버를 추가하는 것만으로 용량과 성능을 쉽게 확장 가능
  2. 고가용성(High Availability) : 특정 노드 장애 시에도 시스템 전체가 정상적으로 운영 가능
  3. 빠른 쓰기 성능(Write-optimized) : 초당 수백만 건 이상의 데이터 삽입이 가능
  4. Masterless 아키텍처 : 특정 Master 서버 없이 모든 노드가 동등한 구조
  5. Tunable Consistency : 상황에 따라 성능과 데이터 일관성 사이를 자유롭게 조정 가능

또한, Cassandra는 세계적인 대규모 시스템(Netflix, Instagram 등) 에서도 검증되었습니다.


3. Cassandra 주요 개념 정리

3.1 Cassandra 아키텍처 개요

Apache Cassandra는 고성능, 고가용성, 수평 확장성을 목표로 설계된 분산형 NoSQL 데이터베이스입니다.
Cassandra의 아키텍처는 전통적인 RDBMS와는 다르게 Masterless 구조를 채택하고 있어, 모든 노드가 동등한 역할을 수행합니다.

주요 특징
- Peer-to-Peer 기반 : 모든 노드는 서로 대등하며, 데이터는 클러스터 전체에 분산 저장됩니다.
- 무중단 운영 : 일부 노드가 실패해도 전체 시스템은 정상적으로 동작합니다.
- 튜닝 가능한 일관성 : 사용자가 읽기/쓰기 요청에 대해 원하는 일관성 수준을 선택할 수 있습니다.

3.2 주요 구성 요소

Cluster
- Cassandra 인스턴스(Node)들의 집합입니다.
- 하나의 논리적 데이터베이스를 형성하며, 노드 수는 자유롭게 확장할 수 있습니다.

Node
- Cassandra가 설치되어 실행 중인 서버를 의미합니다.
- 각 Node는 데이터를 저장하고, 클러스터 내 다른 노드들과 통신합니다.

Keyspace
- 데이터베이스의 최상위 개념으로, RDBMS의 Database 에 해당합니다.
- Keyspace에는 데이터 복제 전략(Replication Strategy)과 복제 계수(Replication Factor)가 설정됩니다.

CREATE KEYSPACE example_keyspace
WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3};

Table (예전에는 Column Family)
- 데이터를 실제로 저장하는 구조입니다.
- RDBMS의 Table과 유사하지만, 스키마가 유연합니다.

CREATE TABLE example_table (
    id UUID PRIMARY KEY,
    name TEXT,
    age INT
);

3.3 데이터 저장 방식

Partition
- Cassandra는 데이터를 Partition 단위로 분산 저장합니다.
- Partition Key 를 기준으로 데이터를 분산시키며, 같은 Partition Key를 가진 데이터는 같은 노드에 저장 됩니다.
- Partition 설계는 성능에 큰 영향을 미치므로 매우 중요합니다.

Replica
- 데이터를 여러 노드에 복제하여 저장합니다.
- Replication Factor에 따라 복제본 수가 결정됩니다.

예를 들어, Replication Factor가 3이라면, 하나의 데이터는 서로 다른 3개의 노드에 저장됩니다.

Consistency Level
- Cassandra는 읽기/쓰기 작업의 일관성을 설정할 수 있습니다.
- 주요 Consistency Level 종류 : ONE, QUORUM, ALL
- ONE : 하나의 노드만 응답하면 성공
- QUORUM : 과반수 이상의 노드 응답 필요
- ALL : 모든 복제본 노드의 응답 필요

상황에 따라 성능과 일관성 중 어느 쪽을 더 우선할지 선택할 수 있습니다.

CQL (Cassandra Query Language)

CQL은 Cassandra 전용 질의 언어입니다. 빠른 쓰기 성능과 대규모 분산 처리를 위해 설계된 제한된 질의 모델입니다.
테이블 간의 JOIN을 지원하지 않으며, WHERE 절 사용에도 제한이 있습니다.

따라서 Cassandra에서는 처음부터 조회 패턴을 고려해서 테이블을 설계해야 합니다.
RDBMS처럼 정규화된 테이블을 만들고 나중에 JOIN으로 조합하는 방식이 아니라, 어떤 쿼리를 빠르게 처리할 것인가를 기준으로 필요한 데이터를 한 테이블에 함께 저장하는 비정규화 설계를 지향 합니다.

-- Keyspace 생성
CREATE KEYSPACE mykeyspace
WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1};

-- Table 생성
CREATE TABLE mykeyspace.users (
    user_id UUID PRIMARY KEY,
    username TEXT,
    email TEXT
);

-- 데이터 삽입
INSERT INTO mykeyspace.users (user_id, username, email)
VALUES (uuid(), 'alice', 'alice@example.com');

-- 데이터 조회
SELECT * FROM mykeyspace.users;

참고 문서

📄 Cassandra Data Model Overview : https://cassandra.apache.org/doc/stable/cassandra/data_modeling/index.html
📄 CQL Language Reference : https://cassandra.apache.org/doc/stable/cassandra/cql/index.html


4. 개발 환경 준비

----------------------> 6월부터 진행합니다! 작성중입니다.👨🏻‍💻


5. Cassandra Query Language(CQL)


6. cassandra-stress를 이용한 트래픽 테스트


7. 테스트 결과 분석


8. 최적화 및 주의사항


9. tech review 를 마치며

profile
😼🍩🏋️👨🏻‍💻 아키텍트를 꿈꿉니다.

0개의 댓글