diff --git a/McpBridge.java b/McpBridge.java index 43b2891..acda5e5 100644 --- a/McpBridge.java +++ b/McpBridge.java @@ -1,3 +1,17 @@ +/** + * @package io.shinhanlife + * @className McpBridge + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URI; diff --git a/add_javadoc.py b/add_javadoc.py new file mode 100644 index 0000000..78ce31f --- /dev/null +++ b/add_javadoc.py @@ -0,0 +1,125 @@ +import os +import re + +JAVADOC_FILES = [ + r'.\McpBridge.java', + r'.\dap-common\src\main\java\io\shinhanlife\dap\common\mcp\exception\GlobalExceptionHandler.java', + r'.\dap-common\src\main\java\io\shinhanlife\dap\common\util\ToolSourceUpdater.java', + r'.\dap-common\src\main\java\io\shinhanlife\glow\GlowAppServiceId.java', + r'.\dap-common\src\main\java\io\shinhanlife\glow\GlowControllerId.java', + r'.\dap-common\src\main\java\io\shinhanlife\glow\GlowIndexPaging.java', + r'.\dap-common\src\main\java\io\shinhanlife\glow\GlowMciFieldInfo.java', + r'.\dap-common\src\main\java\io\shinhanlife\glow\GlowMybatisMapper.java', + r'.\dap-common\src\main\java\io\shinhanlife\glow\GlowServiceGroupId.java', + r'.\dap-common\src\main\java\io\shinhanlife\glow\GlowTrgmField.java', + r'.\dap-common\src\test\java\io\shinhanlife\glow\util\GlowMciParserTest.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\DapGatewayApplication.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\audit\AuditLogService.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\config\AgentResponseBudgetProperties.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\config\McpGatewayProperties.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\guardrail\GuardrailService.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\guardrail\SensitiveDataMasker.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\guardrail\ToolResponseGuardrailService.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\presentation\ChatController.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\presentation\McpRouterController.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\presentation\ScaffoldingController.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\redis\McpMonitorEventService.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\redis\RedisToolTraceService.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\resilience\CircuitBreaker.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\resilience\CircuitBreakerMonitorController.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\resilience\CircuitBreakerService.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\resilience\CircuitBreakerSnapshot.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\resilience\CircuitBreakerState.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\resilience\FailureType.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\resilience\RetryPolicy.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\resilience\ToolExecutionException.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\security\McpRequestContext.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\security\McpRequestContextResolver.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\security\ToolAuthorizationService.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\service\ExecuteService.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\sync\DynamicMcpController.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\sync\DynamicMcpServerManager.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\sync\RegistryMcpToolSpecificationFactory.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\tool\large\AgentResponseBudgetService.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\tool\large\LargeToolResponseService.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\tool\large\PaginationRequestValidator.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\tool\result\ToolExecutionResult.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\tool\result\ToolExecutionResultFormatter.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\transport\HttpToolInvoker.java', + r'.\dap-gateway\src\main\java\io\shinhanlife\dap\biz\mcp\gateway\transport\ToolInvoker.java', + r'.\dap-gateway\src\test\java\io\shinhanlife\dap\biz\mcp\gateway\DapGatewayApplicationTests.java', + r'.\dap-gateway\src\test\java\io\shinhanlife\dap\biz\mcp\gateway\tool\large\PaginationRequestValidatorTest.java', + r'.\dap-tool-core\src\main\java\io\shinhanlife\dap\biz\mcp\sample\converter\SampleLegacyConverter.java', + r'.\dap-tool-core\src\main\java\io\shinhanlife\dap\biz\mcp\sample\dto\SampleAiReqDto.java', + r'.\dap-tool-core\src\main\java\io\shinhanlife\dap\biz\mcp\tool\annotation\McpFunction.java', + r'.\dap-tool-core\src\main\java\io\shinhanlife\dap\biz\mcp\tool\annotation\McpParameter.java', + r'.\dap-tool-core\src\main\java\io\shinhanlife\dap\biz\mcp\tool\annotation\McpTool.java', + r'.\dap-tool-core\src\main\java\io\shinhanlife\dap\biz\mcp\tool\aop\ToolSlaMonitoringAspect.java', + r'.\dap-tool-core\src\main\java\io\shinhanlife\dap\biz\mcp\tool\presentation\BusinessToolController.java', + r'.\dap-tool-core\src\main\java\io\shinhanlife\dap\biz\mcp\tool\service\ToolRegistryHeartbeatSender.java', + r'.\dap-tool-core\src\main\java\io\shinhanlife\dap\biz\mcp\tool\util\JsonSchemaGenerator.java', + r'.\dap-tool-core\src\test\java\io\shinhanlife\dap\biz\mcp\sample\converter\SampleLegacyConverterTest.java', + r'.\dap-tool-email\src\main\java\io\shinhanlife\dap\biz\mcp\tool\email\DapToolEmailApplication.java', + r'.\dap-tool-other\src\main\java\io\shinhanlife\dap\biz\mcp\tool\dto\BalanceReq.java', + r'.\dap-tool-other\src\main\java\io\shinhanlife\dap\biz\mcp\tool\dto\BalanceRes.java', + r'.\dap-tool-other\src\main\java\io\shinhanlife\dap\biz\mcp\tool\other\DapToolOtherApplication.java', + r'.\dap-tool-other\src\main\java\io\shinhanlife\dap\biz\mcp\tool\service\BalanceService.java', + r'.\dap-tool-payment\src\main\java\io\shinhanlife\dap\biz\mcp\tool\payment\DapToolPaymentApplication.java', + r'.\dap-tool-sms\src\main\java\io\shinhanlife\dap\biz\mcp\tool\sms\DapToolSmsApplication.java', + r'.\dap-tool-sms\src\main\java\io\shinhanlife\dap\biz\mcp\tool\sms\converter\SmsLegacyConverter.java', + r'.\dap-tool-sms\src\main\java\io\shinhanlife\dap\biz\mcp\tool\sms\dto\SmsLegacyReqDto.java', +] + +JAVADOC_TEMPLATE = '''/** + * @package {package} + * @className {classname} + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */''' + +def get_package_and_class(content, filename): + pkg_match = re.search(r'^package\s+([^\s;]+)', content, re.MULTILINE) + package = pkg_match.group(1) if pkg_match else 'io.shinhanlife' + classname = os.path.splitext(filename)[0] + return package, classname + +def add_javadoc(file_path): + if not os.path.exists(file_path): + print(f'SKIP (not found): {file_path}') + return + with open(file_path, 'r', encoding='utf-8') as f: + content = f.read() + + if '@className' in content or '@author' in content: + print(f'SKIP (already has javadoc): {file_path}') + return + + filename = os.path.basename(file_path) + package, classname = get_package_and_class(content, filename) + javadoc = JAVADOC_TEMPLATE.format(package=package, classname=classname) + + # Insert after package declaration + pkg_pattern = re.compile(r'^(package\s+[^\s;]+;\s*\n)', re.MULTILINE) + match = pkg_pattern.search(content) + if match: + insert_pos = match.end() + new_content = content[:insert_pos] + '\n' + javadoc + '\n' + content[insert_pos:] + else: + new_content = javadoc + '\n' + content + + with open(file_path, 'w', encoding='utf-8') as f: + f.write(new_content) + print(f'OK: {file_path}') + +for f in JAVADOC_FILES: + add_javadoc(f) + +print('\nDone!') diff --git a/dap-common/src/main/java/io/shinhanlife/dap/common/mcp/exception/GlobalExceptionHandler.java b/dap-common/src/main/java/io/shinhanlife/dap/common/mcp/exception/GlobalExceptionHandler.java index acc53ad..7345654 100644 --- a/dap-common/src/main/java/io/shinhanlife/dap/common/mcp/exception/GlobalExceptionHandler.java +++ b/dap-common/src/main/java/io/shinhanlife/dap/common/mcp/exception/GlobalExceptionHandler.java @@ -1,5 +1,20 @@ package io.shinhanlife.dap.common.mcp.exception; + +/** + * @package io.shinhanlife.dap.common.mcp.exception + * @className GlobalExceptionHandler + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ import io.shinhanlife.dap.biz.mcp.adapter.dto.ErrorDetail; import io.shinhanlife.dap.biz.mcp.adapter.dto.JsonRpcResponse; import lombok.extern.slf4j.Slf4j; diff --git a/dap-common/src/main/java/io/shinhanlife/dap/common/util/ToolSourceUpdater.java b/dap-common/src/main/java/io/shinhanlife/dap/common/util/ToolSourceUpdater.java index 2db57d7..cb666c3 100644 --- a/dap-common/src/main/java/io/shinhanlife/dap/common/util/ToolSourceUpdater.java +++ b/dap-common/src/main/java/io/shinhanlife/dap/common/util/ToolSourceUpdater.java @@ -1,5 +1,20 @@ package io.shinhanlife.dap.common.util; + +/** + * @package io.shinhanlife.dap.common.util + * @className ToolSourceUpdater + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; diff --git a/dap-common/src/main/java/io/shinhanlife/glow/GlowAppServiceId.java b/dap-common/src/main/java/io/shinhanlife/glow/GlowAppServiceId.java index 1772ba0..812d6d2 100644 --- a/dap-common/src/main/java/io/shinhanlife/glow/GlowAppServiceId.java +++ b/dap-common/src/main/java/io/shinhanlife/glow/GlowAppServiceId.java @@ -1,5 +1,20 @@ package io.shinhanlife.glow; + +/** + * @package io.shinhanlife.glow + * @className GlowAppServiceId + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ import java.lang.annotation.*; @Target(ElementType.METHOD) diff --git a/dap-common/src/main/java/io/shinhanlife/glow/GlowControllerId.java b/dap-common/src/main/java/io/shinhanlife/glow/GlowControllerId.java index 078ac61..6aac682 100644 --- a/dap-common/src/main/java/io/shinhanlife/glow/GlowControllerId.java +++ b/dap-common/src/main/java/io/shinhanlife/glow/GlowControllerId.java @@ -1,5 +1,20 @@ package io.shinhanlife.glow; + +/** + * @package io.shinhanlife.glow + * @className GlowControllerId + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ public @interface GlowControllerId { String value(); } diff --git a/dap-common/src/main/java/io/shinhanlife/glow/GlowIndexPaging.java b/dap-common/src/main/java/io/shinhanlife/glow/GlowIndexPaging.java index 884d75f..04201e5 100644 --- a/dap-common/src/main/java/io/shinhanlife/glow/GlowIndexPaging.java +++ b/dap-common/src/main/java/io/shinhanlife/glow/GlowIndexPaging.java @@ -1,5 +1,20 @@ package io.shinhanlife.glow; + +/** + * @package io.shinhanlife.glow + * @className GlowIndexPaging + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ import java.lang.annotation.*; @Target(ElementType.METHOD) diff --git a/dap-common/src/main/java/io/shinhanlife/glow/GlowMciFieldInfo.java b/dap-common/src/main/java/io/shinhanlife/glow/GlowMciFieldInfo.java index 4755766..4f5aec4 100644 --- a/dap-common/src/main/java/io/shinhanlife/glow/GlowMciFieldInfo.java +++ b/dap-common/src/main/java/io/shinhanlife/glow/GlowMciFieldInfo.java @@ -1,5 +1,20 @@ package io.shinhanlife.glow; + +/** + * @package io.shinhanlife.glow + * @className GlowMciFieldInfo + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ import java.lang.annotation.*; @Target(ElementType.FIELD) diff --git a/dap-common/src/main/java/io/shinhanlife/glow/GlowMybatisMapper.java b/dap-common/src/main/java/io/shinhanlife/glow/GlowMybatisMapper.java index ca50c44..3153d8d 100644 --- a/dap-common/src/main/java/io/shinhanlife/glow/GlowMybatisMapper.java +++ b/dap-common/src/main/java/io/shinhanlife/glow/GlowMybatisMapper.java @@ -1,5 +1,20 @@ package io.shinhanlife.glow; + +/** + * @package io.shinhanlife.glow + * @className GlowMybatisMapper + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Component; diff --git a/dap-common/src/main/java/io/shinhanlife/glow/GlowServiceGroupId.java b/dap-common/src/main/java/io/shinhanlife/glow/GlowServiceGroupId.java index 375a3b6..7f4d3a5 100644 --- a/dap-common/src/main/java/io/shinhanlife/glow/GlowServiceGroupId.java +++ b/dap-common/src/main/java/io/shinhanlife/glow/GlowServiceGroupId.java @@ -1,5 +1,20 @@ package io.shinhanlife.glow; + +/** + * @package io.shinhanlife.glow + * @className GlowServiceGroupId + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ public @interface GlowServiceGroupId { String value(); diff --git a/dap-common/src/main/java/io/shinhanlife/glow/GlowTrgmField.java b/dap-common/src/main/java/io/shinhanlife/glow/GlowTrgmField.java index 883d7dd..5a2c859 100644 --- a/dap-common/src/main/java/io/shinhanlife/glow/GlowTrgmField.java +++ b/dap-common/src/main/java/io/shinhanlife/glow/GlowTrgmField.java @@ -1,5 +1,20 @@ package io.shinhanlife.glow; + +/** + * @package io.shinhanlife.glow + * @className GlowTrgmField + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ import java.lang.annotation.*; @Target(ElementType.FIELD) diff --git a/dap-common/src/test/java/io/shinhanlife/glow/util/GlowMciParserTest.java b/dap-common/src/test/java/io/shinhanlife/glow/util/GlowMciParserTest.java index a0358bf..bd1d732 100644 --- a/dap-common/src/test/java/io/shinhanlife/glow/util/GlowMciParserTest.java +++ b/dap-common/src/test/java/io/shinhanlife/glow/util/GlowMciParserTest.java @@ -1,5 +1,20 @@ package io.shinhanlife.glow.util; + +/** + * @package io.shinhanlife.glow.util + * @className GlowMciParserTest + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ import io.shinhanlife.glow.GlowMciFieldInfo; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; diff --git a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/DapGatewayApplication.java b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/DapGatewayApplication.java index fb1ed25..559e2ab 100644 --- a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/DapGatewayApplication.java +++ b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/DapGatewayApplication.java @@ -1,5 +1,20 @@ package io.shinhanlife.dap.biz.mcp.gateway; + +/** + * @package io.shinhanlife.dap.biz.mcp.gateway + * @className DapGatewayApplication + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.properties.ConfigurationPropertiesScan; diff --git a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/audit/AuditLogService.java b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/audit/AuditLogService.java index cff0c43..263e2ce 100644 --- a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/audit/AuditLogService.java +++ b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/audit/AuditLogService.java @@ -1,5 +1,20 @@ package io.shinhanlife.dap.biz.mcp.gateway.audit; + +/** + * @package io.shinhanlife.dap.biz.mcp.gateway.audit + * @className AuditLogService + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ import io.shinhanlife.dap.biz.mcp.gateway.config.McpGatewayProperties; import io.shinhanlife.dap.biz.mcp.gateway.guardrail.SensitiveDataMasker; import io.shinhanlife.dap.biz.mcp.gateway.security.McpRequestContext; diff --git a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/config/AgentResponseBudgetProperties.java b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/config/AgentResponseBudgetProperties.java index e4f8905..b1a4e3a 100644 --- a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/config/AgentResponseBudgetProperties.java +++ b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/config/AgentResponseBudgetProperties.java @@ -1,5 +1,20 @@ package io.shinhanlife.dap.biz.mcp.gateway.config; + +/** + * @package io.shinhanlife.dap.biz.mcp.gateway.config + * @className AgentResponseBudgetProperties + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; diff --git a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/config/McpGatewayProperties.java b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/config/McpGatewayProperties.java index a44f1a8..2d4906c 100644 --- a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/config/McpGatewayProperties.java +++ b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/config/McpGatewayProperties.java @@ -1,5 +1,20 @@ package io.shinhanlife.dap.biz.mcp.gateway.config; + +/** + * @package io.shinhanlife.dap.biz.mcp.gateway.config + * @className McpGatewayProperties + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; diff --git a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/guardrail/GuardrailService.java b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/guardrail/GuardrailService.java index 06a3dc9..9dc5898 100644 --- a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/guardrail/GuardrailService.java +++ b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/guardrail/GuardrailService.java @@ -1,5 +1,20 @@ package io.shinhanlife.dap.biz.mcp.gateway.guardrail; + +/** + * @package io.shinhanlife.dap.biz.mcp.gateway.guardrail + * @className GuardrailService + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ import io.shinhanlife.dap.biz.mcp.gateway.resilience.FailureType; import io.shinhanlife.dap.biz.mcp.gateway.resilience.ToolExecutionException; import io.shinhanlife.dap.biz.mcp.gateway.dto.ToolMetadata; diff --git a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/guardrail/SensitiveDataMasker.java b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/guardrail/SensitiveDataMasker.java index dbdde31..201bd88 100644 --- a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/guardrail/SensitiveDataMasker.java +++ b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/guardrail/SensitiveDataMasker.java @@ -1,5 +1,20 @@ package io.shinhanlife.dap.biz.mcp.gateway.guardrail; + +/** + * @package io.shinhanlife.dap.biz.mcp.gateway.guardrail + * @className SensitiveDataMasker + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ import org.springframework.stereotype.Component; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/guardrail/ToolResponseGuardrailService.java b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/guardrail/ToolResponseGuardrailService.java index 694eb8b..60ba04f 100644 --- a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/guardrail/ToolResponseGuardrailService.java +++ b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/guardrail/ToolResponseGuardrailService.java @@ -1,5 +1,20 @@ package io.shinhanlife.dap.biz.mcp.gateway.guardrail; + +/** + * @package io.shinhanlife.dap.biz.mcp.gateway.guardrail + * @className ToolResponseGuardrailService + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ import io.shinhanlife.dap.biz.mcp.gateway.resilience.FailureType; import io.shinhanlife.dap.biz.mcp.gateway.resilience.ToolExecutionException; import io.shinhanlife.dap.biz.mcp.gateway.dto.ToolMetadata; diff --git a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/presentation/ChatController.java b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/presentation/ChatController.java index 57cc412..03499e2 100644 --- a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/presentation/ChatController.java +++ b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/presentation/ChatController.java @@ -1,5 +1,20 @@ package io.shinhanlife.dap.biz.mcp.gateway.presentation; + +/** + * @package io.shinhanlife.dap.biz.mcp.gateway.presentation + * @className ChatController + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ import io.shinhanlife.dap.biz.mcp.gateway.dto.ToolMetadata; import io.shinhanlife.dap.biz.mcp.gateway.registry.RedisRegistryService; import io.shinhanlife.dap.biz.mcp.gateway.service.ExecuteService; diff --git a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/presentation/McpRouterController.java b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/presentation/McpRouterController.java index 52ad9cf..d99815f 100644 --- a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/presentation/McpRouterController.java +++ b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/presentation/McpRouterController.java @@ -1,5 +1,20 @@ package io.shinhanlife.dap.biz.mcp.gateway.presentation; + +/** + * @package io.shinhanlife.dap.biz.mcp.gateway.presentation + * @className McpRouterController + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ import com.fasterxml.jackson.databind.ObjectMapper; import io.shinhanlife.dap.biz.mcp.adapter.dto.JsonRpcRequest; import io.shinhanlife.dap.biz.mcp.adapter.dto.JsonRpcResponse; diff --git a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/presentation/ScaffoldingController.java b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/presentation/ScaffoldingController.java index 97666cd..faf6894 100644 --- a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/presentation/ScaffoldingController.java +++ b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/presentation/ScaffoldingController.java @@ -1,5 +1,20 @@ package io.shinhanlife.dap.biz.mcp.gateway.presentation; + +/** + * @package io.shinhanlife.dap.biz.mcp.gateway.presentation + * @className ScaffoldingController + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ import io.shinhanlife.dap.common.util.PodScaffolder; import io.shinhanlife.dap.common.util.ToolScaffolder; import io.shinhanlife.dap.common.util.ToolSourceUpdater; diff --git a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/redis/McpMonitorEventService.java b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/redis/McpMonitorEventService.java index dd6a295..fbba099 100644 --- a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/redis/McpMonitorEventService.java +++ b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/redis/McpMonitorEventService.java @@ -1,5 +1,20 @@ package io.shinhanlife.dap.biz.mcp.gateway.redis; + +/** + * @package io.shinhanlife.dap.biz.mcp.gateway.redis + * @className McpMonitorEventService + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ import org.springframework.stereotype.Service; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; diff --git a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/redis/RedisToolTraceService.java b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/redis/RedisToolTraceService.java index 7791beb..abb4cbf 100644 --- a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/redis/RedisToolTraceService.java +++ b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/redis/RedisToolTraceService.java @@ -1,5 +1,20 @@ package io.shinhanlife.dap.biz.mcp.gateway.redis; + +/** + * @package io.shinhanlife.dap.biz.mcp.gateway.redis + * @className RedisToolTraceService + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ import io.shinhanlife.dap.biz.mcp.gateway.config.McpGatewayProperties; import io.shinhanlife.dap.biz.mcp.gateway.guardrail.SensitiveDataMasker; import io.shinhanlife.dap.biz.mcp.gateway.security.McpRequestContext; diff --git a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/resilience/CircuitBreaker.java b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/resilience/CircuitBreaker.java index 314d378..67a7a97 100644 --- a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/resilience/CircuitBreaker.java +++ b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/resilience/CircuitBreaker.java @@ -1,5 +1,20 @@ package io.shinhanlife.dap.biz.mcp.gateway.resilience; + +/** + * @package io.shinhanlife.dap.biz.mcp.gateway.resilience + * @className CircuitBreaker + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ import java.time.Clock; import java.time.Instant; diff --git a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/resilience/CircuitBreakerMonitorController.java b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/resilience/CircuitBreakerMonitorController.java index 37bbfd4..33028ac 100644 --- a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/resilience/CircuitBreakerMonitorController.java +++ b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/resilience/CircuitBreakerMonitorController.java @@ -1,5 +1,20 @@ package io.shinhanlife.dap.biz.mcp.gateway.resilience; + +/** + * @package io.shinhanlife.dap.biz.mcp.gateway.resilience + * @className CircuitBreakerMonitorController + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; diff --git a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/resilience/CircuitBreakerService.java b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/resilience/CircuitBreakerService.java index d28f3c7..bbabced 100644 --- a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/resilience/CircuitBreakerService.java +++ b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/resilience/CircuitBreakerService.java @@ -1,5 +1,20 @@ package io.shinhanlife.dap.biz.mcp.gateway.resilience; + +/** + * @package io.shinhanlife.dap.biz.mcp.gateway.resilience + * @className CircuitBreakerService + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ import io.shinhanlife.dap.biz.mcp.gateway.config.McpGatewayProperties; import org.springframework.stereotype.Service; diff --git a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/resilience/CircuitBreakerSnapshot.java b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/resilience/CircuitBreakerSnapshot.java index 2616a92..6ff9abe 100644 --- a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/resilience/CircuitBreakerSnapshot.java +++ b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/resilience/CircuitBreakerSnapshot.java @@ -1,5 +1,20 @@ package io.shinhanlife.dap.biz.mcp.gateway.resilience; + +/** + * @package io.shinhanlife.dap.biz.mcp.gateway.resilience + * @className CircuitBreakerSnapshot + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ /** * MCP Monitor 화면에 내려주는 Circuit Breaker 상태 정보입니다. */ diff --git a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/resilience/CircuitBreakerState.java b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/resilience/CircuitBreakerState.java index 5addf9e..70ff2c1 100644 --- a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/resilience/CircuitBreakerState.java +++ b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/resilience/CircuitBreakerState.java @@ -1,5 +1,20 @@ package io.shinhanlife.dap.biz.mcp.gateway.resilience; + +/** + * @package io.shinhanlife.dap.biz.mcp.gateway.resilience + * @className CircuitBreakerState + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ /** * Circuit Breaker의 현재 상태입니다. * diff --git a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/resilience/FailureType.java b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/resilience/FailureType.java index 4b12baf..4543a12 100644 --- a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/resilience/FailureType.java +++ b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/resilience/FailureType.java @@ -1,5 +1,20 @@ package io.shinhanlife.dap.biz.mcp.gateway.resilience; + +/** + * @package io.shinhanlife.dap.biz.mcp.gateway.resilience + * @className FailureType + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ /** * Tool/EIMS/Tool 서버 호출 실패를 업무적으로 구분하기 위한 장애 유형입니다. * diff --git a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/resilience/RetryPolicy.java b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/resilience/RetryPolicy.java index 450829f..38edf85 100644 --- a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/resilience/RetryPolicy.java +++ b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/resilience/RetryPolicy.java @@ -1,5 +1,20 @@ package io.shinhanlife.dap.biz.mcp.gateway.resilience; + +/** + * @package io.shinhanlife.dap.biz.mcp.gateway.resilience + * @className RetryPolicy + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ /** * Tool 호출 재시도 정책입니다. * diff --git a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/resilience/ToolExecutionException.java b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/resilience/ToolExecutionException.java index 5305a7e..ec2374e 100644 --- a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/resilience/ToolExecutionException.java +++ b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/resilience/ToolExecutionException.java @@ -1,5 +1,20 @@ package io.shinhanlife.dap.biz.mcp.gateway.resilience; + +/** + * @package io.shinhanlife.dap.biz.mcp.gateway.resilience + * @className ToolExecutionException + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ /** * Tool 실행 중 발생한 오류를 FailureType과 함께 전달하는 공통 예외입니다. * diff --git a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/security/McpRequestContext.java b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/security/McpRequestContext.java index 0b88280..bfa1a7e 100644 --- a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/security/McpRequestContext.java +++ b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/security/McpRequestContext.java @@ -1,5 +1,20 @@ package io.shinhanlife.dap.biz.mcp.gateway.security; + +/** + * @package io.shinhanlife.dap.biz.mcp.gateway.security + * @className McpRequestContext + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ import java.util.Set; /** diff --git a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/security/McpRequestContextResolver.java b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/security/McpRequestContextResolver.java index 4c3d243..8dbcc30 100644 --- a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/security/McpRequestContextResolver.java +++ b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/security/McpRequestContextResolver.java @@ -1,5 +1,20 @@ package io.shinhanlife.dap.biz.mcp.gateway.security; + +/** + * @package io.shinhanlife.dap.biz.mcp.gateway.security + * @className McpRequestContextResolver + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ import jakarta.servlet.http.HttpServletRequest; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; diff --git a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/security/ToolAuthorizationService.java b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/security/ToolAuthorizationService.java index 24dabe7..a328090 100644 --- a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/security/ToolAuthorizationService.java +++ b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/security/ToolAuthorizationService.java @@ -1,5 +1,20 @@ package io.shinhanlife.dap.biz.mcp.gateway.security; + +/** + * @package io.shinhanlife.dap.biz.mcp.gateway.security + * @className ToolAuthorizationService + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ import io.shinhanlife.dap.biz.mcp.gateway.config.McpGatewayProperties; import io.shinhanlife.dap.biz.mcp.gateway.resilience.FailureType; import io.shinhanlife.dap.biz.mcp.gateway.resilience.ToolExecutionException; diff --git a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/service/ExecuteService.java b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/service/ExecuteService.java index 7c95e4c..919a8c3 100644 --- a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/service/ExecuteService.java +++ b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/service/ExecuteService.java @@ -1,5 +1,20 @@ package io.shinhanlife.dap.biz.mcp.gateway.service; + +/** + * @package io.shinhanlife.dap.biz.mcp.gateway.service + * @className ExecuteService + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ import java.util.HashMap; import io.shinhanlife.dap.biz.mcp.gateway.dto.ToolMetadata; diff --git a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/sync/CustomWebMvcSseServerTransportProvider.java b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/sync/CustomWebMvcSseServerTransportProvider.java index fc661d3..ef59599 100644 --- a/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/sync/CustomWebMvcSseServerTransportProvider.java +++ b/dap-gateway/src/main/java/io/shinhanlife/dap/biz/mcp/gateway/sync/CustomWebMvcSseServerTransportProvider.java @@ -1,17 +1,36 @@ package io.shinhanlife.dap.biz.mcp.gateway.sync; +/** + * @package io.shinhanlife.dap.biz.mcp.gateway.sync + * @className CustomWebMvcSseServerTransportProvider + * @description AX HUB MCP Gateway SSE 전송 제공자 - SSE 기반의 MCP 서버 트랜스포트를 구현하는 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ import com.fasterxml.jackson.core.type.TypeReference; - import com.fasterxml.jackson.databind.ObjectMapper; import io.modelcontextprotocol.json.TypeRef; import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.McpSchema.JSONRPCMessage; +import io.modelcontextprotocol.spec.McpSchema.JSONRPCNotification; +import io.modelcontextprotocol.spec.McpSchema.JSONRPCRequest; +import io.modelcontextprotocol.spec.McpSchema.JSONRPCResponse; import io.modelcontextprotocol.spec.McpServerSession; import io.modelcontextprotocol.spec.McpServerTransport; import io.modelcontextprotocol.spec.McpServerTransportProvider; import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; import org.springframework.web.servlet.function.RouterFunction; import org.springframework.web.servlet.function.RouterFunctions; import org.springframework.web.servlet.function.ServerResponse; +import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; import reactor.core.publisher.Mono; import java.util.Map; @@ -62,53 +81,53 @@ public class CustomWebMvcSseServerTransportProvider implements McpServerTranspor .toList()); } - public org.springframework.web.servlet.mvc.method.annotation.SseEmitter handleSse() { + public SseEmitter handleSse() { if (sessionFactory == null) { throw new IllegalStateException("SessionFactory not configured"); } - - org.springframework.web.servlet.mvc.method.annotation.SseEmitter emitter = new org.springframework.web.servlet.mvc.method.annotation.SseEmitter(-1L); + + SseEmitter emitter = new SseEmitter(-1L); String sessionId = UUID.randomUUID().toString(); - + CustomMcpSessionTransport sessionTransport = new CustomMcpSessionTransport(emitter, sessionId); McpServerSession session = sessionFactory.create(sessionTransport); sessions.put(sessionId, session); - + emitter.onCompletion(() -> sessions.remove(sessionId)); emitter.onTimeout(() -> sessions.remove(sessionId)); - + new Thread(() -> { try { Thread.sleep(100); - emitter.send(org.springframework.web.servlet.mvc.method.annotation.SseEmitter.event().name("endpoint").data(messageEndpoint + "?sessionId=" + sessionId)); + emitter.send(SseEmitter.event().name("endpoint").data(messageEndpoint + "?sessionId=" + sessionId)); } catch (Exception e) { emitter.completeWithError(e); } }).start(); - + return emitter; } - public org.springframework.web.servlet.mvc.method.annotation.SseEmitter handleCustomSse(String sessionId, String body) { + public SseEmitter handleCustomSse(String sessionId, String body) { if (sessionFactory == null) { throw new IllegalStateException("SessionFactory not configured"); } - - org.springframework.web.servlet.mvc.method.annotation.SseEmitter emitter = new org.springframework.web.servlet.mvc.method.annotation.SseEmitter(-1L); - + + SseEmitter emitter = new SseEmitter(-1L); + CustomMcpSessionTransport sessionTransport = new CustomMcpSessionTransport(emitter, sessionId); McpServerSession session = sessionFactory.create(sessionTransport); sessions.put(sessionId, session); - + emitter.onCompletion(() -> sessions.remove(sessionId)); emitter.onTimeout(() -> sessions.remove(sessionId)); - + new Thread(() -> { try { // 커스텀 클라이언트는 endpoint 이벤트를 무시할 수 있지만, 표준 호환성을 위해 전송 Thread.sleep(100); - emitter.send(org.springframework.web.servlet.mvc.method.annotation.SseEmitter.event().name("endpoint").data(messageEndpoint + "?sessionId=" + sessionId)); - + emitter.send(SseEmitter.event().name("endpoint").data(messageEndpoint + "?sessionId=" + sessionId)); + // Body로 들어온 initialize 등 즉시 처리 if (body != null && !body.trim().isEmpty()) { handleMessage(sessionId, body); @@ -117,46 +136,46 @@ public class CustomWebMvcSseServerTransportProvider implements McpServerTranspor emitter.completeWithError(e); } }).start(); - + return emitter; } - public org.springframework.http.ResponseEntity