From 91c34a2fb34c1a7c78ec83b1d3d81a6831a60075 Mon Sep 17 00:00:00 2001 From: jade Date: Mon, 7 Sep 2026 11:08:08 +0900 Subject: [PATCH] fix(gateway): load AI API keys from application properties instead of hardcoding --- .../dat/mcg/presentation/ChatController.java | 13 +++++++++++-- .../dat/mcg/presentation/ScaffoldingController.java | 13 +++++++++++-- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/dat-gateway/src/main/java/io/shinhanlife/dat/mcg/presentation/ChatController.java b/dat-gateway/src/main/java/io/shinhanlife/dat/mcg/presentation/ChatController.java index 3e76c503..c1c398ad 100644 --- a/dat-gateway/src/main/java/io/shinhanlife/dat/mcg/presentation/ChatController.java +++ b/dat-gateway/src/main/java/io/shinhanlife/dat/mcg/presentation/ChatController.java @@ -45,6 +45,15 @@ public class ChatController { private final ChatClient.Builder chatClientBuilder; private final McpRouterController mcpRouterController; + @org.springframework.beans.factory.annotation.Value("${shinhan.ai.base-url}") + private String liteLlmBaseUrl; + + @org.springframework.beans.factory.annotation.Value("${shinhan.ai.gemma-key}") + private String gemmaKey; + + @org.springframework.beans.factory.annotation.Value("${shinhan.ai.qwen-key}") + private String qwenKey; + @PostMapping(produces = MediaType.TEXT_EVENT_STREAM_VALUE) public SseEmitter chatStream(@RequestBody Map request, @RequestHeader(value = "X-Agent-Id", required = false) String agentId, @@ -98,8 +107,8 @@ public class ChatController { // 2. 모델 분기 처리: 사내 모델(Qwen3/Gemma-4) vs 기존 외부 모델(OpenRouter 등) if ("Qwen3-Coder".equalsIgnoreCase(selectedModel) || "Gemma-4-31B".equalsIgnoreCase(selectedModel)) { // 사내 LiteLLM 환경 동적 ChatModel 생성 - String liteLlmBaseUrl = "https://dev-iam-litellm.shinhanlife.co.kr:18020"; - String apiKey = "Gemma-4-31B".equalsIgnoreCase(selectedModel) ? "sk-EH107wYBZuu6RUTqthRl7A" : "sk-UJ2IRenvaMPbY3ozQdj6zw"; + // Use liteLlmBaseUrl from application.yml + String apiKey = "Gemma-4-31B".equalsIgnoreCase(selectedModel) ? gemmaKey : qwenKey; org.springframework.ai.openai.api.OpenAiApi openAiApi = org.springframework.ai.openai.api.OpenAiApi.builder() .baseUrl(liteLlmBaseUrl) diff --git a/dat-gateway/src/main/java/io/shinhanlife/dat/mcg/presentation/ScaffoldingController.java b/dat-gateway/src/main/java/io/shinhanlife/dat/mcg/presentation/ScaffoldingController.java index 1394141a..ac458a17 100644 --- a/dat-gateway/src/main/java/io/shinhanlife/dat/mcg/presentation/ScaffoldingController.java +++ b/dat-gateway/src/main/java/io/shinhanlife/dat/mcg/presentation/ScaffoldingController.java @@ -55,6 +55,15 @@ public class ScaffoldingController { private final ChatClient.Builder chatClientBuilder; private final ObjectMapper objectMapper; + @org.springframework.beans.factory.annotation.Value("${shinhan.ai.base-url}") + private String liteLlmBaseUrl; + + @org.springframework.beans.factory.annotation.Value("${shinhan.ai.gemma-key}") + private String gemmaKey; + + @org.springframework.beans.factory.annotation.Value("${shinhan.ai.qwen-key}") + private String qwenKey; + public ScaffoldingController(ChatClient.Builder chatClientBuilder, ObjectMapper objectMapper) { this.chatClientBuilder = chatClientBuilder; this.objectMapper = objectMapper; @@ -639,8 +648,8 @@ public class ScaffoldingController { org.springframework.ai.chat.prompt.ChatOptions chatOptions; if ("Qwen3-Coder".equalsIgnoreCase(resolvedModel) || "Gemma-4-31B".equalsIgnoreCase(resolvedModel)) { - String liteLlmBaseUrl = "https://dev-iam-litellm.shinhanlife.co.kr:18020"; - String apiKey = "Gemma-4-31B".equalsIgnoreCase(resolvedModel) ? "sk-EH107wYBZuu6RUTqthRl7A" : "sk-UJ2IRenvaMPbY3ozQdj6zw"; + // Use liteLlmBaseUrl from application.yml + String apiKey = "Gemma-4-31B".equalsIgnoreCase(resolvedModel) ? gemmaKey : qwenKey; org.springframework.ai.openai.api.OpenAiApi openAiApi = org.springframework.ai.openai.api.OpenAiApi.builder() .baseUrl(liteLlmBaseUrl)