이벤트 기반 아키텍처와 메시징을 Go로 구현하는 Watermill
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
DevOps
대상자
Go 언어를 사용하는 이벤트 기반 아키텍처 개발자, 특히 Kafka, RabbitMQ 등 메시징 시스템을 활용하는 시스템 개발자
핵심 요약
- Watermill은 Kafka, RabbitMQ 등 다양한 메시징 브로커를 추상화하여 단일 API로 통합 관리
- Publisher, Subscriber, Router, Middleware 4가지 핵심 컴포넌트로 이벤트 처리 파이프라인 구축 가능
- 고성능 처리 (초당 수십만 메시지 처리) 및 플러그인 기반 미들웨어 (로깅, 리트라이 등) 지원
섹션별 세부 요약
1. Watermill 개요
- 이벤트 기반 아키텍처의 장점: 시스템 간 결합도 감소, 수평 확장성 향상
- Watermill은 Kafka, RabbitMQ, Redis Streams 등 주요 브로커를 지원하며, API 일관성 제공
- 복잡한 브로커 로직을 숨기고, 메시지 퍼블리싱/서브스크라이브 기능만 제공
2. 핵심 컴포넌트
- Publisher: 메시지를 특정 토픽에 발행 (예:
publisher.Publish("exemplo.topico", msg)
) - Subscriber: 토픽에 등록된 메시지를 소비 (예:
subscriber.Subscribe(context.Background(), "exemplo.topico")
) - Router: 메시지 라우팅 및 미들웨어 적용
- Middleware: 로깅, 리트라이, 제한 속도 등 전반적인 기능 확장
3. 지원 브로커 및 예제
- 공식 지원 브로커: Kafka, RabbitMQ, Google Pub/Sub, AWS SNS/SQS, Redis Streams, SQL, GoChannel, HTTP
- 예제 코드: Kafka를 사용한 퍼블리셔/서브스크라이버 구현 (Docker로 로컬 테스트 가능)
- 중요 설정:
Brokers
,Marshaler
,ConsumerGroup
등
4. 활용 사례 및 장점
- 미들웨어 기반 확장성: 로깅, 메트릭 수집 (Prometheus 연동 가능)
- 성능: Go의 동시성 모델을 활용한 고속 처리
- 유연성: 브로커 교체 시 코드 변경 없이 지원 (예: Kafka → RabbitMQ)
결론
- 로컬 테스트를 위해 Docker로 Kafka 실행 후 퍼블리셔/서브스크라이버 실행
- 이벤트 기반 시스템 구축 시 Watermill을 통해 복잡한 브로커 로직을 추상화 가능
- 고성능, 확장성, 유연성을 갖춘 Go 기반 이벤트 처리 라이브러리로 추천