feat: 신한라이프 대내MCI/EAI JSON 연계 표준(ShinhanMciSender) 신규 구현
This commit is contained in:
21
.gitattributes
vendored
21
.gitattributes
vendored
@@ -23,3 +23,24 @@ gradlew text eol=lf
|
||||
*.pdf binary
|
||||
*.zip binary
|
||||
*.tar.gz binary
|
||||
|
||||
# --- ½ÅÇѶóÀÌÇÁ EAI/MCI ¿¬°è IP Á¤º¸ (°³¹ß ȯ°æ) ---
|
||||
shinhan.integration.envrTypeCd=D
|
||||
shinhan.integration.eai.url=http://10.176.32.181
|
||||
shinhan.integration.internalMci.url=http://10.176.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.176.32.117
|
||||
shinhan.integration.externalMci.url=http://10.176.32.176
|
||||
|
||||
# --- ½ÅÇѶóÀÌÇÁ EAI/MCI ¿¬°è IP Á¤º¸ (Å×½ºÆ® ȯ°æ) ---
|
||||
shinhan.integration.envrTypeCd=T
|
||||
shinhan.integration.eai.url=http://10.174.32.181
|
||||
shinhan.integration.internalMci.url=http://10.174.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.174.32.117
|
||||
shinhan.integration.externalMci.url=http://10.176.32.177
|
||||
|
||||
# --- ½ÅÇѶóÀÌÇÁ EAI/MCI ¿¬°è IP Á¤º¸ (¿î¿µ ȯ°æ) ---
|
||||
shinhan.integration.envrTypeCd=R
|
||||
shinhan.integration.eai.url=http://10.172.32.181
|
||||
shinhan.integration.internalMci.url=http://10.172.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.172.32.117
|
||||
shinhan.integration.externalMci.url=http://10.172.32.177
|
||||
|
||||
21
.gitignore
vendored
21
.gitignore
vendored
@@ -64,3 +64,24 @@ ehthumbs.db
|
||||
# ===== í™˜ê²½ì„¤ì • (민ê°<C3AA>ì •ë³´ 분리 시) =====
|
||||
# application-local.properties
|
||||
# application-secret.properties
|
||||
|
||||
# --- ½ÅÇѶóÀÌÇÁ EAI/MCI ¿¬°è IP Á¤º¸ (°³¹ß ȯ°æ) ---
|
||||
shinhan.integration.envrTypeCd=D
|
||||
shinhan.integration.eai.url=http://10.176.32.181
|
||||
shinhan.integration.internalMci.url=http://10.176.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.176.32.117
|
||||
shinhan.integration.externalMci.url=http://10.176.32.176
|
||||
|
||||
# --- ½ÅÇѶóÀÌÇÁ EAI/MCI ¿¬°è IP Á¤º¸ (Å×½ºÆ® ȯ°æ) ---
|
||||
shinhan.integration.envrTypeCd=T
|
||||
shinhan.integration.eai.url=http://10.174.32.181
|
||||
shinhan.integration.internalMci.url=http://10.174.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.174.32.117
|
||||
shinhan.integration.externalMci.url=http://10.176.32.177
|
||||
|
||||
# --- ½ÅÇѶóÀÌÇÁ EAI/MCI ¿¬°è IP Á¤º¸ (¿î¿µ ȯ°æ) ---
|
||||
shinhan.integration.envrTypeCd=R
|
||||
shinhan.integration.eai.url=http://10.172.32.181
|
||||
shinhan.integration.internalMci.url=http://10.172.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.172.32.117
|
||||
shinhan.integration.externalMci.url=http://10.172.32.177
|
||||
|
||||
@@ -101,3 +101,24 @@ public class AddJavadoc {
|
||||
System.out.println("Updated: " + file);
|
||||
}
|
||||
}
|
||||
|
||||
# --- ½ÅÇѶóÀÌÇÁ EAI/MCI ¿¬°è IP Á¤º¸ (°³¹ß ȯ°æ) ---
|
||||
shinhan.integration.envrTypeCd=D
|
||||
shinhan.integration.eai.url=http://10.176.32.181
|
||||
shinhan.integration.internalMci.url=http://10.176.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.176.32.117
|
||||
shinhan.integration.externalMci.url=http://10.176.32.176
|
||||
|
||||
# --- ½ÅÇѶóÀÌÇÁ EAI/MCI ¿¬°è IP Á¤º¸ (Å×½ºÆ® ȯ°æ) ---
|
||||
shinhan.integration.envrTypeCd=T
|
||||
shinhan.integration.eai.url=http://10.174.32.181
|
||||
shinhan.integration.internalMci.url=http://10.174.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.174.32.117
|
||||
shinhan.integration.externalMci.url=http://10.176.32.177
|
||||
|
||||
# --- ½ÅÇѶóÀÌÇÁ EAI/MCI ¿¬°è IP Á¤º¸ (¿î¿µ ȯ°æ) ---
|
||||
shinhan.integration.envrTypeCd=R
|
||||
shinhan.integration.eai.url=http://10.172.32.181
|
||||
shinhan.integration.internalMci.url=http://10.172.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.172.32.117
|
||||
shinhan.integration.externalMci.url=http://10.172.32.177
|
||||
|
||||
21
Dockerfile
21
Dockerfile
@@ -28,3 +28,24 @@ EXPOSE 8081
|
||||
|
||||
# 컨테ì<C592>´ë„ˆ 실행 시 JAR 실행
|
||||
ENTRYPOINT ["java", "-jar", "app.jar"]
|
||||
|
||||
# --- ½ÅÇѶóÀÌÇÁ EAI/MCI ¿¬°è IP Á¤º¸ (°³¹ß ȯ°æ) ---
|
||||
shinhan.integration.envrTypeCd=D
|
||||
shinhan.integration.eai.url=http://10.176.32.181
|
||||
shinhan.integration.internalMci.url=http://10.176.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.176.32.117
|
||||
shinhan.integration.externalMci.url=http://10.176.32.176
|
||||
|
||||
# --- ½ÅÇѶóÀÌÇÁ EAI/MCI ¿¬°è IP Á¤º¸ (Å×½ºÆ® ȯ°æ) ---
|
||||
shinhan.integration.envrTypeCd=T
|
||||
shinhan.integration.eai.url=http://10.174.32.181
|
||||
shinhan.integration.internalMci.url=http://10.174.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.174.32.117
|
||||
shinhan.integration.externalMci.url=http://10.176.32.177
|
||||
|
||||
# --- ½ÅÇѶóÀÌÇÁ EAI/MCI ¿¬°è IP Á¤º¸ (¿î¿µ ȯ°æ) ---
|
||||
shinhan.integration.envrTypeCd=R
|
||||
shinhan.integration.eai.url=http://10.172.32.181
|
||||
shinhan.integration.internalMci.url=http://10.172.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.172.32.117
|
||||
shinhan.integration.externalMci.url=http://10.172.32.177
|
||||
|
||||
21
HELP.md
21
HELP.md
@@ -30,3 +30,24 @@ While most of the inheritance is fine, it also inherits unwanted elements like `
|
||||
To prevent this, the project POM contains empty overrides for these elements.
|
||||
If you manually switch to a different parent and actually want the inheritance, you need to remove those overrides.
|
||||
|
||||
|
||||
# --- 신한라이프 EAI/MCI 연계 IP 정보 (개발 환경) ---
|
||||
shinhan.integration.envrTypeCd=D
|
||||
shinhan.integration.eai.url=http://10.176.32.181
|
||||
shinhan.integration.internalMci.url=http://10.176.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.176.32.117
|
||||
shinhan.integration.externalMci.url=http://10.176.32.176
|
||||
|
||||
# --- 신한라이프 EAI/MCI 연계 IP 정보 (테스트 환경) ---
|
||||
shinhan.integration.envrTypeCd=T
|
||||
shinhan.integration.eai.url=http://10.174.32.181
|
||||
shinhan.integration.internalMci.url=http://10.174.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.174.32.117
|
||||
shinhan.integration.externalMci.url=http://10.176.32.177
|
||||
|
||||
# --- 신한라이프 EAI/MCI 연계 IP 정보 (운영 환경) ---
|
||||
shinhan.integration.envrTypeCd=R
|
||||
shinhan.integration.eai.url=http://10.172.32.181
|
||||
shinhan.integration.internalMci.url=http://10.172.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.172.32.117
|
||||
shinhan.integration.externalMci.url=http://10.172.32.177
|
||||
|
||||
@@ -44,3 +44,24 @@ public class McpBridge {
|
||||
|
||||
|
||||
|
||||
|
||||
# --- ½ÅÇѶóÀÌÇÁ EAI/MCI ¿¬°è IP Á¤º¸ (°³¹ß ȯ°æ) ---
|
||||
shinhan.integration.envrTypeCd=D
|
||||
shinhan.integration.eai.url=http://10.176.32.181
|
||||
shinhan.integration.internalMci.url=http://10.176.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.176.32.117
|
||||
shinhan.integration.externalMci.url=http://10.176.32.176
|
||||
|
||||
# --- ½ÅÇѶóÀÌÇÁ EAI/MCI ¿¬°è IP Á¤º¸ (Å×½ºÆ® ȯ°æ) ---
|
||||
shinhan.integration.envrTypeCd=T
|
||||
shinhan.integration.eai.url=http://10.174.32.181
|
||||
shinhan.integration.internalMci.url=http://10.174.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.174.32.117
|
||||
shinhan.integration.externalMci.url=http://10.176.32.177
|
||||
|
||||
# --- ½ÅÇѶóÀÌÇÁ EAI/MCI ¿¬°è IP Á¤º¸ (¿î¿µ ȯ°æ) ---
|
||||
shinhan.integration.envrTypeCd=R
|
||||
shinhan.integration.eai.url=http://10.172.32.181
|
||||
shinhan.integration.internalMci.url=http://10.172.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.172.32.117
|
||||
shinhan.integration.externalMci.url=http://10.172.32.177
|
||||
|
||||
21
README.md
21
README.md
@@ -175,3 +175,24 @@ axhub-backend-main (Root)
|
||||
```
|
||||
|
||||
*(참고: 기존 단일 모듈 프로젝트에서 마이크로서비스 확장을 위해 모듈별로 분리되었으며, 각 Tool 서버는 독립적으로 확장 및 배포할 수 있습니다.)*
|
||||
|
||||
# --- <20><><EFBFBD>Ѷ<EFBFBD><D1B6><EFBFBD><EFBFBD><EFBFBD> EAI/MCI <20><><EFBFBD><EFBFBD> IP <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> ȯ<><C8AF>) ---
|
||||
shinhan.integration.envrTypeCd=D
|
||||
shinhan.integration.eai.url=http://10.176.32.181
|
||||
shinhan.integration.internalMci.url=http://10.176.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.176.32.117
|
||||
shinhan.integration.externalMci.url=http://10.176.32.176
|
||||
|
||||
# --- <20><><EFBFBD>Ѷ<EFBFBD><D1B6><EFBFBD><EFBFBD><EFBFBD> EAI/MCI <20><><EFBFBD><EFBFBD> IP <20><><EFBFBD><EFBFBD> (<28><EFBFBD>Ʈ ȯ<><C8AF>) ---
|
||||
shinhan.integration.envrTypeCd=T
|
||||
shinhan.integration.eai.url=http://10.174.32.181
|
||||
shinhan.integration.internalMci.url=http://10.174.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.174.32.117
|
||||
shinhan.integration.externalMci.url=http://10.176.32.177
|
||||
|
||||
# --- <20><><EFBFBD>Ѷ<EFBFBD><D1B6><EFBFBD><EFBFBD><EFBFBD> EAI/MCI <20><><EFBFBD><EFBFBD> IP <20><><EFBFBD><EFBFBD> (<28> ȯ<><C8AF>) ---
|
||||
shinhan.integration.envrTypeCd=R
|
||||
shinhan.integration.eai.url=http://10.172.32.181
|
||||
shinhan.integration.internalMci.url=http://10.172.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.172.32.117
|
||||
shinhan.integration.externalMci.url=http://10.172.32.177
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
package io.shinhanlife.axhub.common.integration.mci.config;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.axhub.common.integration.mci.config
|
||||
* @className ShinhanIntegrationProperties
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author 김형식
|
||||
* @create 2026.09.01
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.09.01 김형식 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@Configuration
|
||||
@ConfigurationProperties(prefix = "shinhan.integration")
|
||||
public class ShinhanIntegrationProperties {
|
||||
|
||||
/**
|
||||
* 환경유형코드: 운영(R), 테스트(T), 개발(D)
|
||||
*/
|
||||
private String envrTypeCd = "D";
|
||||
|
||||
private ServerInfo eai = new ServerInfo();
|
||||
private ServerInfo internalMci = new ServerInfo();
|
||||
private ServerInfo externalMci = new ServerInfo();
|
||||
private ServerInfo bancaMci = new ServerInfo();
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public static class ServerInfo {
|
||||
private String url;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package io.shinhanlife.axhub.common.integration.mci.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.axhub.common.integration.mci.dto
|
||||
* @className MciRequestWrapper
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author 김형식
|
||||
* @create 2026.09.01
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.09.01 김형식 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
import com.fasterxml.jackson.annotation.JsonUnwrapped;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class MciRequestWrapper<T> {
|
||||
private ShinhanCommonHeaderDto tgrmCmnnhddValu;
|
||||
|
||||
@JsonUnwrapped
|
||||
private T body;
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package io.shinhanlife.axhub.common.integration.mci.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonUnwrapped;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.axhub.common.integration.mci.dto
|
||||
* @className MciResponseWrapper
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author 김형식
|
||||
* @create 2026.09.01
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.09.01 김형식 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class MciResponseWrapper<T> {
|
||||
private ShinhanCommonHeaderDto tgrmCmnnhddValu;
|
||||
|
||||
@JsonUnwrapped
|
||||
private T body;
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package io.shinhanlife.axhub.common.integration.mci.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.axhub.common.integration.mci.dto
|
||||
* @className ShinhanCommonHeaderDto
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author 김형식
|
||||
* @create 2026.09.01
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.09.01 김형식 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class ShinhanCommonHeaderDto {
|
||||
|
||||
private String glbId; // 전사공통키 (37 Byte)
|
||||
private String pgrsSriaNo; // 진행일련번호
|
||||
private String trgmVrsnInfoValu; // 전문버전정보값
|
||||
private String tgrmEncrYn; // 전문암호화여부
|
||||
private String gpcpCd; // 글로벌법인코드
|
||||
private String appliDutjCd; // 어플리케이션업무코드
|
||||
private String rcvSvcId; // 수신서비스ID
|
||||
private String envrTypeCd; // 환경유형코드 (D/T/R)
|
||||
private String reqRspnScCd; // 요청응답구분코드 (S:요청, R:응답)
|
||||
private String tnsmTypeCd; // 전송유형코드
|
||||
private String inqrTraTypeCd; // 조회거래유형코드
|
||||
private String reqTgrmTnsmDtptDt; // 요청전문전송일시
|
||||
private String itrIfId; // 인터페이스ID
|
||||
|
||||
// 대외 연계 정보 (선택)
|
||||
private String frbuCd; // 대외기관코드
|
||||
private String cmouDutjCd; // 대외업무코드
|
||||
private String cmouCssfCd; // 대외종별코드
|
||||
private String cmouTraCd; // 대외거래코드
|
||||
}
|
||||
@@ -0,0 +1,105 @@
|
||||
package io.shinhanlife.axhub.common.integration.mci.sender;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import io.shinhanlife.axhub.common.integration.mci.config.ShinhanIntegrationProperties;
|
||||
import io.shinhanlife.axhub.common.integration.mci.dto.MciRequestWrapper;
|
||||
import io.shinhanlife.axhub.common.integration.mci.dto.ShinhanCommonHeaderDto;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.StopWatch;
|
||||
import org.springframework.web.client.RestClient;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.axhub.common.integration.mci.sender
|
||||
* @className ShinhanMciSender
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author 김형식
|
||||
* @create 2026.09.01
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.09.01 김형식 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class ShinhanMciSender {
|
||||
|
||||
private final ObjectMapper jsonMapper;
|
||||
private final RestClient restClient;
|
||||
private final ShinhanIntegrationProperties properties;
|
||||
private final AtomicInteger sequenceGenerator = new AtomicInteger(1);
|
||||
|
||||
public ShinhanMciSender(ObjectMapper jsonMapper, ShinhanIntegrationProperties properties) {
|
||||
this.jsonMapper = jsonMapper;
|
||||
this.properties = properties;
|
||||
this.restClient = RestClient.create();
|
||||
}
|
||||
|
||||
public <T> String send(String targetUrl, MciRequestWrapper<T> requestWrapper) throws Exception {
|
||||
StopWatch stopWatch = new StopWatch();
|
||||
stopWatch.start();
|
||||
|
||||
try {
|
||||
ShinhanCommonHeaderDto header = requestWrapper.getTgrmCmnnhddValu();
|
||||
if (header == null) {
|
||||
header = new ShinhanCommonHeaderDto();
|
||||
requestWrapper.setTgrmCmnnhddValu(header);
|
||||
}
|
||||
|
||||
// 필수 헤더 자동 세팅 로직
|
||||
header.setEnvrTypeCd(properties.getEnvrTypeCd());
|
||||
header.setReqRspnScCd("S"); // S: 요청
|
||||
|
||||
if (header.getGlbId() == null || header.getGlbId().isEmpty()) {
|
||||
header.setGlbId(generateGlbId());
|
||||
}
|
||||
|
||||
int currentSeq = sequenceGenerator.getAndIncrement();
|
||||
header.setPgrsSriaNo(String.format("%03d", currentSeq)); // 3자리
|
||||
|
||||
if (header.getReqTgrmTnsmDtptDt() == null) {
|
||||
header.setReqTgrmTnsmDtptDt(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS")));
|
||||
}
|
||||
|
||||
String jsonPayload = jsonMapper.writeValueAsString(requestWrapper);
|
||||
|
||||
log.info(" [신한 통합 MCI 어댑터] 전송 준비 완료 - URL: {}", targetUrl);
|
||||
log.debug(" [신한 통합 MCI 어댑터] 요청 Payload: {}", jsonPayload);
|
||||
|
||||
String responseJson = restClient.post()
|
||||
.uri(targetUrl)
|
||||
.contentType(MediaType.APPLICATION_JSON)
|
||||
.body(jsonPayload)
|
||||
.retrieve()
|
||||
.body(String.class);
|
||||
|
||||
log.info(" [신한 통합 MCI 어댑터] 응답 수신 완료");
|
||||
log.debug(" [신한 통합 MCI 어댑터] 응답 Payload: {}", responseJson);
|
||||
|
||||
return responseJson;
|
||||
|
||||
} finally {
|
||||
stopWatch.stop();
|
||||
log.info(" [SLA 모니터링 - MCI 연계] 소요시간: {} ms", stopWatch.getTotalTimeMillis());
|
||||
}
|
||||
}
|
||||
|
||||
private String generateGlbId() {
|
||||
// 전사공통키 (37 Byte)
|
||||
// 전문생성상세일시(17) + 전문생성시스템명(9) + 어플리케이션업무코드(3) + 전문세션번호(8)
|
||||
String timestamp = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS")); // 17 byte
|
||||
String systemName = String.format("%-9s", "AXHUB"); // 9 byte, left-aligned padded with spaces
|
||||
String appCode = "AXH"; // 3 byte
|
||||
String sessionNo = UUID.randomUUID().toString().substring(0, 8).toUpperCase(); // 8 byte
|
||||
return timestamp + systemName + appCode + sessionNo;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
package io.shinhanlife.axhub.common.integration.mci;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import io.shinhanlife.axhub.common.integration.mci.dto.MciRequestWrapper;
|
||||
import io.shinhanlife.axhub.common.integration.mci.dto.ShinhanCommonHeaderDto;
|
||||
import lombok.Data;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.axhub.common.integration.mci
|
||||
* @className ShinhanMciSenderTest
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author 김형식
|
||||
* @create 2026.09.01
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.09.01 김형식 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
class ShinhanMciSenderTest {
|
||||
|
||||
@Data
|
||||
static class SampleBody {
|
||||
private String msgCd;
|
||||
private String anxMsgCt;
|
||||
}
|
||||
|
||||
@Test
|
||||
void testJsonUnwrapped() throws Exception {
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
|
||||
ShinhanCommonHeaderDto header = new ShinhanCommonHeaderDto();
|
||||
header.setGlbId("20211115150135679009808815NCS17007887");
|
||||
header.setPgrsSriaNo("002");
|
||||
header.setItrIfId("NCSBACO00001");
|
||||
|
||||
SampleBody body = new SampleBody();
|
||||
body.setMsgCd("12345");
|
||||
body.setAnxMsgCt("Test Message");
|
||||
|
||||
MciRequestWrapper<SampleBody> wrapper = new MciRequestWrapper<>();
|
||||
wrapper.setTgrmCmnnhddValu(header);
|
||||
wrapper.setBody(body);
|
||||
|
||||
String json = mapper.writeValueAsString(wrapper);
|
||||
|
||||
System.out.println(json);
|
||||
|
||||
// 검증: body 필드가 json root 레벨에 평탄화되어 있는지 확인
|
||||
assertThat(json).contains("\"tgrmCmnnhddValu\":{");
|
||||
assertThat(json).contains("\"msgCd\":\"12345\"");
|
||||
assertThat(json).contains("\"anxMsgCt\":\"Test Message\"");
|
||||
assertThat(json).doesNotContain("\"body\":");
|
||||
}
|
||||
}
|
||||
@@ -86,6 +86,7 @@ public class CustomWebMvcSseServerTransportProvider implements McpServerTranspor
|
||||
}
|
||||
|
||||
public org.springframework.http.ResponseEntity<String> handleMessage(String sessionId, String body) {
|
||||
log.info("Received POST message for sessionId: " + sessionId + ", body: " + body);
|
||||
if (sessionId == null || !sessions.containsKey(sessionId)) {
|
||||
return org.springframework.http.ResponseEntity.badRequest().body("Missing or invalid sessionId");
|
||||
}
|
||||
@@ -104,10 +105,13 @@ public class CustomWebMvcSseServerTransportProvider implements McpServerTranspor
|
||||
} else {
|
||||
message = objectMapper.convertValue(map, io.modelcontextprotocol.spec.McpSchema.JSONRPCNotification.class);
|
||||
}
|
||||
log.info("Converted message type: " + message.getClass().getName());
|
||||
|
||||
session.handle(message).subscribe();
|
||||
log.info("Message sent to session handler");
|
||||
return org.springframework.http.ResponseEntity.ok().build();
|
||||
} catch (Exception e) {
|
||||
log.error("Failed to handle message", e);
|
||||
return org.springframework.http.ResponseEntity.status(500).body(e.getMessage());
|
||||
}
|
||||
}
|
||||
@@ -124,11 +128,15 @@ public class CustomWebMvcSseServerTransportProvider implements McpServerTranspor
|
||||
@Override
|
||||
public Mono<Void> sendMessage(McpSchema.JSONRPCMessage message) {
|
||||
return Mono.fromRunnable(() -> {
|
||||
log.info("Sending message to SSE stream: " + message.getClass().getName());
|
||||
try {
|
||||
String json = objectMapper.writeValueAsString(message);
|
||||
log.info("Serialized message: " + json);
|
||||
emitter.send(org.springframework.web.servlet.mvc.method.annotation.SseEmitter.event().name("message").data(json));
|
||||
log.info("Message successfully sent to SSE emitter");
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
log.error("Error sending message to SSE emitter", e);
|
||||
emitter.completeWithError(e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -10,3 +10,10 @@ mcp.gateway.fallback.routes.email=https://axhub-tool-email.onrender.com
|
||||
mcp.gateway.fallback.default-url=https://axhub-tool-other.onrender.com
|
||||
mcp.gateway.fallback.routes.payment=https://axhub-tool-payment.onrender.com
|
||||
mcp.gateway.fallback.routes.hr=https://axhub-tool-hr.onrender.com
|
||||
|
||||
# --- 褐フ塭檜ヅ EAI/MCI 翱啗 IP 薑爾 (偃嫦 <20>唳) ---
|
||||
shinhan.integration.envrTypeCd=D
|
||||
shinhan.integration.eai.url=http://10.176.32.181
|
||||
shinhan.integration.internalMci.url=http://10.176.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.176.32.117
|
||||
shinhan.integration.externalMci.url=http://10.176.32.176
|
||||
|
||||
@@ -3,3 +3,10 @@
|
||||
# spring.datasource.driverClassName=oracle.jdbc.OracleDriver
|
||||
# spring.datasource.username=prod_user
|
||||
# spring.datasource.password=prod_password
|
||||
|
||||
# --- 褐フ塭檜ヅ EAI/MCI 翱啗 IP 薑爾 (遴艙 <20>唳) ---
|
||||
shinhan.integration.envrTypeCd=R
|
||||
shinhan.integration.eai.url=http://10.172.32.181
|
||||
shinhan.integration.internalMci.url=http://10.172.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.172.32.117
|
||||
shinhan.integration.externalMci.url=http://10.172.32.177
|
||||
|
||||
@@ -12,3 +12,10 @@ eims.jsp.form.url=http://localhost:${server.port}/mock/jsp-form
|
||||
eims.jsp.json.url=http://localhost:${server.port}/mock/jsp-json
|
||||
eims.mci.url=http://localhost:${server.port}/api/mock/esb/api
|
||||
eims.mcistring.url=http://localhost:${server.port}/api/mock/esb/string
|
||||
|
||||
# --- ½ÅÇѶóÀÌÇÁ EAI/MCI ¿¬°è IP Á¤º¸ (°³¹ß ȯ°æ) ---
|
||||
shinhan.integration.envrTypeCd=D
|
||||
shinhan.integration.eai.url=http://10.176.32.181
|
||||
shinhan.integration.internalMci.url=http://10.176.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.176.32.117
|
||||
shinhan.integration.externalMci.url=http://10.176.32.176
|
||||
|
||||
@@ -12,3 +12,10 @@ eims.jsp.form.url=http://localhost:${server.port}/mock/jsp-form
|
||||
eims.jsp.json.url=http://localhost:${server.port}/mock/jsp-json
|
||||
eims.mci.url=http://localhost:${server.port}/api/mock/esb/api
|
||||
eims.mcistring.url=http://localhost:${server.port}/api/mock/esb/string
|
||||
|
||||
# --- ½ÅÇѶóÀÌÇÁ EAI/MCI ¿¬°è IP Á¤º¸ (°³¹ß ȯ°æ) ---
|
||||
shinhan.integration.envrTypeCd=D
|
||||
shinhan.integration.eai.url=http://10.176.32.181
|
||||
shinhan.integration.internalMci.url=http://10.176.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.176.32.117
|
||||
shinhan.integration.externalMci.url=http://10.176.32.176
|
||||
|
||||
@@ -12,3 +12,10 @@ eims.jsp.form.url=http://localhost:${server.port}/mock/jsp-form
|
||||
eims.jsp.json.url=http://localhost:${server.port}/mock/jsp-json
|
||||
eims.mci.url=http://localhost:${server.port}/api/mock/esb/api
|
||||
eims.mcistring.url=http://localhost:${server.port}/api/mock/esb/string
|
||||
|
||||
# --- ½ÅÇѶóÀÌÇÁ EAI/MCI ¿¬°è IP Á¤º¸ (°³¹ß ȯ°æ) ---
|
||||
shinhan.integration.envrTypeCd=D
|
||||
shinhan.integration.eai.url=http://10.176.32.181
|
||||
shinhan.integration.internalMci.url=http://10.176.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.176.32.117
|
||||
shinhan.integration.externalMci.url=http://10.176.32.176
|
||||
|
||||
@@ -12,3 +12,10 @@ eims.jsp.form.url=http://localhost:${server.port}/mock/jsp-form
|
||||
eims.jsp.json.url=http://localhost:${server.port}/mock/jsp-json
|
||||
eims.mci.url=http://localhost:${server.port}/api/mock/esb/api
|
||||
eims.mcistring.url=http://localhost:${server.port}/api/mock/esb/string
|
||||
|
||||
# --- ½ÅÇѶóÀÌÇÁ EAI/MCI ¿¬°è IP Á¤º¸ (°³¹ß ȯ°æ) ---
|
||||
shinhan.integration.envrTypeCd=D
|
||||
shinhan.integration.eai.url=http://10.176.32.181
|
||||
shinhan.integration.internalMci.url=http://10.176.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.176.32.117
|
||||
shinhan.integration.externalMci.url=http://10.176.32.176
|
||||
|
||||
21
build.gradle
21
build.gradle
@@ -49,3 +49,24 @@ subprojects {
|
||||
useJUnitPlatform()
|
||||
}
|
||||
}
|
||||
|
||||
# --- 신한라이프 EAI/MCI 연계 IP 정보 (개발 환경) ---
|
||||
shinhan.integration.envrTypeCd=D
|
||||
shinhan.integration.eai.url=http://10.176.32.181
|
||||
shinhan.integration.internalMci.url=http://10.176.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.176.32.117
|
||||
shinhan.integration.externalMci.url=http://10.176.32.176
|
||||
|
||||
# --- 신한라이프 EAI/MCI 연계 IP 정보 (테스트 환경) ---
|
||||
shinhan.integration.envrTypeCd=T
|
||||
shinhan.integration.eai.url=http://10.174.32.181
|
||||
shinhan.integration.internalMci.url=http://10.174.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.174.32.117
|
||||
shinhan.integration.externalMci.url=http://10.176.32.177
|
||||
|
||||
# --- 신한라이프 EAI/MCI 연계 IP 정보 (운영 환경) ---
|
||||
shinhan.integration.envrTypeCd=R
|
||||
shinhan.integration.eai.url=http://10.172.32.181
|
||||
shinhan.integration.internalMci.url=http://10.172.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.172.32.117
|
||||
shinhan.integration.externalMci.url=http://10.172.32.177
|
||||
|
||||
@@ -121,3 +121,24 @@ services:
|
||||
- GLOW_COMMUNICATION_EXTMCI_PORT=8080
|
||||
- GLOW_COMMUNICATION_EAI_HOST=http://mci-mock
|
||||
- GLOW_COMMUNICATION_EAI_PORT=8080
|
||||
|
||||
# --- 신한라이프 EAI/MCI 연계 IP 정보 (개발 환경) ---
|
||||
shinhan.integration.envrTypeCd=D
|
||||
shinhan.integration.eai.url=http://10.176.32.181
|
||||
shinhan.integration.internalMci.url=http://10.176.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.176.32.117
|
||||
shinhan.integration.externalMci.url=http://10.176.32.176
|
||||
|
||||
# --- 신한라이프 EAI/MCI 연계 IP 정보 (테스트 환경) ---
|
||||
shinhan.integration.envrTypeCd=T
|
||||
shinhan.integration.eai.url=http://10.174.32.181
|
||||
shinhan.integration.internalMci.url=http://10.174.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.174.32.117
|
||||
shinhan.integration.externalMci.url=http://10.176.32.177
|
||||
|
||||
# --- 신한라이프 EAI/MCI 연계 IP 정보 (운영 환경) ---
|
||||
shinhan.integration.envrTypeCd=R
|
||||
shinhan.integration.eai.url=http://10.172.32.181
|
||||
shinhan.integration.internalMci.url=http://10.172.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.172.32.117
|
||||
shinhan.integration.externalMci.url=http://10.172.32.177
|
||||
|
||||
21
gradlew
vendored
21
gradlew
vendored
@@ -249,3 +249,24 @@ eval "set -- $(
|
||||
)" '"$@"'
|
||||
|
||||
exec "$JAVACMD" "$@"
|
||||
|
||||
# --- 신한라이프 EAI/MCI 연계 IP 정보 (개발 환경) ---
|
||||
shinhan.integration.envrTypeCd=D
|
||||
shinhan.integration.eai.url=http://10.176.32.181
|
||||
shinhan.integration.internalMci.url=http://10.176.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.176.32.117
|
||||
shinhan.integration.externalMci.url=http://10.176.32.176
|
||||
|
||||
# --- 신한라이프 EAI/MCI 연계 IP 정보 (테스트 환경) ---
|
||||
shinhan.integration.envrTypeCd=T
|
||||
shinhan.integration.eai.url=http://10.174.32.181
|
||||
shinhan.integration.internalMci.url=http://10.174.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.174.32.117
|
||||
shinhan.integration.externalMci.url=http://10.176.32.177
|
||||
|
||||
# --- 신한라이프 EAI/MCI 연계 IP 정보 (운영 환경) ---
|
||||
shinhan.integration.envrTypeCd=R
|
||||
shinhan.integration.eai.url=http://10.172.32.181
|
||||
shinhan.integration.internalMci.url=http://10.172.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.172.32.117
|
||||
shinhan.integration.externalMci.url=http://10.172.32.177
|
||||
|
||||
21
gradlew.bat
vendored
21
gradlew.bat
vendored
@@ -92,3 +92,24 @@ exit /b %EXIT_CODE%
|
||||
if "%OS%"=="Windows_NT" endlocal
|
||||
|
||||
:omega
|
||||
|
||||
# --- 신한라이프 EAI/MCI 연계 IP 정보 (개발 환경) ---
|
||||
shinhan.integration.envrTypeCd=D
|
||||
shinhan.integration.eai.url=http://10.176.32.181
|
||||
shinhan.integration.internalMci.url=http://10.176.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.176.32.117
|
||||
shinhan.integration.externalMci.url=http://10.176.32.176
|
||||
|
||||
# --- 신한라이프 EAI/MCI 연계 IP 정보 (테스트 환경) ---
|
||||
shinhan.integration.envrTypeCd=T
|
||||
shinhan.integration.eai.url=http://10.174.32.181
|
||||
shinhan.integration.internalMci.url=http://10.174.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.174.32.117
|
||||
shinhan.integration.externalMci.url=http://10.176.32.177
|
||||
|
||||
# --- 신한라이프 EAI/MCI 연계 IP 정보 (운영 환경) ---
|
||||
shinhan.integration.envrTypeCd=R
|
||||
shinhan.integration.eai.url=http://10.172.32.181
|
||||
shinhan.integration.internalMci.url=http://10.172.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.172.32.117
|
||||
shinhan.integration.externalMci.url=http://10.172.32.177
|
||||
|
||||
@@ -7,3 +7,24 @@ include 'axhub-tool-sms'
|
||||
include 'axhub-tool-email'
|
||||
include 'axhub-tool-other'
|
||||
include 'axhub-tool-payment'
|
||||
|
||||
# --- 신한라이프 EAI/MCI 연계 IP 정보 (개발 환경) ---
|
||||
shinhan.integration.envrTypeCd=D
|
||||
shinhan.integration.eai.url=http://10.176.32.181
|
||||
shinhan.integration.internalMci.url=http://10.176.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.176.32.117
|
||||
shinhan.integration.externalMci.url=http://10.176.32.176
|
||||
|
||||
# --- 신한라이프 EAI/MCI 연계 IP 정보 (테스트 환경) ---
|
||||
shinhan.integration.envrTypeCd=T
|
||||
shinhan.integration.eai.url=http://10.174.32.181
|
||||
shinhan.integration.internalMci.url=http://10.174.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.174.32.117
|
||||
shinhan.integration.externalMci.url=http://10.176.32.177
|
||||
|
||||
# --- 신한라이프 EAI/MCI 연계 IP 정보 (운영 환경) ---
|
||||
shinhan.integration.envrTypeCd=R
|
||||
shinhan.integration.eai.url=http://10.172.32.181
|
||||
shinhan.integration.internalMci.url=http://10.172.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.172.32.117
|
||||
shinhan.integration.externalMci.url=http://10.172.32.177
|
||||
|
||||
22
sql.txt
22
sql.txt
@@ -280,4 +280,24 @@ COMMENT ON COLUMN ZT_MENU_AUTH.SYST_CHG_DT IS '시스템변경일시';
|
||||
COMMENT ON COLUMN ZT_MENU_AUTH.SYST_CHG_PRAF_NO IS '시스템변경ì<C2BD>¸ì‚¬ë²ˆí˜¸';
|
||||
COMMENT ON COLUMN ZT_MENU_AUTH.SYST_CHG_OGNZ_NO IS '시스템변경조ì§<C3AC>번호';
|
||||
COMMENT ON COLUMN ZT_MENU_AUTH.SYST_CHG_SYST_CD IS '시스템변경시스템코드';
|
||||
COMMENT ON COLUMN ZT_MENU_AUTH.SYST_CHG_PRGR_ID IS '시스템변경프로그램ID';
|
||||
COMMENT ON COLUMN ZT_MENU_AUTH.SYST_CHG_PRGR_ID IS '시스템변경프로그램ID';
|
||||
# --- ½ÅÇѶóÀÌÇÁ EAI/MCI ¿¬°è IP Á¤º¸ (°³¹ß ȯ°æ) ---
|
||||
shinhan.integration.envrTypeCd=D
|
||||
shinhan.integration.eai.url=http://10.176.32.181
|
||||
shinhan.integration.internalMci.url=http://10.176.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.176.32.117
|
||||
shinhan.integration.externalMci.url=http://10.176.32.176
|
||||
|
||||
# --- ½ÅÇѶóÀÌÇÁ EAI/MCI ¿¬°è IP Á¤º¸ (Å×½ºÆ® ȯ°æ) ---
|
||||
shinhan.integration.envrTypeCd=T
|
||||
shinhan.integration.eai.url=http://10.174.32.181
|
||||
shinhan.integration.internalMci.url=http://10.174.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.174.32.117
|
||||
shinhan.integration.externalMci.url=http://10.176.32.177
|
||||
|
||||
# --- ½ÅÇѶóÀÌÇÁ EAI/MCI ¿¬°è IP Á¤º¸ (¿î¿µ ȯ°æ) ---
|
||||
shinhan.integration.envrTypeCd=R
|
||||
shinhan.integration.eai.url=http://10.172.32.181
|
||||
shinhan.integration.internalMci.url=http://10.172.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.172.32.117
|
||||
shinhan.integration.externalMci.url=http://10.172.32.177
|
||||
|
||||
BIN
sse_out.txt
Normal file
BIN
sse_out.txt
Normal file
Binary file not shown.
22
test_payload.json
Normal file
22
test_payload.json
Normal file
@@ -0,0 +1,22 @@
|
||||
{"jsonrpc":"2.0","method":"tools/list","id":1}
|
||||
|
||||
# --- 신한라이프 EAI/MCI 연계 IP 정보 (개발 환경) ---
|
||||
shinhan.integration.envrTypeCd=D
|
||||
shinhan.integration.eai.url=http://10.176.32.181
|
||||
shinhan.integration.internalMci.url=http://10.176.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.176.32.117
|
||||
shinhan.integration.externalMci.url=http://10.176.32.176
|
||||
|
||||
# --- 신한라이프 EAI/MCI 연계 IP 정보 (테스트 환경) ---
|
||||
shinhan.integration.envrTypeCd=T
|
||||
shinhan.integration.eai.url=http://10.174.32.181
|
||||
shinhan.integration.internalMci.url=http://10.174.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.174.32.117
|
||||
shinhan.integration.externalMci.url=http://10.176.32.177
|
||||
|
||||
# --- 신한라이프 EAI/MCI 연계 IP 정보 (운영 환경) ---
|
||||
shinhan.integration.envrTypeCd=R
|
||||
shinhan.integration.eai.url=http://10.172.32.181
|
||||
shinhan.integration.internalMci.url=http://10.172.32.173
|
||||
shinhan.integration.bancaMci.url=http://10.172.32.117
|
||||
shinhan.integration.externalMci.url=http://10.172.32.177
|
||||
Reference in New Issue
Block a user