Cassandra는 컬럼 패밀리(column family) 기반의 데이터 모델을 사용. 이는 행과 컬럼으로 데이터를 저장하지만, 각 행이 다른 컬럼을 가질 수 있는 유연성을 제공.
스키마를 미리 정의해야 하며, 데이터 모델링 시 쿼리 패턴을 고려하여 설계하는 것이 중요.
대량의 데이터를 빠르게 읽고 쓰는 데 최적화되어 있으며, 특히 타임 시리즈 데이터나 로그 데이터에 적합.
분산 아키텍처로써 피어 투 피어(p2p) 아키택처를 채택하여 노드 간의 역할 분담이 없고, 모든 노드가 동일한 역할을 수행합니다.
클러스터에 노드를 추가함으로써 손쉽게 수평 확장이 가능하며 데이터가 자동으로 분산됩니다.
노드를 추가하거나 제거할 때 클러스터의 가용성을 유지할 수 있습니다.
CAP 이론 : 가용성과 파티션 내구성(partition tolerance)을 우선시하며 일관성 수준을 조절할 수 있습니다.
튜너블 일관성 : 읽기 및 쓰기 작업 시 일관성 수준을 설정할 수 있어, 필요에 따라 일관성과 성능 간의 균형을 맞출 수 있습니다.
Eventual Consistency : 기본적으로 최종 일관성을 제공하지만, 일관성 수준을 조정하여 더 강한 일관성을 구현할 수 있습니다.
CQL(Cassandra Query Language) : SQL과 유사한 쿼리 언어를 제공하지만, JOIN이나 서브쿼리 같은 복잡한 쿼리는 지원하지 않습니다.
빠른 쓰기 및 읽기 성능을 위해 설계되었으며, 복잡한 쿼리보다는 사전 설계된 쿼리 패턴을 따릅니다.
보조 인덱스(secondary indexes)를 지원하지만, 제한적이며 대규모 데이터셋에서는 성능 저하가 발생할 수 있습니다.
높은 쓰기 처리량과 낮은 쓰기 지연 시간을 제공하여 실시간 분석, 로그 수집, IoT 데이터 저장 등 대규모 쓰기 작업에 적합합니다.
적절한 데이터 모델링을 통해 빠른 읽기 성능을 제공하지만, 복잡한 쿼리에는 부적합할 수 있습니다.
대규모 분산 환경에서 안정적으로 동작하며 글로벌 분산 배포에도 유리.
경량 트랜잭션 : 단일 파티션 내에선만 경량 트랜잭션을 지원하며 복잡한 다중 파티션 트랜잭션은 지원하지 않습니다.
일관성 수준을 조절하여 성능과 일관성 간의 트레이드 오프를 관리할 수 있습니다.
대규모 데이터 저장 : 소셜 미디어 피드, 로그 데이터, IoT 스트림 데이터 등 대용량 데이터를 빠르게 저장하고 처리해야 하는 경우.
분산 애플리케이션 : 전 세계적으로 분산된 사용자 기반을 가진 애플리케이션에서 높은 가용성과 확장성이 필요한 경우.
문서 지향 데이터 모델 : MongoDB는 BSON(Binary JSON) 형식의 문서를 사용하여 데이터를 저장합니다. 각 문서는 키-값으로 구성되며, 복잡한 중첩 구조와 배열을 지원합니다.
스키마가 유연하여 각 문서가 다른 구조를 가질 수 있습니다. 이는 애플리케이션 개발 시 빠른 프로토타이핑과 변경에 유리.
복잡한 데이터 구조를 저장하고, 애플리케이션 개발에서 자주 사용되는 CRUD 작업에 최적화되어 있습니다.
기본적으로 하나의 마스터 노드와 여러 슬레이브 노드(replica set)로 구성되며 샤딩(sharding)을 통해 수평 확장을 지원.
데이터가 샤드(shard)로 분할되어 여러 서버에 분산 저장됩니다. 샤드 키의 선택이 중요하며, 잘못 선택 시 성능 저하가 발생할 수 있습니다.
고가용성과 데이터 복제를 위해 replica set을 구성하며, 자동 장애 조치를 지원.
CAP 이론 : 일관성과 가용성을 우선시하며, 파티션 내구성은 샤드된 환경에서 보장됩니다.
강한 일관성 : 기본적으로 강한 일관성을 제공하며, 읽기와 쓰기가 마스터 노드에서 이루어집니다.
Write Concern 및 Read Preference : 쓰기와 읽기 작업 시 일관성 수준을 조절할 수 있는 옵션을 제공.
MongoDB Query Language(MQL) : JSON과 유사한 쿼리 문법을 사용하며, 복잡한 쿼리, 집계 파이프라인, 텍스트 검색 등을 지원합니다.
집계 프레임워크 : 강력한 집계 파이프라인을 통해 데이터 처리 및 분석 작업을 수행할 수 있습니다.
인덱싱 : 다양한 인덱스 유형을 지원하여 쿼리 성능을 향상시킬 수 있습니다.
읽기와 쓰기 작업 모두에 대해 균형 잡힌 성능을 제공하며, 웹 애플리케이션, 모바일 백엔드, 콘텐츠 관리 시스템 등 다양한 용도에 적합.
스키마가 유연하여 빠르게 변화하는 애플리케이션 요구사항에 대응하기 쉽습니다.
강력한 집계 프레임워크를 통해 데이터 분석 및 보고서 생성에 유리합니다.
다중 문서, 다중 컬렉션에 걸친 완전하 ACID 트랜잭션을 지원.
기본적으로 강한 일관성을 제공하여, 트랜잭션 처리 시 데이터의 무결성을 보장
웹 및 모바일 애플리케이션 : 빠른 개발 속도와 유연한 데이터 모델이 필요한 경우.
콘텐츠 관리 시스템 : 다양한 형태의 콘텐츠를 저장하고 관리해야 하는 시스템
실시간 분석 및 대시보드 : 복잡한 쿼리와 집계 작업이 필요한 실시간 데이터 분석
취업 준비 중인 신입 Java 및 Spring 백엔드 개발자라면 Cassandra와 MongoDB의 차이점을 이해하고 실제로 다뤄보는 경험이 큰 도움이 될 것입니다. 이를 위해 다음과 같은 실습 프로젝트와 학습 과제를 추천드립니다.
spring-boot-starter-data-mongodb
의존성을 추가하여 MongoDB와의 연동을 설정합니다.spring-boot-starter-data-cassandra
의존성을 추가하여 Cassandra와의 연동을 설정합니다.이러한 실습을 통해 Cassandra와 MongoDB의 실제 사용 경험을 쌓고, 두 데이터베이스의 차이점을 직접 체험함으로써 면접 시 깊이 있는 대화를 나눌 수 있을 것입니다. 또한, Spring Framework와의 연동을 통해 백엔드 개발자로서의 역량을 더욱 강화할 수 있습니다. 꾸준한 실습과 프로젝트 경험이 좋은 결과로 이어지길 바랍니다!