{"componentChunkName":"component---src-templates-blog-post-js","path":"/springboot/Spring-Cloud-Function과-Serverless-LLM-이벤트-기반-AI-마이크로서비스-구축/","result":{"data":{"site":{"siteMetadata":{"title":"Bottlehs Tech Blog","description":"웹·앱·AI 개발자 전병훈(bottlehs)의 기술 블로그. AI·LLM, JavaScript·Vue, Spring Boot, 알고리즘, 블록체인 실무 가이드를 다룹니다","siteUrl":"https://www.bottlehs.dev","author":{"name":"Jeon Byung Hun","summary":"개발을 즐기는 bottlehs - Engineer, MS, AI, FE, BE, OS, IOT, Blockchain, 설계, 테스트"},"social":{"github":"bottlehs","codepen":"bottlehs"}}},"markdownRemark":{"id":"a3a0ab12-d7f5-5cbf-959c-373670b5745d","excerpt":"LLM 서비스를 배포할 때 항상 고정형 서버 혹은 컨테이너를 사용할 필요는 없다. 이벤트가 발생했을 때만 함수를 실행하는 서버리스(Serverless) 모델은 비용 최적화와 운영 단순화 측면에서 매력적이다. Spring Cloud Function…","html":"<p>LLM 서비스를 배포할 때 항상 고정형 서버 혹은 컨테이너를 사용할 필요는 없다. 이벤트가 발생했을 때만 함수를 실행하는 <strong>서버리스(Serverless)</strong> 모델은 비용 최적화와 운영 단순화 측면에서 매력적이다. Spring Cloud Function은 스프링 개발자가 익숙한 프로그래밍 모델을 유지하면서도 AWS Lambda, Azure Functions, Google Cloud Functions 등 다양한 서버리스 런타임에 배포할 수 있게 한다. 이 글에서는 Spring Cloud Function을 활용해 LLM 기반 이벤트 마이크로서비스를 구성하는 방법을 살펴본다.</p>\n<h2 id=\"1-spring-cloud-function의-핵심-개념\" style=\"position:relative;\"><a href=\"#1-spring-cloud-function%EC%9D%98-%ED%95%B5%EC%8B%AC-%EA%B0%9C%EB%85%90\" aria-label=\"1 spring cloud function의 핵심 개념 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1. Spring Cloud Function의 핵심 개념</h2>\n<ul>\n<li><strong>비침투성</strong>: <code class=\"language-text\">Function</code>, <code class=\"language-text\">Consumer</code>, <code class=\"language-text\">Supplier</code> 빈을 정의하면 런타임에 맞춰 어댑터가 자동 연결된다.</li>\n<li><strong>환경 추상화</strong>: AWS, Azure, GCP, Kafka Streams 등 다양한 타겟으로 동일한 함수를 재사용할 수 있다.</li>\n<li><strong>Spring AI 통합</strong>: Spring AI의 <code class=\"language-text\">ChatClient</code>, <code class=\"language-text\">EmbeddingClient</code> 빈을 함수 내부에서 호출하면 LLM 추론을 곧바로 연동할 수 있다.</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@Bean</span>\n<span class=\"token keyword\">public</span> <span class=\"token class-name\">Function</span><span class=\"token generics\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Request</span><span class=\"token punctuation\">,</span> <span class=\"token class-name\">Response</span><span class=\"token punctuation\">></span></span> <span class=\"token function\">summarizeFunction</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">ChatClient</span> chatClient<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> request <span class=\"token operator\">-></span> <span class=\"token punctuation\">{</span>\n        <span class=\"token class-name\">ChatRequest</span> prompt <span class=\"token operator\">=</span> <span class=\"token class-name\">ChatRequest</span><span class=\"token punctuation\">.</span><span class=\"token function\">builder</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">.</span><span class=\"token function\">message</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"다음 텍스트를 요약해줘: \"</span> <span class=\"token operator\">+</span> request<span class=\"token punctuation\">.</span><span class=\"token function\">getText</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">.</span><span class=\"token function\">build</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token class-name\">ChatResponse</span> result <span class=\"token operator\">=</span> chatClient<span class=\"token punctuation\">.</span><span class=\"token function\">call</span><span class=\"token punctuation\">(</span>prompt<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Response</span><span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">.</span><span class=\"token function\">getResult</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">getOutput</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h2 id=\"2-서버리스-llm-아키텍처-설계\" style=\"position:relative;\"><a href=\"#2-%EC%84%9C%EB%B2%84%EB%A6%AC%EC%8A%A4-llm-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%84%A4%EA%B3%84\" aria-label=\"2 서버리스 llm 아키텍처 설계 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2. 서버리스 LLM 아키텍처 설계</h2>\n<h3 id=\"2-1-이벤트-플로우-예시\" style=\"position:relative;\"><a href=\"#2-1-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%ED%94%8C%EB%A1%9C%EC%9A%B0-%EC%98%88%EC%8B%9C\" aria-label=\"2 1 이벤트 플로우 예시 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2-1. 이벤트 플로우 예시</h3>\n<ol>\n<li>고객 지원 시스템에서 티켓이 생성되면 AWS EventBridge 이벤트가 발생한다.</li>\n<li>이벤트가 Lambda 함수를 트리거하고, Spring Cloud Function이 실행된다.</li>\n<li>함수는 Spring AI를 통해 사내 호스팅 LLM 혹은 OpenAI API를 호출한다.</li>\n<li>요약 결과를 S3, DynamoDB, Slack 등으로 전송한다.</li>\n</ol>\n<h3 id=\"2-2-구성-요소\" style=\"position:relative;\"><a href=\"#2-2-%EA%B5%AC%EC%84%B1-%EC%9A%94%EC%86%8C\" aria-label=\"2 2 구성 요소 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2-2. 구성 요소</h3>\n<ul>\n<li><strong>Event Source</strong>: EventBridge, SQS, Kafka 등</li>\n<li><strong>Function Runtime</strong>: AWS Lambda + Spring Cloud Function</li>\n<li><strong>LLM 백엔드</strong>: 사내 Ollama, vLLM, OpenAI, Azure OpenAI 등</li>\n<li><strong>저장/후속 처리</strong>: S3, RDS, Notification Service</li>\n<li><strong>옵저버빌리티</strong>: CloudWatch Logs, X-Ray, OpenTelemetry Collector</li>\n</ul>\n<h2 id=\"3-구현-단계\" style=\"position:relative;\"><a href=\"#3-%EA%B5%AC%ED%98%84-%EB%8B%A8%EA%B3%84\" aria-label=\"3 구현 단계 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3. 구현 단계</h2>\n<h3 id=\"3-1-프로젝트-설정\" style=\"position:relative;\"><a href=\"#3-1-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%84%A4%EC%A0%95\" aria-label=\"3 1 프로젝트 설정 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3-1. 프로젝트 설정</h3>\n<ol>\n<li><code class=\"language-text\">spring-cloud-function-adapter-aws</code> 의존성과 Spring AI 의존성을 <code class=\"language-text\">build.gradle</code> 또는 <code class=\"language-text\">pom.xml</code>에 추가한다.</li>\n<li><code class=\"language-text\">Function&lt;Request, Response></code> 형태의 빈을 정의한다.</li>\n<li><code class=\"language-text\">spring.ai.openai.api-key</code> 등 환경 변수 기반 설정을 구성한다.</li>\n<li><code class=\"language-text\">FunctionInvoker</code>를 엔트리포인트로 사용하는 AWS Lambda 핸들러 클래스를 생성한다.</li>\n</ol>\n<h3 id=\"3-2-배포\" style=\"position:relative;\"><a href=\"#3-2-%EB%B0%B0%ED%8F%AC\" aria-label=\"3 2 배포 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3-2. 배포</h3>\n<ul>\n<li><strong>AWS SAM/Serverless Framework</strong>를 사용해 함수를 패키징하고 배포한다.</li>\n<li>네트워크 지연을 낮추기 위해 VPC 내에 배치하고, 필요 시 모델 엔드포인트도 동일 리전에 배치한다.</li>\n<li>프로비저닝된 동시성(Provisioned Concurrency)로 콜드 스타트 지연을 최소화한다.</li>\n</ul>\n<h2 id=\"4-비용-및-성능-최적화\" style=\"position:relative;\"><a href=\"#4-%EB%B9%84%EC%9A%A9-%EB%B0%8F-%EC%84%B1%EB%8A%A5-%EC%B5%9C%EC%A0%81%ED%99%94\" aria-label=\"4 비용 및 성능 최적화 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4. 비용 및 성능 최적화</h2>\n<ul>\n<li><strong>콜드 스타트 완화</strong>: JVM 기반 함수는 첫 실행에 시간이 걸릴 수 있다. 최소 동시 실행 수를 확보하고, SnapStart(AWS) 같은 최적화 옵션을 검토한다.</li>\n<li><strong>요청 배치</strong>: EventBridge나 SQS에서 배치 크기를 조정해 호출 횟수를 줄인다.</li>\n<li><strong>모델 선택</strong>: 요청당 비용을 고려해 경량 모델과 캐시 전략을 병행한다.</li>\n<li><strong>결과 캐싱</strong>: 동일 질의가 반복되는 경우 DynamoDB, Redis를 활용해 재실행을 피한다.</li>\n</ul>\n<h2 id=\"5-관측성과-운영\" style=\"position:relative;\"><a href=\"#5-%EA%B4%80%EC%B8%A1%EC%84%B1%EA%B3%BC-%EC%9A%B4%EC%98%81\" aria-label=\"5 관측성과 운영 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5. 관측성과 운영</h2>\n<ul>\n<li><strong>트레이싱</strong>: OpenTelemetry로 함수 실행, 외부 API 호출, 모델 응답 시간을 추적한다.</li>\n<li><strong>알림</strong>: CloudWatch Alarms 또는 PagerDuty로 실패율 증가, 지연 상승을 감지한다.</li>\n<li><strong>데드 레터 큐</strong>: 실패 요청을 DLQ에 저장하고 재처리 프로세스를 구축한다.</li>\n<li><strong>버전 관리</strong>: Lambda 버전과 별칭을 활용해 롤백 전략을 마련한다.</li>\n</ul>\n<h2 id=\"6-보안-고려사항\" style=\"position:relative;\"><a href=\"#6-%EB%B3%B4%EC%95%88-%EA%B3%A0%EB%A0%A4%EC%82%AC%ED%95%AD\" aria-label=\"6 보안 고려사항 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6. 보안 고려사항</h2>\n<ul>\n<li><strong>비밀 관리</strong>: API 키, 토큰은 AWS Secrets Manager나 Parameter Store에 저장한다.</li>\n<li><strong>VPC 엔드포인트</strong>: 외부 LLM API를 호출할 때 프라이빗 링크 또는 NAT 구성을 통해 트래픽을 제한한다.</li>\n<li><strong>프롬프트 검증</strong>: 입력 필터링과 응답 검사를 적용해 정책 위반을 방지한다.</li>\n<li><strong>감사 로그</strong>: Lambda 실행 로그와 프롬프트/응답을 비식별화하여 장기 보관한다.</li>\n</ul>\n<h2 id=\"7-확장-시나리오\" style=\"position:relative;\"><a href=\"#7-%ED%99%95%EC%9E%A5-%EC%8B%9C%EB%82%98%EB%A6%AC%EC%98%A4\" aria-label=\"7 확장 시나리오 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>7. 확장 시나리오</h2>\n<ul>\n<li><strong>다중 함수 파이프라인</strong>: 요약 → 분류 → 보고서 생성 등 여러 함수를 Step Functions로 오케스트레이션한다.</li>\n<li><strong>Edge 배포</strong>: Lambda@Edge, Cloudflare Workers와 연동해 지역별로 응답 시간을 단축한다.</li>\n<li><strong>하이브리드 라우팅</strong>: Spring AI로 엣지 모델과 클라우드 모델을 선택적으로 호출해 비용과 성능을 최적화한다.</li>\n</ul>\n<hr>\n<p>Spring Cloud Function은 스프링 개발자가 서버리스 환경으로 전환할 때의 진입 장벽을 크게 낮춰 준다. 이벤트 기반으로 LLM 기능을 제공하면 비용 효율과 확장성이라는 두 마리 토끼를 잡을 수 있다. 적절한 옵저버빌리티, 보안, 배포 전략을 갖춘다면, 기업은 빠르게 변화하는 생성형 AI 요구에 민첩하게 대응할 수 있다.</p>","tableOfContents":"<ul>\n<li><a href=\"/springboot/Spring-Cloud-Function%EA%B3%BC-Serverless-LLM-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EA%B8%B0%EB%B0%98-AI-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B5%AC%EC%B6%95/#1-spring-cloud-function%EC%9D%98-%ED%95%B5%EC%8B%AC-%EA%B0%9C%EB%85%90\">1. Spring Cloud Function의 핵심 개념</a></li>\n<li>\n<p><a href=\"/springboot/Spring-Cloud-Function%EA%B3%BC-Serverless-LLM-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EA%B8%B0%EB%B0%98-AI-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B5%AC%EC%B6%95/#2-%EC%84%9C%EB%B2%84%EB%A6%AC%EC%8A%A4-llm-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%84%A4%EA%B3%84\">2. 서버리스 LLM 아키텍처 설계</a></p>\n<ul>\n<li><a href=\"/springboot/Spring-Cloud-Function%EA%B3%BC-Serverless-LLM-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EA%B8%B0%EB%B0%98-AI-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B5%AC%EC%B6%95/#2-1-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%ED%94%8C%EB%A1%9C%EC%9A%B0-%EC%98%88%EC%8B%9C\">2-1. 이벤트 플로우 예시</a></li>\n<li><a href=\"/springboot/Spring-Cloud-Function%EA%B3%BC-Serverless-LLM-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EA%B8%B0%EB%B0%98-AI-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B5%AC%EC%B6%95/#2-2-%EA%B5%AC%EC%84%B1-%EC%9A%94%EC%86%8C\">2-2. 구성 요소</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/springboot/Spring-Cloud-Function%EA%B3%BC-Serverless-LLM-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EA%B8%B0%EB%B0%98-AI-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B5%AC%EC%B6%95/#3-%EA%B5%AC%ED%98%84-%EB%8B%A8%EA%B3%84\">3. 구현 단계</a></p>\n<ul>\n<li><a href=\"/springboot/Spring-Cloud-Function%EA%B3%BC-Serverless-LLM-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EA%B8%B0%EB%B0%98-AI-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B5%AC%EC%B6%95/#3-1-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%84%A4%EC%A0%95\">3-1. 프로젝트 설정</a></li>\n<li><a href=\"/springboot/Spring-Cloud-Function%EA%B3%BC-Serverless-LLM-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EA%B8%B0%EB%B0%98-AI-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B5%AC%EC%B6%95/#3-2-%EB%B0%B0%ED%8F%AC\">3-2. 배포</a></li>\n</ul>\n</li>\n<li><a href=\"/springboot/Spring-Cloud-Function%EA%B3%BC-Serverless-LLM-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EA%B8%B0%EB%B0%98-AI-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B5%AC%EC%B6%95/#4-%EB%B9%84%EC%9A%A9-%EB%B0%8F-%EC%84%B1%EB%8A%A5-%EC%B5%9C%EC%A0%81%ED%99%94\">4. 비용 및 성능 최적화</a></li>\n<li><a href=\"/springboot/Spring-Cloud-Function%EA%B3%BC-Serverless-LLM-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EA%B8%B0%EB%B0%98-AI-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B5%AC%EC%B6%95/#5-%EA%B4%80%EC%B8%A1%EC%84%B1%EA%B3%BC-%EC%9A%B4%EC%98%81\">5. 관측성과 운영</a></li>\n<li><a href=\"/springboot/Spring-Cloud-Function%EA%B3%BC-Serverless-LLM-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EA%B8%B0%EB%B0%98-AI-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B5%AC%EC%B6%95/#6-%EB%B3%B4%EC%95%88-%EA%B3%A0%EB%A0%A4%EC%82%AC%ED%95%AD\">6. 보안 고려사항</a></li>\n<li><a href=\"/springboot/Spring-Cloud-Function%EA%B3%BC-Serverless-LLM-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EA%B8%B0%EB%B0%98-AI-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B5%AC%EC%B6%95/#7-%ED%99%95%EC%9E%A5-%EC%8B%9C%EB%82%98%EB%A6%AC%EC%98%A4\">7. 확장 시나리오</a></li>\n</ul>","wordCount":{"words":485},"fields":{"slug":"/springboot/Spring-Cloud-Function과-Serverless-LLM-이벤트-기반-AI-마이크로서비스-구축/","image":null,"faq":[]},"frontmatter":{"title":"Spring Cloud Function과 Serverless LLM 이벤트 기반 AI 마이크로서비스 구축","date":"2025년 11월 11일","dateISO":"2025-11-11T00:00:00.000Z","updatedISO":null,"category":"springboot","description":"Spring Cloud Function과 Serverless 플랫폼을 결합하여 LLM 기반 이벤트 마이크로서비스를 설계하는 방법을 아키텍처, 구현, 운영 관점에서 정리합니다.","tags":["Spring Cloud Function","Serverless","LLM","마이크로서비스","이벤트 기반 아키텍처","AWS Lambda"]}}},"pageContext":{"slug":"/springboot/Spring-Cloud-Function과-Serverless-LLM-이벤트-기반-AI-마이크로서비스-구축/","previous":{"fields":{"slug":"/ai/온디바이스-생성형-AI-프라이버시-친화형-경량-모델-설계-트렌드/"},"frontmatter":{"title":"온디바이스 생성형 AI 프라이버시 친화형 경량 모델 설계 트렌드","tags":["온디바이스 AI","생성형 AI","프라이버시","모델 최적화","엣지 컴퓨팅","TinyML","모바일 AI","개인정보보호"]}},"next":{"fields":{"slug":"/blockchain/DePIN-분산-물리-인프라-네트워크의-부상과-비즈니스-모델/"},"frontmatter":{"title":"DePIN 분산 물리 인프라 네트워크의 부상과 비즈니스 모델","tags":["DePIN","분산 인프라","토큰 이코노미","블록체인 비즈니스","Helium","Render Network"]}}}},"staticQueryHashes":["213619243","3262363727"]}