피드로 돌아가기
Dev.toBackend
원문 읽기
External Broker 없는 Django 내부 Event Bus 기반 Decoupling 설계
Building Internal Events in Django Without Kafka or RabbitMQ
AI 요약
Context
서비스 성장으로 인한 Django Service 내 책임 과중 및 비즈니스 로직과 부수 효과(Side Effect)의 강한 결합 발생. 단일 비즈니스 액션이 여러 데이터베이스 업데이트 및 알림 전송을 동시 처리함에 따라 코드 수정 시 영향 범위 확대 및 테스트 복잡도 증가.
Technical Solution
- 단순 객체 형태의 Event Type 정의를 통한 이벤트 데이터 규격화
defaultdict기반의 In-memory Event Bus 구현으로 핸들러 등록 및 배포 구조 설계- Side Effect를 독립적인 Handler로 분리하여 비즈니스 로직과 인프라 로직의 의존성 방향 제거
publish메서드를 통한 이벤트 발행 방식으로 Core Logic 내에서 orchestration 코드 제거- Monolith 환경에 최적화된 In-process 통신 채택으로 인프라 오버헤드 원천 차단
- 향후 Distributed System 전환을 고려한 Event-shaped 아키텍처 사전 확보
실천 포인트
1. 분산 메시징 인프라 도입 전 단일 프로세스 내 Decoupling 필요성 검토
2. 비즈니스 로직에서 Side Effect를 분리하여 순수 도메인 로직만 남겼는지 확인
3. In-process 이벤트 시스템의 한계인 Persistence 및 Fault Tolerance 부재 여부 체크
4. 향후 Celery나 Kafka로의 마이그레이션 경로가 확보된 구조인지 검증