Anthropic의 연구보고서 『Building Effective Agents』에서는 복잡한 에이전트 프레임워크보다 단순성(simplicity)과 구성가능성(composability)을 강조했습니다. 이러한 개념을 Spring AI를 활용하여 실제로 구현하는 방법입니다.
Spring AI는 Spring 생태계에서 LLM(대형언어모델)과 상호작용하는 기능을 제공하는 프레임워크입니다. 특히 Spring Boot 기반으로 간단히 통합하고, 확장성 및 유지보수를 쉽게 하는 것을 목표로 합니다.
핵심 개념
Anthropic은 에이전트 시스템을 두 가지 유형으로 나눕니다.
- Workflow(워크플로우)
- 미리 정의된 코드 경로에 따라 LLM과 도구가 작동합니다.
- 예측 가능하고 안정적입니다.
- Agent(에이전트)
- LLM이 자체적으로 작업 과정을 동적으로 결정합니다.
- 자율성이 높지만, 예측성은 낮아질 수 있습니다.
기업 환경에서는 대부분 워크플로우가 선호되며, Spring AI도 워크플로우 중심으로 구현됩니다.
주요 워크플로우 패턴 및 Spring AI 구현 예시
① Chain Workflow (체인 워크플로우)
복잡한 작업을 단순한 연속적 단계로 나눠 처리합니다.
언제 사용할까?
- 명확한 순서가 있을 때
- 각 단계의 결과가 다음 단계 입력이 되는 경우
예시 코드(Spring AI)
public class ChainWorkflow {
private final ChatClient chatClient;
private final String[] systemPrompts;
public String chain(String userInput) {
String response = userInput;
for (String prompt : systemPrompts) {
String input = String.format("{%s}\n {%s}", prompt, response);
response = chatClient.prompt(input).call().content();
}
return response;
}
}
② Parallelization Workflow (병렬화 워크플로우)
작업을 병렬로 처리하고, 결과를 결합합니다.
- Sectioning: 독립적인 작업을 병렬로 실행
- Voting: 동일 작업을 여러 번 실행해 신뢰성을 높임
언제 사용할까?
- 대량의 독립적 작업을 동시에 처리할 때
- 다양한 관점이 필요할 때
예시 코드(Spring AI)
List<String> parallelResponse = new ParallelizationWorkflow(chatClient)
.parallel(
"시장 변화가 각 이해관계자에게 미치는 영향을 분석하라.",
List.of("고객", "직원", "투자자", "공급자"),
4
);
③ Routing Workflow (라우팅 워크플로우)
입력 내용을 분석해 전문화된 핸들러에 작업을 전달합니다.
언제 사용할까?
- 입력 유형에 따라 전문화된 처리가 필요할 때
- 분류 정확도가 높은 경우
예시 코드(Spring AI)
@Autowired
private ChatClient chatClient;
RoutingWorkflow workflow = new RoutingWorkflow(chatClient);
Map<String, String> routes = Map.of(
"billing", "당신은 결제 전문가입니다...",
"technical", "당신은 기술 지원 담당자입니다...",
"general", "당신은 고객 서비스 담당자입니다..."
);
String input = "지난주 계좌에서 이중 결제되었습니다.";
String response = workflow.route(input, routes);
④ Orchestrator-Workers (오케스트레이터-워커 워크플로우)
중앙 LLM이 작업을 분석하여 하위 작업으로 분리한 뒤, 전문화된 작업자(Worker)가 개별 처리를 수행하고 결과를 통합합니다.
언제 사용할까?
- 복잡한 작업으로 미리 모든 단계를 예상하기 어려울 때
- 적응적 문제 해결이 필요할 때
예시 코드(Spring AI)
public class OrchestratorWorkersWorkflow {
public WorkerResponse process(String taskDescription) {
OrchestratorResponse orchestratorResponse = // 중앙 LLM으로 작업 분해
List<String> workerResponses = // 분리된 작업 병렬 처리
return new WorkerResponse(workerResponses);
}
}
사용 예
WorkerResponse response = workflow.process(
"REST API 엔드포인트의 기술 문서와 사용자 친화적 문서를 동시에 작성하라."
);
⑤ Evaluator-Optimizer (평가자-최적화 워크플로우)
하나의 LLM이 결과를 생성하면, 다른 LLM이 이를 평가하고 개선사항을 피드백하여 반복적으로 결과를 최적화합니다.
언제 사용할까?
- 평가 기준이 명확할 때
- 반복적 개선이 효과적일 때
예시 코드(Spring AI)
public class EvaluatorOptimizerWorkflow {
public RefinedResponse loop(String task) {
Generation generation = generate(task);
EvaluationResponse evaluation = evaluate(generation.response(), task);
while (evaluation.needsImprovement()) {
generation = generate(task, evaluation.feedback());
evaluation = evaluate(generation.response(), task);
}
return new RefinedResponse(generation.response());
}
}
사용 예
RefinedResponse response = workflow.loop(
"스레드 안전한 카운터를 구현하는 Java 클래스 작성"
);
Spring AI의 장점 및 활용 시 고려사항
장점
- 모델 포터블성: 모델 변경이 쉬움 (
spring-ai-openai
,spring-ai-bedrock
등) - 구조적 출력: 타입 안전한 결과 처리 (
EvaluationResponse.class
) - 일관된 API: 다양한 LLM 제공자와 통합 용이
- 오류 처리 및 재시도 지원
활용 시 고려사항
- 처음부터 복잡성을 더하지 말고 간단한 워크플로우로 시작
- 정확성, 속도, 비용 등의 트레이드오프를 명확히 인식하고 결정
- 작업 간 명확한 경계를 설정하고 각 단계별로 철저히 검증 진행
활용 사례 및 추천 환경
- 고객 지원 시스템 (라우팅 워크플로우)
- 기술 문서 자동 작성 (오케스트레이터-워커 워크플로우)
- 콘텐츠 품질 관리 및 반복적 개선 (Evaluator-Optimizer 워크플로우)
특히 기업 환경에서의 사용 시, 신뢰성 및 유지보수성을 우선하여 워크플로우 중심으로 설계하는 것이 권장됩니다.
VMware Tanzu Gen AI 활용
VMware Tanzu는 Spring AI를 활용한 엔터프라이즈급 AI 솔루션을 제공하며, 안정성, 보안성, 확장성을 보장합니다.
Spring AI를 활용한 에이전트 구축은 복잡성을 지양하고, 간결성과 구성 가능성 중심으로 설계하여 기업 환경에 효과적으로 적용할 수 있습니다. 처음엔 간단히 접근하고, 명확한 요구사항과 문제를 기반으로 점진적으로 확장하는 방식을 추천합니다. 다음은 『VMware Tanzu Gen AI』의 개념과 활용 방법을 정리한 설명입니다.
VMware Tanzu Gen AI 개요
VMware Tanzu Gen AI는 기업 환경에서 생성형 AI(Generative AI) 기반 애플리케이션을 빠르고 안전하게 구축, 배포, 운영할 수 있도록 VMware의 Tanzu 플랫폼과 Spring AI를 통합한 엔터프라이즈급 솔루션입니다. 이 솔루션은 다음을 목적으로 합니다.
- 간단한 인터페이스로 다양한 LLM (대형언어모델)을 손쉽게 활용
- AI 모델의 배포와 운영을 효율적으로 관리
- 보안과 거버넌스를 내장한 환경에서 AI를 활용
- 애플리케이션의 빠른 확장과 유연한 인프라 관리 지원
VMware Tanzu Gen AI 주요 구성 요소
① Tanzu AI Server
- Spring AI 기반의 애플리케이션 서버
- VMware Tanzu 환경에서 AI 워크로드를 효율적으로 배포 및 운영
② Spring AI 프레임워크
- LLM과의 상호작용을 간소화하고 모델의 전환이 용이
- 다양한 워크플로우와 에이전트 패턴 지원
③ Amazon Bedrock Nova 모델 통합
- Amazon Bedrock에서 제공하는 다양한 LLM과 통합
- 모델 접근성을 표준화된 인터페이스로 간소화
④ Security & Governance (보안 및 거버넌스)
- 기업 환경에서 요구하는 데이터 보호 및 관리 기능 제공
- 접근 통제, 감사(audit), 로깅 등을 통해 보안 요구사항을 충족
Tanzu Gen AI 활용 방법 (단계적 접근)
다음은 VMware Tanzu Gen AI를 이용한 AI 애플리케이션 구축 및 운영 프로세스를 설명한 것입니다.
단계 1: VMware Tanzu AI 환경 설정
- Tanzu Application Platform (TAP)을 준비하여 AI Server가 배포될 환경 구축
- Kubernetes 기반 클러스터 환경 설정 및 관리
# Kubernetes 클러스터 준비 예시 (Tanzu CLI 사용)
tanzu cluster create ai-cluster --plan dev
단계 2: Spring AI 기반 애플리케이션 개발 환경 구성
Spring AI를 프로젝트에 포함하기 위해 다음 종속성을 추가합니다.
Maven 예시
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
<version>0.8.1</version>
</dependency>
Gradle 예시
implementation 'org.springframework.ai:spring-ai-openai-spring-boot-starter:0.8.1'
애플리케이션 구성 파일 예시 (application.yml
)
spring:
ai:
openai:
api-key: YOUR_OPENAI_API_KEY
base-url: https://api.openai.com/v1
단계 3: Spring AI를 활용한 기본 워크플로우 구축
간단한 예시 (Chain Workflow)
@Service
public class AIChainService {
private final ChatClient chatClient;
public AIChainService(ChatClient chatClient) {
this.chatClient = chatClient;
}
public String executeWorkflow(String input) {
String prompt1 = "주어진 내용을 요약해 주세요.";
String prompt2 = "요약된 내용을 한국어로 번역해 주세요.";
String result = chatClient.prompt(prompt1 + "\n" + input).call().content();
result = chatClient.prompt(prompt2 + "\n" + result).call().content();
return result;
}
}
단계 4: VMware Tanzu AI 서버에 애플리케이션 배포
Tanzu 환경에 배포하는 방법 예시
tanzu apps workload create ai-app \
--git-repo https://github.com/example/ai-app.git \
--git-branch main \
--type web \
--label app.kubernetes.io/part-of=ai-app \
--namespace default
- Tanzu 플랫폼에서 자동화된 CI/CD 파이프라인을 통해 배포 가능
단계 5: Amazon Bedrock Nova 모델 통합 활용하기
Spring AI에서 Amazon Bedrock 모델을 사용하는 예시
- 종속성 추가
<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-bedrock-spring-boot-starter</artifactId> <version>0.8.1</version> </dependency>
application.yml
구성spring: ai: bedrock: aws: region: ap-northeast-2 credentials: access-key: YOUR_AWS_ACCESS_KEY secret-key: YOUR_AWS_SECRET_KEY chat: model: anthropic.claude-v2
단계 6: 보안 및 거버넌스 관리
- Tanzu 플랫폼에서 제공하는 내장된 RBAC, 보안 정책 적용
- 액세스 제어 정책 설정 및 감사(audit) 로깅 활성화 예시
# Kubernetes RBAC 예시
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: ai-app-user-access
namespace: ai-namespace
subjects:
- kind: User
name: ai-user@example.com
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: ai-app-reader
apiGroup: rbac.authorization.k8s.io
Tanzu Gen AI 추천 활용사례
- 고객 서비스 자동화
- Routing Workflow를 통해 사용자 요청을 분류하고 전문화된 에이전트로 자동 응대
- 콘텐츠 생성 및 최적화
- Evaluator-Optimizer Workflow를 통해 콘텐츠 품질을 지속적으로 평가하고 개선
- 기술지원 및 문서화 자동화
- Orchestrator-Workers Workflow로 사용자 친화적 문서와 기술 문서를 동시에 자동 생성
Tanzu Gen AI 활용 시 Best Practices
- 간단히 시작: 기본 워크플로우로 빠르게 MVP 구축 후, 필요에 따라 점진적으로 복잡성 추가
- 모델 선택의 유연성: Spring AI의 통합 인터페이스로 여러 모델 간 유연하게 전환 가능하도록 설계
- 보안 내재화: Tanzu 환경의 보안 및 감사 기능을 최대한 활용하여 기업의 보안 요구사항 충족
참고 및 추가 리소스
VMware Tanzu Gen AI는 기업 환경에서 생성형 AI 애플리케이션을 빠르고 안전하게 구축 및 관리할 수 있도록 돕는 통합 솔루션입니다. 이를 통해 간단한 모델 통합부터 고급 AI 워크플로우까지 쉽게 구현하며, 보안과 관리성을 유지한 채 AI 기반 업무 혁신을 실현할 수 있습니다. 다음은 『Spring AI MCP(Model Context Protocol) SDK』 에 대한 개요, 배경, 구성 요소 및 활용 방법입니다.
Spring AI MCP 개요
Spring AI MCP(Model Context Protocol)는 LLM(대형 언어 모델)이 다양한 데이터 소스 및 도구와 표준화된 방식으로 통합될 수 있도록 정의된 프로토콜입니다. 이 프로토콜의 자바 구현인 Spring AI MCP SDK가 발표되었습니다.
이를 통해 개발자는 Java 및 Spring 기반 애플리케이션에서 보다 손쉽고 일관되게 다양한 LLM 모델과 데이터 소스를 연결할 수 있습니다.
MCP(Model Context Protocol)의 개념
MCP는 애플리케이션이 LLM 모델에게 컨텍스트(context)를 제공하는 방식을 표준화한 개방형 프로토콜입니다.
MCP가 제공하는 핵심 가치는 다음과 같습니다.
- 데이터 소스 및 도구와의 표준화된 통합 인터페이스 제공
- 다양한 AI 모델 제공자 및 공급업체 간 유연한 전환 지원
- 복잡한 워크플로우 및 에이전트 구축 용이성 향상
- 기존의 다양한 데이터 소스(DB, 파일, API 등)를 쉽게 LLM 모델과 연결 가능
Spring AI MCP의 아키텍처
MCP는 기본적으로 클라이언트-서버 아키텍처를 사용합니다.
Spring AI MCP의 구성 요소는 다음과 같습니다.
- Spring AI Application
- MCP를 통해 데이터에 접근하여 생성형 AI 애플리케이션을 구축하는 클라이언트 애플리케이션
- Spring MCP Clients
- MCP 프로토콜을 구현한 클라이언트 모듈로, MCP 서버와의 1:1 연결을 관리
- MCP Servers
- 데이터 접근, API 호출 등 특정 기능을 표준화된 MCP를 통해 노출하는 경량 서버 프로그램
- Local Data Sources
- 파일 시스템, 데이터베이스 등 로컬 환경 내 데이터 소스
- Remote Services
- 인터넷을 통해 접근 가능한 원격 데이터 소스 및 API 서비스
이러한 구조는 다양한 AI 활용 사례(간단한 파일 접근부터 DB 연동 및 외부 API 호출)에 폭넓게 대응할 수 있습니다.
Spring AI MCP 사용 방법 (단계별 접근)
다음은 Spring AI MCP SDK를 프로젝트에 추가하고 사용하는 방법을 단계적으로 설명한 것입니다.
(1) 프로젝트에 Spring AI MCP 의존성 추가하기
Maven을 사용할 경우 다음 두 가지 중 하나를 선택하여 추가합니다.
- 기본 MCP core 사용
<dependency> <groupId>org.springframework.experimental</groupId> <artifactId>spring-ai-mcp-core</artifactId> <version>0.1.0</version> </dependency>
- Spring AI 확장 기능 포함
(권장 - Spring AI의<dependency> <groupId>org.springframework.experimental</groupId> <artifactId>spring-ai-mcp-spring</artifactId> <version>0.1.0</version> </dependency>
McpFunctionCallback
등의 고급 기능 사용 가능)
(2) Maven 저장소 구성하기
Spring Milestones Repository 설정을 추가합니다.
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone-local</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
(3) Spring AI MCP 클라이언트 구성 및 사용 예시
Spring MCP 클라이언트를 생성하고 MCP 서버와 연결하여 LLM이 데이터를 접근할 수 있게 합니다.
예제 코드(Spring AI MCP 클라이언트 사용)
@Configuration
public class McpClientConfig {
@Bean
public McpClient mcpClient() {
return McpClient.builder()
.serverUrl("http://localhost:8080") // MCP 서버 주소
.build();
}
}
이를 Spring AI의 ChatClient 등과 연동하여 LLM과 상호작용할 수 있습니다.
(4) MCP 서버 실행 및 데이터 소스 연결 예시
다음은 간단한 MCP 서버를 통해 SQLite 데이터베이스와 통합하는 예제입니다.
# MCP 서버 예제 실행 (예: SQLite 서버)
java -jar mcp-server-sqlite.jar \
--db-url=jdbc:sqlite:sample.db \
--port=8080
이 서버는 MCP 클라이언트를 통해 표준화된 프로토콜로 DB 데이터를 LLM에 전달합니다.
제공되는 예제 및 활용 사례
Spring AI MCP GitHub 리포지토리에서 다음의 예제를 제공합니다.
- SQLite Simple
- LLM이 SQLite DB와 연동하여 데이터를 쿼리하고 활용하는 예제
- SQLite Chatbot
- 채팅봇 형태로 SQLite DB와 인터랙션하여 질의응답 예제
- Filesystem
- 로컬 파일 시스템의 파일 및 폴더에 접근하는 예제
이러한 예제를 통해 다양한 데이터 소스와 LLM 모델이 어떻게 통합될 수 있는지 구체적으로 살펴볼 수 있습니다.
향후 발전 방향
Spring AI MCP는 Java 애플리케이션이 더 쉽게 표준화된 방식으로 AI 모델과 통합될 수 있도록 기반을 마련했습니다. 향후 다음과 같은 방향으로 발전할 것으로 기대됩니다.
- 더 다양한 데이터 소스 및 서비스와의 통합 지원
- 다중 AI 모델 연계 워크플로우 및 에이전트 개발 간소화
- Java 커뮤니티 중심의 기능 확장 및 생태계 확장
Spring AI MCP SDK는 Java 환경에서 AI 모델과 데이터 소스를 일관성 있게 연동할 수 있도록 하는 표준화된 통합 솔루션입니다. 이를 통해 개발자는 애플리케이션의 복잡한 데이터 및 AI 모델 통합 문제를 쉽고 효과적으로 해결할 수 있게 되었습니다. 특히 Spring 프레임워크와의 긴밀한 통합은 Java 생태계에서 AI 활용의 장벽을 크게 낮추고, 기업 환경에서도 안전하고 확장 가능한 AI 서비스를 신속히 구축할 수 있도록 돕는 매우 중요한 기술 발전으로 평가할 수 있습니다.
보안 핵심 점검 포인트
워크플로우 유형별 보안 고려사항
워크플로우 유형 | 보안 관점 주요 포인트 |
---|---|
Chain Workflow | 각 단계에서의 입력/출력 로그 저장 필요 중간 데이터에 민감정보 포함 가능성 확인 |
Parallelization Workflow | 병렬 요청 시 Rate Limit, DoS 방어 체계 필수 결과 통합 과정에서 신뢰성 검증 필요 |
Routing Workflow | 입력에 따른 분기 처리 시 악의적 인젝션 방지 필수 라우팅 조건 및 핸들러 권한 분리 필요 |
Orchestrator-Worker | 작업 분해 과정에서 정보 노출 우려 Worker별 역할 기반 인증/인가 설정 필수 |
Evaluator-Optimizer | 반복 루프가 무한 루프를 유발하지 않도록 제한 결과 저장 시 이전 버전 비교/감사 로그 필수 |
Spring AI & MCP SDK 통합 시 보안 가이드
- API 키 보호
application.yml
내api-key
,access-key
등은 반드시 외부 Secret Manager (Vault, AWS Secrets Manager) 연동 필요. - MCP Server와의 통신
- 내부망에서만 접근 가능하게 네트워크 ACL 구성
- 가능하면 TLS 적용 및 서버 인증서 검증 수행
- MCP 클라이언트 요청에 요청 ID, 사용자 정보, 타임스탬프 포함 로깅 필요
- LLM 응답 검증
- 예상되지 않은 응답(예: 코드 실행, 외부 호출 등)에 대한 사전/사후 필터링
- LLM이 외부 API 호출 시 Output Sanitization 및 Content Security Policy 적용
VMware Tanzu 환경의 보안 체크리스트
- Kubernetes 보안 설정
- RBAC 설정은 최소 권한 원칙 적용
PodSecurityPolicy
또는OPA Gatekeeper
를 통한 정책 적용- AI Pod 간 통신 시
NetworkPolicy
로 접근 통제
- CI/CD 보안
- Tanzu Supply Chain 내 GitOps 흐름을 사용한다면
commit signer
,image attestation
등 적용 고려 - AI 응답 결과를 Git 저장소에 반영하는 경우 출력 검증 및 PR 기반 승인 프로세스 필요
- Tanzu Supply Chain 내 GitOps 흐름을 사용한다면
- 감사 로깅
- AI API 호출 내역 (입력, 출력, 사용자 등)을 JSON 구조화 로그로 저장
- Tanzu Observability 또는 ELK Stack 연계 시 보안 이벤트 탐지 룰 적용 가능
기업 내 가이드 문서 구성 예시
1. 개요
- Spring AI 기반 AI 시스템 도입 배경
- Tanzu Gen AI 및 MCP SDK의 활용 범위
2. 아키텍처
- 선택한 워크플로우 유형 설명
- LLM 공급자 및 MCP 서버 구성
3. 보안정책
- API Key 및 Secret 관리
- LLM 요청/응답 필터링 로직
- RBAC 및 네트워크 통제 정책
4. 운영정책
- 에러 및 재시도 정책
- 평가-최적화 워크플로우 제한 조건
- 예외 발생 시 알림 및 장애 대응 프로세스
5. 로그 및 감사
- 감사 대상: 사용자 입력, LLM 응답, 분기 및 선택된 워커
- 저장 기간 및 로그 분석 도구 설정
6. 확장 계획
- 신규 데이터 소스 추가 방식
- 외부 API 연동 시 인증 처리 구조
댓글