피드로 돌아가기
Dev.toBackend
원문 읽기
Execution vs Communication: Task Queue와 Message Broker의 의도 기반 설계 분리
The Day I Confused Task Queues with Message Brokers And Built the Wrong Thing
AI 요약
Context
비동기 처리 구현 시 Task Queue와 Message Broker의 개념적 차이를 간과하여 모든 백그라운드 작업을 실행 중심 모델로 통합 설계함. 이로 인해 Event-driven communication이 필요한 지점까지 Task-oriented 구조로 강제하며 서비스 간 결합도가 상승하는 아키텍처적 병목 발생.
Technical Solution
- 실행 의도(Execution Intent)와 전달 의도(Communication Intent)를 구분한 아키텍처 재설계
- PDF 생성 및 이미지 리사이징 등 단일 작업 완료가 목적인 기능에 Task Queue(Celery, BullMQ) 적용을 통한 작업 신뢰성 확보
- 주문 생성 등 여러 서비스의 반응이 필요한 이벤트에 Message Broker를 도입하여 Producer와 Consumer 간의 Decoupling 구현
- 단일 실행 마인드셋에서 벗어나 정보 공유를 위한 Pub/Sub 모델을 적용함으로써 서비스 확장성 개선
- 작업의 상태 추적(Pending to Completed)이 필요한 영역과 상태 변경 알림이 필요한 영역을 분리하여 설계 복잡도 최적화
실천 포인트
1. 인프라 선택 전 '작업 할당(Assigning Work)'인지 '정보 공유(Sharing Information)'인지 의도를 정의했는가?
2. 특정 서비스가 다른 서비스의 구체적인 작업 수행 여부를 알아야 하는가? (Yes $\rightarrow$ Task Queue)
3. 발생한 이벤트에 대해 어떤 서비스들이 반응할지 Producer가 알 필요가 없는가? (Yes $\rightarrow$ Message Broker)
4. 현재의 큐 구조가 단일 실행 경로에 의존하여 서비스 간 Tight Coupling을 유발하고 있지 않은가?