SOLAPI SMS 출시
컨텍스트
알림 모듈은 대기 중인 테넌트 범위 SMS 기록 및 예약으로 시작된 후 2026년 6월 28일 실제 공급자 출시로 확장되었습니다. 주요 단계는 다음과 같습니다.
3289196c: 공급자 디스패치, 스케줄러 흐름, 웹훅 수신 및sms_messages공급자 추적 열을 추가합니다.afab0183,e73277f2및04aae48c: 인덱스 및 마이그레이션 순서 문제 후 스키마 롤아웃을 강화합니다.4de6a6c7: 커밋 후 디스패치 및 웹훅 쓰기가 여전히 RLS에서app.tenant_id를 바인딩하도록 트랜잭션 경계를 복구합니다.03981d38,01ad30b2및13852f8d: SOLAPI 관련 LMS 제목 불일치를 제거하고,groupId를 생략하는 웹후크 페이로드를 허용하고, 글로벌 구성에서 테넌트 소유 발신자 번호로 라이브 전송을 전환합니다.
이제 정상 상태 계약이 알림 서비스 참조 페이지에 있습니다.
무엇이 깨졌거나 변경되었는지
롤아웃은 단순히 "SOLAPI를 켜는 것"이 아닙니다. 한 번에 세 가지 계약이 변경되었습니다.
- 아웃바운드 보내기 실행이 단일 트랜잭션 내 큐 쓰기에서
SmsDispatchService의 커밋 후 공급자 디스패치로 이동 되었습니다. - 공급자 상태는
V76__sms_provider_dispatch_tracking.sql를 통해 지속된 메시지 계약의 일부가 되었습니다. - 실시간 발신자 ID가 앱 구성에서
V78__sms_sender_settings.sql의 테넌트 범위sms_sender_settings로 이동되었습니다.
대기 중인 MVP에는 없는 실패 모드가 노출되었습니다.
- 클레임 상태가 먼저 지속되지 않는 한 두 디스패치 워커가 동일한
PENDING행에서 경합할 수 있습니다. REQUIRES_NEW트랜잭션은 원래 테넌트 바인딩을 잃고 빈 RLS 보기를 읽을 수 있습니다.- SOLAPI 웹훅 페이로드는 특히
groupId및 LMS 전용 필드 주변에서 완벽하게 안정적이지 않았습니다. - 하나의 백엔드가 많은 테넌트에 서비스를 제공하면 글로벌
SOLAPI_FROM_NUMBER로는 충분하지 않습니다.
진단 및 결정 사다리
- 첫 번째 실제 공급자 패스에는 공급자 열과 스케줄러가 추가되었지만 여전히 동일한 트랜잭션과 테넌트 컨텍스트가 커밋 후 작업에서 자연스럽게 유지될 것이라고 가정했습니다.
- 디스패치를 "행 로드 후 변경"에서 "먼저 요청한 후 로드"로 이동하여 재시도 및 동시 스케줄러가 동일한 메시지를 이중으로 보낼 수 없도록 강화했습니다.
- 마이그레이션 계획에서는 공급자 인덱스를
CREATE INDEX CONCURRENTLY를 사용하여V77