티스토리 뷰

연습

Batch/Event + Messaging

onaeonae1 2025. 9. 13. 16:57

새로 합류한 회사에서 메시징 관련 기능을 구현할 일들이 생겼다.

 

요구사항을 간단히 정리하면 다음과 같다.

1. BATCH/EVENT 단위로 메시징 처리 필요

2. 메시징은 알림톡/슬랙/이메일을 대상으로 함

3. 메시지 내용은 주로 차트 정보 혹은 도메인 이벤트들을 대상으로 함

4. 수신자가 다양할 수 있고, 개인 별로 설정이 가능함

 

이에 대해 설계하고 구현한 것은 간략히 정리하면 다음과 같다.

 

메시징 Profile

- 각 사용자는 자신이 구독할 정보 종류, 매체 종류와 수신 시간을 설정할 수 있음

- 사용자 테이블을 FK 로 갖는 ReportProfile 테이블을 생성해둠

 

BATCH 성 메시징

- 최소한 한 명 이상의 사용자가 구독한 정보들에 대해 데이터 생성(polars)

- 생성된 데이터를 최소한의 단위로 Redis 에 저장(구독 정보에 따라 병합할 수 있도록)

- 메시지 수신자가 구독한 정보들을 선택하여 파편화된 메시지를 사용자 별로 병합

- 템플릿 가공후 매체별, 시간별로 실제 Export

- 이때 매체별 내용의 크기 제한 등이 존재하므로 병합된 메시지를 분할하여 전송하는 로직 구현

- 이 모든 과정을 Daily Batch 중에 실행시킴

 

 

EVENT 성 메시징

- DDD 를 사용중에 있으므로, 공유 도메인에 이벤트 객체를 활용

- 실제 메시지를 발생시켜야 하는 케이스들에 대해 MessageEvent class 를 상속하는 구체적인 MessageEvent Class 들을 정의

- 구체 MessageEvent 단위로 컨텐츠 생성을 자동화 (string.Template + Context)

- title, content, to 만을 MessageEvent 에 저장

- MessageEvent 를 기준으로 handler 를 등록하여 처리

- 각 도메인의 Application 단에서는 event_dispatcher 에 대해 앞서 설명한 구체적인 MessageEvent class 에 context 를 채워 dispatch

- 결과적으로 각 도메인에서는 발송 로직에 신경쓰지 않고 context 에만 집중하여 쉽게 export 가능하도록 설정함

 

재시도 로직

- EXPORT 하기 직전, 원본의 내용(내용, 수신자) + 발송 상태에 대해 DB 에 2주간 저장.

- 필요시 재전송 할 수 있도록 함

- event_id, content_hash 로 duplicate 방지

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함