inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Điều kiện để kỹ sư sống sót trong kỷ nguyên AI, thiết kế hệ thống Big Tech Hoa Kỳ, tư duy thuật toán, hoàn thiện thực hành 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

312

mokdogdev

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

0

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

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

Câu trả lời 2

0

americasnail

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

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

채팅 데이터를 영속화하는 데 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

communityai8509

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

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

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

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

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

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

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

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

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

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

차단 등 검증 로직의 위치

0

68

2

Substack 1년 제공

1

61

3

특별 학습 자료 프로모션 1년 멤버십 무료 제공 문의드립니다

0

48

2

특별 학습 자료 프로모션 1년 멤버십 제공 관련 문의 드립니다.

0

91

2

simcached를 검색을 했을때 해당 자료가 나오지 않는데 혹시 MemcachedGPU 라고 불리는 기술을 말씀하시는건가요?

0

81

1

유튜브 예제에서 흐름 관련 질문있습니다

0

62

2

Spotify 서비스 설계에서 transcoder service에 대해 문의 드립니다.

0

83

1

특별 학습 자료 프로모션 1년 멤버십 무료 제공 지원 확인 방법

0

125

2

[위치 이름 기반으로 호텔을 조회하는 메서드] 코드 질문 드립니다.

0

68

2

14강. 영화 DVD 대여 시스템 데이터베이스 스키마 설계에서 Inventory 테이블 질문있습니다.

0

89

2

Matching Service의 MQ 필요성, Cassandra의 필요성, Cassandara - RDB 동기화

0

107

2

Imgur 이미지 호스팅 서비스 질문

0

107

2

쿠폰 문의

0

105

1

Redis 랜덤 값 추가 시 메타데이터 저장

0

102

1

Blob Storage에서 파일 업로드에 대한 동시성을 어떻게 제어할 수 있을까요?

0

124

2

URL 단축 서비스에서 redis counter를 사용하는 이유가 무엇인지 궁금합니다.

0

227

2

long url을 파티션키로 지정했을때 장점이 생각 안나네요 ㅎㅎ;;

0

150

2

실제 인터뷰에서도 Object Oriented Design 을 이런 과정으로 하는걸까요?

0

185

1

able to get all students who got a "d+" grade or lower 요구사항

0

127

1

number of copies 컬럼은 Inventory Table에 들어가야하지않을까요?

0

185

3

Spotify 서비스 시스템 디자인 및 스케일링에서 백업 클러스터 사용에 대한 문의

0

107

2

URL 단축 서비스 시스템 디자인 및 스케일링 질문있습니다.

0

203

2

예시 두개가 납득이 잘 가지않네요 ㅠㅠ

1

227

2

강의자료는 제공 불가능할까요?

0

241

1