Kakao
기술 블로그
C레벨 - 고난도

카카오톡 메시지 저장소의 Sharding 전략과 데이터 정합성

시스템설계
데이터베이스
분산시스템
MySQLRedis ClusterConsistent HashingKafka
2022년 12월조회 0면접 0원문 보기

배경

카카오톡은 국내 4,700만 이상의 사용자가 매일 수십억 건의 메시지를 주고받는 국민 메신저입니다. 메시지 데이터는 지속적으로 증가하며, 단일 데이터베이스로는 처리가 불가능한 규모에 도달했습니다. 읽기/쓰기 성능을 유지하면서도 데이터 유실 없이 안정적으로 서비스해야 하는 과제가 있었습니다.

도전 과제

수십억 건의 메시지를 실시간으로 저장하고 조회하기 위해 DB Sharding이 필수적이었으나, Shard 간 데이터 정합성 보장, 리밸런싱 시 서비스 무중단, 핫스팟 Shard 처리 등 복합적인 문제를 해결해야 했습니다. 특히 그룹채팅방의 메시지는 여러 사용자에게 동시에 전달되어야 하므로 Shard 키 설계가 매우 중요했습니다.

해결 방안

채팅방 ID 기반 Consistent Hashing으로 Shard를 분배하고, Virtual Node를 도입하여 부하를 균등 분산했습니다. 리밸런싱 시에는 Double Write 패턴으로 무중단 마이그레이션을 구현했으며, 읽기 성능 향상을 위해 최근 메시지 캐시 레이어를 Redis Cluster로 구성했습니다.

결과

Shard 수를 기존 대비 4배로 확장하면서도 평균 응답 시간 3ms 이하를 유지했습니다. 리밸런싱 작업 중에도 서비스 다운타임 제로를 달성했으며, 핫스팟 Shard 발생률을 95% 감소시켰습니다.

핵심 인사이트

  • 1.Consistent Hashing + Virtual Node로 균등한 부하 분산 달성
  • 2.Double Write 패턴으로 무중단 Shard 리밸런싱 구현
  • 3.채팅방 ID 기반 Shard 키가 그룹채팅 시나리오에 최적
  • 4.Redis Cluster 캐시 레이어로 읽기 성능 극대화

이 사례 기반 면접에 도전해보세요

Kakao의 실제 기술적 결정과 트레이드오프를 깊이 파고드는 면접 질문 5가 준비되어 있습니다

분산시스템
데이터베이스
시스템설계
타이머사례 참조 가능결과 아카이브

로그인 없이 바로 면접을 시작할 수 있습니다