피드로 돌아가기
Building a Multi-Channel Notification Service in .NET 8
Dev.toDev.to
Backend

.NET 8 기반 비동기 Fan-out 구조의 멀티 채널 알림 서비스 설계

Building a Multi-Channel Notification Service in .NET 8

Naimul Karim2026년 5월 8일21intermediate

Context

API 컨트롤러 내 외부 Provider 직접 호출로 인한 응답 시간 증가 및 외부 장애 전파 문제 발생. 특정 채널의 Rate Limit 도달 시 메시지 유실 및 신규 채널 추가 시 발생하는 코드 수정 범위 확대로 인한 유지보수 효율 저하 해결 필요.

Technical Solution

  • RabbitMQ Topic Exchange를 통한 Producer-Consumer 분리로 API 응답 시간 상수를 유지하는 비동기 구조 설계
  • Dispatcher 내 Task.WhenAll 기반 Parallel Fan-out 적용으로 개별 채널 지연이 타 채널에 영향 주지 않는 격리 환경 구축
  • Scriban Template Engine 채택을 통한 샌드박스 AST 기반의 보안성 확보 및 Razor 대비 빠른 문자열 보간 성능 구현
  • Sliding Window 방식의 Rate Limiter를 API 계층이 아닌 Dispatcher에 배치하여 모든 유입 경로에 일관된 제한 적용
  • IEnumerable 인터페이스 기반 DI 설계를 통해 기존 코드 수정 없이 신규 채널을 추가하는 Open-Closed Principle 구현
  • Dead-letter Queue와 3회 재시도 메커니즘을 통한 외부 Provider 장애 시 메시지 유실 방지 체계 구축

1. 외부 API 의존성이 높은 서비스는 반드시 메시지 큐를 통한 비동기 처리로 장애 전파 차단

2. 다중 목적지로 데이터를 전송할 경우 Task.WhenAll을 활용한 Fan-out 패턴으로 전체 지연 시간 최적화

3. 템플릿 엔진 선택 시 단순 성능 외에 샌드박스 실행 가능 여부를 통한 보안 위험 검토

4. 공통 제약 사항(Rate Limit 등)은 유입 지점이 아닌 실행 직전의 오케스트레이션 계층에 배치

원문 읽기