알림톡 KKOALT.DIVISION.TABLE, KKOALT.DIVISION.PLUSID, KKOALT.DIVISION.SVCID는 LGCNS 알림톡/브랜드메세지 발송 시 플러스ID와 서비스ID를 기준으로 발송 테이블을 동적으로 선택하기 위한 설정이다.
브랜드 메세지 설정 명 : KKOFRT.DIVISION.TABLE,KKOFRT.DIVISION.PLUSID, KKOFRT.DIVISION.SVCID
처리 우선순위는 다음과 같다.
KKOALT.DIVISION.PLUSID 설정이 존재하면 플러스ID 기준으로 서비스ID를 라운드로빈 재할당한다.KKOALT.DIVISION.SVCID에서 조회해 발송 테이블명을 찾는다.baseProcessBean.SERVICE_ID를 재할당된 서비스ID로 변경한다.SERVICE_ID 기준 매핑 또는 일반 DIVISION.TABLE 로직으로 fallback한다.확인 : 발송시 서비스아이디와 TRAN_TYPE(REAL or BATCH)가 일치 하지 않을 경우 서비스아이디가 포함된 플러스ID에 설정된 REAL or BATCH에 포함된 서비스아이디를 동적으로 할당한다.
# 기본 REAL/BATCH 테이블 설정
KKOALT.DIVISION.TABLE = {"LGCNS":{"REAL":"tsms_agent_message_real", "BATCH":"tsms_agent_message_batch"}}
# 서비스ID별 발송 테이블 매핑
KKOALT.DIVISION.SVCID = {\
"LGCNS":{\
"1001":"tsms_agent_message_real_1",\
"2001":"tsms_agent_message_real_2",\
"3001":"tsms_agent_message_batch_1",\
"4001":"tsms_agent_message_batch_2",\
"1002":"tsms_agent_message_real_1",\
"2002":"tsms_agent_message_real_2",\
"3002":"tsms_agent_message_batch_1",\
"4002":"tsms_agent_message_batch_2"\
}\
}
# 플러스ID별 REAL/BATCH 서비스ID 목록
KKOALT.DIVISION.PLUSID = {\
"LGCNS":{\
"신한투자증권_premier_U":{\
"REAL":["1001","2001"],\
"BATCH":["3001","4001"]\
},\
"신한투자증권_시스템알림_U":{\
"REAL":["1002","2002"],\
"BATCH":["3002","4002"]\
}\
}\
}
<channelTable><kkoFrt> <sendTable>...</sendTable></kkoFrt></channelTable><channelTable>
<kkoAlt>
<sendTable>
{
"LGCNS": {
"REAL1": "tsms_agent_message_real_1",
"REAL2": "tsms_agent_message_real_2",
"BATCH1": "tsms_agent_message_batch_1",
"BATCH2": "tsms_agent_message_batch_2"
}
}
</sendTable>
<resultTable>
{
"LGCNS": {
"REAL1": "tsms_agent_message_real_1_log",
"REAL2": "tsms_agent_message_real_2_log",
"BATCH1": "tsms_agent_message_batch_1_log",
"BATCH2": "tsms_agent_message_batch_2_log"
}
}
</resultTable>
<serviceId>
{
"LGCNS":{
"1001":"tsms_agent_message_real_1",
"2001":"tsms_agent_message_real_2",
"3001":"tsms_agent_message_batch_1",
"4001":"tsms_agent_message_batch_2",
"1002":"tsms_agent_message_real_1",
"2002":"tsms_agent_message_real_2",
"3002":"tsms_agent_message_batch_1",
"4002":"tsms_agent_message_batch_2",
"1003":"tsms_agent_message_real_1",
"2003":"tsms_agent_message_real_2",
"3003":"tsms_agent_message_batch_1",
"4003":"tsms_agent_message_batch_2"
}
}
</serviceId>
<plusId>
{
"LGCNS":{
"신한투자증권_premier_U":{"REAL":["1001","2001"], "BATCH":["3001","4001"]},
"신한투자증권_시스템알림_U":{"REAL":["1002","2002"], "BATCH":["3002","4002"]},
"신한투자증권":{"REAL":["1003","2003"], "BATCH":["3003","4003"]}
}
}
</plusId>
</kkoAlt>
</channelTable>
플러스ID별로 REAL/BATCH 발송에 사용할 서비스ID 목록을 정의한다.
{
"공급사": {
"플러스ID": {
"REAL": ["실시간 서비스ID1", "실시간 서비스ID2"],
"BATCH": ["배치 서비스ID1", "배치 서비스ID2"]
}
}
}
예:
{
"LGCNS": {
"신한투자증권_premier_U": {
"REAL": ["1001", "2001"],
"BATCH": ["3001", "4001"]
}
}
}
서비스ID별 실제 발송 테이블명을 정의한다.
{
"공급사": {
"서비스ID": "발송테이블명"
}
}
예:
{
"LGCNS": {
"1001": "tsms_agent_message_real_1",
"2001": "tsms_agent_message_real_2",
"3001": "tsms_agent_message_batch_1",
"4001": "tsms_agent_message_batch_2"
}
}
애플리케이션 기동 시 DivisionRollManager에서 다음 설정을 로드한다.
KKOALT.DIVISION.TABLEKKOALT.DIVISION.SVCIDKKOALT.DIVISION.PLUSIDKKOALT.DIVISION.PLUSID는 원본 구조 그대로 저장되고, 추가로 서비스ID 기준 역방향 맵도 생성된다.
원본 구조:
공급사 -> 플러스ID -> REAL/BATCH -> 서비스ID 목록
역방향 구조:
공급사 -> 서비스ID -> 플러스ID
역방향 맵을 만드는 이유는 기존 getPutTableName(baseProcessBean, sendType, channelProvider) 호출에서도 baseProcessBean.getSERVICE_ID()만으로 plusId를 찾기 위해서다.
기존 발송 요청에 들어있는 서비스ID(KKOALT_SVCID)를 기준으로 KKOALT.DIVISION.PLUSID에서 플러스ID를 찾는다.
예:
입력 SERVICE_ID = 1001
역방향 맵 조회 결과 plusId = 신한투자증권_premier_U
발송구분이 REAL이면 REAL 배열을 사용하고, BATCH이면 BATCH 배열을 사용한다.
예:
plusId = 신한투자증권_premier_U
TRANS_TYPE = REAL
서비스ID 후보 = ["1001", "2001"]
서비스ID 후보가 2개 이상이면 라운드로빈 방식으로 하나를 선택한다.
예:
1번째 REAL 발송 -> 1001
2번째 REAL 발송 -> 2001
3번째 REAL 발송 -> 1001
4번째 REAL 발송 -> 2001
재할당된 서비스ID를 KKOALT.DIVISION.SVCID에서 조회한다.
예:
재할당 SERVICE_ID = 2001
테이블명 = tsms_agent_message_real_2
테이블명이 정상 조회되면 재할당된 서비스ID를 baseProcessBean.SERVICE_ID에 다시 세팅한다.
baseProcessBean.setSERVICE_ID(reassignedServiceId);
이 처리를 하는 이유는 발송 테이블 선택뿐 아니라 이후 발송 처리, 결과 처리, 로그 처리에서도 실제 선택된 서비스ID를 동일하게 사용하기 위해서다.
다음 조건 중 하나라도 맞지 않으면 PLUSID 기준 로직은 적용되지 않고 기존 로직으로 넘어간다.
plusId를 찾지 못한 경우REAL 또는 BATCH 서비스ID 배열이 없는 경우KKOALT.DIVISION.SVCID에 없는 경우Fallback 순서:
baseProcessBean.SERVICE_ID 기준 KKOALT.DIVISION.SVCID 조회SENDGROUPCODE 기준 테이블 조회KKOALT.DIVISION.TABLE의 REAL/BATCH 기준 테이블 라운드로빈KKOALT.DIVISION.PLUSID에 등록한 모든 서비스ID는 KKOALT.DIVISION.SVCID에도 등록되어 있어야 한다.
예를 들어 PLUSID에 아래처럼 등록했다면:
"REAL": ["1003", "2003"],
"BATCH": ["3003", "4003"]
SVCID에도 반드시 있어야 한다.
"1003": "tsms_agent_message_real_1",
"2003": "tsms_agent_message_real_2",
"3003": "tsms_agent_message_batch_1",
"4003": "tsms_agent_message_batch_2"
없으면 해당 plusId는 라운드로빈 서비스ID를 선택하더라도 테이블명을 찾지 못하고 fallback된다.
JSON 설정이 길면 properties line continuation을 사용할 수 있다.
KKOALT.DIVISION.PLUSID = {\
"LGCNS":{\
"신한투자증권_premier_U":{\
"REAL":["1001","2001"],\
"BATCH":["3001","4001"]\
}\
}\
}
주의사항:
\ 뒤에는 공백이나 탭이 있으면 안 된다.좋은 예:
"REAL":["1001","2001"],\
잘못된 예:
"REAL":["1001","2001"],\
11:14:10.985 [RMI TCP Connection(2)-127.0.0.1] INFO kr.uracle.ums.core.extention.service.division.DivisionRollManager - KKOALT 멀티 발송테이블 JSON 로드 완료 : {LGCNS={REAL=tsms_agent_message_real, BATCH=tsms_agent_message_batch}} 11:14:10.986 [RMI TCP Connection(2)-127.0.0.1] INFO kr.uracle.ums.core.extention.service.division.DivisionRollManager - KKOALT 서비스ID별 발송테이블 JSON 로드 완료 : {LGCNS={1001=tsms_agent_message_real_1, 2001=tsms_agent_message_real_2, 3001=tsms_agent_message_batch_1, 4001=tsms_agent_message_batch_2, 1002=tsms_agent_message_real_1, 2002=tsms_agent_message_real_2, 3002=tsms_agent_message_batch_1, 4002=tsms_agent_message_batch_2, 1003=tsms_agent_message_real_1, 2003=tsms_agent_message_real_2, 3003=tsms_agent_message_batch_1, 4003=tsms_agent_message_batch_2}} 11:14:10.986 [RMI TCP Connection(2)-127.0.0.1] INFO kr.uracle.ums.core.extention.service.division.DivisionRollManager - KKOALT 플러스ID별 서비스ID JSON 로드 완료 : {LGCNS={신한투자증권_premier_U={REAL=[1001, 2001], BATCH=[3001, 4001]}, 신한투자증권_시스템알림_U={REAL=[1002, 2002], BATCH=[3002, 4002]}, 신한투자증권={REAL=[1003, 2003], BATCH=[3003, 4003]}}} 11:14:10.986 [RMI TCP Connection(2)-127.0.0.1] INFO kr.uracle.ums.core.extention.service.division.DivisionRollManager - KKOALT 서비스ID별 플러스ID 역방향 맵 로드 완료 : {LGCNS={4001=신한투자증권_premier_U, 1003=신한투자증권, 1002=신한투자증권_시스템알림_U, 4002=신한투자증권_시스템알림_U, 2003=신한투자증권, 1001=신한투자증권_premier_U, 2002=신한투자증권_시스템알림_U, 3003=신한투자증권, 4003=신한투자증권, 2001=신한투자증권_premier_U, 3002=신한투자증권_시스템알림_U, 3001=신한투자증권_premier_U}}
11:23:54.183 [main] INFO [kr.uracle.ums.agent.extention.service.division.DivisionRollManager] - 동적 발송테이블 설정 로드 완료 - channelProviderTable: {"KKOALT":{"LGCNS":{"REAL1":"tsms_agent_message_real_1","REAL2":"tsms_agent_message_real_2","BATCH1":"tsms_agent_message_batch_1","BATCH2":"tsms_agent_message_batch_2"}}} 11:23:54.183 [main] INFO [kr.uracle.ums.agent.extention.service.division.DivisionRollManager] - 서비스ID별 발송테이블 설정 로드 완료 - channelServiceIdTable: {"KKOALT":{"LGCNS":{"1001":"tsms_agent_message_real_1","2001":"tsms_agent_message_real_2","3001":"tsms_agent_message_batch_1","4001":"tsms_agent_message_batch_2","1002":"tsms_agent_message_real_1","2002":"tsms_agent_message_real_2","3002":"tsms_agent_message_batch_1","4002":"tsms_agent_message_batch_2","1003":"tsms_agent_message_real_1","2003":"tsms_agent_message_real_2","3003":"tsms_agent_message_batch_1","4003":"tsms_agent_message_batch_2"}}} 11:23:54.183 [main] INFO [kr.uracle.ums.agent.extention.service.division.DivisionRollManager] - 플러스아이디별 서비스ID 설정 로드 완료 - serviceIdsByChannelAndPlusIdMap: {"KKOALT":{"LGCNS":{"신한투자증권_premier_U":{"REAL":["1001","2001"],"BATCH":["3001","4001"]},"신한투자증권_시스템알림_U":{"REAL":["1002","2002"],"BATCH":["3002","4002"]},"신한투자증권":{"REAL":["1003","2003"],"BATCH":["3003","4003"]}}}} 11:23:54.183 [main] INFO [kr.uracle.ums.agent.extention.service.division.DivisionRollManager] - 서비스ID별 플러스아이디 역색인 설정 로드 완료 - plusIdsByChannelAndServiceIdMap: {"KKOALT":{"LGCNS":{"4001":"신한투자증권_premier_U","1003":"신한투자증권","1002":"신한투자증권_시스템알림_U","4002":"신한투자증권_시스템알림_U","2003":"신한투자증권","1001":"신한투자증권_premier_U","2002":"신한투자증권_시스템알림_U","3003":"신한투자증권","4003":"신한투자증권","2001":"신한투자증권_premier_U","3002":"신한투자증권_시스템알림_U","3001":"신한투자증권_premier_U"}}}
KKOALT.DIVISION.PLUSID JSON 문법이 정상인가?KKOALT.DIVISION.SVCID JSON 문법이 정상인가?\ 뒤에 공백/탭이 없는가?KKOALT 플러스ID별 서비스ID JSON 로드 완료KKOALT 서비스ID별 플러스ID 역방향 맵 로드 완료KKOALT 서비스ID별 발송테이블 JSON 로드 완료