본 문서는 DB 발송 테이블 인터페이스 방식을 사용하는 환경에서, 시스템 부하 분산 및 업무 효율화를 위해 에이전트를 다중화하고 공급사를 분배 설정하는 방법을 안내합니다.
UMS API 서버의 provider.properties 파일을 통해 발송 테이블 분기 로직을 설정합니다.
############################################################################################
# 공급사 : DB 테이블 I/F 방식 에이전트 사용하는 공급사( KT, LGU+, SKB, LOTTE, LGCNS, GSAGT, MTS, LGU_AGC)
# 간략 설명 : 리얼/배치 or 업무별 발송 처리 분리를 위해 에이전트 분리 설치시 셋팅.
# 발송 방식 : 리얼/배치 구분 에이전트 설치. 업무별 에이전트 분리 설치.
# 특이 사항 : KT, SKT의 경우 에이전트 아이디 셋팅 필수 : KT(KT.DB.USR.ID), SKB(SKB.DB.USR.ID)
############################################################################################
SMS.DIVISION.TABLE = {"LGU":{"REAL":"SC_TRAN_REAL", "BATCH":"SC_TRAN_BATCH"}}
MMS.DIVISION.TABLE = {"LGU":{"REAL":"MMS_MSG_REAL", "BATCH":"MMS_MSG_BATCH"}}
RCS.DIVISION.TABLE = {"LGU":{"REAL":"RCS_MSG_REAL", "BATCH":"RCS_MSG_BATCH"}}
SMS.DIVISION.TABLE = {"LGU":{"REAL1":"SC_TRAN_REAL", "REAL2":"SC_TRAN_REAL2", "BATCH1":"SC_TRAN_BATCH" , "BATCH2":"SC_TRAN_BATCH2"}}
업무 코드별(예: LAB, MARKETING)로 발송 처리를 격리하고자 할 때 사용합니다.
발송 요청 시 파라미터로 전달되는 SENDGROUPCODE를 기반으로 테이블을 분기하며, 해당 코드가 없을 경우 기본 리얼/배치 테이블로 발송됩니다.
SMS.DIVISION.TABLE = {"LGU":{"REAL":"SC_TRAN_REAL", "BATCH":"SC_TRAN_BATCH", "LAB":"SC_TRAN_LAB", "MARKETING":"SC_TRAN_MARKETING"}}
MMS.DIVISION.TABLE = {"LGU":{"REAL":"MMS_MSG_REAL", "BATCH":"MMS_MSG_BATCH"}}
RCS.DIVISION.TABLE = {"LGU":{"REAL":"RCS_MSG_REAL", "BATCH":"RCS_MSG_BATCH"}}
SMS.DIVISION.TABLE = {"KT":{"REAL":"SDK_SMS_SEND_REAL", "BATCH":"SDK_SMS_SEND_BATCH"}, "SKB":{"REAL":"TBL_SUBMIT_QUEUE", "BATCH":"TBL_SUBMIT_QUEUE2"}}
MMS.DIVISION.TABLE = {"KT":{"REAL":"SDK_MMS_SEND_REAL", "BATCH":"SDK_MMS_SEND_BATCH", "SKB":{"REAL":"TBL_SUBMIT_QUEUE", "BATCH":"TBL_SUBMIT_QUEUE2"}}
KT.DB.USR.ID.JSON = {"SDK_SMS_SEND_REAL":"3113", "SDK_SMS_SEND_BATCH":"3223", "SDK_MMS_SEND_REAL":"3224", "SDK_MMS_SEND_BATCH":"3225"}
SKB.DB.USR.ID.JSON = {"TBL_SUBMIT_QUEUE":"3113", "TBL_SUBMIT_QUEUE2":"3223"}
에이전트의 config.xml 내 <channelTable> 섹션에서 각 채널별 발송 및 결과 테이블을 지정합니다. 공급사별 에이전트 ID 매칭이 필요한 경우 해당 설정도 포함되어야 합니다.
<channelTable>
<sms>
<sendTable>{"LGU":{"REAL":"SC_TRAN_REAL", "BATCH":"SC_TRAN_BATCH"}}</sendTable>
<resultTable>{"LGU":{"REAL":"SC_LOG_REAL", "BATCH":"SC_LOG_BATCH"}}</resultTable>
</sms>
</channelTable>
<channelTable>
<sms>
<sendTable>{"LGU":{"REAL1":"SC_TRAN_REAL", "REAL2":"SC_TRAN_REAL2", "BATCH1":"SC_TRAN_BATCH", "BATCH2":"SC_TRAN_BATCH2"}}</sendTable>
<resultTable>{"LGU":{"REAL1":"SC_LOG_REAL", "REAL2":"SC_LOG_REAL2", "BATCH1":"SC_LOG_BATCH", "BATCH2":"SC_LOG_BATCH2"}}</resultTable>
</sms>
<mms>
<sendTable>{"LGU":{"REAL1":"MMS_MSG_REAL1", "BATCH1":"MMS_MSG_BATCH", "BATCH2":"MMS_MSG_BATCH2"}}</sendTable>
<resultTable>{"LGU":{"REAL1":"MMS_LOG_REAL1", "BATCH1":"MMS_LOG_BATCH", "BATCH2":"MMS_LOG_BATCH2"}}</resultTable>
</mms>
</channelTable>
<channelTable>
<sms>
<sendTable>{"LGU":{"REAL":"SC_TRAN_REAL", "BATCH":"SC_TRAN_BATCH", "LAB":"SC_TRAN_LAB", "MARETING":"SC_TRAN_MARKETIMG"}}</sendTable>
<resultTable>{"LGU":{"REAL":"SC_LOG_REAL", "BATCH":"SC_LOG_BATCH", "LAB":"SC_LOG_LAB", "MARETING":"SC_LOG_MARKETIMG"}}</resultTable>
</sms>
</channelTable>
매우중요! [주의] [SK, KT 공급사] 멀티 에이전트 사용시 각각의 에이전트 아이디 세팅을 위해 테이블명들과 에이전트 아이디가 매칭 되어야 함
<channelTable>
<sms>
<sendTable>{"KT":{"REAL":"SDK_SMS_SEND_REAL", "BATCH":"SDK_SMS_SEND_BATCH"}, "LGU":{"REAL":"SC_TRAN_REAL", "BATCH":"SC_TRAN_BATCH"}}</sendTable>
<resultTable>{"KT":{"REAL":"SDK_SMS_REPORT_REAL", "BATCH":"SDK_SMS_REPORT_BATCH"}, "LGU":{"REAL":"SC_LOG_REAL", "BATCH":"SC_LOG_BATCH"}}</resultTable>
<ktDbUsrId>{"SDK_SMS_SEND_REAL":"URACLE01","SDK_SMS_SEND_BATCH":"URACLE02"}</ktDbUsrId>
</sms>
<mms>
<sendTable>{"KT":{"REAL":"SDK_MMS_SEND_REAL", "BATCH":"SDK_MMS_SEND_BATCH"}, "LGU":{"REAL":"MMS_MSG_REAL", "BATCH":"MMS_MSG_BATCH"}}</sendTable>
<resultTable>{"KT":{"REAL":"SDK_MMS_REPORT_REAL", "BATCH":"SDK_MMS_REPORT_BATCH"}, "LGU":{"REAL":"MMS_LOG_REAL", "BATCH":"MMS_LOG_BATCH"}}</resultTable>
<ktDbUsrId>{"SDK_MMS_SEND_REAL":"URACLE03","SDK_MMS_SEND_BATCH":"URACLE04"}</ktDbUsrId>
</mms>
</channelTable>
매우중요! [주의] [SKB, KT 공급사] 멀티 에이전트 사용시 각각의 에이전트 아이디 세팅을 위해 테이블명들과 에이전트 아이디가 매칭 되어야 함.
<channelTable>
<sms>
<sendTable>{"KT":{"REAL":"SDK_SMS_SEND_REAL", "BATCH":"SDK_SMS_SEND_BATCH"}, "SKB":{"REAL":"TBL_SUBMIT_QUEUE", "BATCH":"TBL_SUBMIT_QUEUE2"}}</sendTable>
<resultTable>{"KT":{"REAL":"SDK_SMS_REPORT_REAL", "BATCH":"SDK_SMS_REPORT_BATCH"}, "SKB":{"REAL":"TBL_MSG_HIST", "BATCH":"TBL_MSG_HIST2"}}</resultTable>
<ktDbUsrId>{"SDK_SMS_SEND_REAL":"URACLE01","SDK_SMS_SEND_BATCH":"URACLE02"}</ktDbUsrId>
<skbDbUsrId>{"TBL_SUBMIT_QUEUE":"3113","TBL_SUBMIT_QUEUE2":"3223"}</skbDbUsrId>
</sms>
<mms>
<sendTable>{"KT":{"REAL":"SDK_MMS_SEND_REAL", "BATCH":"SDK_MMS_SEND_BATCH"}, "SKB":{"REAL":"TBL_SUBMIT_QUEUE", "BATCH":"TBL_SUBMIT_QUEUE2"}}</sendTable>
<resultTable>{"KT":{"REAL":"SDK_MMS_REPORT_REAL", "BATCH":"SDK_MMS_REPORT_BATCH"}, "SKB":{"REAL":"TBL_MSG_HIST", "BATCH":"TBL_MSG_HIST2"}}</resultTable>
<ktDbUsrId>{"SDK_MMS_SEND_REAL":"URACLE03","SDK_MMS_SEND_BATCH":"URACLE04"}</ktDbUsrId>
<skbDbUsrId>{"TBL_SUBMIT_QUEUE":"3113","TBL_SUBMIT_QUEUE2":"3223"}</skbDbUsrId>
</mms>
</channelTable>
멀티 공급사를 운영할 경우, 각 공급사 간의 발송 비중을 조절하거나 장애 발생 시 즉각적으로 대응할 수 있습니다.
분배 비율 설정값의 빈번한 DB 조회를 방지하고 발송 성능을 최적화하기 위해 Ehcache를 사용합니다. 반영 주기를 조정하려면 ehcache.xml 파일의 설정을 변경하십시오.
ehcache.xmltimeToLiveSeconds (기본값: 300초 / 5분)<cache name="CHANNEL_ALLOT_RATE"
maxEntriesLocalHeap="10000"
eternal="false"
overflowToDisk="false"
diskPersistent="false"
diskSpoolBufferSizeMB="100"
timeToIdleSeconds="0"
timeToLiveSeconds="300"
memoryStoreEvictionPolicy="LRU"/>
멀티 에이전트 및 멀티 공급사 환경을 안정적으로 운영하기 위해 아래 사항을 반드시 확인하십시오.
provider.properties의 설정값과 config.xml의 테이블명/ID 매칭 정보가 반드시 일치해야 합니다.SENDGROUPCODE를 통한 업무 분리 기능을 사용할 경우, 발송 요청 API를 호출할 때 해당 파라미터가 누락되지 않도록 주의하십시오. 파라미터가 없으면 기본 리얼/배치 테이블로 발송됩니다.properties 또는 xml 설정 파일을 수정한 후에는 반드시 해당 모듈(UMS API 또는 UMSAgent)을 재시작해야 변경 사항이 적용됩니다.ehcache.xml에 설정된 timeToLiveSeconds 시간(기본 5분)이 지나야 실제 발송 로직에 반영됩니다. 즉각적인 반영을 원할 경우 해당 값을 조정하십시오.