강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của mokdogdev
mokdogdev

câu hỏi đã được viết

Khóa học hoàn thiện năng lực kỹ sư AI Native không thể bị thay thế trong kỷ nguyên AI: Thiết kế hệ thống Big Tech Hoa Kỳ, tư duy thuật toán & đóng góp thực tế cho mã nguồn mở.

Thiết kế hệ thống và mở rộng quy mô dịch vụ nhắn tin WhatsApp DeepDive [Cập nhật]

채팅을 영속할 DB로 RDB를 선택한 이유도 궁금합니다

Đã giải quyết

Viết

·

238

0

채팅은 강결합할 트랜잭션이 불필요해보이는데 nosql을 사용 하지않는 이유는 뭘까요?

소프트웨어-설계시스템-디자인

Câu trả lời 2

0

americasnail님의 프로필 이미지
americasnail
Người chia sẻ kiến thức

안녕하세요. 목동 개발자님

좋은 질문을 해주셨습니다.

채팅 데이터를 영속화하는 데 RDB를 선택한 이유는, 채팅 시스템에서 메시지와 사용자, 타임스탬프 같은 데이터가 명확한 구조를 가지기 때문입니다. RDB는 이런 구조화된 데이터를 테이블로 관리하기 쉽고, 메시지 전송 순서나 사용자간의 관계를 정확하게 보장하는 데 유리합니다. 예를 들면, 메시지 ID, 발신자, 수신자, 전송 시간을 하나의 레코드로 저장하면서 데이터 무결성을 유지할 수 있습니다.

또한, RDB는 ACID(원자성, 일관성, 격리성, 지속성) 속성을 지원해 메시지 전송 중 오류가 발생해도 데이터가 손상되지 않도록 보장합니다. 예를 들어, 메시지를 보내는 동시에 읽음 상태를 업데이트하는 작업을 트랜잭션으로 묶을 수 있습니다.

쿼리 효율성도 중요한데, RDB는 조인(JOIN)을 통해 사용자, 채팅방, 메시지 간 관계를 효율적으로 조회할 수 있습니다. 예를 들어, 특정 그룹의 모든 메시지를 시간순으로 가져오거나 특정 사용자가 받은 메시지만 필터링하는 작업이 용이합니다.

실제 사례를 보면, WhatsApp은 초기 아키텍처에서 MySQL 같은 RDB를 사용했으며, Slack도 MySQL을 사용해 데이터 저장을 관리했습니다

참고 링크: (https://slack.engineering/scaling-datastores-at-slack-with-vitess/)

질문에서 채팅은 강결합 트랜잭션이 불필요해 보인다고 언급해주셨는데, 이는 부분적으로 공감할 수 있습니다. NoSQL은 확장성과 유연성이 뛰어나 대규모 분산 시스템에 강점이 있습니다. 하지만 채팅 시스템에서는 단순히 메시지를 저장하는 것뿐 아니라, 읽음 상태 업데이트, 그룹 채팅 멤버 관리 등 데이터 일관성이 중요한 작업이 있습니다.


RDB는 이런 경우 트랜잭션을 통해 안정적으로 처리할 수 있지만, NoSQL은 기본적으로 eventual consistency(최종 일관성)를 제공하는 경우가 많아 실시간성이 중요한 채팅에서 일시적인 데이터 불일치가 발생할 수 있습니다. 예를 들어, 메시지가 한 사용자에게는 표시되었지만 다른 사용자에게는 아직 반영되지 않은 상황이 생길 수 있습니다.


또한, RDB는 관계형 데이터 모델을 통해 복잡한 쿼리와 데이터 관계를 효율적으로 처리할 수 있어, 채팅 앱의 초기 설계와 유지보수에서 유리합니다. NoSQL은 대규모 데이터와 비구조화된 데이터에 강하지만, 채팅 데이터의 특성과 초기 설계의 단순함을 고려할 때 RDB가 더 적합할 수 있습니다.
실제 사례에서, WhatsApp은 초기에는 RDB를 사용했으며, 이후 규모가 커지면서 Mnesia 같은 분산 데이터베이스를 도입했지만, 이는 RDB의 한계를 보완하기 위한 보조적인 선택이었습니다

아래 이미지와 링크를 통해 해당 내용을 참고하실 수 있습니다!

스크린샷 2025-03-24 오전 8.46.53.png

https://www.cometchat.com/blog/whatsapps-architecture-and-system-design

좋은 하루 되세요!

0

안녕하세요, 인프런 AI 인턴입니다. 목동 개발자님께서 질문해 주신 채팅 시스템에서 RDB를 선택하는 이유에 대해서 설명드리겠습니다.

채팅 데이터를 영속성 있게 저장하는 시스템에서는 다양한 데이터베이스 옵션을 고려할 수 있습니다. RDB(관계형 데이터베이스)를 선택하는 몇 가지 이유는 다음과 같습니다:

  1. 데이터의 일관성: 채팅 메세지는 수신 확인, 편집, 삭제 등의 기능을 포함할 수 있습니다. RDB는 ACID(Atomicity, Consistency, Isolation, Durability) 특성을 지니고 있어 데이터의 일관성을 보장하는데 유리합니다. 세계적으로 서비스를 운영하며 데이터의 무결성을 유지해야 하는 요구사항이 있는 경우, RDB를 선택할 수 있습니다.

  2. 복잡한 쿼리 지원: 채팅 데이터를 분석하거나 특정 패턴을 조회하는 등 복잡한 쿼리를 지원해야 하는 경우가 있습니다. RDB는 SQL을 기반으로 하여 복잡한 조회 작업을 수행할 수 있으며, 인덱싱 및 조인 기능을 통해 효율성을 높일 수 있습니다.

  3. 스키마 기반의 구조적 데이터: 채팅 메시지가 사용자, 시간, 내용, 수신확인 상태 등 여러 속성을 가질 때, 이들 속성 간의 관계 및 제약 조건을 명확히 할 수 있습니다. 이는 테이블 및 스키마가 명확히 정의되므로 데이터 무결성을 유지하기 쉽습니다.

그러나 NoSQL(비관계형 데이터베이스)도 현대 채팅 애플리케이션에서 많이 사용됩니다. NoSQL 데이터베이스를 선택한다면 다음과 같은 이유일 수 있습니다:

  • 확장성: 대용량의 데이터를 빠르게 저장하고 처리해야 할 경우, NoSQL이 더 적합할 수 있습니다. 이러한 데이터베이스는 분산 저장 및 수평적 확장이 용이합니다.

  • 유연한 스키마: NoSQL은 자유로운 스키마 설계가 가능하므로 변화하는 데이터 구조에 유연하게 대처할 수 있습니다.

유사한 질문에 대한 답변을 아래 링크에서 확인하실 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Hình ảnh hồ sơ của mokdogdev
mokdogdev

câu hỏi đã được viết

Đặt câu hỏi