Discord와 Netflix를 떠받치는 10,000 TPS 보장하는 Cassandra
Discord와 Netflix를 떠받치는
10,000 TPS를 보장하는 Cassandra 강의
이 강의는 RDBMS가 버거워지는 대용량·분산 영역을, Discord 풍 메시징 시스템을 직접 모델링하며 끝까지 파고드는 Apache Cassandra 5.0 실전 강의입니다. 단일 노드부터 3노드 클러스터, 멀티 DC, TypeScript 연동까지 다룹니다.
-- 채널의 최신 메시지 50개 CREATE TABLE messages_by_channel ( channel_id uuid, message_id timeuuid, sender_name text, content text, PRIMARY KEY ((channel_id), message_id) ) WITH CLUSTERING ORDER BY (message_id DESC); SELECT * FROM messages_by_channel WHERE channel_id = ? LIMIT 50;
관계형 DB로 버티다 마주치는 벽들
하나라도 겪어 보셨다면, Cassandra가 왜 다르게 설계됐는지 더 잘 와닿을 거예요.
쓰기가 몰리면 DB부터 흔들린다
읽기 복제본을 붙여도 쓰기 병목은 그대로입니다. 트래픽이 튀는 순간 가장 먼저 비명을 지르는 건 데이터베이스예요.
샤딩을 직접 짜다 지친다
키를 나누고 라우팅을 손으로 관리하다 보면, 애플리케이션 코드가 점점 너덜너덜해집니다.
한 대가 죽으면 새벽에 깬다
마스터가 멈추면 서비스도 멈춥니다. 장애 한 번에 밤잠을 설친 경험, 한 번쯤 있으실 거예요.
Cassandra는 바로 이 지점들을 설계의 출발점으로 삼습니다.
관계형 DB가 한계에 부딪히는 곳에서 시작합니다
Apache Cassandra는 대규모 데이터를 여러 노드에 나눠 저장하는 오픈소스 NoSQL 분산 데이터베이스(distributed database)입니다. 관계형 데이터베이스(RDBMS)로는 버거운 초당 수만 건의 쓰기, 멈추면 안 되는 서비스, 끝없이 쌓이는 시계열 데이터 — 이 지점에서 Cassandra의 설계가 빛납니다.
쓰기에 최적화된 구조
Commit Log와 Memtable 기반의 쓰기 경로로 대량 쓰기를 빠르게 흡수합니다. 메시지·로그·이벤트처럼 끝없이 쌓이는 데이터에 강합니다.
단일 장애점이 없다
마스터 없는 링 구조라 한 노드가 죽어도 서비스가 멈추지 않습니다. 노드를 더 붙이면 용량과 처리량이 함께 늘어납니다.
분산과 일관성을 선택
CAP에서 가용성을 택하되, 일관성 레벨을 쿼리마다 조절합니다. "어디서 강하게, 어디서 느슨하게"를 직접 설계하게 됩니다.
세계 최대 규모의 서비스들이 씁니다
Cassandra는 수많은 사용자를 감당해야 하는 곳에서 오래 검증돼 왔습니다. 이 강의는 그 워크로드를 직접 다뤄 봅니다.
수십억 개의 메시지를 채널·DM 단위로 저장. 이 강의의 실습 도메인이 바로 이 메시징 모델입니다.
시청 기록·추천을 떠받치는 대규모 분산 저장소로 오래 운영해 온 대표 사례.
수만 대 규모의 노드로 운영되는 것으로 알려진, 초대형 클러스터의 상징.
이 규모의 설계, Discord 풍 메시징 백엔드로 직접 손에 익혀 보세요.
커리큘럼 보러 가기Discord 풍 메시징 백엔드를 직접 모델링합니다
실제로 만들 법한 메시징 시스템을 쿼리 우선 설계와 데이터 모델링(data modeling)으로 직접 풀어 갑니다. 그 과정에서 관계형과는 다른 Cassandra의 데이터 모델링 사고방식이 자연스럽게 몸에 뱁니다.
다루는 기능
- 채널 메시지 타임라인 (최신순 조회·페이징)
- 1:1 DM (양방향 조회·denormalization)
- 키워드 메시지 검색
- 닉네임 중복 방지 (LWT)
부딪히고 푸는 문제
- 큰 파티션·핫 파티션 안티패턴
- 시간 버킷팅으로 파티션 통제
- ALLOW FILTERING의 함정과 재설계
- 좋은 모델 vs 나쁜 모델의 성능 차이
단일 노드
기초·모델링·내부 구조
3노드 클러스터
복제·일관성·튜닝
멀티 DC
지리적 분산 복제
앱 연동
JavaScript / TypeScript 드라이버
관계형 사고를 잠시 내려놓습니다
같은 "채널 최신 메시지 50개" 조회도, 관계형과 Cassandra는 출발점이 다릅니다.
-- 정규화된 테이블을 JOIN으로 엮는다 SELECT m.*, u.name FROM messages m JOIN users u ON u.id = m.sender_id WHERE m.channel_id = ? ORDER BY m.created_at DESC LIMIT 50;
-- 조회 모양에 맞춰 테이블을 미리 만든다 SELECT * FROM messages_by_channel WHERE channel_id = ? LIMIT 50; -- 정렬·비정규화는 쓰기 시점에 끝내둔다
JOIN과 정규화 대신, 어떻게 읽을지를 먼저 정하고 테이블을 만듭니다. 이 강의가 가장 공들이는 사고방식이에요.
말보다, 직접 움직이는 화면으로 보여 드립니다
실제 강의에서 어떻게 모델을 짜고 클러스터를 다루는지 짧은 클립으로 미리 확인해 보세요.
여섯 단계로 차근차근 쌓아 올립니다
기초 문법에서 출발해 데이터 모델링, 분산 내부, 일관성과 튜닝, 멀티 DC와 앱 연동까지 한 흐름으로 이어집니다.
Cassandra 소개와 개발 환경 구축
등장 배경과 적합 워크로드, RDBMS·MongoDB와의 차이. Docker Compose 단일 노드, IntelliJ·cqlsh 셋업과 첫 Keyspace까지.
CQL 기초와 메시징 도메인 모델링
데이터 타입·Primary Key·CRUD·Collection·UDT. 쿼리 우선 설계로 채널 타임라인·1:1 DM·검색을 모델링하고 안티패턴과 LWT까지.
내부 아키텍처와 분산 클러스터 확장
토큰 링, 쓰기·읽기 경로, Compaction, Tombstone. 1노드를 3노드로 키우며 Replication Factor·Gossip·Snitch·nodetool을 다룹니다.
일관성 레벨과 CAP, 쿼리 튜닝
CAP와 Cassandra의 선택, R+W>N. TRACING·ALLOW FILTERING·SAI·Materialized View, cassandra-stress로 대용량 성능 분석까지.
멀티 DC 복제와 앱 연동 (심화)
2 DC 구성, NetworkTopologyStrategy, LOCAL·EACH_QUORUM. TypeScript 드라이버로 메시징 모델·페이징을 구현하고 Testcontainers로 테스트.
Cassandra의 한계와 대안
불리한 케이스, Discord의 ScyllaDB 이전, ScyllaDB·DynamoDB 비교와 강의 마무리·추가 학습 리소스.
단일 노드에서 멀티 DC까지 한 흐름으로 이어집니다.
지금 시작하기이 강의를 마치면, 이걸 할 수 있습니다
이런 분께 맞고, 이것만 준비하면 됩니다
◆이런 분께 추천합니다
- RDBMS는 써봤지만 분산 DB는 처음인 백엔드 개발자
- NoSQL·대용량 처리를 이력서에 더하고 싶은 취준생
- "왜 이렇게 모델링하는가"까지 이해하고 싶은 분
- Discord·Netflix 같은 규모의 설계가 궁금한 분
◆준비물
- SQL과 기본적인 백엔드 개발 경험
- Docker / Docker Compose 사용 환경
- macOS 환경 (실습은 macOS 기준 진행)
- IntelliJ Database 플러그인 (cqlsh 병행)
판교에서 서버를 다루는 지식공유자
집에서 빈둥대다 개발에 흥미를 느껴 공부를 시작했고, 지금은 판교에서 플랫폼 서버 개발을 담당하고 있습니다. 제가 공부했던 방법과 실무에서 마주치는 여러 문제·해결책을 나누고 싶어 지식공유자 활동을 이어가고 있습니다.
"저에게 지식공유는 '습관'이에요." 인터뷰 보기 →
- 前샌드박스IP 관련 블록체인 개발자
- 前메타버스 백엔드 개발자
- 現판교에서 고여가는 서버 개발자
강의는 저 혼자의 지식으로 만들어지지 않습니다. 현업에서 활약하는 개발자들이 함께합니다.
카카오 서버 개발 · 면접관
토스에서 서버 개발
신세계 그룹을 거쳐 네이버에서 개발
실리콘밸리 개발자 · 토스 개발자 추천으로 합류
먼저 궁금하실 것들
Cassandra는 어떤 데이터베이스이고, 언제 쓰나요?
Cassandra를 한 번도 안 써봤는데 따라갈 수 있나요?
실습 환경은 어떻게 구성하나요?
어떤 도구로 쿼리를 실행하나요?
실제 애플리케이션 연동도 다루나요?
보안이나 운영 모니터링도 배우나요?
우리 서비스 규모엔 RDBMS로 충분한데, 그래도 들을 이유가 있나요?
Cassandra가 안 맞는 경우도 다루나요?
분산 데이터베이스, 이제 제대로 다뤄 봅니다
메시징 시스템을 직접 만들며 Cassandra의 사고방식을 손에 익히세요.
수강 시작하기Apache Cassandra 5.0 · Docker 실습
혼자 듣고 끝나지 않게
배움은 강의 밖에서도 이어집니다. 개발자들이 모여 커리어 고민, 현업의 상황, 기술 이야기를 자유롭게 나누는 카카오톡 오픈채팅을 운영하고 있어요. 강의를 듣다 막힌 부분도 편하게 물어보세요.
개발자들이 모이는 카카오톡 오픈채팅
커리어, 현업의 상황, 기술적인 고민까지. 가볍게 묻고 같이 답을 찾는 공간입니다.
open.kakao.com/o/ggBVZsai