Distributed Messaging & Event Streaming
시스템 간 비동기 결합을 위한 메시지 큐와 대규모 데이터의 흐름을 처리하는 이벤트 스트리밍 기술의 작동 물리 및 보장 수준을 다루는 학습 노드입니다.
sys.entry
M
Me
hyunyoun's Blog
posts6 min read
1. Overview
분산 메시징 및 이벤트 스트리밍(Distributed Messaging & Event Streaming, DMS)은 현대 소프트웨어 시스템이 수직적 명령 구조를 벗어나 사건(Event) 기반으로 실시간 소통하는 방식의 물리적 토대를 다룹니다.
데이터는 더 이상 요구할 때만 생성되는 것이 아니라, 끊임없이 흐르는 '로그(Log)'의 형태를 띱니다. 학습자는 송신자와 수신자를 논리적으로 분리(Decoupling)하는 메시지 브로커(RabbitMQ 등)와 고가용성 분산 로그인 이벤트 스트리밍(Kafka 등)의 본질적 차이를 배웁니다. 이를 통해 'At-most-once'부터 'Exactly-once'까지의 전송 보장 수준과 소비자 그룹(Consumer Group)의 물리적 확장성을 이해하여, 데이터 유실 없이 초당 수백만 건의 이벤트를 처리하는 아키텍처를 설계합니다.
2. Scope & Boundaries
In-Scope
- Messaging Models: P2P(Point-to-Point) vs Pub/Sub(Publish/Subscribe) 메시징 물리
- Event Logging: 순차적 쓰기 로그(Append-only Log)와 오프셋(Offset) 관리 역학
- Delivery Semantics: 메시지 전송 보장 수준(At-most, At-least, Exactly-once)의 논리
- Scalability: 파티셔닝(Partitioning), 소비자 그룹 및 부하 분산(Load Balancing) 물리
Out-of-Scope
- 스트리밍 데이터의 복잡한 SQL 분석(Flink, Spark) 로직 (11. ML/AI 영역으로 위임)
- 특정 메시지 브로커의 클러스터 설치 및 하드웨어 구성 (09. DevOps 영역으로 위임)
Boundaries
- DMS vs. Web Protocols: 08-03(WAP)이 '즉각적인 응답이 필요한 동기 통신' 중심이라면, DMS는 '응답을 기다리지 않는 비동기 흐름과 데이터의 영속성'에 집중합니다.
3. Counterexample
- 단순히 메시지 큐를 사용하여 작업을 백그라운드로 넘기는 법을 익히는 것은 DMS 학습이 아닙니다. 왜 메시징 시스템에서 **순서 보장(Ordering Guarantee)**이 물리적으로 어려운 과제인지 설명하고, 카프카와 같은 시스템이 파티션(Partition) 단위로 어떻게 순서를 강제하며 분산 커밋 로그를 통해 장애 복구를 수행하는지 그 신뢰성 매커니즘을 논할 수 있어야 합니다.
4. Prerequisites
- 네트워크 기초 및 OSI 스택 (Basic): 소켓 통신과 비동기 I/O의 기본 개념이 필요합니다. (08. NFS)
- 분산 시스템 원칙 및 합의 (Recommended): 분산 환경에서의 데이터 일관성 및 리더 선출 개념이 권장됩니다. (07. SADS)
5. Learning Map
- Async Communication: 왜 시스템들이 서로 기다리지 않고 메시지를 던져두고 가는지(Fire-and-forget) 그 이점을 배웁니다.
- Broker Patterns: 메시지를 안전하게 보관했다가 전달해주는 중개인(Broker)들의 다양한 작업 모델을 익힙니다.
- The Power of Log: 모든 사건을 영구적으로 기록하고 다시 읽을 수 있게 하는 이벤트 스트리밍의 물리 구조를 이해합니다.
- Reliability & Scale: 데이터가 유실되지 않도록 보장하면서 동시에 수많은 노드로 확장하는 설계 전략을 탐구합니다.
6. Learning Topics
Basic
Core: 메시지 큐와 Pub/Sub 기본 (Messaging 101)
- Why to Learn: 시스템 간의 결합도를 낮추어 유연하고 확장 가능한 설계를 하기 위함입니다.
- What to Learn:
- 생산자(Producer)와 소비자(Consumer)의 논리적 분리
- 큐(Queue) vs 토픽(Topic)의 메시지 전달 물리 차이
- 브로커 기반 메시징의 기본 흐름(Push vs Pull 모델)
- How to Learn:
- 간단한 메시지 큐(예: Redis Pub/Sub)를 활용해 두 개의 독립된 프로세스가 데이터를 주고받는 실습
- 트래픽 폭주 시 큐가 완충 작용(Buffering)을 하여 시스템 붕괴를 막는 시나리오 시뮬레이션
- Implement: 마이크로서비스 간 비동기 메시지 교환을 표현한 아키텍처 다이어그램
Recommended
Core: 전송 보장과 장애 복구 (Delivery Semantics)
- Why to Learn: 데이터의 중요도에 따라 성능과 신뢰성 사이의 최적의 지점을 선택하기 위해서입니다.
- What to Learn:
- At-most-once (최대 한 번): 성능 위주, 유실 가능
- At-least-once (최소 한 번): 중복 가능, 유실 방지
- Exactly-once (정확히 한 번): 트랜잭션 처리를 통한 무결성 보장 물리
- How to Learn:
- 소비자 프로세스를 강제로 종료했을 때, 메시지 ACK(Acknowledge) 처리 방식에 따라 메시지가 유실되거나 재발행되는 현상 실험
- 멱등성(Idempotency) 소비자를 구현하여 중복 메시지 처리 로직 작성
- Implement: 전송 보장 수준별 설정값과 그에 따른 성능 트레이드오프 비교표
Practical
Core: 이벤트 스트리밍과 카프카 물리 (Event Streaming)
- Why to Learn: 대지능 실시간 데이터 처리와 데이터 통합 파이프라인의 핵심인 분산 로그 시스템을 다루기 위함입니다.
- What to Learn:
- 토픽(Topic) 파티셔닝과 병렬 처리 확장성 물리
- 리더와 팔로워 리플리케이션을 통한 데이터 고가용성 보장
- 오프셋(Offset) 관리와 소비자 그룹의 재조정(Rebalancing) 역학
- How to Learn:
- 카프카 클러스터 환경에서 특정 파티션의 리더 노드를 다운시키고 데이터가 정상적으로 전달되는지 확인
- 컨슈머 그룹 내의 노드 수를 늘리거나 줄이며 파티션 할당의 변화 관측
- Implement: 대규모 로그 처리를 위한 파티션 설계 및 컨슈머 전략 보고서
Advanced
Core: 스트림 처리 및 이벤트 소싱 (Advanced Streams)
- Why to Learn: 흐르는 데이터 위에서 실시간으로 지식을 추출하고 시스템 상태를 이벤트로 관리하기 위해서입니다.
- What to Learn:
- 상태 저장 스트림 처리(Stateful Stream Processing)의 논리
- 이벤트 소싱(Event Sourcing) 패턴: 상태가 아닌 사건의 기록을 진실의 근원으로 삼기
- CQRS 패턴과의 연계 및 최종 일관성(Eventual Consistency) 처리 물리
- How to Learn:
- 이벤트의 순차적 발생을 기반으로 특정 시점의 시스템 상태를 복원(Replay)하는 프로토타입 구현
- CDC(Change Data Capture)를 활용하여 DB 변경분을 실시간 스트림으로 변환하는 파이프라인 구축
- Implement: 이벤트 소싱 기반의 주문 관리 시스템 엔티티 및 상태 전이도 설계
7. Terminology
8. References
Primary References
- [P2] SWEBOK v4.0 - Software Construction/Distributed Systems — Event-based logic.
- [P5] SFIA - Systems Integration / Data Engineering — Messaging pipeline skills.
Secondary References
- [Designing Data-Intensive Applications] Martin Kleppmann — Best chapter on logs and messaging.
- [Kafka: The Definitive Guide] Gwen Shapira — Industrial standard for streaming.
Industry References
- [RabbitMQ: AMQP Protocol] — Messaging broker standard.
- [Apache Kafka Documentation] — The architecture of distributed logs.
9. Final Checklist
Primary Checklist
- 동기식 호출(RPC/REST)과 비동기식 메시징의 물리적 레이턴시 및 가용성 측면에서의 트레이드오프를 설명 가능한가? (P2)
- 메시지 브로커가 일시적으로 다운되었을 때, 생산자의 데이터 유실을 방지하기 위한 물리적 전략(Buffer, Retry)을 제시할 수 있는는가? (P2)
Secondary Checklist
- 큐에 쌓인 메시지가 처리 속도보다 빠르게 증가할 때(Backpressure), 시스템 전체의 안정성을 위한 조절 매커니즘을 이해하는가?
- 토픽의 파티션 개수와 컨슈머 그룹의 인스턴스 개수 사이의 상관관계와 병목 발생 원인을 식별 가능한가?
Industry Checklist
- 실무 서비스에서 결제 완료 이벤트를 처리할 때, '정확히 한 번' 처리를 위해 데이터베이스 트랜잭션과 메시지 오프셋 관리를 어떻게 연동할지 설계 가능한가? (SFIA)
- 대용량 로그 수집 시스템 설계 시, RabbitMQ와 Kafka의 보관 방식(Delete on ACK vs Log Retention) 차이에 근거하여 적절한 도구를 선택할 수 있는가?