- 문제 상황 : 특정 비즈니스 이벤트가 발생했을 때, 담당자에게 정해진 시간 안에 알림 전달 필요.
- 해결 방향 : 이벤트와 관련된 사용자에게 외부 알림톡 API를 통해 안내 메시지를 발송하도록 설계 및 구현
<설계>
[흐름 정리]
1. 비즈니스 이벤트 발생
2. Producer가 알림 발송 작업을 Outbox에 저장
3. Producer가 메시지 큐에 작업 ID 전송
4. Worker가 큐 메시지 수신
5. Worker가 Outbox 작업을 선점
6. Worker가 알림 템플릿 조회
7. Worker가 발송에 필요한 데이터를 조회하는 SP 실행
- 테이블들을 상황에 맞게 조회, 조인하여, 필요한 데이터들을 가져옴
8. Worker가 템플릿 파라미터 구성
- 위에서 가져온 필드들을 Java에서 파싱하여 템플릿에 맞게 templateParam을 구성.
9. 구성한 templateParam으로 외부 알림톡 API 호출
10. 발송 성공 시 OUTBOX 성공 처리
11. 발송 실패 시 OUTBOX 실패 처리
[링크] OUTBOX 패턴이란?
[링크] AWS SQS란?
[테이블 및 SP]
1. OUTBOX 테이블 : 발송 작업 단위 저장, 선점 및 성공/실패 결과 저장용
(**워커가 죽었을 때 PROCESSING 상태가 너무 오래 묶이지 않도록 하기 위해 LOCK_UNTIL 컬럼을 두고, LOCK 만료 시간을 설정)
2. 알림톡 발송 이력 테이블 : 실제 알림톡 발송 결과 저장용
3. 알림톡 템플릿 관리 테이블 : 케이스 별 템플릿 관리용
a. OUTBOX 선점 SP
b. OUTBOX 성공 처리 SP
c. OUTBOX 실패 처리 SP
d. 첫 번째 템플릿(특정 이벤트 발생 알림)발송 데이터 조회 SP
[템플릿 구성]
전제 :
- 추후 여러 템플릿이 추가될 수 있어 확장성 고려
- 템플릿 별로 필요한 데이터가 달라 templateId 기준으로 조회 로직 분리
- Worker가 templateId에 맞는 조회 로직 실행 후 templateParam 구성
- 템플릿 코드는 고정값 (템플릿 별로 정해져 있음)
- 플랫폼 별로 서로 다른 큐 사용 예정 -> 플랫폼 별 코드로 구분할 필요 X