<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>개발 및 IT운영</title><link>https://cloud.google.com/blog/ko/topics/developers-practitioners/</link><description>개발 및 IT운영</description><atom:link href="https://cloudblog.withgoogle.com/blog/ko/topics/developers-practitioners/rss/" rel="self"></atom:link><language>ko</language><lastBuildDate>Tue, 27 Oct 2026 09:21:36 +0000</lastBuildDate><image><url>https://cloud.google.com/blog/ko/topics/developers-practitioners/static/blog/images/google.a51985becaa6.png</url><title>개발 및 IT운영</title><link>https://cloud.google.com/blog/ko/topics/developers-practitioners/</link></image><item><title>Gemini에서 MCP 앱을 구현하기 위한 개발자 가이드</title><link>https://cloud.google.com/blog/ko/topics/developers-practitioners/devs-guide-to-mcp-apps-in-gemini/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;*이 콘텐츠는 AI 번역 도구를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역에는 오류나 누락이 포함될 수 있습니다. 정확한 정보는 &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/topics/developers-practitioners/devs-guide-to-mcp-apps-in-gemini?e=48754805&amp;amp;hl=en"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;영문 원본&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;을 참고해 주시기 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;기업용 AI 어시스턴트는 여전히 대부분 텍스트로 응답합니다. 하지만 시각적 요소가 포함되거나 여러 단계를 거쳐야 하는 작업에서는 수정 사항이 생길 때마다 채팅을 주고받느라 불필요한 시간이 소요되므로 비효율적일 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/modelcontextprotocol/ext-apps" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;MCP 앱&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;(SEP-1865)은 이러한 문제를 해결합니다. 이 개방형 모델 컨텍스트 프로토콜(MCP) 확장 프로그램은 도구를 실시간 UI와 페어링합니다. &lt;/span&gt;&lt;a href="https://business.gemini.google/?utm_source=cloud.google.com/blog"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Gemini Enterprise&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;에서는 해당 UI가 샌드박스 처리된 iframe 내에서 채팅 플로우에 직접 렌더링되며, 전체 화면 또는 측면 패널로 확장할 수도 있습니다. 수정 사항은 로컬에서 실행되며, 작업공간과 어시스턴트는 동기화된 상태로 유지됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;또한 핵심 기반을 처음부터 다시 빌드할 필요가 없습니다. Gemini는 직원 로그인, 제어된 데이터 액세스, 기본 어시스턴트를 제공하며, 사용자는 비공개&lt;/span&gt;&lt;a href="https://cloud.google.com/run"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Cloud Run&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 서비스에서 MCP 서버를 호스팅하기만 하면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;MCP 앱이 필요한 이유&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;엔터프라이즈 어시스턴트는 3세대에 걸쳐 발전해 왔습니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;1세대(텍스트 챗봇):&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 대화형 제어 기능 없이 정적 마크다운 형식의 결과만 반환합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;2세대(표준 MCP 도구):&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 실시간 API를 호출할 수 있지만 여전히 정적 텍스트 형식으로 출력합니다. 따라서 변경 사항이 발생할 때마다 모델을 다시 호출해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;3세대(대화형 MCP 앱):&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 각 도구를 실시간 작업공간과 페어링합니다. 모델을 다시 호출하지 않고도 위젯 내에서 직접 내용을 수정할 수 있으며, 어시스턴트와의 동기화 상태도 유지됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Gemini에서 MCP 앱을 빌드하면 얻을 수 있는 6가지 이점:&lt;/strong&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;반응성이 뛰어난 사용자 경험:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 채팅창을 거치지 않고 패널에서 클릭 한 번으로 즉시 작업을 실행할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;목적에 맞게 빌드된 워크플로:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 법률 검토를 위한 시각적 수정 뷰, CAD용 3D 뷰어, 금융 분야에 적합한 민감도 모델 등 각 목적에 특화된 워크플로를 제공합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;엔터프라이즈 보안:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 직원 OAuth 로그인, 비공개 Cloud Run 인그레스, 샌드박스 처리된 iframe이 각 레이어를 보호합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;휴먼인더루프 거버넌스:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 중요한 작업을 실행하기 전에 먼저 전문가의 검토와 승인을 거칩니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;개방형 표준:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 호환되는 다양한 호스트 간에 이동 가능하며 텍스트 기반 대체 기능이 자동으로 제공됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;광범위한 연결:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; BigQuery, Agent Platform, Cloud Storage 또는 사내 ERP 및 CRM 시스템과 연동할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;상위 수준 아키텍처&lt;/strong&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/2-high_level_architecture.max-1000x1000.png"
        
          alt="2-high level architecture"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;분리된 세 계층이 함께 작동합니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;클라이언트 브라우저:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 측면 패널에 채팅창과 MCP 앱 위젯을 함께 표시합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Gemini Enterprise:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 기본 어시스턴트가 도구를 호출하고, AppBridge 프록시가 위젯 메시지를 릴레이하며, 커넥터가 OAuth를 관리합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Google Cloud(사용자 프로젝트):&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Cloud Run에 MCP 서버를 배포하고 호스팅합니다. 이 서버는 하나의 JSON-RPC 엔드포인트(/mcp)를 제공하고, 백그라운드 작업을 실행하며, 단일 파일 형태의 HTML 위젯을 제공합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;각 계층은 인접한 계층과만 통신하므로 Gemini Enterprise가 보안 및 라우팅을 적용할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;독립적인 두 레이어를 통한 인증&lt;/strong&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/3-Authentication.max-1000x1000.png"
        
          alt="3-Authentication"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;각 사용자는 OAuth 2.0을 통해 로그인합니다. Gemini Enterprise는 호출할 때마다 사용자의 OAuth 토큰과 함께 자체 서비스 에이전트 토큰을 함께 전송합니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;레이어 1(Cloud Run IAM):&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Google 에지에서 적용되며 &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;'어떤 서비스가 호출할 수 있는가?'&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;라는 질문에 답합니다. 공개 액세스는 차단되어 있으며 승인되지 않은 호출자는 HTTP 403 오류를 수신하게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;레이어 2(인앱 OAuth):&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 애플리케이션 내부에서 적용되며 &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;'어떤 사용자가 호출하는가?'&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;라는 질문에 답합니다. 검증에 실패하면 HTTP 401 오류를 반환하며 사용자는 다시 로그인하라는 요청을 받게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Cloud Run IAM만으로는 최종 사용자를 구분할 수 없으므로 두 레이어가 모두 필요합니다. 아웃바운드 호출에는 최소 권한 서비스 계정을 사용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Google Cloud에 빌드 및 배포하고 Gemini Enterprise에 등록&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;먼저 &lt;/strong&gt;&lt;a href="https://github.com/modelcontextprotocol/ext-apps" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;MCP Apps SDK&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;를 사용하여 커스텀 MCP 서버를 빌드하세요. 이 서버는 POST/mcp와 번들로 포함된 ui:// HTML 위젯을 제공해야 합니다. 또는&lt;/span&gt;&lt;a href="https://antigravity.google/" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Google Antigravity&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;를 사용하여 다음 시작 프롬프트로 MCP 앱을 스캐폴딩하고 배포할 수도 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;create-mcp-app 스킬(https://github.com/modelcontextprotocol/ext-apps/tree/main/plugins/mcp-apps/skills/create-mcp-app)을 사용하여 Gemini Enterprise용 MCP 앱 빌드&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;워크플로: [입력 데이터, 측면 패널 UI 컨트롤, 승인 또는 내보내기 작업 설명]&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;단일 파일 형태의 HTML 위젯, 2초 미만의 비동기 도구 응답 및 get_app_state 폴링을 지원하는 스트리밍 가능한 HTTP 백엔드(POST /mcp), Cloud Run 배포 명령어(--no-allow-unauthenticated, --no-cpu-throttling, --min-instances=1) 생성&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;MCP 서버 코드가 준비되면 Cloud Run에 배포하고 Gemini Enterprise에 연결합니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;1단계: API 사용 설정 -&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Cloud Run, Discovery Engine, Agent Platform, 조직 정책에 필요한 API를 사용 설정합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;2단계: Cloud Run에 MCP 서버 배포 - &lt;/strong&gt;&lt;code style="vertical-align: baseline;"&gt;(gcloud run deploy &amp;lt;service&amp;gt; --source .&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;) 명령어를 사용하여 소스 코드로부터 MCP 서버 컨테이너를 Cloud Run에 배포합니다. 이때 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;--no-allow-unauthenticated, --no-cpu-throttling&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 옵션을 지정하여 폴링 간에 백그라운드 작업이 중단되지 않도록 하고 --min-instances=1도 지정합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;3단계: 호출자 역할 부여 -&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Discovery Engine 서비스 에이전트에 호출자 역할(&lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;roles/run.invoker&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;)을 부여합니다(레이어 1).&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;4단계: OAuth 2.0 웹 클라이언트 생성 - &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;리디렉션 URI를 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;https://vertexaisearch.cloud.google.com/oauth-redirect&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;로 설정하여 OAuth 2.0 웹 클라이언트를 만듭니다(레이어 2).&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;5단계: 조직 정책 및 사전 준비 사항 구성 - &lt;/strong&gt;&lt;code style="vertical-align: baseline;"&gt;discoveryengine.managed.disableCustomMcpServerConnector&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 제약 조건을 재정의하고 &lt;/span&gt;&lt;a href="https://cloud.google.com/gemini/enterprise/docs/connectors/custom-mcp-server/set-up-custom-mcp-server#before-you-begin"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;시작하기 전에&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 사전 준비 사항을 완료합니다. 여기에는 관리자에게 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;roles/discoveryengine.editor&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 역할을 부여하고, 서버 및 OAuth 호스트의 경우에는 allowedEgressFqdns를 설정하며, 정책이 적용되는 경우에는 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;allowedDataSources&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;에 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;custom_mcp&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;를 추가하는 작업 등이 해당됩니다. 그런 다음 Google Cloud 콘솔에서 Gemini Enterprise &amp;gt; 데이터 스토어 &amp;gt; 데이터 스토어 만들기로 이동하여 커스텀 MCP 서버를 선택하고 커넥터를 등록합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div align="left"&gt;
&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;
&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;
&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;
&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;&lt;table&gt;&lt;colgroup&gt;&lt;col/&gt;&lt;col/&gt;&lt;/colgroup&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;구성 필드&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;값&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;MCP 서버 URL&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;code style="vertical-align: baseline;"&gt;https://&amp;lt;your-cloud-run-service&amp;gt;.run.app/mcp&lt;/code&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;승인 URL&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;code style="vertical-align: baseline;"&gt;https://accounts.google.com/o/oauth2/v2/auth&lt;/code&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;토큰 URL&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;code style="vertical-align: baseline;"&gt;https://oauth2.googleapis.com/token&lt;/code&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;클라이언트 ID 및 보안 비밀&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;웹 OAuth 2.0 클라이언트 ID 및 보안 비밀&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;범위&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;code style="vertical-align: baseline;"&gt;openid email profile&lt;/code&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;PKCE 지원 사용 설정&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;선택(권장)&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;HTTP 기본 인증 사용&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;선택 해제&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;invalid_client&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 오류 방지)&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;6단계: 작업 사용 설정 -&lt;/strong&gt;&lt;a href="https://cloud.google.com/gemini/enterprise/docs/connectors/custom-mcp-server/set-up-custom-mcp-server#enable-actions"&gt;&lt;strong style="vertical-align: baseline;"&gt; 데이터 스토어에서 &lt;/strong&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;작업을 사용 설정&lt;/strong&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;합니다. Gemini Enterprise는 MCP 서버의 도구를 작업으로 가져오지만 기본적으로 사용 중지된 상태로 둡니다. Cloud 콘솔에서 Gemini Enterprise &amp;gt; 데이터 스토어 &amp;gt; [내 MCP 데이터 스토어] &amp;gt; 작업으로 이동하여 '커스텀 작업 새로고침'을 클릭합니다. 이 작업은 서버에서 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;tools/list&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;를 호출함합니다. 그런 다음, 모델에 표시할 도구를 선택하고 '작업 사용 설정'을 클릭합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/4-Step_6_enable_actions.max-1000x1000.png"
        
          alt="4-Step 6 enable actions"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong style="vertical-align: baseline;"&gt;7단계: 데이터 스토어 연결 - &lt;/strong&gt;&lt;a href="https://cloud.google.com/gemini/enterprise/docs/connectors/connect-existing-data-store"&gt;&lt;strong style="vertical-align: baseline;"&gt; &lt;/strong&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;데이터 스토어를 앱에 연결합니다&lt;/strong&gt;&lt;/a&gt;&lt;strong style="vertical-align: baseline;"&gt;. Gemini Enterprise &amp;gt; 앱 &amp;gt; [내 앱] &amp;gt; 연결된 데이터 스토어 &amp;gt; 기존 데이터 스토어 추가&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;로 이동하여 MCP 데이터 스토어를 선택합니다. 데이터 스토어로 연결하면 내장된 기본 어시스턴트가 기본 채팅에서 직접 MCP 도구와 UI 위젯에 액세스할 수 있습니다. '에이전트 추가'는 MCP 데이터 스토어가 아닌 외부 하위 에이전트를 추가할 때 사용하므로 이 기능은 사용하지 마세요.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/5-Step_7_connect_datastore.max-1000x1000.png"
        
          alt="5-Step 7 connect datastore"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;직접 빌드해보기&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;MCP 앱은 백엔드 도구를 Gemini Enterprise의 실시간 작업공간과 페어링합니다. 채팅 프런트엔드나 사용자 인증 파이프라인을 직접 빌드할 필요 없이 Cloud Run 컨테이너 하나를 배포하고 데이터 스토어로 연결하기만 하면 Gemini Enterprise가 곧 기업의 업무를 수행하는 공간이 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;a href="https://auth.business.gemini.google/login?continueUrl=https://business.gemini.google/?utm_source%3Dcloud.google.com/blog%26referrer%3Dhttps://www.google.com/&amp;amp;wiffid=CAoSJGE0ZDBiMWMwLWVmYTUtNGExNy1iNTUzLWM0ODFmNGY4NmJjNQ"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;여기&lt;/strong&gt;&lt;/a&gt;&lt;strong style="vertical-align: baseline;"&gt;에서 Gemini를 사용해 보기&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;a href="https://antigravity.google/" rel="noopener" target="_blank"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;여기&lt;/strong&gt;&lt;/a&gt;&lt;strong style="vertical-align: baseline;"&gt;에서 Google Antigravity로 함께 빌드하기&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Google Cloud에서 빌드하기:&lt;/strong&gt;&lt;a href="https://github.com/modelcontextprotocol/ext-apps" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;MCP 앱 사양(SEP-1865)&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;,&lt;/span&gt;&lt;a href="https://cloud.google.com/run"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Cloud Run&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, &lt;/span&gt;&lt;a href="https://cloud.google.com/ai"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Google Cloud AI&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description><pubDate>Mon, 26 Oct 2026 19:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/ko/topics/developers-practitioners/devs-guide-to-mcp-apps-in-gemini/</guid><category>Developers &amp; Practitioners</category><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>Gemini에서 MCP 앱을 구현하기 위한 개발자 가이드</title><description></description><site_name>Google</site_name><url>https://cloud.google.com/blog/ko/topics/developers-practitioners/devs-guide-to-mcp-apps-in-gemini/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Dave Wang</name><title>Forward Deployed Engineer, Google Cloud</title><department></department><company></company></author></item><item><title>이제 Google Antigravity에서 사용할 수 있는 Claude Opus 5.5와 Claude Sonnet 5.5</title><link>https://cloud.google.com/blog/ko/products/ai-machine-learning/claude-opus-55-and-claude-sonnet-55-available-in-antigravity/</link><description>&lt;div class="block-paragraph"&gt;&lt;p data-block-key="7jvio"&gt;&lt;i&gt;*이 콘텐츠는 AI 번역 도구를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역에는 오류나 누락이 포함될 수 있습니다. 정확한 정보는&lt;/i&gt; &lt;a href="https://cloud.google.com/blog/products/ai-machine-learning/claude-opus-55-and-claude-sonnet-55-available-in-antigravity?e=48754805&amp;amp;hl=en"&gt;&lt;i&gt;영문 원본&lt;/i&gt;&lt;/a&gt;&lt;i&gt;을 참고해 주시기 바랍니다.&lt;/i&gt;&lt;/p&gt;&lt;hr/&gt;&lt;p data-block-key="ctd58"&gt;&lt;/p&gt;&lt;p data-block-key="dok2r"&gt;간단한 버그 수정을 반복하든 복잡한 마이그레이션을 계획하든, 작업의 성격에 따라 적합한 모델이 필요합니다.&lt;/p&gt;&lt;p data-block-key="anmr9"&gt;개방형 생태계를 위한 노력과 개발자에게 모든 작업에 최적화된 모델을 제공하겠다는 Google Cloud의 약속에 따라, &lt;b&gt;Google Cloud 고객은 이제 Google Antigravity에서 Claude Opus 5.5와 Claude Sonnet 5.5를 사용할 수 있습니다.&lt;/b&gt; Claude Opus 5.5는 복잡한 작업을 위해 빌드되었으며, Claude Sonnet 5.5는 더 빠르고 비용이 저렴한 보완 모델입니다.&lt;/p&gt;&lt;p data-block-key="74qop"&gt;관리자가 사용 설정하면 개발자는 모델 선택 도구에서 Claude Opus 5.5와 Sonnet 5.5를 직접 선택할 수 있습니다. 관리자는 Gemini 3.8 Flash 및 Gemini 4 Argon을 비롯한 Google의 Gemini 모델을 선택할 수도 있습니다. 이 모델은 Antigravity 2.0, Antigravity CLI, 최근 출시된 VS Code, JetBrains IntelliJ, Visual Studio용&lt;a href="https://antigravity.google/docs/ide/extensions/" target="_blank"&gt; Antigravity IDE 확장 프로그램&lt;/a&gt;에 적용됩니다. 이를 통해 통합된 엔터프라이즈 결제 및 보안 경계 내에서 작업에 적합한 모델을 선택할 수 있습니다.&lt;/p&gt;&lt;p data-block-key="1hig1"&gt;이 게시물에서는 이러한 모델을 사용하여 Antigravity에서 빌드할 때 적용할 수 있는 두 가지 엔지니어링 패턴을 공유합니다. 구독 유형에 관계없이 Antigravity에서 지원되는 전체 모델 목록을 보려면 &lt;a href="https://antigravity.google/docs/models/" target="_blank"&gt;여기&lt;/a&gt;에서 문서를 확인하세요.&lt;/p&gt;&lt;h3 data-block-key="fsqu1"&gt;&lt;b&gt;Antigravity의 멀티 모델 엔지니어링 패턴&lt;/b&gt;&lt;/h3&gt;&lt;p data-block-key="efqoq"&gt;동일한 에이전트 하네스 내에서 여러 모델 제품군을 사용할 수 있게 되면 지연 시간과 비용을 제어하면서 코드 품질을 개선하는 실용적인 멀티 모델 워크플로를 활용할 수 있습니다.&lt;/p&gt;&lt;h3 data-block-key="2vtkn"&gt;&lt;b&gt;패턴 1: 루프 및 그래프 워크플로의 교차 모델 검증('LLM-as-a-Judge')&lt;/b&gt;&lt;/h3&gt;&lt;p data-block-key="1ldia"&gt;에이전트 루프 또는 다단계 그래프 워크플로를 빌드할 때 동일한 모델이 코드 작성과 결과물 검토를 모두 수행하게 되면 해당 모델 특유의 사각지대가 고착화될 위험이 있습니다. 서로 다른 두 모델 제품군을 하나는 구현자로, 다른 하나는 검증자(판단자)로 페어링하면 워크플로의 다음 단계로 넘어가기 전에 독립적인 검증 과정을 거칠 수 있습니다.&lt;/p&gt;&lt;p data-block-key="9cumn"&gt;Antigravity에서는 이 패턴을 대화형으로 실행하거나 자동화된 하위 에이전트를 통해 실행할 수 있습니다.&lt;/p&gt;&lt;ol&gt;&lt;li data-block-key="cclao"&gt;&lt;b&gt;모델 A로 계획 및 구현:&lt;/b&gt; &lt;code&gt;Claude Opus 5.5&lt;/code&gt; 또는 &lt;code&gt;Gemini 4 Argon&lt;/code&gt;을 사용하여 계획 모드에서 작업을 시작하고, 여러 파일에 걸친 변경사항을 설계하고 구현합니다.&lt;/li&gt;&lt;li data-block-key="am9uh"&gt;&lt;b&gt;모델 B로 검증:&lt;/b&gt; 루프를 커밋하거나 다음 단계로 넘어가기 전에, 모델을 전환하거나 CLI에서 일회성 &lt;code&gt;/model&lt;/code&gt; 검사를 호출하여 다른 모델 제품군이 테스트 모음 및 요구사항에 따라 구현 내용을 검토하도록 할 수 있습니다.&lt;/li&gt;&lt;/ol&gt;&lt;h3 data-block-key="d7042"&gt;&lt;b&gt;패턴 2: 추론 모델과 Flash 하위 에이전트 페어링&lt;/b&gt;&lt;/h3&gt;&lt;p data-block-key="ce38s"&gt;복잡한 엔지니어링 작업은 몇 가지 고도의 추론 결정과 수십 가지의 대량 기계적 조회(파일 검색, 로그 grep, 린트 결과 확인, 테스트 실패 분류)를 결합하는 경우가 많습니다. 프런티어 모델에서 모든 조회를 실행하면 지연 시간과 비용이 모두 증가할 수 있습니다.&lt;/p&gt;&lt;p data-block-key="3ti59"&gt;Antigravity의 하위 에이전트 맞춤설정 시스템(&lt;code&gt;.agents/agents/*.md&lt;/code&gt;)을 사용하면 전문 하위 에이전트에 특정 모델 등급(&lt;code&gt;inherit&lt;/code&gt;, &lt;code&gt;flash&lt;/code&gt; 또는 &lt;code&gt;pro&lt;/code&gt;)을 할당할 수 있습니다. 기본 세션에서 더 강력한 모델을 사용하고 있는 경우에도 활용 가능합니다.&lt;/p&gt;&lt;p data-block-key="6gvh6"&gt;&lt;code&gt;model: inherit&lt;/code&gt;로 구성된 하위 에이전트는 심층 추론 하위 작업에 활성 세션 모델을 사용합니다.&lt;/p&gt;&lt;p data-block-key="c5j9u"&gt;&lt;code&gt;model: flash&lt;/code&gt;로 구성된 하위 에이전트는 고속 검색, 분류, 선별 작업을 Gemini Flash 모델로 오프로드합니다.&lt;/p&gt;&lt;p data-block-key="aob92"&gt;예를 들어 &lt;code&gt;.agents/agents/test-triager.md&lt;/code&gt;에서 빠른 로그 분류 서브 에이전트를 정의할 수 있습니다.&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;---\r\nname: test-triager\r\ndescription: Runs unit tests, classifies failures, and returns a concise summary of failing assertions.\r\nmodel: flash\r\ntools:\r\n  - read\r\n  - edit\r\n---\r\n\r\nRun the requested test targets, classify any failures by root cause (compilation error, assertion failure, or timeout), and return a structured summary to the parent agent.&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafed86cd0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph"&gt;&lt;p data-block-key="5p921"&gt;그리고 &lt;code&gt;.agents/agents/gemini-judge.md&lt;/code&gt;의 교차 모델 코드 검토자 하위 에이전트 예시는 다음과 같습니다.&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;quot;---\r\nname:cross-model-judge\r\ndescription: Independent LLM-as-a-judge verifier that audits diffs and edge cases using Gemini Pro.\r\nmodel: pro\r\ntools:\r\n  - read\r\n---\r\n\r\nReview the current workspace diff against the user&amp;#x27;s requirements. Check for regressions, missing edge-case tests, and security issues. Output a pass/fail verdict with specific line references.&amp;quot;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafed852d0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph"&gt;&lt;p data-block-key="5p921"&gt;이 설정을 사용하면 빠른 테스트 및 분류 루프를 &lt;code&gt;test-triager&lt;/code&gt;에 위임하고 &lt;code&gt;cross-model-judge&lt;/code&gt;를 트리거하여 최종 diff를 검증할 수 있으며, 각 모델의 강점을 단일 워크플로에 결합할 수 있습니다.&lt;/p&gt;&lt;h3 data-block-key="8pufb"&gt;&lt;b&gt;시작하기&lt;/b&gt;&lt;/h3&gt;&lt;p data-block-key="39db1"&gt;Antigravity를 사용하는 Google Cloud 고객은 이제 Claude Opus 5.5 및 Claude Sonnet 5.5를 이용할 수 있습니다.&lt;/p&gt;&lt;ol&gt;&lt;li data-block-key="9pg34"&gt;&lt;b&gt;관리자(비즈니스용 Gemini):&lt;/b&gt; 서드 파티 파트너 모델은 풀링된 Gemini Enterprise Standard 및 Plus 버전 월별 토큰 할당량을 사용하지 않습니다. 대신 기존 Google Cloud Billing 계정을 통해 사용한 만큼만 지불하는 방식으로 요금이 청구되므로 초과 사용량을 사용 설정해야 합니다. Google Cloud 콘솔에서 'Gemini Enterprise' &amp;gt; '설정' &amp;gt; 'AI 개발자 도구'로 이동하여 초과분 청구 및 지출 한도를 설정하고, 조직에서 사용할 파트너 모델을 승인하세요. 단계별 안내는&lt;a href="https://cloud.google.com/gemini/enterprise/docs/ai-developer-tools-settings"&gt; AI 개발자 도구 설정 구성&lt;/a&gt;을 참고하세요.&lt;/li&gt;&lt;li data-block-key="f7vcr"&gt;&lt;b&gt;관리자(Gemini 플랫폼):&lt;/b&gt; Gemini 플랫폼에서 API를 통해 Antigravity를 사용하는 경우 파트너 모델을 사용 설정할 수도 있습니다. Model Garden에서 Claude 모델을 사용 설정하고 Anthropic 표준 약관에 동의하세요.&lt;/li&gt;&lt;li data-block-key="44hda"&gt;&lt;b&gt;개발자:&lt;/b&gt; Antigravity 2.0, Antigravity CLI 또는 Antigravity IDE 확장 프로그램을 최신 버전으로 업데이트하고 모델 선택기를 열거나 &lt;code&gt;/model&lt;/code&gt;을 실행하여 작업에 적합한 모델을 선택하세요. 엔터프라이즈 거버넌스 및 멀티 에이전트 구성에 관한 자세한 내용은 &lt;a href="https://antigravity.google/docs/enterprise/" target="_blank"&gt;Google Antigravity Enterprise 문서&lt;/a&gt;를 확인하세요. 작업공간 상태, 열려 있는 아티팩트, 터미널 컨텍스트를 유지하면서 동일한 대화 대화목록에서 대화 중간에 활성 모델을 전환할 수 있습니다.&lt;/li&gt;&lt;/ol&gt;&lt;p data-block-key="2l3bu"&gt;참고: 경량 퍼스트 파티 Gemini 모델은 백그라운드에서 상시 작동하며 컨텍스트 관리 및 요약과 같이 빈번하게 발생하는 클라이언트 측 조정 작업을 처리합니다. 이 과정에서 퍼스트 파티 토큰이 소모되며 요금이 부과될 수 있습니다.&lt;/p&gt;&lt;/div&gt;</description><pubDate>Mon, 26 Oct 2026 19:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/ko/products/ai-machine-learning/claude-opus-55-and-claude-sonnet-55-available-in-antigravity/</guid><category>Developers &amp; Practitioners</category><category>AI &amp; Machine Learning</category><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>이제 Google Antigravity에서 사용할 수 있는 Claude Opus 5.5와 Claude Sonnet 5.5</title><description></description><site_name>Google</site_name><url>https://cloud.google.com/blog/ko/products/ai-machine-learning/claude-opus-55-and-claude-sonnet-55-available-in-antigravity/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Marialaura Garcia</name><title>Product Marketing Manager</title><department>Google Cloud</department><company></company></author><author xmlns:author="http://www.w3.org/2005/Atom"><name>Rich Hyndman</name><title>Developer Relations</title><department>Google Antigravity</department><company></company></author></item><item><title>에이전트 플러그인 빌드를 통해 배운 4가지 평가 엔지니어링 교훈</title><link>https://cloud.google.com/blog/ko/topics/developers-practitioners/four-eval-engineering-lessons/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;*이 콘텐츠는 AI 번역 도구를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역에는 오류나 누락이 포함될 수 있습니다. 정확한 정보는 &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/topics/developers-practitioners/four-eval-engineering-lessons?e=48754805&amp;amp;hl=en"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;영문 원본&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;을 참고해 주시기 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;에이전트형 시스템을 빌드할 때의 진정한 과제는 시스템을 만드는 것 자체가 아니라 측정하는 일입니다.&lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;평가 엔지니어링은 신뢰할 수 있는 AI 시스템을 빌드하기 위한 중요한 기반입니다. 에이전트의 실제 동작을 측정하기 위해 체계적이고 반복 가능한 테스트를 설정하는 것은 신뢰할 수 있는 도구를 출시하느냐 아니면 소리 없이 중단되거나 API 호출에 실패하거나 실수를 하는 도구를 내놓느냐를 결정짓는 차이가 될 수 있습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;저는 Google에서 수년간 평가 엔지니어링 이니셔티브를 이끌어 왔습니다. 이번에 새로 출시된 &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/ko/topics/developers-practitioners/introducing-the-google-cloud-developer-plugin-for-ai-coding-agents?e=48754805&amp;amp;hl=ko"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt; Google Cloud Developer 플러그인&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 개발 과정은 실제 개발자 워크플로 전반에서 이러한 핵심 원칙들을 스트레스 테스트해 볼 수 있는 실시간 테스트베드 역할을 했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;새로운 플러그인을 빌드하면서 얻은 4가지 평가 교훈을 소개합니다. 이 교훈을 여러분의 빌드에 적용해 보세요.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;1. 요약 대신 실행 단계 평가&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;에이전트를 처음 평가할 때 LLM-as-a-judge를 설정하여 에이전트의 최종 텍스트 대답을 검사하고 체크리스트를 기준으로 점수를 매겼습니다. 하지만 평가자는 에이전트가 실제로 수행한 작업이 아니라 작성한 내용만 볼 수 있기 때문에, 이러한 방식에는 근본적인 결함이 있다는 사실을 금방 깨달았습니다. Google Cloud Developer 플러그인을 위해 초기 11개 프롬프트로 구성된 평가 세트를 실행했을 때, 자동 채점기는 3개의 프롬프트에서 실패한 것으로 판정했습니다. 하지만 원시 도구 호출 로그를 열고 스크립트를 읽어 보니 플러그인이 실제로 3가지 항목을 모두 통과한 상태였습니다. 예를 들어 Cloud Run 정리 프롬프트의 경우, 기준표에 따라 실제 작업을 수행하기 전에 명령어 문법이 올바른지 먼지 확인해야 했습니다. 에이전트는 가장 먼저 gcloud help run services list를 실행했습니다. 에이전트는 작업을 제대로 수행했지만, 최종 메시지에서는 도움말 문서를 확인했다는 사실을 언급하는 대신 사용자에게 영구적인 데이터 손실 가능성을 경고하는 데 집중했습니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/Image_1_XmJ1pt2.max-1000x1000.png"
        
          alt="Image 1"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;평가자는 에이전트가 요약에서 성과를 자랑하지 않았다는 이유만으로 할 일을 제대로 수행한 에이전트에게 불이익을 주었습니다. 기준표에 'X를 실행했나요?'라는 항목이 있더라도, 실제 도구 호출 궤적을 평가하지 않는다면 LLM 심사자는 추측에 의존할 수밖에 없습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;핵심 요약:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 에이전트의 마지막 답변 내용만 보고 성능을 평가하지 마세요. 원시 실행 궤적을 평가하여 실제로 어떤 명령어가 실행, 검증, 범위 지정되었는지 확인합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;2. 비동기 작업을 위한 평가 설계&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;도구 호출 궤적을 분석할 때는 무엇을 읽느냐 못지않게 원격 분석 데이터를 어떻게 추출하느냐가 중요합니다. 에이전트 원격 분석 데이터를 평면화된 순차적 이벤트 목록으로 추출하면 도구의 동시 디스패치가 가려지게 되는데, 이는 동작 실패의 주요 원인 중 하나입니다. 최신 에이전트 하네스는 호출 배열을 사용하여 여러 도구 호출을 단일 어시스턴트 턴으로 묶어 일괄 처리하는 경우가 많습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;평가에서 에이전트가 환경을 검사하고 문서를 조회하도록 요청받았을 때, 하네스는 단일 tool_calls 페이로드 내에서 스킬 로드 호출과 두 개의 문서 검색을 동시에 디스패치했습니다. 스킬 활성화는 다단계 프로세스로 이루어집니다. 초기 호출에서는 짧은 실행 스텁만 반환되고 이후 차례에서 전체 요청 사항 본문이 삽입되므로, 검색을 제어해야 할 요청 사항이 시스템에서 이미 검색을 실행한 후에야 프롬프트 컨텍스트에 도달하게 됩니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/image_2_CHyk3qC.max-1000x1000.png"
        
          alt="image 2"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;시스템은 스킬에 전용 차례를 부여하지 않아 스킬의 안내가 에이전트의 행동에 영향을 미치지 못했습니다. 원격 분석 파이프라인이 턴 구조를 제거하고 호출을 평면 타임라인으로 병합하면 엔지니어는 개발자가 스킬에 삽입한 명확한 요청 사항을 에이전트가 왜 무시했는지 파악하느라 며칠씩 시간을 허비하게 될 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;핵심 내용: &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;원격 분석 추출기에서 턴 구조를 유지해야 삽입된 안내가 컨텍스트 윈도우에 반영되기 전에 클라이언트 측의 병렬 디스패치가 도구 호출을 먼저 실행하는 문제를 파악할 수 있습니다. &lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;3. 실시간 실행과 '드라이 런'을 나란히 테스트&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;병렬 디스패치와 같은 하네스 특유의 문제를 파악하려면 실제 API 호출을 면밀히 검사해야 합니다. 하지만 한 가지 환경 조건에서만 에이전트를 테스트한다면 반쪽짜리 테스트에 불과합니다. 첫날부터 실시간 실행과 계획 전용 실행이라는 두 가지 조건을 나란히 실행해야 합니다. 실제 조건에서 에이전트는 실제 샌드박스 처리된 사용자 인증 정보를 가지고 실제로 명령어를 실행합니다. 이를 통해 문법이 작동하는지, 파라미터가 깔끔하게 직렬화되는지, 에이전트가 파괴적인 작업을 수행하기 전에 제약을 가하는지 확인할 수 있습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;실시간 실행은 2단계에서 예기치 않은 권한 오류가 자주 발생하며 테스트하려는 동작에 도달하기 전에 중단됩니다. 따라서 사용자 인증 정보를 삭제하고 에이전트에게 아무것도 실행하지 않고 무엇을 할 것인지 설명하도록 지시하는 계획 전용 조건이 필요합니다. 이렇게 하면 권한 문제라는 걸림돌이 사라져 모델의 순수한 추론 및 라우팅 의도를 명확히 파악할 수 있습니다. 가장 중요한 발견의 절반 정도는 두 실행 방식의 차이에서 얻은 결과였습니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/image_3_OixTmu5.max-1000x1000.png"
        
          alt="image 3"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;예를 들어 온보딩 프롬프트 중 하나에서 프로젝트 목록 호출 시 실시간 실행이 즉시 차단되었습니다. 계획 전용 실행은 순조롭게 진행되어 조직 정책, 관리자 승인, 거버넌스를 완전히 무시하는 8,000자 분량의 계획을 생성했습니다. 실시간 실행에서는 드러나지 않았던 중대한 인지적 결함이 계획 전용 실행에서는 단 몇 초 만에 밝혀졌습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;핵심 내용:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 실시간 평가와 계획 전용 평가를 나란히 실행합니다. 실시간 실행은 실제 실행 결과와 안전 제약 사항을 테스트하는 데 쓰이며, 계획 전용 실행은 권한 오류에 가로막히지 않고 모델 고유의 추론 능력과 라우팅 의도를 파악하는 데 유용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;4. '골든 세트'를 지속 가능한 기준으로 사용&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;프런티어 모델 아키텍처는 몇 달 주기로 바뀌고, 에이전트 하네스는 계속해서 개선되며, 플러그인 매니페스트 표준 또한 필연적으로 진화할 것입니다. Google Cloud Developer 플러그인을 빌드할 때, Google은 이러한 비결정적 환경에 대한 평가를 지속적 통합 테스트의 일환으로 간주했습니다. 즉, 하네스, 라이브 모델, 도구가 실제 작업 환경에서 함께 작동하는 복합 스택 전체를 대상으로 스트레스 테스트를 진행했다는 의미입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이 접근 방식은 최종 텍스트 출력만 보고 결과를 추측하는 대신, 에이전트의 사고 과정부터 실제 실행 명령어, 시스템을 망가뜨리지 않고 문제를 해결했는지 여부까지 전체 실행 궤적을 파악합니다. 그런 다음 이상적인 경로가 무엇인지 숙지하고 있는 실제 전문가가 선별한 '골든 세트'를 기준으로 해당 실행 결과의 점수를 매깁니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;핵심 요약: &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;하네스, 모델, 플러그인을 포함한 전체 시스템이 실제 현장에서 어떻게 작동해야 하는지를 기준으로 골든 세트를 빌드합니다. 모델은 계속해서 변하지만 이러한 기준 실행은 안전망 역할을 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;알림: '원샷' 데모 대신 평가 세트를 활용해야 합니다.&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;엔지니어들이 흔히 저지르는 실수는 제가 이른바 원샷 데모라고 부르는 방식입니다. 이는 누군가 LLM에 프롬프트를 입력하고, LLM이 완전한 3D 게임을 빌드하거나 루빅 큐브를 한 번에 맞추는 것을 지켜본 후 평가라고 부르는 경우를 말합니다. 하지만 실제로는 허황된 측정항목일 뿐입니다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;AI로 수준 높은 결과물을 만들어내려면, 평가 세트가 필요하다고 생각합니다. 평가가 없으면 팀은 말 그대로 어두운 동굴 속을 눈을 가리고 달리는 것과 같습니다. 엔터프라이즈급 에이전트를 엔지니어링한다는 것은 다단계 상호작용을 처리하고, 권한을 관리하며, '비용 절감 기회를 찾아줘'라는 요청에 따라 실수로 프로젝트를 삭제하는 것과 같은 파괴적인 결과를 방지하는 시스템의 능력을 테스트하는 것을 의미합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;다음 단계&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;에이전트 플러그인이나 MCP 서버를 빌드하는 것은 단지 시작일 뿐입니다. 실제 클라우드 인프라에서 신뢰할 수 있는 무언가를 제공하려면, 모델이 예상대로 작동하는지 확인하기 위한 훨씬 더 심도 있는 평가 작업이 필요합니다. 결국 모델의 급격한 변화 속에서도 변치 않는 가치를 지니는 것은 스트레스 테스트를 거친 평가 제품군입니다. Google Cloud Developer 플러그인&lt;/span&gt;&lt;a href="https://g.dev/cloud/dev-setup" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;문서&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;를 확인하거나 이&lt;/span&gt;&lt;a href="https://g.dev/cloud/agent-plugins-codelab-agy" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Codelab&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;을 살펴보고 Antigravity에서 플러그인을 시작하세요.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;</description><pubDate>Sun, 25 Oct 2026 19:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/ko/topics/developers-practitioners/four-eval-engineering-lessons/</guid><category>AI &amp; Machine Learning</category><category>Developers &amp; Practitioners</category><media:content height="540" url="https://storage.googleapis.com/gweb-cloudblog-publish/original_images/blog-post-banner_4eel_v2_2.png.jpg" width="540"></media:content><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>에이전트 플러그인 빌드를 통해 배운 4가지 평가 엔지니어링 교훈</title><description></description><image>https://storage.googleapis.com/gweb-cloudblog-publish/original_images/blog-post-banner_4eel_v2_2.png.jpg</image><site_name>Google</site_name><url>https://cloud.google.com/blog/ko/topics/developers-practitioners/four-eval-engineering-lessons/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Casey West</name><title>Developer Relations Lead, AI Infrastructure &amp; Applied Engineering, Google Cloud</title><department></department><company></company></author></item><item><title>에이전트 개발 키트 하나로 5가지 언어 지원</title><link>https://cloud.google.com/blog/ko/topics/developers-practitioners/one-agent-development-kit-five-languages/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;*이 콘텐츠는 AI 번역 도구를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역에는 오류나 누락이 포함될 수 있습니다. 정확한 정보는 &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/topics/developers-practitioners/one-agent-development-kit-five-languages?e=48754805&amp;amp;hl=en"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;영문 원본&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;을 참고해 주시기 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;에이전트에 대해 이야기할 때 반드시 Python만을 의미하는 것은 아닙니다. 오늘날의 현대적인 생태계에서 에이전트는&lt;/span&gt;&lt;a href="https://cloud.google.com/run"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Cloud Run&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;에서 높은 동시 실행 성능을 갖춘 Go 마이크로서비스로 구동될 수도 있고,&lt;/span&gt;&lt;a href="https://github.com/google/adk-js/blob/main/core/src/models/chrome_prompt_llm.ts" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;브라우저 탭에서 실행되며&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; Chrome의 온디바이스 모델을 호출할 수도 있습니다. 하지만 여전히 많은 에이전트 프레임워크가 Python 전용 스택만을 고려하고 있습니다. 이러한 가정으로 인해 팀은 에이전트 워크로드만을 위해 Python 서비스를 가동하거나 자체 언어로 에이전트 조정 로직을 처음부터 빌드해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Google의&lt;/span&gt;&lt;a href="https://adk.dev/" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;에이전트 개발 키트(ADK)&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;는&lt;/span&gt;&lt;a href="https://github.com/google/adk-python" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Python&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;,&lt;/span&gt;&lt;a href="https://github.com/google/adk-go" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Go&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;,&lt;/span&gt;&lt;a href="https://github.com/google/adk-js" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;TypeScript&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;,&lt;/span&gt;&lt;a href="https://github.com/google/adk-java" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Java&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, &lt;/span&gt;&lt;a href="https://github.com/google/adk-kotlin" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Kotlin&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;을 폭넓게 지원하여 이러한 절충점을 없애줍니다. ADK의 각 버전은 자체 런타임 및 유형 시스템을 위해 처음부터 빌드되는 동시에 개방형 프로토콜을 통한 상호 운용성을 갖춘 통합 아키텍처를 공유합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;공유 기반&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;5가지 언어 모두가 동일한 개방형 프로토콜을 지원하기 때문에, 사용하는 언어에 따라 아키텍처가 고정되지는 않습니다. ADK에는 모든 언어로 된&lt;/span&gt;&lt;a href="https://modelcontextprotocol.io/" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;모델 컨텍스트 프로토콜&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 클라이언트가 포함되어 있으므로 MCP 서버로 노출된 커스텀 도구를 즉시 호출할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;멀티 에이전트 시스템의 경우 ADK는&lt;/span&gt;&lt;a href="https://github.com/a2aproject/A2A" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Agent2Agent (A2A)&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 프로토콜을 지원하여 에이전트가 HTTP를 통해 원격 에이전트와 통신할 수 있도록 합니다. A2A를 통해 다양한 언어 또는 프레임워크로 작성된 에이전트가 상호 운용될 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;에이전트 중심 시작&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;시작하려면 일회성 설정 명령어를 실행하여 Google Cloud 인증을 확인하고, CLI를 설치한 다음,&lt;/span&gt;&lt;a href="https://antigravity.google/" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Antigravity&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;,&lt;/span&gt;&lt;a href="https://docs.anthropic.com/en/docs/claude-code" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Claude Code&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 또는&lt;/span&gt;&lt;a href="https://github.com/openai/codex" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Codex&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;와 같은 코딩 에이전트에서 퍼스트 파티 ADK 스킬을 설정합니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;uvx google-agents-cli setup&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafea0b450&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;그런 다음 scaffold 명령어를 실행하여 A2A 엔드포인트와 Cloud Run,&lt;/span&gt;&lt;a href="https://docs.cloud.google.com/gemini-enterprise-agent-platform/build/runtime"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Gemini Enterprise Agent Runtime&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 또는&lt;/span&gt;&lt;a href="https://cloud.google.com/kubernetes-engine"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Google Kubernetes Engine(GKE)&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;용 배포 구성이 포함된 작업 프로젝트를 생성합니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;# Scaffold an ADK project (use --agent adk for Python or --agent adk_go for Go)\r\nagents-cli scaffold create my-go-agent \\\r\n  --agent adk_go \\\r\n  --deployment-target cloud_run \\\r\n  --region us-central1&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafea0a250&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;a href="https://github.com/google/adk-python/tree/main/.agents/skills/adk-agent-builder" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Python용 ADK&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 및&lt;/span&gt;&lt;a href="https://github.com/google/adk-kotlin/tree/main/.agents/skills/adk-kotlin-agent-builder" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Kotlin용 ADK&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 저장소는 모두 소스 트리에 에이전트 빌더 기술을 제공하며,&lt;/span&gt;&lt;a href="https://adk.dev/llms.txt" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;code style="text-decoration: underline; vertical-align: baseline;"&gt;adk.dev/llms.txt&lt;/code&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 리소스는 5개 언어 모두에서 코딩 에이전트에 주문형 API 참고 리소스를 제공합니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/one-agent-development-kit-five-languages-a.max-1000x1000.jpg"
        
          alt="one-agent-development-kit-five-languages-architecture"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="9ieq2"&gt;코딩 에이전트 스킬은 프로젝트를 스캐폴딩하고, MCP와 A2A는 5개의 언어 런타임을 모두 연결합니다.&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;각 ADK의 실습 뷰&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;5가지 언어의 차이를 가장 명확하게 느끼는 방법은 각 언어로 동일한 날씨 도구를 정의하고 그 설계가 런타임에 어떻게 부합하는지 확인하는 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Python&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://github.com/google/adk-python/blob/main/contributing/samples/core/quickstart/agent.py" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Python용 ADK&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;에서는 데코레이터나 스키마 빌더 클래스가 필요하지 않습니다. 일반 Python 함수를 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;tools&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 파라미터에 전달하면 ADK가 시작 시 함수의 시그니처, 유형 힌트, docstring을 검사하여 도구 선언과&lt;/span&gt;&lt;a href="https://docs.pydantic.dev/latest/" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Pydantic&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 파라미터 스키마를 자동으로 구성합니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;from google.adk.agents.llm_agent import Agent\r\n\r\n\r\ndef get_weather(city: str) -&amp;gt; dict:\r\n  &amp;quot;&amp;quot;&amp;quot;Retrieves the current weather report for a specified city.\r\n\r\n  Args:\r\n      city (str): The name of the city for which to retrieve the weather report.\r\n  &amp;quot;&amp;quot;&amp;quot;\r\n  return {&amp;quot;status&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;report&amp;quot;: f&amp;quot;Sunny and 72F in {city}.&amp;quot;}\r\n\r\n\r\nroot_agent = Agent(\r\n    name=&amp;quot;weather_agent&amp;quot;,\r\n    model=&amp;quot;gemini-3.8-flash&amp;quot;,\r\n    instruction=&amp;quot;Answer questions about the weather in a city.&amp;quot;,\r\n    tools=[get_weather],\r\n)&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;lang-py&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafea08910&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Python은 빠른 프로토타입 제작뿐만 아니라 ADK의 참조 구현으로서, 가장 광범위한 Google Cloud 통합 기능(&lt;/span&gt;&lt;a href="https://cloud.google.com/bigquery"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;BigQuery&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;,&lt;/span&gt;&lt;a href="https://cloud.google.com/spanner"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Spanner&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;,&lt;/span&gt;&lt;a href="https://cloud.google.com/bigtable"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Bigtable&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;)과 모델 어댑터(&lt;/span&gt;&lt;a href="https://ai.google.dev/gemini-api/docs" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Gemini&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, Anthropic, OpenAI, LiteLLM)를 함께 제공합니다. &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;adk eval&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 또는 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;agents-cli eval run&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 명령어와 함께 사용하면, 평가 도구가 지속적 통합(CI) 단계에서 골든 데이터 세트를 기준으로 에이전트의 궤적을 분석합니다. 이를 통해 프로덕션 서비스가 다른 언어로 실행되는 환경에서도 전체 시스템을 엔드 투 엔드로 테스트할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Go&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Python이 실험과 평가 분야를 선도한다면,&lt;/span&gt;&lt;a href="https://github.com/google/adk-go/blob/main/examples/quickstart/main.go" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;ADK for Go&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;는 프로덕션 백엔드 엔지니어링에 가장 적합한 선택입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Go 도구 함수는&lt;/span&gt;&lt;a href="https://pkg.go.dev/google.golang.org/adk/v2/agent#Context" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;code style="text-decoration: underline; vertical-align: baseline;"&gt;agent.Context&lt;/code&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 구성과 강력한 유형의 입력 구조체를 사용합니다. &lt;/span&gt;&lt;a href="https://pkg.go.dev/google.golang.org/adk/v2/tool/functiontool#New" rel="noopener" target="_blank"&gt;&lt;code style="text-decoration: underline; vertical-align: baseline;"&gt;functiontool.New&lt;/code&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 함수는 Go 제네릭을 사용하여 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;struct&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 태그에서 입력 및 출력 스키마를 모두 추론합니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;type GetWeatherArgs struct {\r\n\tCity string `json:&amp;quot;city&amp;quot; jsonschema:&amp;quot;The city to look up weather for.&amp;quot;`\r\n}\r\n\r\ntype GetWeatherResult struct {\r\n\tReport string `json:&amp;quot;report&amp;quot;`\r\n}\r\n\r\nfunc getWeather(_ agent.Context, args GetWeatherArgs) (GetWeatherResult, error) {\r\n\treturn GetWeatherResult{Report: &amp;quot;Sunny and 72F in &amp;quot; + args.City}, nil\r\n}\r\n\r\nweatherTool, err := functiontool.New(functiontool.Config{\r\n\tName:        &amp;quot;get_weather&amp;quot;,\r\n\tDescription: &amp;quot;Retrieves the current weather report for a city.&amp;quot;,\r\n}, getWeather)&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafea0ac90&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;code style="vertical-align: baseline;"&gt;functiontool.New&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 함수는 핸들러의 시그니처에 대해 제네릭을 지원하므로, Go 컴파일러는 바이너리가 실행되기 전에 함수가 예상된 계약을 준수하는지 미리 검증해 줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Go는 Python에 이어 &lt;/span&gt;&lt;a href="https://pkg.go.dev/google.golang.org/adk/v2/workflow" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;ADK 2.0 그래프 워크플로 런타임&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;을 지원하는 첫 번째 언어이기도 합니다. LLM 추론과 함께 결정론적인 제어 흐름이 필요한 경우, &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;workflow.New&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 함수를 사용하면 에이전트와 일반 Go 함수를 조건부 라우팅 및 병렬 단계가 포함된 방향성 그래프로 연결할 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;ag, err := workflowagent.New(&amp;quot;order_pipeline&amp;quot;, []workflow.Edge{\r\n\t{From: workflow.Start, To: triageNode},\r\n\t{From: triageNode, To: fulfillNode, Route: workflow.StringRoute(&amp;quot;fulfill&amp;quot;)},\r\n\t{From: fulfillNode, To: notifyNode},\r\n})&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafea08450&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Go는 Cloud Run과 GKE의 프로덕션에서 특히 뛰어난 성능을 발휘합니다. 컴파일된 Go 에이전트는 언어 VM이나 무거운 종속 항목 트리 없이 약 2MiB&lt;/span&gt;&lt;a href="https://github.com/GoogleContainerTools/distroless" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Google distroless 정적 기본 이미지&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;에 가볍게 패키징됩니다. 정적 Go 바이너리는 컨테이너가 시작되는 즉시 포트에 바인딩되므로&lt;/span&gt;&lt;a href="https://docs.cloud.google.com/run/docs/tips/general"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;동적 언어&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;의 모듈 가져오기와&lt;/span&gt;&lt;a href="https://docs.cloud.google.com/run/docs/tips/java"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;JVM 서비스&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;의 JAR 압축해제 및 JIT 준비를 건너뜁니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;일단 실행되고 나면, Go의 동시 실행 모델은 에이전트 워크로드에 자연스럽게 어우러집니다. 각 goroutine은&lt;/span&gt;&lt;a href="https://go.dev/doc/go1.4#runtime" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;2KB 스택&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;과&lt;/span&gt;&lt;a href="https://go.dev/doc/faq#goroutines" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;최소한의 스케줄링 오버헤드&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;로 시작하므로, 단일 인스턴스에서 수천 개의 동시 스트리밍 요청과 도구 호출을 다중화할 수 있습니다. Go용 ADK에는&lt;/span&gt;&lt;a href="https://pkg.go.dev/google.golang.org/adk/v2/server/adka2a/v2" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;기본 제공되는 A2A 서버 핸들러&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;와 OpenTelemetry 추적 기능도 포함되어 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;TypeScript&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;TypeScript는 JavaScript로 컴파일할 때 유형 주석을 삭제하므로 런타임 리플렉션을 사용할 수 없습니다. 대신&lt;/span&gt;&lt;a href="https://github.com/google/adk-js/blob/main/core/src/tools/function_tool.ts" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;TypeScript용 ADK&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;는&lt;/span&gt;&lt;a href="https://zod.dev/" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Zod&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;와 페어링됩니다. &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;z.object(…)&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 스키마를 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;FunctionTool&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 함수에 전달하면 TypeScript가 단일 선언에서 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;execute&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 콜백의 매개변수 유형을 정적으로 추론합니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;import { FunctionTool, LlmAgent } from &amp;quot;@google/adk&amp;quot;;\r\nimport { z } from &amp;quot;zod&amp;quot;;\r\n\r\nconst getWeatherTool = new FunctionTool({\r\n  name: &amp;quot;get_weather&amp;quot;,\r\n  description: &amp;quot;Retrieves the current weather report for a city.&amp;quot;,\r\n  parameters: z.object({\r\n    city: z.string().describe(&amp;quot;The name of the city.&amp;quot;),\r\n  }),\r\n  execute: async ({ city }) =&amp;gt; {\r\n    return { status: &amp;quot;success&amp;quot;, report: `Sunny and 72F in ${city}.` };\r\n  },\r\n});\r\n\r\nexport const rootAgent = new LlmAgent({\r\n  name: &amp;quot;weather_agent&amp;quot;,\r\n  model: &amp;quot;gemini-3.8-flash&amp;quot;,\r\n  instruction: &amp;quot;Answer questions about the weather in a city.&amp;quot;,\r\n  tools: [getWeatherTool],\r\n});&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafea09f50&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;런타임 입력 검증, 모델로 전송되는 JSON 스키마, &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;execute&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 콜백 내의 IDE 자동 완성은 모두 단일 정보 소스를 기반으로 유기적으로 작동합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;TypeScript는 ADK 2.0 그래프 워크플로 엔진에서도 실행되며&lt;/span&gt;&lt;a href="https://github.com/google/adk-js/blob/main/core/src/index_web.ts" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;독립형 브라우저 번들&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;도 함께 제공합니다. Node.js 서비스 외에도 페이지 수준 도구용&lt;/span&gt;&lt;a href="https://github.com/google/adk-js/blob/main/core/src/tools/webmcp/webmcp_toolset.ts" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;WebMCP&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;와 Chrome의 온디바이스&lt;/span&gt;&lt;a href="https://developer.chrome.com/docs/ai/prompt-api" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Prompt API&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;를 사용하여 브라우저 탭에서 직접 ADK 에이전트를 실행할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Java&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://github.com/google/adk-java/blob/main/tutorials/city-time-weather/src/main/java/com/google/adk/tutorials/CityTimeWeather.java" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Java용 ADK&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;는 Maven, Gradle, Spring Boot를 표준으로 사용하는 팀에 적합합니다. 메서드 파라미터에 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;@Schema&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 주석을 추가하고 유연한 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;LlmAgent.builder()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; API를 사용하여 에이전트를 조합합니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;public class WeatherTools {\r\n  public static Map&amp;lt;String, String&amp;gt; getWeather(\r\n      @Schema(name = &amp;quot;city&amp;quot;, description = &amp;quot;The name of the city&amp;quot;)\r\n      String city) {\r\n    return Map.of(&amp;quot;status&amp;quot;, &amp;quot;success&amp;quot;, &amp;quot;report&amp;quot;, &amp;quot;Sunny and 72F in &amp;quot; + city);\r\n  }\r\n}\r\n\r\nLlmAgent agent = LlmAgent.builder()\r\n    .name(&amp;quot;weather_agent&amp;quot;)\r\n    .model(&amp;quot;gemini-3.8-flash&amp;quot;)\r\n    .instruction(&amp;quot;Answer questions about the weather in a city.&amp;quot;)\r\n    .tools(FunctionTool.create(WeatherTools.class, &amp;quot;getWeather&amp;quot;))\r\n    .build();&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafea08790&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;런타임 시 러너는 &lt;/span&gt;&lt;a href="https://github.com/ReactiveX/RxJava" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;RxJava&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;를 통해 에이전트 이벤트를 반응형으로 스트리밍합니다. Java용 ADK는 로컬 테스트 및 기존 JVM 앱을 위해 Maven Dev UI 플러그인을 제공하며, Spring AI와 LangChain4j용 퍼스트 파티 브리지도 함께 지원합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Kotlin&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://github.com/google/adk-kotlin/blob/main/examples/src/main/kotlin/com/google/adk/kt/examples/tools/FunctionToolDemoAgent.kt" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Kotlin용 ADK&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;는 빌드 시간 안전성을 무엇보다 중요하게 여깁니다. &lt;/span&gt;&lt;a href="https://kotlinlang.org/docs/ksp-overview.html" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Kotlin Symbol Processing(KSP)&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 컴파일러 플러그인은 빌드 시간에 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;@Tool&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 및 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;@Param&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 주석을 읽고 도구 스키마를 바이트 코드로 직접 내보냅니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;class WeatherTools {\r\n  @Tool(\r\n    name = &amp;quot;get_weather&amp;quot;,\r\n    description = &amp;quot;Retrieves the current weather report for a city.&amp;quot;,\r\n  )\r\n  suspend fun getWeather(\r\n    @Param(&amp;quot;The name of the city.&amp;quot;) city: String\r\n  ): Map&amp;lt;String, String&amp;gt; = mapOf(&amp;quot;status&amp;quot; to &amp;quot;success&amp;quot;, &amp;quot;report&amp;quot; to &amp;quot;Sunny and 72F in $city&amp;quot;)\r\n}\r\n\r\nval agent = LlmAgent(\r\n  model = Gemini(&amp;quot;gemini-3.8-flash&amp;quot;),\r\n  name = &amp;quot;weather_agent&amp;quot;,\r\n  instruction = Instruction(&amp;quot;Answer questions about the weather in a city.&amp;quot;),\r\n  tools = WeatherTools().generatedTools(),\r\n)&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafea08b90&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;도구 시그니처가 지원되지 않는 유형을 사용하거나 null을 허용하지 않는 파라미터에 기본값을 선언하는 경우, 프로덕션 환경에서 오류가 발생하기 전에 Gradle 빌드 단계에서 즉시 실패 처리됩니다. &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;.generatedTools()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 함수는 런타임 리플렉션을 사용하지 않으므로&lt;/span&gt;&lt;a href="https://developer.android.com/topic/performance/app-optimization/enable-app-optimization" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Android R8 축소&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 과정에서도 코드가 유실되지 않고 그대로 유지됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이러한 제로 리플렉션 설계 덕분에 Android 기기 로컬 환경에서 전체 에이전트 루프를 실행할 수 있습니다. Spring AI 브리지와 실험용 ADK 2.0 그래프 워크플로를 포함한 JVM 서버 지원을 제공합니다. 온디바이스 환경에서 Kotlin용 ADK는 도구 호출을 위해&lt;/span&gt;&lt;a href="https://ai.google.dev/edge/litert-lm" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;LiteRT-LM&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;과 통합되며, 텍스트 생성에는&lt;/span&gt;&lt;a href="https://developers.google.com/ml-kit/genai" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;ML Kit&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;(Gemini Nano)를 활용합니다. 또한 로컬 상태를 위한 Room 및 AppSearch, OS 수준 작업을 위한 Android AppFunctions와도 연동되며, 이 모든 기능은 네트워크 연결 없이도 작동합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;타협할 필요 없는 선택&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;ADK에서 5가지 네이티브 언어를 지원하므로, 조직 전체에서 하나의 런타임만 고집할 필요가 없습니다. ADK의 모든 버전은 MCP와 A2A를 지원하므로 시스템의 각 구성요소에 가장 적합한 언어를 선택해 사용할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Google의 ADK를 사용하여 에이전트를 빌드할 때 어떤 언어를 사용해 보셨나요? 현재 어떤 스택을 사용하고 계신지&lt;/span&gt;&lt;a href="https://x.com/kweinmeister" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;X&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;,&lt;/span&gt;&lt;a href="https://www.linkedin.com/in/karlweinmeister/" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;LinkedIn&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 또는&lt;/span&gt;&lt;a href="https://bsky.app/profile/kweinmeister.bsky.social" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Bluesky&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;를 통해 알려주세요.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;</description><pubDate>Wed, 21 Oct 2026 02:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/ko/topics/developers-practitioners/one-agent-development-kit-five-languages/</guid><category>Developers &amp; Practitioners</category><media:content height="540" url="https://storage.googleapis.com/gweb-cloudblog-publish/images/one-agent-development-kit-five-languages-her.max-600x600.jpg" width="540"></media:content><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>에이전트 개발 키트 하나로 5가지 언어 지원</title><description></description><image>https://storage.googleapis.com/gweb-cloudblog-publish/images/one-agent-development-kit-five-languages-her.max-600x600.jpg</image><site_name>Google</site_name><url>https://cloud.google.com/blog/ko/topics/developers-practitioners/one-agent-development-kit-five-languages/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Karl Weinmeister</name><title>Director, Developer Relations</title><department></department><company></company></author></item><item><title>MCP 도구 상자 Java SDK v1.0 발표: 엔터프라이즈를 위한 에이전트형 데이터 액세스</title><link>https://cloud.google.com/blog/ko/topics/developers-practitioners/announcing-mcp-toolbox-java-sdk-v10-agentic-data-access-for-the-enterprise/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p style="text-align: center; font-size: 0.8rem;"&gt;공동 저자:&lt;br/&gt;&lt;em&gt;&lt;span style="vertical-align: baseline;"&gt;&lt;strong&gt;Stenal Jolly&lt;/strong&gt;, Strategic Cloud Engineer, Google&lt;/span&gt;&lt;/em&gt;&lt;br/&gt;&lt;em&gt;&lt;span style="vertical-align: baseline;"&gt;&lt;strong&gt;Anubhav Dhawan&lt;/strong&gt;, Software Engineer, Google&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;*이 콘텐츠는 AI 번역 도구를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역에는 오류나 누락이 포함될 수 있습니다. 정확한 정보는 &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/topics/developers-practitioners/announcing-mcp-toolbox-java-sdk-v10-agentic-data-access-for-the-enterprise?e=0&amp;amp;hl=en"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;영문 원본&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;을 참고해 주시기 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;MCP 도구 상자 v1.0의 &lt;/span&gt;&lt;a href="https://medium.com/google-cloud/mcp-toolbox-v1-0-the-open-source-framework-for-secure-agentic-data-access-3c2199546ba8" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;획기적인 발표&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;에 이어 &lt;/span&gt;&lt;a href="https://github.com/googleapis/mcp-toolbox-sdk-java" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;MCP 도구 상자 Java SDK&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;가 공식적으로 버전 1.0에 도달했음을 발표합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이번 출시를 통해 세계에서 가장 널리 채택된 엔터프라이즈 생태계 중 하나에 최고 수준의 유형 안전성 에이전트 조정 기능이 도입되었습니다. Java의 성숙한 아키텍처는 엄격한 요구사항을 충족하도록 특별히 설계되어 프로덕션 환경에서 미션 크리티컬 AI 에이전트를 안전하게 확장하는 데 필요한 높은 동시 실행성, 엄격한 트랜잭션 무결성, 강력한 상태 관리 기능을 제공합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이 글에서는 Java SDK v1.0의 새로운 기능을 소개하고, 실제 사례를 살펴보며, 자체 구현을 시작하는 데 도움을 드립니다.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;MCP: 범용 인터페이스&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;오늘날 개발자들은 통합 병목 현상이라는 복합적인 문제에 직면해 있습니다. &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;N&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;개의 서로 다른 AI 모델과 &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;M&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;개의 엔터프라이즈 데이터 소스가 있다면 &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;N × M&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;개의 맞춤형 커스텀 연결을 빌드하고, 보안을 유지하고, 유지보수해야 합니다. 이러한 통합 레이어의 부재로 인해 엔지니어링팀은 단편화된 임시 파이프라인 웹에 의존할 수밖에 없습니다. 그 결과 에이전트형 아키텍처를 확장하는 것은 금세 지속 불가능해지며, 민감한 엔터프라이즈 데이터베이스가 심각한 보안 취약점, 단편화된 액세스 제어, 막대한 유지보수 오버헤드에 노출됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;모델 컨텍스트 프로토콜(MCP)은 파편화된 커스텀 통합 웹을 제거하여 핵심 문제를 해결합니다. AI 조정을 위한 'USB 타입-C'와 같은 범용 인터페이스 역할을 하는 MCP는 모델을 데이터 소스로부터 분리합니다. 개발자는 새로운 모델이나 데이터베이스마다 커스텀 또는 관리형 API 통합 코드를 작성하는 대신, 표준화된 단일 프로토콜에 맞게 코드를 작성합니다. 이 접근 방식을 사용하면 모든 MCP 호환 에이전트가 모든 MCP 지원 시스템과 안전하고 즉각적으로 상호작용할 수 있습니다. MCP 연결을 사용하면 개발자가 새로운 모델마다 맞춤형 통합을 빌드하지 않고도 에이전트를 실제 시스템에 연결할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;Java SDK v1.0의 새로운 기능: 프로덕션 워크로드를 위해 빌드&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;MCP 도구 상자 Java SDK의 &lt;/span&gt;&lt;a href="https://medium.com/google-cloud/announcing-the-mcp-toolbox-java-sdk-2ed3171bbaa0" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;공개 베타&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;를 발표했을 때 Google의 목표는 엔터프라이즈 Java 환경에 최고 수준의 유형 안전성 에이전트 조정 기능을 제공하는 것이었습니다. 그 이후로 Google은 개발자 및 오픈소스 참여자와 협력하여 API를 강화해 왔습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;v1.0 출시는 엔터프라이즈 워크로드에 적합한 안정적이고 하위 호환성이 보장되는 기반을 마련했습니다. v0.2 출시 이후 새롭게 추가되고 강화된 기능은 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;전송 계층 추상화 및 &lt;/strong&gt;&lt;code&gt;&lt;strong style="vertical-align: baseline;"&gt;HttpMcpTransport&lt;/strong&gt;&lt;/code&gt;:&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;HttpMcpTransport&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;와 함께 깔끔한 전송 계층 추상화를 도입했습니다. 이 기능은 핵심 프로토콜 로직을 기본 HTTP 클라이언트에서 분리하여 네트워크 구현을 쉽게 교체하거나 연결 풀링을 맞춤설정할 수 있도록 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;분리된 클라이언트 인증&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: 기업 보안 규정 준수를 간소화하기 위해 이제 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;CredentialsProvider&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 및 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;AuthMethods&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 클래스를 사용하여 클라이언트 인증이 분리됩니다. 사용자 인증 정보는 모든 요청에서 비동기식으로 해결되므로 팀에서 토큰을 동적으로 새로고침하거나 자체 토큰 소스를 연결할 수 있습니다(ADC를 통한 Google OIDC는 기본 제공되며, 그 외의 모든 것은 단일 메서드 인터페이스로 구현됨).&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;기본 파라미터 지원&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: 도구 파라미터의 기본값을 네이티브로 지원하여 프롬프트 페이로드 크기를 줄이고 에이전트 안정성을 향상합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;바인딩된 파라미터 가지치기&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: 서버 측에 바인딩된 민감한 파라미터(예: &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;tenant_id&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;)가 이제 노출된 도구 정의에서 자동으로 제거되므로 LLM이 이를 조작할 수 없습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;버전 선택 및 세션 추적&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: 표준화된 MCP 버전 선택과 강력한 세션 추적을 통해 일관된 프로토콜 협상과 대화 상태 수명 주기를 보장합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;HTTP 사용자 인증 정보 노출 경고&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: 사용자 인증 정보가 일반 텍스트 HTTP 연결을 통해 전송되려고 할 때 런타임에 경고하는 기본 제공 감지 기능이 추가되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;일반 클라이언트 헤더 맵&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: 커스텀 기업 프록시 헤더, 트랜잭션 추적 ID 또는 상관관계 메타데이터를 모든 발신 요청에 쉽게 연결할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;Java SDK v1.0 시작하기&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;MCP 도구 상자 Java SDK는 엔터프라이즈 팀이 원활하게 사용할 수 있도록 설계했습니다. &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;pom.xml&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;에 다음 종속 항목을 추가하기만 하면 됩니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;&amp;lt;dependency&amp;gt;\r\n    &amp;lt;groupId&amp;gt;com.google.cloud.mcp&amp;lt;/groupId&amp;gt;\r\n    &amp;lt;artifactId&amp;gt;mcp-toolbox-sdk-java&amp;lt;/artifactId&amp;gt;\r\n    &amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt;\r\n&amp;lt;/dependency&amp;gt;&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbaff572910&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;실제 사례: 자율 교통 컨시어지&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;AlloyDB와 결합된 Java SDK의 강력한 기능을 알아보기 위해 엔터프라이즈 사용 사례를 살펴보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;가상의 시외버스 네트워크인 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;Cymbal Transit&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;을 소개합니다. 고객은 여행 계획을 세우기 위해 중첩된 드롭다운 메뉴를 하나하나 클릭하고 싶어 하지 않습니다. 고객은 다음과 같이 질문합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;"내일 아침에 뉴욕에서 보스턴으로 가야 해. 내 골든 리트리버를 데려갈 수 있을까? 그렇다면 가장 빠른 항공편을 예약해 줘."&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이 질문에 답하려면 AI 에이전트가 비정형 데이터(반려동물 정책)와 정형 데이터(시간표 및 좌석 현황)를 상호 참조하고 트랜잭션(예약)을 실행해야 하며, 이 모든 과정에서 대화의 컨텍스트를 유지해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;기반: 네이티브 임베딩이 포함된 AlloyDB 스키마&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이 구현에는 AlloyDB를 사용했습니다. AlloyDB는 관계형 데이터와 고차원 벡터를 네이티브로 처리하기 때문입니다. 다음 문을 사용하여 데이터베이스 테이블을 설정하세요.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;quot;-- Enable necessary extensions for semantic search and embeddings\r\nCREATE EXTENSION IF NOT EXISTS vector;\r\nCREATE EXTENSION IF NOT EXISTS google_ml_integration;\r\n\r\n-- Table 1: Transit Policies (Unstructured Data for RAG)\r\nCREATE TABLE transit_policies (\r\n    policy_id SERIAL PRIMARY KEY,\r\n    category VARCHAR(50),\r\n    policy_text TEXT,\r\n    policy_embedding vector(768)\r\n);\r\n\r\n-- Table 2: Intercity Bus Schedules (Structured Data)\r\nCREATE TABLE bus_schedules (\r\n    trip_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),\r\n    origin_city VARCHAR(100),\r\n    destination_city VARCHAR(100),\r\n    departure_time TIMESTAMP,\r\n    arrival_time TIMESTAMP,\r\n    available_seats INT DEFAULT 50,\r\n    ticket_price DECIMAL(6,2)\r\n);\r\n\r\n-- Table 3: Booking Ledger (Transactional Action Data)\r\nCREATE TABLE bookings (\r\n    booking_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),\r\n    trip_id UUID REFERENCES bus_schedules(trip_id),\r\n    passenger_id VARCHAR(100),\r\n    status VARCHAR(20) DEFAULT &amp;#x27;CONFIRMED&amp;#x27;,\r\n    booking_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP\r\n);&amp;quot;), (&amp;#x27;language&amp;#x27;, &amp;#x27;lang-sql&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbaff571c10&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;인텐트를 SQL에 매핑:&lt;/strong&gt; &lt;code style="vertical-align: baseline;"&gt;tools.yaml&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;MCP 도구 상자를 사용하면 커스텀 도구를 안전하게 정의할 수 있습니다. LLM에 직접적인 데이터베이스 액세스 권한을 부여하는 대신 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;tools.yaml&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 구성을 통해 자연어 인텐트를 파라미터화된 안전한 쿼리에 직접 매핑합니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;kind: source\r\nname: alloydb\r\ntype: alloydb-postgres\r\nproject: my-project\r\nregion: us-central1\r\ncluster: my-cluster\r\ninstance: my-instance\r\ndatabase: postgres\r\n---\r\nkind: tool\r\nname: query-schedules\r\ntype: postgres-sql\r\nsource: alloydb\r\ndescription: Find available bus schedules between cities.\r\nparameters:\r\n  - name: origin\r\n    type: string\r\n    description: The departure city name.\r\n  - name: destination\r\n    type: string\r\n    description: The arrival city name.\r\n  - name: limit\r\n    type: integer\r\n    description: Maximum number of schedules to return.\r\n    default: 5\r\nstatement: |\r\n  SELECT CAST(trip_id AS TEXT) AS trip_id, departure_time, ticket_price\r\n  FROM bus_schedules\r\n  WHERE lower(origin_city) = lower($1) AND lower(destination_city) = lower($2)\r\n  ORDER BY departure_time ASC\r\n  LIMIT $3&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbaff5703d0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;전체 YAML 파일은 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;mcp-toolbox-sdk-java&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 저장소의 &lt;/span&gt;&lt;a href="https://github.com/googleapis/mcp-toolbox-sdk-java/blob/main/demo-applications/cymbal-transit/tools.yaml" rel="noopener" target="_blank"&gt;&lt;code style="text-decoration: underline; vertical-align: baseline;"&gt;tools.yaml&lt;/code&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 파일을 참고하세요.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Spring Boot의 스테이트풀(Stateful) 에이전트 아키텍처&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;엔터프라이즈 애플리케이션에서 대화형 AI를 빌드할 때 가장 어려운 부분은 상태 관리입니다. 사용자가 "몇 시에 예약할 수 있나요?"라고 물은 다음 "오전 8시로 예약해 주세요"라고 말하면 에이전트는 대화가 진행되는 동안 이전 컨텍스트를 기억해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Spring Boot 및 LangChain4j와 함께 Java MCP 도구 상자 SDK를 사용하면 HTTP 세션에서 대화 메모리를 깔끔하게 유지하고 에이전트를 두 개의 선언적 구성요소로 깔끔하게 분리할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;HTTP 세션을 통해 프롬프트, 도구, 대화 메모리를 관리하는 선언적 에이전트 인터페이스입니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;에이전트 요청을 MCP 도구 상자 서버로 직접 라우팅하는 도구 실행 서비스입니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;interface TransitAgent {\r\n    @SystemMessage({\r\n        &amp;quot;You are the Cymbal Transit Concierge.&amp;quot;,\r\n        &amp;quot;Use the \&amp;#x27;querySchedules\&amp;#x27; tool for finding schedules.&amp;quot;,\r\n        &amp;quot;Use \&amp;#x27;bookTicket\&amp;#x27; to execute transactions.&amp;quot;,\r\n        &amp;quot;Use \&amp;#x27;searchPolicies\&amp;#x27; to look up luggage and pet rules.&amp;quot;\r\n    })\r\n    String chat(@MemoryId String sessionId, @UserMessage String userMessage);\r\n}\r\n\r\n@Service\r\nclass TransitAgentTools {\r\n    // These methods automatically invoke our MCP Toolbox server!\r\n    @Tool(&amp;quot;Query specific schedules between an origin and destination city.&amp;quot;)\r\n    public String querySchedules(String origin, String destination) { ... }\r\n\r\n    @Tool(&amp;quot;Book a ticket for a passenger.&amp;quot;)\r\n    public String bookTicket(String tripId, String passengerName) { ... }\r\n\r\n    @Tool(&amp;quot;Search transit policies for luggage and pet rules.&amp;quot;)\r\n    public String searchPolicies(String query) { ... }\r\n}&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbaff5700d0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;code style="vertical-align: baseline;"&gt;@MemoryId&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 주석이 세션 추적을 어떻게 추상화하는지 확인하세요. Spring Boot는 대화 컨텍스트를 사용자의 HTTP 세션에 자동으로 연결합니다. 한편 LangChain4j와 MCP 도구 상자는 백그라운드에서 스키마 변환과 도구 라우팅을 처리하므로 수동으로 if/else 인텐트 파싱을 작성할 필요가 없습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;MCP 도구 상자 Java SDK를 LangChain4j와 결합하면 관심사를 명확하게 분리하고 상태를 손쉽게 관리할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;상용구 없는 세션 관리&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;@MemoryId String sessionId&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 파라미터는 대화 기록을 사용자의 HTTP 세션에 직접 바인딩합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;선언적 에이전트 계약&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;TransitAgent&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 인터페이스는 복잡한 프롬프트 템플릿 없이 모델의 페르소나와 시스템 요청 사항을 정의합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;유형 안전성 도구 실행&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;TransitAgentTools&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; Spring 서비스는 원격 MCP 데이터베이스 도구를 네이티브 Java 메서드로 래핑합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이 아키텍처는 에이전트의 모듈성을 유지합니다. 인터페이스에서 프롬프트 가이드를 미세 조정하고, 사용자 세션을 자동으로 관리하며, 긴밀한 결합 없이 MCP 도구 상자를 통해 안전한 데이터베이스 쿼리를 실행할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;전체적 그림 보기: Java v1.0에서 도구 나열, 호출, 실행&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이제 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;TransitAgentTools&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 인터페이스를 자세히 살펴보겠습니다. Spring &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;@Service&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;의 LangChain4j &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;@Tool&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 메서드 내에서 MCP 도구 상자 Java SDK는 Java 서비스 메서드를 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;tools.yaml&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 파일에 정의된 MCP 도구에 연결하는 까다로운 작업을 처리합니다. 몇 줄의 유형 안전성 코드로 새로운 v1.0 분리된 인증 및 헤더 추상화를 사용하여 클라이언트를 초기 설정할 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;// 1. Initialize the Client with Decoupled Auth and Custom Headers (v1.0)\r\nString serviceUrl = &amp;quot;https://toolbox-my-project-uc.a.run.app/mcp&amp;quot;;\r\nMcpToolboxClient mcpClient = McpToolboxClient.builder()\r\n    .baseUrl(serviceUrl)\r\n    .credentialsProvider(new GoogleCredentialsProvider(serviceUrl)) // Decoupled OIDC credentials\r\n    .headers(Map.of( // Generic client headers\r\n        &amp;quot;X-Correlation-ID&amp;quot;, &amp;quot;enterprise-session-abc123&amp;quot;,\r\n        &amp;quot;X-Client-Platform&amp;quot;, &amp;quot;Spring-Boot&amp;quot;\r\n    ))\r\n    .build();\r\n\r\n// 2. Listing Discoverable Tools\r\nmcpClient.listTools().thenAccept(tools -&amp;gt; {\r\n    System.out.println(&amp;quot;Successfully discovered &amp;quot; + tools.size() + &amp;quot; tools.&amp;quot;);\r\n});\r\n\r\n// 3. Invoking a Tool (Read-Only Data with Default Parameter Support)\r\n// &amp;quot;limit&amp;quot; is omitted: the SDK fills it from the default in the tool definition\r\nString schedules = mcpClient.loadTool(&amp;quot;query-schedules&amp;quot;)\r\n    .thenCompose(tool -&amp;gt; tool.execute(Map.of(\r\n        &amp;quot;origin&amp;quot;, &amp;quot;New York&amp;quot;,\r\n        &amp;quot;destination&amp;quot;, &amp;quot;Boston&amp;quot;)))\r\n    .join().text();\r\n\r\n// 4. Executing a Transactional Tool (Using Bound Parameters)\r\nAuthTokenGetter toolAuthGetter = () -&amp;gt; CompletableFuture.completedFuture(myIdToken);\r\n\r\nString bookingConfirmation = mcpClient.loadTool(&amp;quot;book-ticket&amp;quot;, Map.of(&amp;quot;google_auth&amp;quot;, toolAuthGetter))\r\n    // Bind the authenticated user context securely. bindParam returns a new immutable\r\n    // Tool, and the bound parameter is pruned from the definition exposed to the LLM!\r\n    .thenCompose(tool -&amp;gt; tool.bindParam(&amp;quot;passenger_name&amp;quot;, &amp;quot;Jane Doe&amp;quot;)\r\n        // Execute the mutable transaction\r\n        .execute(Map.of(&amp;quot;trip_id&amp;quot;, &amp;quot;123e4567-e89b-12d3-a456-426614174000&amp;quot;)))\r\n    .join().text();&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafef4de50&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;보안을 우선으로 하는 기본 설정: 인증 및 배포&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;AI 에이전트를 프로덕션으로 이전하려면 견고한 사용자 인증 정보 처리와 수요에 따라 확장가능한 인프라가 필요합니다. 다양한 환경에서 사용자 인증 정보 보안을 적용하고 Cloud Run에 독립적으로 배포하는 방법을 살펴보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;애플리케이션 기본 사용자 인증 정보(ADC) 및 안전&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code style="vertical-align: baseline;"&gt;GoogleCredentialsProvider&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 서비스를 사용하면 Java 앱이 애플리케이션 기본 사용자 인증 정보(ADC)를 통해 실행 환경(로컬 또는 Google Cloud)에서 보안 ID를 상속합니다. 하드 코딩된 키가 필요 없으며, OIDC 토큰이 잠재고객별로 생성되고 캐시됩니다. 또한 v1.0은 사용자 인증 정보가 일반 텍스트 HTTP 연결을 통해 전송되려고 할 때 이를 자동으로 감지하고 HTTPS로 전환하라는 런타임 경고를 내보내는 HTTP 사용자 인증 정보 노출 경고를 제공합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Cloud Run에 Fleet 배포&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;MCP 도구 상자와 Spring Boot 에이전트는 완전히 분리되어 있으므로 Google Cloud Run에서 독립적으로 확장되어 높은 동시 실행성 및 스테이트풀(Stateful) 대화 요구사항을 충족합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Cloud Run에서 도구 상자를 설정하고 구성하려면 오픈소스 데이터베이스용 MCP 도구 상자를 다운로드한 다음 &lt;/span&gt;&lt;a href="https://mcp-toolbox.dev/documentation/deploy-to/cloud-run" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;배포 가이드&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;를 따르세요.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;지금 시작하기&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;MCP 도구 상자 Java SDK v1.0을 사용하면 엔터프라이즈 Java팀이 Spring Boot 및 LangChain4j 에이전트를 도구 상자 서버에 연결하고, 이를 통해 AlloyDB 및 지원되는 다른 모든 데이터 소스에 연결할 수 있습니다. 도구 상자를 사용하면 인수가 JVM을 벗어나기 전에 도구 정의에 따라 검증되고, 인증이 분리되며, 모든 발신 요청에 커스텀 헤더가 연결됩니다. 다음 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;구현 단계를 참고하여 시작&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;하세요.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;1단계: 종속 항목 추가&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;SDK로 빌드를 시작하려면 Maven 프로젝트의 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;pom.xml&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 파일에 다음 종속 항목을 추가합니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;&amp;lt;dependency&amp;gt;\r\n        &amp;lt;groupId&amp;gt;com.google.cloud.mcp&amp;lt;/groupId&amp;gt;\r\n        &amp;lt;artifactId&amp;gt;mcp-toolbox-sdk-java&amp;lt;/artifactId&amp;gt;\r\n        &amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt;\r\n &amp;lt;!-- {x-version-update:mcp-toolbox-sdk-java:current} --&amp;gt;\r\n    &amp;lt;/dependency&amp;gt;&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafef4f9d0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;2단계: 리소스 및 데모 살펴보기&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li aria-level="2" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;GitHub 저장소&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: &lt;/span&gt;&lt;a href="https://github.com/googleapis/mcp-toolbox-sdk-java" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;데이터베이스용 MCP 도구 상자와 상호작용하기 위한 Java SDK&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="2" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;공식 문서&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: &lt;/span&gt;&lt;a href="https://mcp-toolbox.dev/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;데이터베이스용 MCP 도구 상자&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;데모 애플리케이션&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: MCP 도구 상자용 Java SDK v1.0의 최신 버전을 체험해 보려면 샘플 애플리케이션인 &lt;/span&gt;&lt;a href="https://github.com/googleapis/mcp-toolbox-sdk-java/tree/main/demo-applications/cymbal-transit" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Cymbal Transit 프로젝트&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;를 사용해 보세요.&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style="vertical-align: baseline;"&gt;Gradle 구현&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;팀에서 Maven 대신 Gradle을 사용하는 경우 이 종속 항목을 변환해야 합니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;quot;implementation &amp;#x27;com.google.cloud.mcp:mcp-toolbox-sdk-java:1.0.0&amp;#x27;&amp;quot;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafef4f810&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h4&gt;&lt;span style="vertical-align: baseline;"&gt;자동 버전 추적&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이 설정을 자동화된 내부 저장소에 복사하는 경우 XML 주석 &lt;code&gt;&amp;lt;!-- {x-version-update…} --&amp;gt;&lt;/code&gt;를 그대로 유지합니다. 이는 출시 관리자의 배포 스크립트에서 버전을 자동으로 올리는 데 필요합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이제 안정적인 MCP 도구 상자 Java SDK를 사용하여 최신 에이전트형 도구와 서버를 엔터프라이즈 Java 애플리케이션에 통합할 수 있습니다. 지금 바로 시작해 보세요.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;</description><pubDate>Wed, 14 Oct 2026 13:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/ko/topics/developers-practitioners/announcing-mcp-toolbox-java-sdk-v10-agentic-data-access-for-the-enterprise/</guid><category>Developers &amp; Practitioners</category><media:content height="540" url="https://storage.googleapis.com/gweb-cloudblog-publish/images/announcing-mcp-toolbox-java-sdk-v10-agentic-.max-600x600.png" width="540"></media:content><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>MCP 도구 상자 Java SDK v1.0 발표: 엔터프라이즈를 위한 에이전트형 데이터 액세스</title><description></description><image>https://storage.googleapis.com/gweb-cloudblog-publish/images/announcing-mcp-toolbox-java-sdk-v10-agentic-.max-600x600.png</image><site_name>Google</site_name><url>https://cloud.google.com/blog/ko/topics/developers-practitioners/announcing-mcp-toolbox-java-sdk-v10-agentic-data-access-for-the-enterprise/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Abirami Sukumaran</name><title>Staff Developer Advocate, Google</title><department></department><company></company></author></item><item><title>AI 추론 모델 서빙을 위한 네트워킹 - GKE 전용 및 기타 모든 백엔드</title><link>https://cloud.google.com/blog/ko/topics/developers-practitioners/networking-for-ai-inference-model-serving-gke-only-and-for-all-other-backends/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;*이 콘텐츠는 AI 번역 도구를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역에는 오류나 누락이 포함될 수 있습니다. 정확한 정보는 &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/topics/developers-practitioners/networking-for-ai-inference-model-serving-gke-only-and-for-all-other-backends?e=0&amp;amp;hl=en"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;영문 원본&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;을 참고해 주시기 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;많은 기업과 개별 개발자는 여러 AI 추론 모델을 실행합니다. 적절한 아키텍처를 구축하면 모델 호출 방식을 간소화하면서도 중앙 집중식 거버넌스를 제공할 수 있습니다. 이 게시물에서는 AI 추론 모델 서빙 네트워킹에 중점을 둔 두 가지 참조 아키텍처를 살펴봅니다. 하나는&lt;/span&gt;&lt;a href="https://docs.cloud.google.com/kubernetes-engine/docs/concepts/kubernetes-engine-overview"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Google Kubernetes Engine(GKE)&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;용이고, 다른 하나는 그 외의 모든 백엔드 유형용입니다. 나중에 살펴볼 참조 아키텍처 간의 공통점을 먼저 살펴보겠습니다. 그런 다음 GKE 백엔드 아키텍처의 고유한 구성요소를 살펴보고, 마지막에는 모든 백엔드 유형의 아키텍처 요소를 살펴봅니다.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;진입점&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;추론 호출을 위한 프런트엔드 역할을 하는 안정적이고 안전하며 신뢰할 수 있는 진입점을 통해모델 배포를 노출할 수 있습니다. 이 진입점은 정책, 보안, 로직을 적용할 수 있는 제어 영역 역할도 합니다. Cloud Load Balancer와 추론 게이트웨이 모두 진입점 기능을 제공합니다. 이러한 유형의 엔드포인트를 사용하면 TLS를 통해 보안 연결을 종료하고, API 관리 구성요소와 통합하며, 서비스 확장 프로그램을 통해 기능을 확장하고, Model Armor의 기능을 이용해 보안을 강화할 수 있습니다.  &lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;설계에 포함되는 일반적인 서비스 &lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;두 참조 설계 모두 다음 서비스를 사용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;a href="https://docs.cloud.google.com/vpc/docs/private-service-connect#endpoints"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;Private Service Connect 추론 엔드포인트&lt;/strong&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;: 소비자 Virtual Private Cloud(VPC) 네트워크 내에 진입점을 고정합니다. 트래픽이 비공개 내부&lt;/span&gt;&lt;a href="https://docs.cloud.google.com/vpc/docs/subnets#valid-ranges"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;IP 주소&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;로 전송되기 때문에 추론 호출이 비공개 네트워크를 벗어나지 않습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;a href="https://docs.cloud.google.com/apigee/docs/api-platform/get-started/what-apigee"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;Apigee API 관리&lt;/strong&gt;&lt;/a&gt;&lt;strong style="vertical-align: baseline;"&gt;(선택사항)&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: Apigee 확장 프로그램 프로세서 콜아웃을 통해 통합되어, 요청이 컴퓨팅 리소스에 도달하기 전에 클라이언트 본인 인증, 비율 제한과 할당량 적용을 처리합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;a href="https://docs.cloud.google.com/model-armor/overview"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;Model Armor&lt;/strong&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;: 인라인 AI 안전 체크포인트 역할을 하여, 프롬프트와 완료된 출력을 검사해 프롬프트 인젝션 및 민감한 정보 유출 여부를 확인합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;GKE에서만 서빙되는 설계 패턴&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이 섹션에서는 GKE 전용 백엔드 설계를 중점적으로 다룹니다.&lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt; &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;전체 엔드 투 엔드 개념을 이해하려면 아키텍처 문서인 &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/architecture/networking-for-ai-inference-gke"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;GKE에서의 AI 추론 모델 서빙을 위한 네트워킹&lt;/strong&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 전문을 읽어보세요. 설계 패턴은 다음 다이어그램을 기반으로 합니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/networking-ai-inference-model-serving-gke-.max-1000x1000.png"
        
          alt="networking-ai-inference-model-serving-gke-architecture"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;GKE 설계에서는 이전 섹션에서 확인한 공통 서비스 외에 다음 구성요소도 사용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;a href="https://docs.cloud.google.com/kubernetes-engine/docs/concepts/about-gke-inference-gateway"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;GKE Inference Gateway&lt;/strong&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;: 내부 애플리케이션 부하 분산기(&lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;gke-l7-rilb&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;)로 배포됩니다. 이 기능은 수신 요청 페이로드를 파싱하고, HTTPRoute 규칙을 평가하며, 쿼리를 적절한 모델 서빙 대상으로 유도하는 특수한 인그레스 엔진 역할을 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;추론 풀&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: 동일한 모델의 복제본을 포함하는 논리적 그룹입니다. 게이트웨이가 프롬프트를 수신하면 HTTPRoute 규칙을 평가하여 모델 식별자를 기반으로 적절한 추론 풀을 선택합니다. 풀에는 초기 크기가 있으며, 동적으로 자동 확장되도록 구성할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;모델 복제본 세트&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: 단일 노드 또는 다중 노드 GPU나 TPU 노드 풀에 배포된 개별 모델 복제본(추론 서버 인스턴스)입니다. 복제본 세트는 이러한 모델 복제본의 균일한 그룹을 나타냅니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;트래픽 흐름 GKE 예시&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이 GKE 기반 아키텍처를 사용하여 백엔드 모델을 호출하는 클라이언트 애플리케이션은 다음과 같은 흐름을 따르게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;인그레스&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: 소비자 VPC의 클라이언트 애플리케이션이 로컬 Private Service Connect 엔드포인트에 OpenAI 호환 API 호출을 실행하여, 리전 내부 애플리케이션 부하 분산기를 통해 GKE Inference Gateway로 직접 라우팅합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;페이로드 검사&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: 게이트웨이가 요청 본문에 지정된 대상 모델 파라미터를 읽고 이를 HTTP 헤더에 추가합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;컨트롤 플레인 검증&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: Apigee를 사용하는 경우 이 기능이 클라이언트 사용자 인증 정보와 할당량을 확인합니다. Model Armor는 프롬프트에서 정책 위반 또는 데이터 유출 여부를 검사합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;백엔드 선택&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: 게이트웨이는 HTTPRoute 매핑을 평가하여 대상 풀을 식별하고, 공유 접두사 캐시 컨텍스트를 일치시키고, 실시간 Prometheus 데이터를 기반으로 부하가 가장 낮은 GPU 또는 TPU 복제본으로 라우팅합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;이그레스&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: 복제본이 추론 워크로드를 실행합니다. 출력 토큰은 Model Armor를 통과하여 최종 응답 검증을 거친 후 비공개 연결을 통해 다시 스트리밍됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;모든 백엔드에서 서빙되는 설계 패턴&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이 섹션에서는 추론에 사용할 수 있는 여러 백엔드 유형을 중점적으로 다루며, 다음 다이어그램을 통해 아키텍처 개요를 제공합니다.&lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt; &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;전체 엔드 투 엔드 개념을 이해하려면 아키텍처 문서인 &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/architecture/networking-for-ai-inference"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;모든 백엔드에서의 AI 추론 모델 서빙을 위한 네트워킹&lt;/strong&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 전문을 읽어보세요.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/networking-ai-inference-model-serving-all-.max-1000x1000.png"
        
          alt="networking-ai-inference-model-serving-all-backends"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;GKE, Cloud Run, Agent Platform, 온프레미스 데이터 센터 또는 외부 클라우드 같은 혼합 환경에 걸쳐 있는 아키텍처에는 다음과 같은 추가 구성요소가 사용됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;a href="https://docs.cloud.google.com/load-balancing/docs/l7-internal#load-balancer-mode"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;리전 내부 애플리케이션 부하 분산기&lt;/strong&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;: 라우팅 로직, SSL 종료, Service Extensions 콜아웃을 관리하는 중앙 레이어 7 라우팅 프록시 역할을 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;a href="https://github.com/llm-d/llm-d-inference-payload-processor" rel="noopener" target="_blank"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;추론 페이로드 프로세서&lt;/strong&gt;&lt;/a&gt;&lt;strong style="vertical-align: baseline;"&gt;(Service Extensions)&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: GKE Inference Gateway에서 사용하는 본문 기반 라우팅과 유사하지만, 애플리케이션 부하 분산기에서 이 기능을 사용 설정하려면 서비스 확장 프로그램이 필요합니다.&lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt; &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;가벼운 Cloud Run 콜아웃이 수신되는 OpenAI API 요청의 JSON 본문을 검사하고, 대상 모델 식별자를 추출하고, X-Gateway-Model-Name 헤더를 작성하여 URL 맵 라우팅을 수행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;a href="https://docs.cloud.google.com/load-balancing/docs/negs"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;네트워크 엔드포인트 그룹(NEG)&lt;/strong&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;: 삽입된 모델 헤더를 기반으로 이기종 백엔드에 대한 유연한 라우팅을 제공합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;모든 백엔드 트래픽 흐름 예시&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이 아키텍처를 사용하여 백엔드 모델을 호출하는 클라이언트 애플리케이션은 다음과 같은 흐름을 따르게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;비공개 인그레스&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: 클라이언트 애플리케이션은 비공개 IP 주소 공간을 통해 Private Service Connect 엔드포인트를 타겟팅합니다. 리전 내부 애플리케이션 부하 분산기가 요청을 수신합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;모델 이름 추출&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: 부하 분산기가 페이로드를 Cloud Run 본문 기반 라우터 콜아웃으로 전송하면 콜아웃이 JSON 페이로드를 검사하고 X-Gateway-Model-Name 헤더를 삽입합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;정책 및 안전 시행&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: 요청이 Apigee로 전달되어 신원 및 할당량 검증을 거친 후, Model Armor로 전달되어 민감한 정보를 삭제하고 악성 프롬프트를 차단합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;NEG 라우팅&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: 부하 분산기 URL 맵이 모델 헤더를 검사한 후 일치하는 백엔드 NEG(Agent Platform, GKE, Cloud Run, 하이브리드 또는 인터넷)로 요청을 전달합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;비공개 전송&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: 대상 백엔드가 모델 프롬프트를 실행하면 Model Armor가 완성된 결과물을 검사하고, 검사 결과가 인그레스 경로를 통해 비공개로 반환됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/networking-ai-inference-model-serving-flow.max-1000x1000.png"
        
          alt="networking-ai-inference-model-serving-flow"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;다음 단계&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Google Cloud에서 AI 워크로드를 빌드하는 방법을 자세히 알아보세요.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;문서 세트:&lt;/span&gt;&lt;a href="https://docs.cloud.google.com/architecture/agentic-ai-overview"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;에이전트 AI 아키텍처 가이드&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;아키텍처 센터:&lt;/span&gt;&lt;a href="https://docs.cloud.google.com/architecture/multi-agent-private-networking-patterns"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Google Cloud의 멀티 에이전트 비공개 네트워킹 패턴&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;문서:&lt;/span&gt;&lt;a href="https://docs.cloud.google.com/gemini-enterprise-agent-platform/machine-learning/general/netsec-overview"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Gemini Enterprise Agent Platform 네트워킹 액세스 개요&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;질문이 있거나, 자세한 내용이 궁금하거나, 의견을 공유하고 싶으신가요? &lt;/span&gt;&lt;a href="https://www.linkedin.com/in/ammett/" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Linkedin&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;을 통해 Google Cloud에 문의하세요. &lt;/span&gt;&lt;/p&gt;&lt;/div&gt;</description><pubDate>Tue, 13 Oct 2026 19:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/ko/topics/developers-practitioners/networking-for-ai-inference-model-serving-gke-only-and-for-all-other-backends/</guid><category>Networking</category><category>Developers &amp; Practitioners</category><media:content height="540" url="https://storage.googleapis.com/gweb-cloudblog-publish/images/networking-ai-inference-model-serving-hero.max-600x600.png" width="540"></media:content><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>AI 추론 모델 서빙을 위한 네트워킹 - GKE 전용 및 기타 모든 백엔드</title><description></description><image>https://storage.googleapis.com/gweb-cloudblog-publish/images/networking-ai-inference-model-serving-hero.max-600x600.png</image><site_name>Google</site_name><url>https://cloud.google.com/blog/ko/topics/developers-practitioners/networking-for-ai-inference-model-serving-gke-only-and-for-all-other-backends/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Ammett Williams</name><title>Developer Relations Engineer</title><department></department><company></company></author></item><item><title>GKE CPU 시작 부스트: 과도한 프로비저닝 없는 앱 시작 가속화</title><link>https://cloud.google.com/blog/ko/products/containers-kubernetes/gke-cpu-startup-boost-faster-pod-starts-lower-costs/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;*이 콘텐츠는 AI 번역 도구를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역에는 오류나 누락이 포함될 수 있습니다. 정확한 정보는 &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/products/containers-kubernetes/gke-cpu-startup-boost-faster-pod-starts-lower-costs?e=48754805&amp;amp;hl=en"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;영문 원본&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;을 참고해 주시기 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;갑작스러운 트래픽 급증에 대응하여 마이크로서비스를 시작하거나, 새로운 소프트웨어 버전을 배포하거나, 애플리케이션 복제본을 확장하는 등의 경우, Google Kubernetes Engine(GKE)에서 실행 중인 애플리케이션에 신속하고 반응성이 뛰어난 사용자 환경을 제공하려면 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;포드 시작 시간&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;이 중요합니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-paragraph_with_image"&gt;&lt;div class="article-module h-c-page"&gt;
  &lt;div class="h-c-grid uni-paragraph-wrap"&gt;
    &lt;div class="uni-paragraph
      h-c-grid__col h-c-grid__col--8 h-c-grid__col-m--6 h-c-grid__col-l--6
      h-c-grid__col--offset-2 h-c-grid__col-m--offset-3 h-c-grid__col-l--offset-3"&gt;

      






  

    &lt;figure class="article-image--wrap-small
      
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/1_mhC0eeP.max-1000x1000.png"
        
          alt="1"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  





      &lt;p data-block-key="0udcy"&gt;하지만 플랫폼 엔지니어와 개발자는 애플리케이션이 안정 상태에서 작동할 때보다 시작 시 훨씬 더 많은 CPU 성능을 요구할 때가 많다는 고질적인 딜레마에 직면해 있습니다. 안정 상태의 일반적인 사용량에 맞춰 CPU 요청량을 설정하면 실행 시 CPU 제한이 발생하여 콜드 스타트가 느려지고 준비 여부 프로브에서 제한 시간 초과가 발생할 수 있습니다. 반대로, 단기적인 시작 버스트를 충족하기 위해 기본 CPU 요청을 과도하게 프로비저닝하면 귀중한 컴퓨팅 리소스가 낭비되고 인프라 비용이 증가합니다.&lt;/p&gt;&lt;p data-block-key="5vv18"&gt;오늘 GKE용&lt;a href="https://docs.cloud.google.com/kubernetes-engine/docs/how-to/boost-application-startup"&gt; &lt;b&gt;CPU 시작 부스트&lt;/b&gt;&lt;/a&gt; 프리뷰 버전을 발표하게 되어 기쁩니다. CPU 시작 부스트는 GKE의 수직형 포드 자동 확장 처리(VPA)에 바로 통합되어 초기 설정 중에는 컨테이너의 CPU 할당량을 동적으로 높이고 애플리케이션이 준비되면 기준이 되는 안정 상태 수준으로 원활하게 다시 축소합니다. &lt;b&gt;이 모든 과정에서 컨테이너를 다시 시작할 필요는 없습니다.&lt;/b&gt;&lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;현대화된 애플리케이션 부팅 시 추가 CPU가 필요한 이유&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;새 컨테이너가 시작되면 사용자 요청을 처리하기 전에 리소스 집약적인 초기 설정 작업을 수행하는 경우가 있습니다. 사용하는 기술 스택에 따라 다르지만 다음과 같은 시작 워크로드에는 상당한 CPU 주기가 필요합니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Java JVM 애플리케이션&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: Spring Boot와 같은 프레임워크는 클래스 로드, 클래스 경로 스캔, 종속 항목 삽입 컨테이너 인스턴스화, 적시(Just-In-Time) 컴파일 실행을 위해 높은 CPU 버스트 용량이 필요합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Node.js 서버&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: 앱은 초기 실행 시 JavaScript 파일을 파싱하고 복잡한 모듈 종속 항목 트리(&lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;require&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;/&lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;import&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;)를 빌드하며 V8 엔진 최적화 및 JIT 컴파일 패스를 실행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Python 및 AI/ML 마이크로서비스&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: 이러한 서비스는 초기 주기를 사용하여 PyTorch, NumPy, LangChain과 같은 대규모 라이브러리를 가져오고, &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;.pyc&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 바이트 코드를 컴파일하고, ORM 데이터베이스 스키마를 설정하고, 캐시 구조를 사전 로드합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;CPU 요청 규모를 안정 상태의 성능에만 맞춰 설정하면 이러한 초기 설정 워크로드가 시작 시 CPU 제한을 겪게 되어 준비 여부 프로브가 지연됩니다. 느린 콜드 스타트를 방지하기 위해 팀에서는 CPU 요청을 과도하게 프로비저닝하는 경우가 많습니다. 하지만 애플리케이션이 안정화된 후에는 추가 CPU 리소스가 유휴 상태가 되어 아무런 가치도 창출하지 못한 채 클라우드 비용만 증가시킵니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-paragraph_with_image"&gt;&lt;div class="article-module h-c-page"&gt;
  &lt;div class="h-c-grid uni-paragraph-wrap"&gt;
    &lt;div class="uni-paragraph
      h-c-grid__col h-c-grid__col--8 h-c-grid__col-m--6 h-c-grid__col-l--6
      h-c-grid__col--offset-2 h-c-grid__col-m--offset-3 h-c-grid__col-l--offset-3"&gt;

      






  

    &lt;figure class="article-image--wrap-small
      
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/2_zZExLw4.max-1000x1000.jpg"
        
          alt="2"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  





      &lt;h3 data-block-key="0udcy"&gt;&lt;b&gt;CPU 시작 부스트의 작동 방식&lt;/b&gt;&lt;/h3&gt;&lt;p data-block-key="3ph6k"&gt;CPU 시작 부스트는 워크로드 시작 중에 일시적으로 vCPU를 '부스트'하고 초기 설정이 완료되면 자동으로 기본 수준으로 되돌려 이 문제를 해결합니다.&lt;/p&gt;&lt;p data-block-key="fvv3n"&gt;주요 이점:&lt;/p&gt;&lt;ul&gt;&lt;li data-block-key="9mat4"&gt;&lt;b&gt;콜드 스타트 속도 향상&lt;/b&gt;: 애플리케이션 초기 설정 시간을 최대 &lt;b&gt;2배&lt;/b&gt; 단축하여 예상치 못한 트래픽 급증 시 자동 확장 반응 속도를 높입니다.&lt;/li&gt;&lt;li data-block-key="e3e9q"&gt;&lt;b&gt;클라우드 지출 최적화&lt;/b&gt;: 시작 시에만 필요해 유휴 상태에 있는 용량에 비용을 지불하는 대신 실제 런타임 니즈에 맞게 안정 상태의 CPU 요청을 적정 규모로 설정할 수 있습니다.&lt;/li&gt;&lt;li data-block-key="c0i46"&gt;&lt;b&gt;포드 재시작 불필요&lt;/b&gt;: 실행 중인 컨테이너 내에서 리소스 크기가 동적으로 조정됩니다.&lt;/li&gt;&lt;li data-block-key="3je7j"&gt;&lt;b&gt;유연한 정책 제어&lt;/b&gt;: 간단한 포드 수준의 배수(예: 시작 시 CPU 2배)를 적용하거나 복잡한 멀티 컨테이너 포드에 컨테이너별로 세분화된 규칙을 정의할 수 있습니다.&lt;/li&gt;&lt;/ul&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;내부 작동 방식: Kubernetes 인플레이스 포드 크기 조절&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;기존에는 포드의 리소스 요청이나 한도를 변경하려면 포드를 삭제하고 다시 생성해야 했습니다. 이 과정에서 컨테이너가 다시 시작되고 캐시가 무효화되며 노드 재스케줄링에 따른 오버헤드가 발생했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이 문제를 해결하기 위해 CPU 시작 부스트는 Kubernetes&lt;/span&gt;&lt;a href="https://kubernetes.io/docs/tasks/configure-pod-container/resize-container-resources/" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;인플레이스 포드 크기 조절(IPPR)&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;을 기반으로 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/1287-in-place-pod-resize" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;KEP-1287&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;을 통해 추적되는 IPPR은 동적인 인플레이스 리소스 변환 기능을 도입했습니다. IPPR은 Kubernetes 1.27에서 알파 버전으로 처음 도입되고 v1.33에서 베타로 승격되었으며 v1.35에서 정식 버전(GA)으로 전환되었습니다. 이 기능을 사용하면 Kubernetes 컨트롤 플레인과 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;kubelet&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;이 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;컨테이너 프로세스를 다시 시작하지 않고도&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 실행 중인 포드의 컨테이너 CPU와 메모리 요청을 업데이트할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;GKE는 VPA 내에서 IPPR을 활용하여 포드 승인 시 시작 CPU 부스트를 적용하고 준비 후에는 원활하게 단계적으로 축소합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;CPU 시작 부스트 작동 방식(포드 수명 주기 개요)&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;CPU 시작 부스트는 세 가지 단계로 작동합니다.&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;승인 단계&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: 포드를 배포하면 VPA 승인 웹훅이 생성 요청을 가로챕니다. 정책(예: 2배수 또는 +2 vCPU)에 따라 상향 조정된 CPU 요청을 계산하고 추적용 주석과 함께 이 상향된 CPU 요청을 포드 사양에 삽입합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;시작 단계&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: 부스트된 CPU 할당량으로 포드가 예약되고 초기 설정됩니다. 애플리케이션은 CPU 제한 없이 최대 속도로 클래스 로딩, JIT 컴파일, 모듈 파싱을 완료합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;부스트 해제 단계&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: 포드의 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;readinessProbe&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;를 통과하고 설정된 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;durationSeconds&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 대기 시간이 경과되는 즉시 VPA 업데이터가 인플레이스 크기 조절 요청을 실행합니다. CPU 요청이 기본 수준으로 다시 낮아지며 그와 동시에 컨테이너는 중단 없이 계속 실행됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;기본 요건 및 가용성&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;CPU 시작 부스트는 현재 GKE에서 프리뷰 버전으로 제공됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;GKE 버전&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: Standard 및 Autopilot 클러스터의 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;1.36.0-gke.4447000&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 버전 이상&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;클러스터 모드&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: GKE Autopilot에서 기본적으로 사용 설정됩니다(VPA는 기본적으로 활성화됨). GKE Standard에서는 수직형 포드 자동 확장(VPA)이 사용 설정되어 있는지만 확인하면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;워크로드 지원&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: Deployments 및 StatefulSet를 비롯한 표준 Kubernetes 컨트롤러에서 작동합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;시작하기: CPU 시작 부스트 구성&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;CPU 시작 부스트를 구성하려면 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;VerticalPodAutoscaler&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 매니페스트에 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;startupBoost&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 섹션을 추가하기만 하면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style="vertical-align: baseline;"&gt;예시 1: 고정된 안정 상태를 사용하는 포드 수준 부스트(&lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;updateMode: "Off"&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;안정 상태 CPU 요청은 매니페스트 정의에 고정한 상태로 VPA를 시작 부스트 용도로만 사용하려면 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;updateMode&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;를 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;"Off"&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;로 설정하세요.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;apiVersion: &amp;quot;autoscaling.k8s.io/v1&amp;quot;\r\nkind: VerticalPodAutoscaler\r\nmetadata:\r\n  name: java-app-startup-boost\r\n  namespace: default\r\nspec:\r\n  targetRef:\r\n    apiVersion: &amp;quot;apps/v1&amp;quot;\r\n    kind: Deployment\r\n    name: java-app\r\n  updatePolicy:\r\n    updateMode: &amp;quot;Off&amp;quot;\r\n  startupBoost:\r\n    cpu:\r\n      type: &amp;quot;Factor&amp;quot;\r\n      factor: 2\r\n      durationSeconds: 10&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafea7f5d0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;이 예시에서 GKE는 시작 중에 컨테이너의 CPU 요청을 2배 늘리고, 준비 여부 프로브 통과 후 10초간 부스트된 할당량을 유지한 다음 기본 수준으로 다시 줄입니다.&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;strong style="vertical-align: baseline;"&gt;예시 2: 시작 부스트와 지속적인 VPA 자동 확장의 결합&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;GKE가 시작 중에 CPU를 부스트하고 시작 후에도 안정 상태의 리소스를 지속적으로 최적화하도록 하려면 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;updateMode&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;를 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;"InPlaceOrRecreate"&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;로 설정하세요.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;apiVersion: &amp;quot;autoscaling.k8s.io/v1&amp;quot;\r\nkind: VerticalPodAutoscaler\r\nmetadata:\r\n  name: nodejs-app-vpa\r\n  namespace: default\r\nspec:\r\n  targetRef:\r\n    apiVersion: &amp;quot;apps/v1&amp;quot;\r\n    kind: Deployment\r\n    name: nodejs-service\r\n  updatePolicy:\r\n    updateMode: &amp;quot;InPlaceOrRecreate&amp;quot;\r\n  startupBoost:\r\n    cpu:\r\n      type: &amp;quot;Factor&amp;quot;\r\n      factor: 3\r\n      durationSeconds: 15&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafea7d290&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h4&gt;&lt;span style="vertical-align: baseline;"&gt;예시 3: 세분화된 컨테이너 수준 부스트&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;부팅 시 추가 CPU가 필요하지 않은 사이드카(예: Logging 에이전트 또는 서비스 메시 프록시)를 실행하는 포드의 경우 특정 앱 컨테이너를 타겟팅할 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;apiVersion: &amp;quot;autoscaling.k8s.io/v1&amp;quot;\r\nkind: VerticalPodAutoscaler\r\nmetadata:\r\n  name: app-container-boost\r\nspec:\r\n  targetRef:\r\n    apiVersion: &amp;quot;apps/v1&amp;quot;\r\n    kind: Deployment\r\n    name: API-gateway\r\n  updatePolicy:\r\n    updateMode: &amp;quot;Off&amp;quot;\r\n  resourcePolicy:\r\n    containerPolicies:\r\n    - containerName: &amp;quot;web-app&amp;quot;\r\n      mode: &amp;quot;Off&amp;quot;\r\n      startupBoost:\r\n        cpu:\r\n          type: &amp;quot;Quantity&amp;quot;\r\n          quantity: &amp;quot;2&amp;quot;\r\n          durationSeconds: 5&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafe88f8d0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;클러스터에서 시작 부스트 확인&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code style="vertical-align: baseline;"&gt;kubectl&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;을 사용하여 GKE가 시작 부스트를 적용한 후 다시 축소했는지 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;1. &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;포드 주석 검사&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;vpaCpuStartupBoost&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 추적 주석을 확인합니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;kubectl get pod &amp;lt;POD_NAME&amp;gt; -o yaml&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafe88d890&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;기본 CPU 요청과 부스트된 CPU 요청을 나타내는 주석을 찾습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;2. &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;인플레이스 크기 조절 이벤트 모니터링&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: GKE가 준비 상태가 된 후 CPU 요청을 다시 기본 수준으로 축소했는지 확인합니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;kubectl get events --field-selector reason=InPlaceResizedByVPA&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbb0cda2e10&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;프로덕션 워크로드 권장사항&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;수평형 포드 자동 확장 처리(HPA)와 함께 사용&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: CPU 시작 부스트와 함께 HPA를 사용하는 경우 안정적인 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;readinessProbe&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;를 정의하고 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;durationSeconds&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;를 짧게 유지하세요(예: &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;0초&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;~&lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;10초&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;). 이렇게 하면 HPA가 초기 설정 중 발생하는 CPU 급증을 안정 상태의 높은 부하로 오인하는 것을 방지할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;a href="https://docs.cloud.google.com/kubernetes-engine/docs/how-to/configure-capacity-buffer"&gt;&lt;strong style="vertical-align: baseline;"&gt; &lt;/strong&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;GKE Capacity Buffers API&lt;/strong&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;로 트래픽 급증 처리: 대규모 환경에서 시작에 따른 리소스 부담을 줄이면 더 적은 수의 노드에서 더 높은 워크로드 밀도를 달성하여 전반적인 활용률을 높일 수 있습니다. 엄격한 SLO를 유지하면서 운영 오버헤드를 최소화하고 갑작스러운 트래픽 급증을 흡수하려면 GKE capacity buffers API 도입을 고려해 보세요. &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;GKE Autopilot 리소스 비율&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: GKE Autopilot에서는 포드가 유효한 CPU 대 메모리 비율을 유지해야 합니다. 기본 메모리 할당량이 시작 시 부스트된 CPU 비율을 수용할 수 있는지 확인하세요.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;지금 시작하기&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;CPU 시작 부스트를 사용하는 GKE 사용자는 Java, Node.js, Python과 같은 CPU 집약적인 워크로드에서 매우 빠른 콜드 스타트를 구현하는 동시에 리소스 효율성을 극대화하고 클라우드 비용을 절감할 수 있다는 두 가지 이점을 모두 누릴 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;GKE 워크로드의 시작 속도를 높일 준비가 되셨나요?&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;a href="https://cloud.google.com/kubernetes-engine/docs/how-to/cpu-startup-boost"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;GKE CPU 시작 부스트 문서&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;를 살펴보세요.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;a href="https://cloud.google.com/kubernetes-engine/docs/how-to/vertical-pod-autoscaling"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;GKE의 수직형 포드 자동 확장&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;에 대해 자세히 알아보세요.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;GKE &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;1.36.0-gke.4447000&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 이상을 실행하는 GKE Standard 또는 Autopilot 클러스터에서 CPU 시작 부스트를 사용해 보세요.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description><pubDate>Tue, 13 Oct 2026 02:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/ko/products/containers-kubernetes/gke-cpu-startup-boost-faster-pod-starts-lower-costs/</guid><category>Compute</category><category>GKE</category><category>Developers &amp; Practitioners</category><category>Containers &amp; Kubernetes</category><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>GKE CPU 시작 부스트: 과도한 프로비저닝 없는 앱 시작 가속화</title><description></description><site_name>Google</site_name><url>https://cloud.google.com/blog/ko/products/containers-kubernetes/gke-cpu-startup-boost-faster-pod-starts-lower-costs/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Abdel Sghiouar</name><title>Cloud Developer Advocate</title><department></department><company></company></author><author xmlns:author="http://www.w3.org/2005/Atom"><name>Jakub Pawełczak</name><title>Cloud Product Manager</title><department></department><company></company></author></item><item><title>ADK의 그래프 워크플로: 알아야 할 모든 것</title><link>https://cloud.google.com/blog/ko/topics/developers-practitioners/graph-workflows-in-adk-everything-you-need-to-know/</link><description>&lt;div class="block-paragraph"&gt;&lt;p data-block-key="z0o0k"&gt;&lt;i&gt;*이 콘텐츠는 AI 번역 도구를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역에는 오류나 누락이 포함될 수 있습니다. 정확한 정보는&lt;/i&gt; &lt;a href="https://cloud.google.com/blog/topics/developers-practitioners/graph-workflows-in-adk-everything-you-need-to-know?e=0&amp;amp;hl=en"&gt;&lt;i&gt;영문 원본&lt;/i&gt;&lt;/a&gt;&lt;i&gt;을 참고해 주시기 바랍니다.&lt;/i&gt;&lt;/p&gt;&lt;hr/&gt;&lt;p data-block-key="e91c3"&gt;&lt;/p&gt;&lt;p data-block-key="djiaf"&gt;그래프 엔지니어링은 일종의 설계 작업으로, 작업을 노드로 분할하고, 에지에 연결하고, 코드, 모델 또는 사람이 다음 단계를 제어할 위치를 결정하는 과정입니다. &lt;a href="https://adk.dev/" target="_blank"&gt;에이전트 개발 키트(ADK)&lt;/a&gt;의 워크플로는 이러한 설계를 실행 가능한 프로세스로 전환하여 함수와 에이전트가 작업을 수행하도록 합니다. 이 게시물에서는 환불 예시를 통해 단계를 동시에 실행하고, 결정을 라우팅하고, 사람의 검토를 위해 일시중지하고, 케이스 목록을 처리하는 방법을 보여줍니다. 또한 정적 그래프에서 경로를 선언해야 하는 경우와 결과가 도착하면 Python이 추가 작업을 예약하도록 해야 하는 경우를 설명합니다.&lt;/p&gt;&lt;p data-block-key="bsm7h"&gt;&lt;b&gt;요약:&lt;/b&gt; ADK의 환불 워크플로를 사용하여 팬아웃 및 팬인, 결정론적 라우터 및 에이전트 라우터, 인간 참여형 일시중지, 동시 작업자, 동적 조정에 대해 알아보고, 정적 그래프를 사용해야 하는 경우와 Python이 다음에 실행할 작업을 결정하도록 해야 하는 경우를 살펴봅니다.&lt;/p&gt;&lt;h2 data-block-key="4q3t3"&gt;&lt;b&gt;단일 에이전트로 시작하기&lt;/b&gt;&lt;/h2&gt;&lt;p data-block-key="6jh1j"&gt;특정 에이전트에 환불 요청을 처음부터 끝까지 처리할 수 있는 도구와 안내를 제공할 수 있습니다.&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;refund_agent = Agent(\r\n    name=&amp;quot;refund_agent&amp;quot;, model=MODEL,\r\n    tools=[fetch_order, fetch_payment, fetch_history],\r\n    instruction=&amp;quot;&amp;quot;&amp;quot;You handle refund requests.\r\n    1. Look up the order.\r\n    2. Check the payment record.\r\n    3. Check the customer\&amp;#x27;s refund history.\r\n    4. Deny if there\&amp;#x27;s an open chargeback or it\&amp;#x27;s past 30 days.\r\n       Approve if it\&amp;#x27;s under $50 and they\&amp;#x27;ve had fewer than three\r\n       refunds this year.\r\n    5. Write the customer an email explaining the decision.&amp;quot;&amp;quot;&amp;quot;,\r\n)&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;lang-py&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafedc9550&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph"&gt;&lt;p data-block-key="z0o0k"&gt;이렇게 하면 모델이 도구를 선택하고, 정책을 적용하고, 답장을 작성하는 역할을 담당하게 됩니다. 하지만 프롬프트에는 이미 세 가지 조회, 결정, 응답이라는 개별 작업이 설명되어 있습니다. 이러한 작업을 별도의 노드로 분할하면 각 작업을 어떻게 실행해야 하는지 결정할 수 있습니다.&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/graph-workflows-in-adk-everything-you-need.max-1000x1000_wEZYObA.png"
        
          alt="graph-workflows-in-adk-everything-you-need-to-know-01-five-nodes"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph"&gt;&lt;p data-block-key="z0o0k"&gt;고객이 주문을 선택하고 '환불 요청'을 클릭했다고 가정해 보겠습니다. 앱은 주문 ID를 알고 있으므로 조회 작업부터 워크플로를 시작할 수 있습니다.&lt;/p&gt;&lt;h2 data-block-key="f1vc2"&gt;&lt;b&gt;동시에 독립적인 단계 실행하기&lt;/b&gt;&lt;/h2&gt;&lt;p data-block-key="85njf"&gt;주문, 결제, 환불 내역 조회 작업에는 모두 주문 ID가 필요하지만 다른 조회 작업의 결과는 필요하지 않습니다. 프롬프트에는 이러한 작업이 순서대로 나열되어 있지만 각 작업이 완료되기까지 기다릴 이유가 없습니다. 세 가지 작업을 모두 동시에 실행할 수 있습니다.&lt;/p&gt;&lt;p data-block-key="97shk"&gt;하지만 정책 결정 작업은 성격이 다릅니다. 이 작업에는 세 가지 레코드가 모두 필요합니다. 따라서 워크플로를 세 개 경로로 분할한 다음 계속 진행하기 전에 그 결과를 결합합니다. 이 두 가지 과정을 각각 &lt;b&gt;팬아웃&lt;/b&gt;과 &lt;b&gt;팬인&lt;/b&gt;이라고 합니다.&lt;/p&gt;&lt;p data-block-key="bdsc7"&gt;ADK에서는 조회 함수가 그 자체로 노드로 사용될 수 있습니다. 중첩된 튜플을 사용하면 조회 함수가 동시에 시작되고 &lt;code&gt;JoinNode&lt;/code&gt;가 그 결과가 도착할 때까지 기다립니다. 먼저 가져오기 및 조회 서명을 살펴보겠습니다.&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;import asyncio\r\nfrom pydantic import BaseModel, Field\r\n\r\nfrom google.adk import Agent, Context, Event, Workflow\r\nfrom google.adk.events import RequestInput\r\nfrom google.adk.workflow import JoinNode, START, node\r\n\r\nasync def fetch_order(node_input: str) -&amp;gt; dict:\r\n    ...&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;lang-py&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafedc9690&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph"&gt;&lt;p data-block-key="z0o0k"&gt;각 조회 작업은 &lt;code&gt;node_input&lt;/code&gt;을 통해 주문 ID를 수신하고 사전을 반환합니다. 이를 다음과 같이 연결할 수 있습니다.&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;join_case = JoinNode(name=&amp;quot;join_case&amp;quot;)\r\n\r\nedges=[\r\n    (START, (fetch_order, fetch_payment, fetch_history), join_case),\r\n]&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;lang-py&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafedcb950&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph"&gt;&lt;p data-block-key="z0o0k"&gt;왼쪽에서 오른쪽으로 읽어보세요. 먼저 세 가지 조회 작업을 모두 시작한 다음 완료되면 &lt;code&gt;join_case&lt;/code&gt; 작업을 계속 진행합니다.&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/graph-workflows-in-adk-everything-you-need.max-1000x1000_59cATcj.png"
        
          alt="graph-workflows-in-adk-everything-you-need-to-know-02-fanout-join"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph"&gt;&lt;p data-block-key="z0o0k"&gt;조인은 노드 이름으로 키가 지정된 사전을 반환합니다. 다음 노드는 모델 호출 없이 &lt;code&gt;node_input["fetch_order"]&lt;/code&gt;, &lt;code&gt;node_input["fetch_payment"]&lt;/code&gt;, &lt;code&gt;node_input["fetch_history"]&lt;/code&gt;를 읽어 결과를 수집할 수 있습니다. 자세한 내용&lt;a href="https://github.com/google/adk-python/blob/main/docs/guides/workflow/join_node/index.md" target="_blank"&gt; JoinNode 가이드&lt;/a&gt;를 참조하세요.&lt;/p&gt;&lt;p data-block-key="6l7tj"&gt;결제 조회 작업에 주문 조회의 거래 ID가 필요한 경우 두 작업은 순차적으로 실행됩니다. 프롬프트에 모든 단계가 순서대로 나열되어 있더라도 &lt;b&gt;종속 항목에 따라 에지가 결정됩니다&lt;/b&gt;.&lt;/p&gt;&lt;p data-block-key="ehu2h"&gt;다음 동영상에서 팬아웃과 팬인에 대해 자세히 알아볼 수 있습니다.&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-video"&gt;



&lt;div class="article-module article-video "&gt;
  &lt;figure&gt;
    &lt;a class="h-c-video h-c-video--marquee"
      href="https://youtube.com/watch?v=Mzr7byMFy_4"
      data-glue-modal-trigger="uni-modal-Mzr7byMFy_4-"
      data-glue-modal-disabled-on-mobile="true"&gt;

      
        &lt;img src="//img.youtube.com/vi/Mzr7byMFy_4/maxresdefault.jpg"
             alt="Video about how to build a production-ready, multi-agent AI system from scratch using Graph Engineering and Google&amp;#x27;s Agent Development Kit (ADK)."/&gt;
      
      &lt;svg role="img" class="h-c-video__play h-c-icon h-c-icon--color-white"&gt;
        &lt;use xlink:href="#mi-youtube-icon"&gt;&lt;/use&gt;
      &lt;/svg&gt;
    &lt;/a&gt;

    
      &lt;figcaption class="article-video__caption h-c-page"&gt;
        
          &lt;h4 class="h-c-headline h-c-headline--four h-u-font-weight-medium h-u-mt-std"&gt;ADK를 사용한 그래프 엔지니어링&lt;/h4&gt;
        
        
      &lt;/figcaption&gt;
    
  &lt;/figure&gt;
&lt;/div&gt;

&lt;div class="h-c-modal--video"
     data-glue-modal="uni-modal-Mzr7byMFy_4-"
     data-glue-modal-close-label="Close Dialog"&gt;
   &lt;a class="glue-yt-video"
      data-glue-yt-video-autoplay="true"
      data-glue-yt-video-height="99%"
      data-glue-yt-video-vid="Mzr7byMFy_4"
      data-glue-yt-video-width="100%"
      href="https://youtube.com/watch?v=Mzr7byMFy_4"
      ng-cloak&gt;
   &lt;/a&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="block-paragraph"&gt;&lt;p data-block-key="z0o0k"&gt;도구를 노드로 변환할 때 한 가지 중요한 세부정보가 있습니다. 바로 &lt;code&gt;node_input&lt;/code&gt;이라는 파라미터가 이전 노드의 출력을 수신합니다. 다른 이름의 파라미터는 기본적으로 &lt;code&gt;ctx.state&lt;/code&gt;에 바인딩되므로 &lt;code&gt;order_id&lt;/code&gt;는 &lt;code&gt;ctx.state["order_id"]&lt;/code&gt;를 확인하고 누락된 경우 &lt;code&gt;ValueError&lt;/code&gt;를 발생시킵니다. 여기서 str 주석은 &lt;code&gt;START&lt;/code&gt;의 &lt;code&gt;types.Content&lt;/code&gt; 입력을 문자열로 변환합니다.&lt;/p&gt;&lt;h2 data-block-key="a25tc"&gt;&lt;b&gt;각 요청을 적절한 워크플로로 라우팅하기&lt;/b&gt;&lt;/h2&gt;&lt;p data-block-key="7ab4r"&gt;지금까지 고객은 명시적으로 환불을 요청했습니다. 더 광범위한 지원 대화에서는 먼저 고객이 원하는 것이 무엇인지 파악하고 요청을 적절한 프로세스로 전송해야 합니다. "신발 사이즈가 맞지 않아요. 다른 제품으로 보내 주실 수 있나요?"라는 요청은 교환 워크플로로, 환불 요청은 환불 워크플로로 전달되어야 합니다.&lt;/p&gt;&lt;p data-block-key="9ebvd"&gt;여기서 다음에 실행할 브랜치를 선택하는 노드인 &lt;b&gt;라우터&lt;/b&gt;라는 개념이 등장합니다.&lt;/p&gt;&lt;ul&gt;&lt;li data-block-key="d2q7q"&gt;&lt;b&gt;결정론적 라우터&lt;/b&gt;는 명시적인 규칙을 따르며, 동일한 입력에 대해 동일한 경로를 생성합니다.&lt;/li&gt;&lt;li data-block-key="f3drv"&gt;&lt;b&gt;비결정론적 라우터&lt;/b&gt;는 동일한 입력에 대해 서로 다른 브랜치를 선택할 수 있습니다.&lt;/li&gt;&lt;li data-block-key="5fr15"&gt;&lt;b&gt;에이전트 라우터&lt;/b&gt;는 모델을 사용하여 요청을 해석하므로 선택이 달라질 수 있습니다.&lt;/li&gt;&lt;/ul&gt;&lt;p data-block-key="1rtuj"&gt;라우터는 워크플로에서 정의한 경로 중에서 선택합니다. 고객 지원 예시에서는 에이전트를 사용하여 고객의 의도를 파악한 다음 고정된 규칙을 사용하여 환불 정책을 적용할 수 있습니다.&lt;/p&gt;&lt;h2 data-block-key="7me72"&gt;&lt;b&gt;에이전트 라우터를 통해 의도 파악&lt;/b&gt;&lt;/h2&gt;&lt;p data-block-key="fj044"&gt;에이전트는 고객의 메시지를 해석하고 요청을 분류할 수 있습니다. 특정 ADK 패턴에서는 에이전트가 구조화된 카테고리를 반환한 다음 small 함수를 통해 해당 &lt;code&gt;Event(route=…)&lt;/code&gt;를 내보내 요청을 선택한 워크플로로 전송합니다.&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;Customer message → classification agent → route function\r\n                                           ├─ REFUND → refund workflow\r\n                                           ├─ EXCHANGE → exchange workflow\r\n                                           └─ CLARIFY → ask a follow-up question&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafedc90d0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph"&gt;&lt;p data-block-key="z0o0k"&gt;모델은 의도를 파악하고, 그래프는 사용 가능한 대상을 정의합니다. 요청이 명확하지 않은 경우 워크플로에서 후속 질문을 할 수 있습니다. ADK의&lt;a href="https://github.com/google/adk-python/blob/main/contributing/samples/workflows/route/agent.py" target="_blank"&gt; 라우팅 샘플&lt;/a&gt;에서 이 패턴을 확인할 수 있습니다.&lt;/p&gt;&lt;p data-block-key="6gaju"&gt;이 의도 라우터는 환불 워크플로 앞에 배치됩니다. 선택한 주문 예시의 경우 '환불 요청' 버튼을 통해 이미 의도가 확정되었으므로 해당 워크플로로 바로 진입할 수 있습니다.&lt;/p&gt;&lt;h2 data-block-key="d8an6"&gt;&lt;b&gt;결정론적 라우터를 통해 환불 정책 적용&lt;/b&gt;&lt;/h2&gt;&lt;p data-block-key="ae8of"&gt;환불 워크플로 내에서 수행되는 세 가지 조회 작업을 통해 승인, 거부, 사람의 검토 요청이라는 또 다른 결정을 내리는 데 필요한 사실 정보를 제공합니다. 이번에는 정책에 명시적인 기준이 제시되어 있으므로 함수를 통해 경로를 선택할 수 있습니다.&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;def refund_policy(amount, days_ago, chargeback_open, priors):\r\n    if chargeback_open or days_ago &amp;gt; 30:\r\n        return &amp;quot;DENY&amp;quot;\r\n    if amount &amp;lt; 50 and priors &amp;lt; 3:\r\n        return &amp;quot;AUTO_APPROVE&amp;quot;\r\n    return &amp;quot;MANUAL_REVIEW&amp;quot;\r\n\r\ndef route_refund(node_input):\r\n    case = {**node_input[&amp;quot;fetch_order&amp;quot;], **node_input[&amp;quot;fetch_payment&amp;quot;],\r\n            **node_input[&amp;quot;fetch_history&amp;quot;]}\r\n    route = refund_policy(case[&amp;quot;amount_usd&amp;quot;], case[&amp;quot;placed_days_ago&amp;quot;],\r\n                          case[&amp;quot;chargeback_open&amp;quot;], case[&amp;quot;prior_refunds_12mo&amp;quot;])\r\n    return Event(output=case, route=route)        # the function names the path&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;lang-py&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafedcb050&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;code style="vertical-align: baseline;"&gt;route_refund&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;는 레코드를 결합하고 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;AUTO_APPROVE&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;, &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;DENY&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;, &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;MANUAL_REVIEW&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 중 하나의 경로 이름으로 케이스를 반환합니다. 수동 검토는 자동 규칙을 모두 충족하지 않는 케이스를 처리합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이는 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;결정론적 라우터&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;입니다. 즉, 동일한 케이스 데이터는 동일한 결정을 생성하므로 모델을 호출하지 않고도 정책을 테스트할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;div align="left"&gt;
&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;
&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;
&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;&lt;table&gt;&lt;colgroup&gt;&lt;col/&gt;&lt;col/&gt;&lt;col/&gt;&lt;/colgroup&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;결정론적 라우터&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;에이전트 라우터&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;최적의 결정 근거&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;코드의 규칙&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;입력을 해석하는 모델&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;적합한 분야&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;알려진 사실 및 명시적 정책&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;규칙으로 포착하기 어려운 의미&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;예시&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;30일이 지난 주문 거부&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;교환 요청 인식&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;라우팅을 위한 모델 호출&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;없음&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;필수&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;두 라우터 모두 정의된 경로 중에서 선택합니다. &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;에이전트 라우터는 정적 그래프 내에 위치할 수 있습니다&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;. 즉, 모델의 선택은 달라질 수 있지만 가능한 연결은 동일하게 유지됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;자동 승인 또는 거부의 경우 다음 단계는 고객에게 결정 내용을 설명하는 것입니다. 각 경로에는 케이스 데이터를 바탕으로 답장을 작성하는 알림 에이전트가 지정됩니다. ADK는 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;Event(output=case, …)&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;의 사전을 JSON 사용자 메시지 형식으로 해당 에이전트에 전달합니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;approve_notice = Agent(\r\n    name=&amp;quot;approve_notice&amp;quot;, model=MODEL,\r\n    instruction=&amp;quot;Tell the customer their refund is approved and when to expect the &amp;quot;\r\n                &amp;quot;money, using the case JSON you receive. Short email, warm, no fluff.&amp;quot;,\r\n)\r\ndenial_notice = Agent(\r\n    name=&amp;quot;denial_notice&amp;quot;, model=MODEL,\r\n    instruction=&amp;quot;Tell the customer their refund was declined and exactly why, based &amp;quot;\r\n                &amp;quot;on the case JSON you receive. If it carries a reviewer_note, that is &amp;quot;\r\n                &amp;quot;the reason. Short email, direct and kind. Do not invent policy.&amp;quot;,\r\n)&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;lang-py&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafedc8350&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph"&gt;&lt;p data-block-key="z0o0k"&gt;이제 환불 워크플로에는 초기 조회부터 결정을 내리고 답장을 작성하기까지의 경로가 마련되어 있으며, 사람의 개입이 필요한 케이스를 위한 세 번째 브랜치도 포함되어 있습니다.&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;workflow = Workflow(\r\n    name=&amp;quot;refund_decision&amp;quot;,\r\n    edges=[\r\n        (START, (fetch_order, fetch_payment, fetch_history),\r\n         join_case, route_refund),\r\n        (route_refund, {&amp;quot;AUTO_APPROVE&amp;quot;:  approve_notice,\r\n                        &amp;quot;MANUAL_REVIEW&amp;quot;: escalate_to_human,\r\n                        &amp;quot;DENY&amp;quot;:          denial_notice}),\r\n    ],\r\n)&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;lang-py&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafedc8f90&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;첫 번째 체인은 레코드를 가져오고, 조인하고, 정책을 적용합니다. 두 번째 체인은 라우터의 결정을 대상에 매핑합니다. 자동 결정은 알림 에이전트로 바로 전달되고, &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;MANUAL_REVIEW&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;는 다음에 정의할 사람의 검토를 위한 노드로 전달됩니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/graph-workflows-in-adk-everything-you-need.max-1000x1000_9lNpFLs.png"
        
          alt="graph-workflows-in-adk-everything-you-need-to-know-03-refund-graph"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;세 번째 브랜치를 실행하려면 함수 호출 이상의 것이 필요합니다. 검토자가 답변하는 데 몇 분 또는 며칠이 걸릴 수 있으므로 케이스가 대기 중인 상태에서 워크플로를 일시중지하고 사람이 결정을 내리면 계속 진행해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;검토 노드는 대기 중인 요청을 기록하고 실행을 일시중지하는 RequestInput을 반환합니다. 이후 재개 시 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;rerun_on_resume=True&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;를 설정하면 노드가 다시 실행되고, 이때 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;ctx.resume_inputs&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;에서 답변을 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;REVIEW = &amp;quot;refund:review&amp;quot;\r\n\r\nclass ReviewDecision(BaseModel):\r\n    approve: bool = Field(description=&amp;quot;True to refund, False to decline.&amp;quot;)\r\n    note: str = Field(&amp;quot;&amp;quot;, description=&amp;quot;Why, in the reviewer\&amp;#x27;s words.&amp;quot;)\r\n\r\n@node(rerun_on_resume=True)\r\nasync def escalate_to_human(ctx: Context, node_input: dict):\r\n    answer = ctx.resume_inputs.get(REVIEW)\r\n    if answer is None:                       # first pass: ask, then stop\r\n        yield RequestInput(\r\n            interrupt_id=REVIEW,\r\n            message=f&amp;quot;Refund ${node_input[\&amp;#x27;amount_usd\&amp;#x27;]} on order &amp;quot;\r\n                    f&amp;quot;{node_input[\&amp;#x27;order_id\&amp;#x27;]}?&amp;quot;,\r\n            payload=node_input,              # what the reviewer is shown\r\n            response_schema=ReviewDecision,\r\n        )\r\n        return\r\n    # second pass: the answer is here, so route on it\r\n    yield Event(output={**node_input, &amp;quot;reviewer_note&amp;quot;: answer.get(&amp;quot;note&amp;quot;, &amp;quot;&amp;quot;)},\r\n                route=&amp;quot;AUTO_APPROVE&amp;quot; if answer[&amp;quot;approve&amp;quot;] else &amp;quot;DENY&amp;quot;)&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;lang-py&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafedc9d10&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;응답 스키마는 라우팅할 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;approve&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 값과 전달할 메모를 노드에 제공합니다. 검토자가 거부하는 경우 알림 에이전트는 거부 사유를 해당 케이스와 함께 수신합니다. 검토 결정과 답장을 연결하는 에지가 하나 더 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;edges=[\r\n    ...,\r\n    (escalate_to_human, {&amp;quot;AUTO_APPROVE&amp;quot;: approve_notice,\r\n                         &amp;quot;DENY&amp;quot;:         denial_notice}),\r\n]&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;lang-py&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafedcb4d0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;ADK는 두 가지 변형을 제공합니다. 위의 패턴은 단일 노드 패턴입니다. 즉, 노드가 다시 실행되고&lt;/span&gt;&lt;a href="https://github.com/google/adk-python/blob/main/contributing/samples/workflows/request_input_rerun/agent.py" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;code style="text-decoration: underline; vertical-align: baseline;"&gt;request_input_rerun&lt;/code&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt; 샘플&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;에서와 같이 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;ctx.resume_inputs&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;를 읽습니다. 반면&lt;/span&gt;&lt;a href="https://github.com/google/adk-python/blob/main/contributing/samples/workflows/request_input/agent.py" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;code style="text-decoration: underline; vertical-align: baseline;"&gt;request_input&lt;/code&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt; 샘플&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;에서는 2노드 변형을 확인할 수 있습니다. 여기서는 하나의 노드가 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;RequestInput&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;을 반환하면 검토자의 답변이 다음 노드의 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;node_input&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;으로 도착하므로 해당 파일에서 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;ctx.resume_inputs&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;를 찾을 수 없습니다. 아래에 링크된 컴패니언 스크립트에는 검토자의 답변을 실행 단계로 다시 전송하는 코드가 포함되어 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;&lt;code&gt;Workflow&lt;/code&gt; 또한 노드입니다. 이 전체 환불 프로세스는 더 큰 규모의 고객 서비스 워크플로에서 하나의 단계로 통합될 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;케이스 배치에 동일한 단계 적용하기&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이제 하나의 환불을 처리하는 프로세스가 마련되었습니다. 이미 수집된 레코드가 포함된 케이스 배치가 들어온다고 가정해 보겠습니다. 케이스마다 동일한 정책 검사가 필요하며 케이스 수는 배치마다 다릅니다. &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;동시 작업자&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;를 사용하여 모든 항목에 하나의 노드를 적용할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;ADK에서 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;parallel_worker=True&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;를 설정하면 입력 목록의 항목당 노드가 한 번 실행되고 결과가 원래 순서대로 수집됩니다. 정책 함수를 다시 사용할 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;@node(parallel_worker=True)\r\ndef review_case(node_input):\r\n    # Each worker receives one case from the input list.\r\n    case = node_input\r\n    decision = refund_policy(\r\n        case[&amp;quot;amount_usd&amp;quot;], case[&amp;quot;placed_days_ago&amp;quot;],\r\n        case[&amp;quot;chargeback_open&amp;quot;], case[&amp;quot;prior_refunds_12mo&amp;quot;],\r\n    )\r\n    return {&amp;quot;order_id&amp;quot;: case[&amp;quot;order_id&amp;quot;], &amp;quot;decision&amp;quot;: decision}\r\n\r\ndef collect_decisions(node_input):\r\n    # This node receives the list of worker results.\r\n    return {&amp;quot;decisions&amp;quot;: node_input}\r\n\r\nbatch_review = Workflow(\r\n    name=&amp;quot;batch_review&amp;quot;,\r\n    edges=[(START, review_case, collect_decisions)],\r\n)&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;lang-py&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafedc9f10&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;각 작업자는 하나의 케이스를 수신하고 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;collect_decisions&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;는 결과를 목록으로 수신합니다. 별도의 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;JoinNode&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;는 필요하지 않습니다. 이 플래그는 에이전트에서도 작동합니다. 예를 들어 각 케이스에 대한 설명을 작성할 수 있습니다. &lt;/span&gt;&lt;a href="https://github.com/google/adk-python/blob/main/contributing/samples/workflows/parallel_worker/agent.py" rel="noopener" target="_blank"&gt;&lt;code style="text-decoration: underline; vertical-align: baseline;"&gt;parallel_worker&lt;/code&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt; 샘플&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;에서 두 가지 형식을 모두 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;여기서 수행되는 정책 계산은 규모가 작습니다. 동시 실행은 각 항목이 API 또는 모델 호출을 기다려야 하는 상황에서 더 유용하지만 입력과 결과가 이동하는 방식은 동일하게 유지됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;div align="left"&gt;
&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;
&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;
&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;&lt;table&gt;&lt;colgroup&gt;&lt;col/&gt;&lt;col/&gt;&lt;col/&gt;&lt;/colgroup&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;패턴&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;작업 분산&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;출력 수집&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;code style="vertical-align: baseline;"&gt;JoinNode&lt;/code&gt;&lt;strong style="vertical-align: baseline;"&gt;를 사용한 팬아웃&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;서로 다른 노드가 독립적인 작업 수행&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;노드 이름으로 키가 지정된 사전&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;동시 작업자&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;모든 항목에 동일한 노드 사용&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;입력 순서대로 나열된 목록&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;배치 크기는 그래프를 변경하지 않고도 조정할 수 있습니다. 고정된 프로세스 내에서도 가변적인 작업량을 처리할 수 있습니다. 실행에 대한 자세한 내용은&lt;/span&gt;&lt;a href="https://github.com/google/adk-python/blob/main/docs/guides/workflow/parallel_worker/index.md" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;동시 작업자 가이드&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;를 참조하세요.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;결과에 따라 다음 단계 진행하기&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;환불 프로세스에는 알려진 경로가 있습니다. 배치에 더 많은 케이스가 포함되어 있거나 검토자가 답변하는 데 더 오래 걸리는 경우에도 마찬가지입니다. 하지만 일부 작업은 조사를 진행하는 과정에서 명확해집니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;분쟁의 대상이 된 환불 프로세스에서 두 번째 거래가 드러난다고 가정해 보겠습니다. 이를 확인하는 과정에서 추가 조사가 필요한 배송 관련 문제가 제기됩니다. 이제 각 결과를 통해 후속 작업을 만들 수 있습니다. &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;동적 노드&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;는 이러한 결과를 검사하고 Python에서 다음 검사를 예약할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;ADK는 다른 노드를 실행하고 그 결과를 기다리는 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;ctx.run_node&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;를 제공합니다. 이것이 조정에 어떤 변화를 가져오는지 살펴보기 위해 먼저 기존 환불 흐름을 다음과 같이 표현해 보겠습니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;HANDLERS = {\r\n    &amp;quot;AUTO_APPROVE&amp;quot;: approve_notice,\r\n    &amp;quot;MANUAL_REVIEW&amp;quot;: escalate_to_human,\r\n    &amp;quot;DENY&amp;quot;: denial_notice,\r\n}\r\n\r\n@node(rerun_on_resume=True)\r\nasync def refund_flow(ctx, node_input):\r\n    # Step 1: fetch all three records at once.\r\n    order, payment, history = await asyncio.gather(\r\n        ctx.run_node(fetch_order,   node_input, use_sub_branch=True),\r\n        ctx.run_node(fetch_payment, node_input, use_sub_branch=True),\r\n        ctx.run_node(fetch_history, node_input, use_sub_branch=True),\r\n    )\r\n    case = order | payment | history\r\n\r\n    # Step 2: apply the refund policy — the same pure function, 0 LLM calls.\r\n    decision = refund_policy(\r\n        amount=case[&amp;quot;amount_usd&amp;quot;],\r\n        days_ago=case[&amp;quot;placed_days_ago&amp;quot;],\r\n        chargeback_open=case[&amp;quot;chargeback_open&amp;quot;],\r\n        priors=case[&amp;quot;prior_refunds_12mo&amp;quot;],\r\n    )\r\n\r\n    # Step 3: run the chosen handler, and use its output as this node\&amp;#x27;s output.\r\n    await ctx.run_node(HANDLERS[decision], case, use_as_output=True)&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;lang-py&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafedcaf50&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;code style="vertical-align: baseline;"&gt;asyncio.gather&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;는 조회 작업을 동시에 실행합니다. Python은 결과를 결합하고 정책을 적용한 후 선택한 핸들러를 실행합니다. &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;use_as_output=True&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;를 설정하면 핸들러의 결과가 두 번 출력되지 않고 상위 노드의 출력으로 사용됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;동적 버전에서는 사람의 검토를 위한 노드도 조정합니다. 즉, 답변이 도착하면 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;ctx.run_node&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;를 통해 선택한 알림 에이전트를 호출합니다. 전체 동적 스크립트(&lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;refund_dynamic.py&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;)에는 이 변형이 포함되어 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/graph-workflows-in-adk-everything-you-need.max-1000x1000_XydYu0o.png"
        
          alt="graph-workflows-in-adk-everything-you-need-to-know-04-dynamic"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph"&gt;&lt;p data-block-key="z0o0k"&gt;외부 그래프에는 진입점만 있으면 됩니다.&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;workflow = Workflow(\r\n    name=&amp;quot;refund_dynamic&amp;quot;,\r\n    edges=[(START, refund_flow)],\r\n)&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;lang-py&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafedc9010&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;정적 버전에서는 에지 목록에 브랜치와 대상이 표시됩니다. 이 버전에서는 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;refund_flow&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;를 읽어 이를 확인합니다. &lt;/span&gt;&lt;a href="https://github.com/google/adk-python/blob/main/docs/guides/workflow/dynamic_nodes/index.md" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;동적 노드 가이드&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;에서 이 접근 방식을 다룹니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;사람의 검토를 위한 일시중지는 여기에서도 계속 작동합니다. 답변이 도착하면 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;refund_flow&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;가 처음부터 다시 실행되지만, 완료된 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;ctx.run_node&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 호출은 세션 기록에서 기록된 출력을 반환합니다. 직접 함수 호출과 달리 조회 작업은 반복되지 않습니다. 부차적인 효과를 하위 노드 내에서 처리하면 상위 노드가 재개될 때 완료된 호출의 결과를 재현할 수 있습니다. 각 하위 노드는 자체 trace 스팬을 가져오고 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;use_sub_branch=True&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;를 설정하면 동시 실행 중인 하위 노드의 이벤트가 별도의 브랜치에 유지됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이 고정된 환불 프로세스의 경우 에지 목록을 쉽게 검사할 수 있습니다. Python 버전은 위에서 설명한 조사 로직을 추가할 수 있는 공간을 제공합니다. 즉, 결과를 검사하고, 후속 노드를 선택하고, 독립적인 검사를 동시에 실행할 수 있습니다. 모델은 조사할 대상을 제안할 수 있지만, 코드는 작업 범위를 제한합니다. 예를 들어 발견 사항당 3회의 후속 조치와 사람의 검토 전 2단계의 조사를 수행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;루프 또한 정적 그래프 내에서 처리할 수 있습니다. 초안 작성 → 검사 → 수정으로 이어지는 고정된 프로세스에서는 조건부 역방향 에지와 수정 횟수를 제한하는 라우터를 사용할 수 있습니다. '정적'은 가능한 연결을 설명하므로 실제 경로와 반복 횟수는 다를 수 있습니다. 조건부 순환에 대해서는&lt;/span&gt;&lt;a href="https://github.com/google/adk-python/blob/main/docs/guides/workflow/graph/index.md" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;그래프 가이드&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;에서 다룹니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;또한 정적 워크플로 내에 동적 노드를 배치할 수도 있습니다. 그러면 필요한 단계에 Python을 사용하면서 주변 프로세스를 계속 표시할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;다음에 실행할 작업을 결정할 사람 선택하기&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;먼저 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;입력이 도착하기 전에 가능한 워크플로를 그려볼 수 있나요?&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;와 같이 질문할 수 있습니다. 이때 분기, 루프, 반복 단계를 포함해야 합니다. 각 요청이 거치게 될 구체적인 경로를 미리 예측할 필요는 없습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;div align="left"&gt;
&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;
&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;
&lt;div style="color: #5f6368; overflow-x: auto; overflow-y: hidden; width: 100%;"&gt;&lt;table&gt;&lt;colgroup&gt;&lt;col/&gt;&lt;col/&gt;&lt;/colgroup&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;필요한 항목&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;패턴&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;독립적인 작업 및 그 결과&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;팬아웃 및 팬인&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;고정된 규칙에 따라 선택한 브랜치&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;결정론적 라우터&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;의미를 해석하여 선택한 브랜치&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;에이전트 라우터&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;계속하기 전에 사람이 내리는 결정&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;code style="vertical-align: baseline;"&gt;RequestInput&lt;/code&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;목록에서 동일한 단계&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;동시 작업자&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;결과가 도착하면 작업을 예약하는 코드&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; border: 1px solid #000000; padding: 16px;"&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;동적 노드&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;에지 목록은 연결 관계를 명확히 보여주는 경우 사용합니다. 결과가 추가 작업을 생성하거나 Python이 제어를 더 자연스럽게 표현하는 경우 동적 조정을 사용합니다. 규모가 작은 개방형 작업에는 하나의 에이전트와 도구만 필요할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;환불 워크플로에서 그래프는 조회를 조정하고, 코드는 정책을 적용하고, 사람은 예외를 처리하고, 모델은 답장을 작성합니다. 그래프 엔지니어링은 각 구성 요소에 명확한 책임을 부여하고 프로세스의 작동 방식을 더 쉽게 파악할 수 있도록 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;시작하기&lt;/strong&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;읽기:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;a href="https://github.com/google/adk-python/blob/main/docs/guides/workflow/workflow/index.md" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;워크플로 가이드&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;탐색:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;a href="https://github.com/google/adk-python/tree/main/contributing/samples/workflows" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;워크플로 샘플&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;빌드:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 이러한 패턴을 마라톤 경기 당일 코치에 적용하는&lt;/span&gt;&lt;a href="https://codelabs.developers.google.com/adk2/instructions#0" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;실습 Codelab&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description><pubDate>Sun, 11 Oct 2026 19:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/ko/topics/developers-practitioners/graph-workflows-in-adk-everything-you-need-to-know/</guid><category>Developers &amp; Practitioners</category><media:content height="540" url="https://storage.googleapis.com/gweb-cloudblog-publish/images/graph-workflows-in-adk-everything-you-need-t.max-600x600_G3dwz11.png" width="540"></media:content><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>ADK의 그래프 워크플로: 알아야 할 모든 것</title><description></description><image>https://storage.googleapis.com/gweb-cloudblog-publish/images/graph-workflows-in-adk-everything-you-need-t.max-600x600_G3dwz11.png</image><site_name>Google</site_name><url>https://cloud.google.com/blog/ko/topics/developers-practitioners/graph-workflows-in-adk-everything-you-need-to-know/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Annie Wang</name><title>Google AI Cloud Developer Advocate</title><department></department><company></company></author><author xmlns:author="http://www.w3.org/2005/Atom"><name>Shangjie Chen</name><title>Software Engineer, Google Cloud AI</title><department></department><company></company></author></item><item><title>Google Cloud CLI 원격 MCP 서버로 에이전트 역량 강화</title><link>https://cloud.google.com/blog/ko/products/ai-machine-learning/google-cloud-cli-remote-mcp-server-in-preview/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;*이 콘텐츠는 AI 번역 도구를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역에는 오류나 누락이 포함될 수 있습니다. 정확한 정보는 &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/products/ai-machine-learning/google-cloud-cli-remote-mcp-server-in-preview?e=0&amp;amp;hl=en"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;영문 원본&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;을 참고해 주시기 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;오늘 Google은 프리뷰 버전의 &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/sdk/use-gcloud-mcp"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Google Cloud CLI 원격 MCP 서버&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;를 새롭게 선보이며, 관리형 원격 MCP 서버 생태계를 확장합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;널리 사용되는&lt;/span&gt;&lt;a href="https://docs.cloud.google.com/sdk/gcloud"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;gcloud&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 및&lt;/span&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/reference/bq-cli-reference"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;bq(BigQuery)&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 명령줄 도구를 기반으로 하는 이 새로운 서버는 AI 에이전트가 Google Cloud 인프라를 관리하고 고급 BigQuery 워크플로를 안전하고 원활하게 처리할 수 있도록 명령줄 작업에 대한 즉각적이고 광범위한 액세스를 제공합니다. &lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;AI 에이전트에 CLI가 중요한 이유&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;에이전트가 수행하는 클라우드 작업이 점점 더 복잡해지고 있지만, 백엔드 시스템과의 상호작용 방식을 표준화하는 일은 여전히 까다로운 과제로 남아 있습니다. Google Cloud CLI 원격 MCP 서버는 수백 개의 gcloud 및 bq 명령어의 다기능성을 하나의 MCP 서버로 패키징하여 이러한 격차를 해소합니다. 이를 통해 에이전트는 다음과 같은 두 가지 강력한 이점을 얻을 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;상위 수준 추상화:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; CLI 명령어는 다단계 API 조정을 요구하는 대신 복잡한 다단계 워크플로, 검증 확인, 상위 수준 작업을 통합 명령어로 패키징합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;모델 학습 활용:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; LLM은 공개 명령줄 문서, 문법, 사용 예시를 바탕으로 광범위하게 사전 학습되므로 모델에 대한 CLI 호출이 직관적이고 정확도가 높습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;원격 MCP 기반 CLI 활용의 장점&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;AI 에이전트로 클라우드 인프라를 관리하려면 일반적으로 에이전트 실행 환경 내에 Google Cloud CLI 바이너리를 설치하고 유지보수해야 합니다. Cloud CLI 원격 MCP 서버는 Google Cloud 인프라에 격리된 실행 샌드박스를 제공하여 CLI 기능과 MCP 이점을 연결합니다. 이를 통해 다음과 같은 주요 인프라 과제를 해결할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;간소화된 종속 항목 및 런타임 관리:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 커스텀 에이전트를 빌드하는 팀의 경우 개발, 테스트, 프로덕션 환경에서 로컬 CLI 버전과 종속 항목을 유지하는 데 운영 오버헤드가 발생합니다. 원격 MCP를 사용하면 로컬 설치와 런타임 유지보수의 번거로움이 사라집니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;웹 기반 에이전트 엔드포인트에 대한 액세스:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 웹 호스팅 에이전트 플랫폼 및 웹 인터페이스(예: Gemini Enterprise 및 기타 호스팅된 엔터프라이즈 에이전트 플랫폼)는 사용자가 로컬 패키지를 제어하거나 설치할 수 없는 환경에서 실행됩니다. 원격 MCP를 사용하면 이러한 인터페이스에서 Google Cloud CLI 작업에 안전하게 관리형 방식으로 직접 액세스할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;엔터프라이즈급 보안 및 거버넌스&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;AI 에이전트를 인프라에 연결하려면 엄격한 엔터프라이즈급 보호 장치가 필요합니다. 이 원격 서버는 Google Cloud의 표준 ID 및 거버넌스 프레임워크를 활용하여 환경을 안전하게 보호합니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;제로 앰비언트 사용자 인증 정보:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 서버는 앰비언트 사용자 인증 정보가 없는 네트워크 제한 프록시 경계에서 실행을 격리합니다. 인증 및 승인은&lt;/span&gt;&lt;a href="https://docs.cloud.google.com/iam/docs/agent-identity-overview"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;에이전트 아이덴티티&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;,&lt;/span&gt;&lt;a href="https://developers.google.com/identity/protocols/oauth2" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;OAuth 2.0&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/iam/docs"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Identity and Access Management (IAM)&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;를 통해 처리됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;엄격한 정책 시행:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 원격 MCP 서버를 통해 실행되는 모든 명령어는 인증된 호출자 ID의 권한으로 실행됩니다. 표준 IAM 권한과 조직 정책 서비스 제약조건 모두 다운스트림 대상 리소스에 엄격하게 적용됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Model Armor를 통한 고급 보호:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; AI 도구 호출과 관련된 위험을 최소화하기 위해 Cloud CLI 원격 MCP 서버는&lt;/span&gt;&lt;a href="https://docs.cloud.google.com/model-armor/model-armor-mcp-google-cloud-integration"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Model Armor&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;와 통합됩니다. LLM 프롬프트와 응답을 선제적으로 검사하여 프롬프트 인젝션 및 악성 입력과 같은 위험으로부터 보호할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Cloud 감사 로깅:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Cloud CLI 원격 MCP 서버는 모든 도구 호출을 감사 로그(cloudcli.googleapis.com/mcp의 데이터 액세스 로그)에 기록하도록 구성할 수 있습니다. 보안팀은 민감한 명령어 페이로드나 개인 식별 정보(PII)를 노출하지 않고도 호출자 ID, OAuth 클라이언트, IAM 승인 결정(mcp.googleapis.com/tools.call)을 완벽하게 파악할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Google Cloud CLI 원격 MCP 서버에 연결&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;클라우드 관리를 에이전트에 통합할 때 더 이상 Google Cloud CLI 바이너리를 패키징하거나, 로컬 실행 런타임을 관리하거나, 에이전트 컨테이너 이미지 내에서 종속 항목을 유지할 필요가 없습니다. Google Cloud CLI 원격 MCP 서버는 표준 모델 컨텍스트 프로토콜을 구현하므로 MCP 호환 에이전트 플랫폼 또는 조정 런타임은 표준 구성을 통해 즉시 연결할 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;{\r\n  &amp;quot;mcpServers&amp;quot;: {\r\n    &amp;quot;google-cloud-cli&amp;quot;: {\r\n      &amp;quot;uri&amp;quot;: &amp;quot;https://cloudcli.googleapis.com/mcp&amp;quot;,\r\n      ...\r\n    }\r\n  }\r\n}&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbaff002d90&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;에이전트는 네트워크가 격리된 안전한 클라우드 샌드박스에서 gcloud 및 bq 명령어를 실행할 수 있는 액세스 권한을 즉시 얻습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;인증은 호스팅된 Google Cloud 플랫폼의 경우 키 없는 에이전트 아이덴티티를 통해 처리되고, 외부 런타임의 경우 표준 OAuth 2.0을 통해 처리됩니다. 인증 옵션은&lt;/span&gt;&lt;a href="https://docs.cloud.google.com/mcp/set-up-authentication-mcp-servers"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;MCP 인증 가이드&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;를 참고하세요.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;에이전트에 인프라 관리 기능 제공&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://docs.cloud.google.com/sdk/use-gcloud-mcp"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Cloud CLI 원격 MCP 서버&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;는 두 가지 강력한 도구인 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;run_gcloud_command&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;와 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;run_bq_command&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;를 노출하여 AI 에이전트가 자연어를 통해 Google Cloud 작업에 광범위하고 즉각적으로 액세스할 수 있도록 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;strong style="vertical-align: baseline;"&gt;run_gcloud_command&lt;/strong&gt;&lt;/code&gt;&lt;strong style="vertical-align: baseline;"&gt;를 사용하여 클라우드 인프라 관리&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code style="vertical-align: baseline;"&gt;run_gcloud_command&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;를 사용하면 에이전트가 광범위한 gcloud 작업을 실행하여 Google Cloud 환경을 관리하고, 진단하고, 보호할 수 있습니다. 예시는 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;모니터링 가능성 및 사고 진단&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: 에이전트는 명령어 실행을 자동화하고 도구 간 컨텍스트 전환을 줄여 사고 진단을 간소화합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/original_images/1_IPA9ALa.gif"
        
          alt="1"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;run_bq_command 도구를 사용한 BigQuery 작업 확장&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://docs.cloud.google.com/bigquery/docs/use-bigquery-mcp"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;BigQuery MCP 서버&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;는 이미 AI 에이전트를 통한 데이터 분석 및 탐색을 지원하고 있습니다. 여기에 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;run_bq_command&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;가 도입되면서, 이제 에이전트는 &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/sdk/reference/mcp#mcp-tools"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;bq CLI&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;의 모든 기능을 활용해 리소스 할당, 작업 모니터링, 작업 예약과 같은 고급 BigQuery 작업을 수행할 수 있게 되었습니다. 주요 기능은 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;예약된 쿼리 자동화&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: 에이전트가 BigQuery Data Transfer Service 구성을 사용하여 쿼리 예약 작업을 자동으로 수행합니다. &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;작업 및 리소스 관리&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: 처리된 데이터 볼륨, 슬롯 사용량, 실행 계획을 포함한 쿼리 실행 세부정보에 대한 심층적인 인사이트를 얻고 예약을 관리합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;액세스 및 권한 제어:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 데이터 관리자와 소유자는 에이전트를 통해 직접 테이블 권한을 검사하고 업데이트할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/original_images/2_JA5HWbH.gif"
        
          alt="2"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;가격 책정 및 가용성&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Google Cloud CLI MCP 서버를 오늘부터 공개 프리뷰로 만나보실 수 있습니다. MCP 서버 자체를 사용하는 데는 추가 요금이 부과되지 않습니다. 직접 생성한 GCP 리소스와 해당하는 데이터 전송 비용에 대해서만 비용을 지불하면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://docs.cloud.google.com/sdk/use-gcloud-mcp"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;시작하려면&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; Google Cloud 프로젝트에서 Cloud CLI Execution API (`&lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;cloudcli.googleapis.com&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;`)를 사용 설정하고, 에이전트 또는 사용자 ID에 필요한 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;MCP 도구 사용자&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; (`&lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;roles/mcp.toolUser&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;`) IAM 역할을 부여하고, MCP 클라이언트가 `cloudcli.googleapis.com/mcp`에 연결되도록 구성합니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;a href="https://docs.cloud.google.com/sdk/use-gcloud-mcp"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Google Cloud CLI 원격 MCP 서버 사용 가이드&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;a href="https://docs.cloud.google.com/sdk/reference/mcp#mcp-tools"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Google Cloud CLI MCP 참조&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;a href="https://docs.cloud.google.com/mcp/overview"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Google Cloud 원격 MCP 서버 개요&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;a href="https://docs.cloud.google.com/mcp/supported-products"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Google OneMCP 서버 전체 목록&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;a href="https://docs.cloud.google.com/mcp/set-up-authentication-mcp-servers"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Google 및 Google Cloud MCP 서버에 대한 인증 설정&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;a href="https://docs.cloud.google.com/gemini-enterprise-agent-platform/govern/agent-identity-overview"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Gemini Enterprise Agent Platform 및 에이전트 아이덴티티 개요&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;a href="https://www.youtube.com/watch?v=-fb0ycu4kiU" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Cloud CLI 원격 MCP 서버로 Google Cloud 자동화하기&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description><pubDate>Sun, 11 Oct 2026 19:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/ko/products/ai-machine-learning/google-cloud-cli-remote-mcp-server-in-preview/</guid><category>Data Analytics</category><category>Developers &amp; Practitioners</category><category>AI &amp; Machine Learning</category><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>Google Cloud CLI 원격 MCP 서버로 에이전트 역량 강화</title><description></description><site_name>Google</site_name><url>https://cloud.google.com/blog/ko/products/ai-machine-learning/google-cloud-cli-remote-mcp-server-in-preview/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Prosper Nwankpa</name><title>Senior Engineering Manager, Google Cloud</title><department></department><company></company></author><author xmlns:author="http://www.w3.org/2005/Atom"><name>Adam Hwang</name><title>Software Engineering Manager, Google Cloud</title><department></department><company></company></author></item><item><title>서버 측 Cloud Swift SDK 소개</title><link>https://cloud.google.com/blog/ko/topics/developers-practitioners/introducing-the-server-side-cloud-swift-sdk/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;*이 콘텐츠는 AI 번역 도구를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역에는 오류나 누락이 포함될 수 있습니다. 정확한 정보는 &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/topics/developers-practitioners/introducing-the-server-side-cloud-swift-sdk?e=0&amp;amp;hl=en"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;영문 원본&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;을 참고해 주시기 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;수년 동안 &lt;/span&gt;&lt;a href="https://swift.org/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Swift&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;는 주로 Apple 클라이언트 기기와 연결된 UI 언어로 인식되었습니다. Swift 6와 엄격한 동시 실행 검사를 통해 Swift는 Rust와 유사한 데이터 경합 안전성과 예측 가능한 참조 카운트 성능을 결합하여 실행 가능한 시스템 및 클라우드 언어로 거듭났습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이 생태계를 지원하기 위해 Google 엔지니어링팀은 공식 &lt;/span&gt;&lt;a href="https://github.com/googleapis/google-cloud-swift" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Swift용 Google Cloud API 클라이언트 라이브러리&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;를 출시했습니다. Swift 6.2 이상을 위해 처음부터 새로 빌드된 이 새로운 SDK는 최신 비블로킹 &lt;/span&gt;&lt;a href="https://github.com/apple/swift-nio" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Swift NIO&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 이벤트 루프, HTTP/2 멀티플렉싱, &lt;/span&gt;&lt;a href="https://grpc.io/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;gRPC&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 전송, 비용이 들지 않는 컴파일 시간 데이터 경합 안전성을 사용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이 글에서는 시작하는 데 필요한 모든 정보와 서버 측 Cloud Swift SDK(&lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;google-cloud-swift&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;)의 작동 방식을 설명합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;서버 측 Swift 및 클라우드 네이티브 동시 실행의 부상&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;기존 백엔드 개발에서는 개발자 편의성과 리소스 사용률 사이에서 절충점을 찾아야 하는 경우가 많습니다. 관리형 런타임은 빠른 개발을 가능하게 하지만, 하위 수준 시스템 언어는 메모리 및 CPU 사용량을 더 세밀하게 제어할 수 있는 반면 기능 속도가 저하되는 경우가 많습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;서버 측 Swift는 이 둘 사이에서 실용적인 균형을 맞추는 것을 목표로 합니다. Swift는 가벼운 런타임과 자동 참조 카운팅(ARC)을 표현력 있는 문법과 결합합니다. 무엇보다도 Swift 6에는 컴파일 시간 동시 실행 검사가 도입되었습니다. 클라우드 마이크로서비스 전반에서 비동기 태스크 간에 상태를 공유할 때 컴파일러는 유형이 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;Sendable&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;을 준수하도록 강제합니다. 데이터 경합은 바이너리가 컴파일되거나 프로덕션에 도달하기 전에 편집기에서 포착됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;네트워크 계층에서 &lt;/span&gt;&lt;a href="https://cloud.google.com/"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Google Cloud&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; API에 대한 모든 요청은 연결당 시스템 스레드를 생성하지 않고 멀티코어 &lt;/span&gt;&lt;a href="https://www.kernel.org/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Linux&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 서버 환경에서 확장되는 이벤트 기반 비차단 소켓을 통해 실행됩니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/sdk-architecture.max-1000x1000.png"
        
          alt="sdk-architecture"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;Swift SDK 활용 위치&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;서버 측 Cloud Swift SDK는 서버, 컨테이너, 자동화된 DevOps 환경을 위해 설계되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://hummingbird.codes/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Hummingbird&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 또는 &lt;/span&gt;&lt;a href="https://vapor.codes/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Vapor&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;와 같은 Swift 웹 프레임워크로 처리량이 높은 마이크로서비스를 빌드할 때 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;google-cloud-swift&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;는 Cloud Storage, AI, Identity and Access Management(IAM) 및 100개 이상의 다른 Google Cloud 서비스에 대한 네이티브 액세스를 제공합니다. Linux에서 실행 파일을 컨테이너화하고 &lt;/span&gt;&lt;a href="https://cloud.google.com/run"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Cloud Run&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, &lt;/span&gt;&lt;a href="https://cloud.google.com/kubernetes-engine"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Google Kubernetes Engine(GKE)&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 또는 &lt;/span&gt;&lt;a href="https://cloud.google.com/compute"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Compute Engine&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; VM에 직접 배포할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;SDK는 macOS 및 Linux에서 컴파일되므로 원하는 개발 환경에서 백엔드를 개발한 다음 프로덕션에 원활하게 배포할 수 있습니다. 또한 프런트엔드와 백엔드 모두에서 Swift를 사용하면 애플리케이션별 유형을 두 환경에서 공유할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;SDK는 플랫폼 엔지니어링과 DevOps 자동화에도 탁월합니다. 개발자 노트북 또는 CI/CD 파이프라인 내에서 실행되는 크로스 플랫폼 CLI 유틸리티와 데이터 순환 스크립트를 작성할 수 있습니다. 이러한 도구는 &lt;/span&gt;&lt;a href="https://cloud.google.com/docs/authentication/application-default-credentials"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;애플리케이션 기본 사용자 인증 정보(ADC)&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 또는 &lt;/span&gt;&lt;a href="https://cloud.google.com/iam/docs/workload-identity-federation"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;워크로드 아이덴티티 제휴&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;를 사용하여 Google Cloud에 자동으로 인증합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.apple.com/app-store/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Apple App Store&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;용 &lt;/span&gt;&lt;a href="https://developer.apple.com/ios/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;iOS&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;, &lt;/span&gt;&lt;a href="https://www.apple.com/ipados/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;iPadOS&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 또는 &lt;/span&gt;&lt;a href="https://www.apple.com/apple-vision-pro/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;visionOS&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 앱을 빌드하는 경우 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;google-cloud-swift&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;를 클라이언트 번들에 직접 삽입해서는 안 됩니다. 클라이언트 바이너리 내에서 Google Cloud 서비스 계정 키 또는 관리 사용자 인증 정보를 전송하면 보안 위험이 발생합니다. 직접적인 클라이언트 측 기능의 경우 &lt;/span&gt;&lt;a href="https://github.com/firebase/firebase-ios-sdk" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Apple 플랫폼용 Firebase SDK&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;를 사용하여 사용자 인증, 실시간 &lt;/span&gt;&lt;a href="https://cloud.google.com/firestore"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Firestore&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 동기화, 클라이언트 측 보안 규칙을 처리하거나 자체 Cloud Run 백엔드 API를 통해 요청을 라우팅합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;IDE 및 패키지 시작하기&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code style="vertical-align: baseline;"&gt;google-cloud-swift&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;는 Linux와 macOS를 동등하게 지원하므로 Apple 하드웨어에서 &lt;/span&gt;&lt;a href="https://developer.apple.com/xcode/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Xcode&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;를 사용하거나 Linux 워크스테이션에서 &lt;/span&gt;&lt;a href="https://code.visualstudio.com/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Visual Studio Code&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 및 &lt;/span&gt;&lt;a href="https://swift.org/install/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;swiftly&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;를 사용하여 개발할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;code style="vertical-align: baseline;"&gt;swiftly&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; CLI 설치 프로그램을 사용하여 Linux 워크스테이션에 공식 Swift 컴파일러를 설치하려면 다음을 실행합니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;curl -O https://download.swift.org/swiftly/linux/swiftly-$(uname -m).tar.gz &amp;amp;&amp;amp;\r\ntar zxf swiftly-$(uname -m).tar.gz &amp;amp;&amp;amp;\r\n./swiftly init --quiet-shell-followup &amp;amp;&amp;amp;\r\n. &amp;quot;${SWIFTLY_HOME_DIR:-$HOME/.local/share/swiftly}/env.sh&amp;quot; &amp;amp;&amp;amp;\r\nhash -r&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafee96f50&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;또는 Ubuntu, Debian, Fedora 또는 Amazon Linux용 공식 &lt;/span&gt;&lt;a href="https://www.swift.org/download/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Swift 다운로드&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;에서 사전 빌드된 도구 모음 tarball을 직접 다운로드할 수 있습니다. &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;google-cloud-swift&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;에는 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;Swift 6.2 이상&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;이 필요하므로 설치 후 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;swift --version&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;으로 컴파일러 버전을 확인하세요.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Linux 파일 시스템에서 클론할 때 &lt;/span&gt;&lt;a href="https://swift.org/package-manager/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Swift Package Manager&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 베어 저장소 신뢰 경고를 해결하려면 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;git config --global safe.bareRepository all&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;을 사용하여 빌드하기 전에 &lt;/span&gt;&lt;a href="https://git-scm.com/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Git&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;을 구성합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;필요한 패키지를 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;Package.swift&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 매니페스트에 추가하세요.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;swift package add-dependency https://github.com/googleapis/swift-google-cloud-language-v2.git --from 0.4.0\r\nswift package add-target-dependency GoogleCloudLanguageV2 CloudBackendService --package swift-google-cloud-language-v2&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafed474d0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;macOS에서는 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;platforms&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 지시어를 변경해야 합니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;// swift-tools-version: 6.2\r\nimport PackageDescription\r\n\r\nlet package = Package(\r\n  name: &amp;quot;CloudBackendService&amp;quot;,\r\n  // Applied when compiling on Darwin/macOS; ignored by SPM on Linux targets\r\n  platforms: [.macOS(.v15)],\r\n ... ...&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafed7cb50&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph"&gt;&lt;p data-block-key="bngnr"&gt;대부분의 환경에서 기본 초기화된 클라이언트는 다음과 같이 요청할 수 있습니다.&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;import Foundation\r\nimport GoogleCloudLanguageV2\r\n\r\nfunc analyzeTextSentiment(text: String) async throws {\r\n  // Initialize explicit API key credentials\r\n  let client = try LanguageServiceClient()\r\n\r\n  // Configure request using structured builder closure\r\n  let document = Document().with {\r\n    $0.type = .plainText\r\n    $0.source = .content(text)\r\n  }\r\n\r\n  let response = try await client.analyzeSentiment(\r\n    request: AnalyzeSentimentRequest().with { $0.document = document }\r\n  )\r\n\r\n  if let sentiment = response.documentSentiment {\r\n    print(&amp;quot;Document sentiment score: \\(sentiment.score)&amp;quot;)\r\n  }\r\n}&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafed7ff50&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;code style="vertical-align: baseline;"&gt;Document().with { … }&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;가 깔끔하고 스레드 안전한 구성 클로저를 제공하여 어떻게 장황한 임시 변수나 변경 setter를 방지하는지 주의 깊게 살펴보세요.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;네트워킹, 전송, 인증&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;저장소는 인프라 프리미티브를 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;packages/&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 아래의 모듈식 패키지로 분할합니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;code style="vertical-align: baseline;"&gt;swift-google-cloud-auth&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;: &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/docs/authentication/application-default-credentials"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;애플리케이션 기본 사용자 인증 정보&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 검색, 서비스 계정 JWT 서명, 워크로드 아이덴티티 제휴를 위한 외부 계정 교환, API 키를 구현합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;code style="vertical-align: baseline;"&gt;swift-google-cloud-wkt&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;: Google 프로토콜 버퍼의 잘 알려진 유형에 대한 관용적인 Swift 유형을 제공합니다. 여기에는 Swift의 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;Date&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;에 깔끔하게 연결되는 나노초 정밀도의 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;Timestamp&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 표현이 포함됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;code style="vertical-align: baseline;"&gt;swift-google-cloud-gax&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;: 자동 재시도 루프, 지수 백오프, 페이지로 나누기 상태 머신과 같은 Google API 확장 프로그램을 처리합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;인수 없이 클라이언트 라이브러리를 초기화하면 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;Credentials.default()&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;가 환경(&lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;GOOGLE_APPLICATION_CREDENTIALS&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;, 할당량 프로젝트 변수 또는 로컬 Google Cloud CLI 구성)을 자동으로 스캔하고 gRPC 또는 HTTP/2를 통해 연결을 인증합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;API 키로 사용자 인증 정보를 프로그래매틱 방식으로 재정의하거나 커스텀 액세스 헤더를 연결해야 하는 경우 명시적 구성 옵션을 전달할 수 있습니다. 예를 들어 이전 예시를 수정하여 다음을 사용할 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;import Foundation\r\nimport GoogleCloudAuth\r\nimport GoogleCloudGax\r\nimport GoogleCloudLanguageV2\r\n\r\nfunc analyzeTextSentiment(apiKey: String, text: String) async throws {\r\n  // Initialize explicit API key credentials\r\n  let credentials = try Credentials(configuration: .apiKey(apiKey))\r\n  let client = try LanguageServiceClient(\r\n    ClientOptions().with { $0.credentials = credentials }\r\n  )\r\n\r\n  // Configure request using structured builder closure\r\n  let document = Document().with {\r\n    $0.type = .plainText\r\n    $0.source = .content(text)\r\n  }\r\n\r\n  let response = try await client.analyzeSentiment(\r\n    request: AnalyzeSentimentRequest().with { $0.document = document }\r\n  )\r\n\r\n  if let sentiment = response.documentSentiment {\r\n    print(&amp;quot;Document sentiment score: \\(sentiment.score)&amp;quot;)\r\n  }\r\n}&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafed7f790&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;자동 생성된 클라이언트 생태계&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Google Cloud는 스키마가 정기적으로 업데이트되는 방대한 API 생태계를 운영합니다. &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;google-cloud-swift&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;를 지원하는 팀은 코드 생성기를 사용하여 최신 기능과 새로운 API로 클라이언트 라이브러리를 자동으로 업데이트합니다. 코드 생성기를 사용하면 중단되는 브레이킹 체인지 없이 안정적인 API를 생성할 수 있습니다. 출시는 정해진 주기에 따라 이루어지지만, 특정 기능이나 API가 긴급하게 필요한 경우 Cloud Customer Care에 문의하세요.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://cloud.google.com/secret-manager"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Secret Manager&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;에서 키를 순환해야 하거나 &lt;/span&gt;&lt;a href="https://cloud.google.com/vertex-ai/generative-ai/docs/gemini-v1"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Gemini Enterprise Agent Platform&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;에서 &lt;/span&gt;&lt;a href="https://cloud.google.com/vertex-ai"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Gemini API&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;를 통해 멀티모달 추론 모델을 호출해야 하는 경우, 생성된 SDK는 일관된 이름 지정 및 async/await 서명을 따릅니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이렇게 생성된 클라이언트는 일반 단항 RPC 래퍼 이상의 기능을 제공합니다. 또한 애플리케이션 개발을 간소화하는 래퍼도 제공합니다. 예를 들어 긴 결과를 반복하려면 하나의 RPC로 결과 페이지를 가져오고, 결과 페이지를 반복한 다음, 다음 페이지를 검색하기 위한 새 요청을 준비해야 합니다. 생성된 클라이언트를 사용하면 이 과정이 비동기 반복자가 됩니다. 다음 예시는 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;GoogleCloudSecretManagerV1&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;을 사용하여 프로젝트 보안 비밀을 쿼리하는 방법을 보여줍니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;import Foundation\r\nimport GoogleCloudSecretManagerV1\r\n\r\n@main\r\nstruct SecretManagerQuickstart {\r\n  static func main() async throws {\r\n    guard let projectId = CommandLine.arguments.dropFirst().first else {\r\n      print(&amp;quot;Usage: SecretManagerQuickstart &amp;lt;projectId&amp;gt;&amp;quot;)\r\n      exit(1)\r\n    }\r\n\r\n    // Connects using Application Default Credentials automatically\r\n    let client = try SecretManagerServiceClient()\r\n\r\n    let request = ListSecretsRequest().with {\r\n      $0.parent = &amp;quot;projects/\\(projectId)&amp;quot;\r\n    }\r\n\r\n    // Async sequence streams pages of secrets automatically\r\n    print(&amp;quot;Secrets in project \\(projectId):&amp;quot;)\r\n    for try await item in try client.listSecretsByItem(request: request) {\r\n      print(&amp;quot; - \\(item.name)&amp;quot;)\r\n    }\r\n  }\r\n}&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafed7ffd0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;페이지로 나눈 응답은 비동기 시퀀스(&lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;AsyncSequence&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;)를 반환합니다. 클라이언트 라이브러리가 비차단 NIO 채널을 통해 백그라운드에서 후속 페이지를 가져오는 동안 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;for try await&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;를 사용하여 항목을 반복할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;다음 단계&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code style="vertical-align: baseline;"&gt;google-cloud-swift&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;를 사용하면 서버 측 Swift 개발자가 컴파일 시간 경합 안전, 네이티브 비동기/대기 인체공학적 API, OS 스레드 혼잡 없는 엔드 투 엔드 클라우드 인프라를 작성할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;소스 코드를 검사하거나, 문제를 열거나, 새 베니어를 제공하려면 공식 저장소인 &lt;/span&gt;&lt;a href="https://github.com/googleapis/google-cloud-swift" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;googleapis/google-cloud-swift&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;를 방문하세요.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;서버 측 Swift 아키텍처 또는 Cloud Run 컨테이너화에 대해 논의하고 싶으신가요? &lt;/span&gt;&lt;a href="https://developers.google.com/program" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Google Developer Program&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;에 가입하여 대화를 이어가세요.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;</description><pubDate>Sun, 11 Oct 2026 19:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/ko/topics/developers-practitioners/introducing-the-server-side-cloud-swift-sdk/</guid><category>Developers &amp; Practitioners</category><media:content height="540" url="https://storage.googleapis.com/gweb-cloudblog-publish/images/introducing-the-server-side-cloud-swift-sdk-.max-600x600.png" width="540"></media:content><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>서버 측 Cloud Swift SDK 소개</title><description></description><image>https://storage.googleapis.com/gweb-cloudblog-publish/images/introducing-the-server-side-cloud-swift-sdk-.max-600x600.png</image><site_name>Google</site_name><url>https://cloud.google.com/blog/ko/topics/developers-practitioners/introducing-the-server-side-cloud-swift-sdk/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Karl Weinmeister</name><title>Director, Developer Relations</title><department></department><company></company></author><author xmlns:author="http://www.w3.org/2005/Atom"><name>Carlos O'Ryan</name><title>Software Engineer</title><department></department><company></company></author></item><item><title>저렴한 비용과 원활한 개발로 Managed Lustre 범용화</title><link>https://cloud.google.com/blog/ko/topics/developers-practitioners/democratizing-managed-lustre-with-lower-cost-and-frictionless-development/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;*이 콘텐츠는 AI 번역 도구를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역에는 오류나 누락이 포함될 수 있습니다. 정확한 정보는 &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/topics/developers-practitioners/democratizing-managed-lustre-with-lower-cost-and-frictionless-development?e=0&amp;amp;hl=en"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;영문 원본&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;을 참고해 주시기 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이 글은 Google Cloud가 고성능 병렬 파일 시스템의 기본 가치인 TB/s 처리량, 대규모 클라이언트 환경에서의 1밀리초 미만 지연 시간, POSIX 지원을 어떻게 더 광범위한 사용 사례와 사용자에게 제공하고 있는지 살펴보는 2부 시리즈 중 1부입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이전에는 병렬 파일 시스템의 비용과 특수 목적이라는 특성으로 인해 콜드 데이터를 파일 시스템 외부에 저장해야 했고, AI 개발자들이 코드 작성, 라이브러리 컴파일, 저장소 관리를 위해 별도의 느린 환경을 유지해야 했습니다. 이러한 단편화는 수동 데이터 스테이징, 데이터 세트 복사, 분리된 네임스페이스 관리의 반복 업무를 가중시킵니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Google Cloud Managed Lustre는 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;GB당 월 6센트의 동적 등급&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;을 통해 이러한 문제를 해결하고 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;다양한 개발 작업과 워크로드에 맞게 Managed Lustre 성능을 최적화하여 Managed Lustre를 고성능 AI 및 HPC 워크로드를 위한 '원스톱 솔루션'으로 만들고 있습니다.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;비용 절감: 동적 등급을 통해 더 적은 비용으로 더 많은 Lustre 활용&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Managed Lustre 동적 등급은 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;핫 데이터에 대해 1밀리초 미만의 지연 시간을 제공하므로 모든 데이터를 단일 네임스페이스에 저장할 수 있으며 비용은 GB당 월 6센트&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;에 불과합니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;처리량, 용량 확장, 클라이언트 확장:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 처리량은 최대 80PB까지 용량에 따라 선형적으로 확장되며, 수만 명의 클라이언트로 확장해도 핫 데이터의 지연 시간은 1밀리초 미만으로 안정적으로 유지됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;단일 정액 요금:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 예측 가능한 가격 책정 디스크 미디어 유형, 네임스페이스 내 데이터 이동 또는 메타데이터 IOPS에 대해 별도 요금이 부과되지 않습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;읽기 지연 시간:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 고성능 캐시(SSD)에 대해 1밀리초 미만의 지연 시간을 제공합니다.  용량 풀('HDD')은 Google Cloud Hyperdisk Throughput을 기반으로 빌드되며 &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/compute/docs/disks/hd-types/hyperdisk-throughput"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;평균 읽기 지연 시간은 10~30ms&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;strong style="vertical-align: baseline;"&gt;동적 등급에 권장되는 워크로드&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;다중 에포크 학습 및/또는 최적화된 가져오기 크기를 사용한 학습:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 핫 데이터는 첫 번째 실행 후 고성능 캐시(SSD)로 승격됩니다. 데이터 미리 가져오기 용량을 늘리면 동적 등급 비용 구조를 활용하고 지연 시간이 짧은 SSD의 이점을 누릴 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;쓰기 집약적 체크포인트:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 버스트 체크포인트 쓰기가 고성능 캐시에 직접 저장됩니다. 오래된 체크포인트는 용량 풀(HDD)로 투명하게 강등됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;빠른 체크포인트 복원:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 새로운 체크포인트가 고성능 캐시에 기록되어 지연 시간이 짧은 체크포인트 복원이 가능합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;개발자를 위한 대화형 신속성:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Git 클론, 라이브러리 컴파일, 노트북 실행과 같은 지연 시간이 짧은 작업은 대규모 학습 세트를 호스팅하는 동일한 공유 작업공간에서 로컬 디스크와 유사한 성능(평균 읽기 지연 시간 약 300µs)으로 활용할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;원활한 개발: 개발자 워크로드를 위한 원스톱 솔루션인 Lustre&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Managed Lustre는 대규모 AI 및 HPC 워크로드(체크포인트/재시작/데이터 로드)를 위한 확장성 외에도 대화형 작업에 대한 요구사항을 충족하므로, 개발자는 Managed Lustre에서 시작하여 전체 워크로드 수명 주기 동안 Managed Lustre를 계속 사용할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;통합 기반 및 대화형 성능&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;AI 및 HPC 수명 주기를 단일 네임스페이스로 통합하여 대화형 작업에 '로컬 디스크'와 같은 사용감을 제공합니다(&lt;/span&gt;&lt;a href="https://cloud.google.com/products/managed-lustre"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Salesforce 등이 경험한 Managed Lustre의 지연 시간 이점&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;에 대해 자세히 알아보기).&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;지연 시간:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 평균 읽기 지연 시간이 약 300µs로, 다른 분산 파일 시스템보다 최대 4배 더 나은 응답성을 제공합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;설정 가속화:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 약 2분 만에 Linux 커널의 tar 압축을 풀고(대체 파일 솔루션보다 4.7배 빠름), 약 40초 만에 20개 작업자 병렬 git clone을 실행하고, 약 200초 만에 Python을 컴파일합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/democratizing-lustre-with-lower-cost-and-f.max-1000x1000.jpg"
        
          alt="democratizing-lustre-with-lower-cost-and-frictionless-development-02-managed-lustre-performance-values"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/democratizing-lustre-with-lower-cost-and-f.max-1000x1000_xLOfL6w.jpg"
        
          alt="democratizing-lustre-with-lower-cost-and-frictionless-development-01-performance-comparision"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;동시 실행 브로드캐스트 및 클러스터 시작&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Managed Lustre는 클러스터 초기화 중 스토리지 병목 현상을 방지하여 GPU ROI를 극대화합니다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;수천 개의 워커 노드가 공유 모델 체크포인트, 기본 가중치, 컨테이너 레이어와 같은 동일한 파일을 동시에 읽으려고 할 경우, 기존의 분산 파일 시스템은 국지적인 핫스팟으로 인해 병목 현상이 발생하여 고가의 GPU 클러스터가 몇 분 동안 유휴 상태로 방치될 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;동일한 파일을 읽는 다수의 클라이언트에 대한 집계 처리량 개선:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 대체 파일 솔루션에 비해 67% 개선된 성능을 보여줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;병렬 로드:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; PyTorch와 같은 라이브러리를 4,000개 이상의 프로세스에서 60초 이내에 가져옵니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/democratizing-lustre-with-lower-cost-and-f.max-1000x1000_9kShfM1.jpg"
        
          alt="democratizing-lustre-with-lower-cost-and-frictionless-development-03-performance-advantage"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;원스톱 워크플로를 직접 실행해 보세요&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Google이 실행한 테스트 코드로 자체 테스트를 수행해 보세요.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;대화형 액세스를 위한 짧은 지연 시간&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://github.com/axboe/fio" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;fio&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;를 사용하여 동시성이 낮은 소규모 읽기 및 쓰기를 에뮬레이션했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;&lt;span style="vertical-align: super;"&gt;1 스토리지 시스템 사양: Managed Lustre의 TiB 등급당 500MBps, 108,000GiB 용량. 102,400GiB 용량의 영역 Filestore. 동일한 40GiB 파일을 읽는 2,048개의 클라이언트 VM에 대해 평균 처리량 36.7GB/s.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;# Read workload\r\nfio --ioengine=libaio --filesize=100M --ramp_time=2s \\\r\n    --runtime=2m --time_based --numjobs=1 --direct=1 --verify=0 --randrepeat=0 \\\r\n    --group_reporting --directory=~/LUSTRE_MOUNT \\\r\n    --name=randread --blocksize=4k --iodepth=1 --readwrite=randread \\\r\n    --buffer_compress_percentage=50\r\n\r\n# Write workload\r\nfio --ioengine=libaio --filesize=100M --ramp_time=2s \\\r\n    --runtime=2m --time_based --numjobs=1 --direct=1 --verify=0 --randrepeat=0 \\\r\n    --group_reporting --directory=~/LUSTRE_MOUNT \\\r\n    --name=randwrite --blocksize=4k --iodepth=1 --readwrite=randwrite \\\r\n    --buffer_compress_percentage=50&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbaff0d2990&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;빠른 설정&lt;/strong&gt;&lt;/h3&gt;
&lt;h4&gt;&lt;strong style="vertical-align: baseline;"&gt;Linux untar 실행 방법&lt;/strong&gt;&lt;/h4&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;# Download a kernel tarball\r\nwget -P /tmp https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.18.9.tar.xz\r\n\r\n# Extract the archive to the Lustre mount\r\nmkdir ~/LUSTRE_MOUNT/kernel\r\ntar -C ~/LUSTRE_MOUNT/kernel -xf /tmp/linux-5.18.9.tar.xz&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbaff0d1a10&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;위의 사용 사례에서는 루트로 실행할 때 발생할 수 있는 메타데이터 성능 저하를 방지해야 합니다(즉, &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;tar&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;가 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;chown&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 및 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;chmod&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;를 호출하여 추출된 파일의 소유자 및 권한을 보관 파일에 기록된 것과 일치시킴).  그래도 루트로 실행하려는 경우(그리고 이 접근 방식이 설정과 호환되는지 확인한 경우) &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;`--no-same-owner --no-same-permissions`&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;를 지정하여 추출된 파일이 루트를 소유자로 유지하고 루트의 기본 파일 권한을 갖도록 할 수 있습니다. 즉, 루트 권한으로 추출할 때 보관 파일의 소유자 및 권한을 무시함으로써 루트가 아닌 사용자로 추출하는 것처럼 작동하게 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;strong style="vertical-align: baseline;"&gt;Python gitclone 실행 방법&lt;/strong&gt;&lt;/h4&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;git config --global checkout.workers 20\r\nmkdir ~/LUSTRE_MOUNT/python\r\ngit clone https://github.com/python/cpython.git ~/LUSTRE_MOUNT/python&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbaff0d3290&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Python 컴파일 실행 방법&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;pushd ~/LUSTRE_MOUNT/python\r\n./configure &amp;gt; /dev/null\r\nmake &amp;gt; /dev/null\r\npopd&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafef7d7d0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;대규모 배포&lt;/strong&gt;&lt;/h3&gt;
&lt;h4&gt;&lt;strong style="vertical-align: baseline;"&gt;하나의 대용량 파일을 여러 노드에 배포하기 위한 집계 처리량&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;각 클라이언트 VM에서 다음을 실행합니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;# Start fio in server mode\r\nfio --server&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbaff18fad0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph"&gt;&lt;p data-block-key="iadne"&gt;선택한 클라이언트 VM에서 다음을 실행합니다.&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;quot;# Create a 40 GiB file\r\nfio --name=job1 \\\r\n    --ioengine=libaio \\\r\n    --direct=1 \\\r\n    --buffer_compress_percentage=50 \\\r\n    --blocksize=4m \\\r\n    --iodepth=32 \\\r\n    --filesize=40g \\\r\n    --readwrite=write \\\r\n    --filename ~/LUSTRE_MOUNT/40gb_test\r\n\r\n# Create an fio job file for the read workload\r\ncat &amp;lt;&amp;lt;&amp;#x27;EOF&amp;#x27; &amp;gt; /tmp/read.fio\r\n[job1]\r\nfilename=${HOME}/LUSTRE_MOUNT/40gb_test\r\nrw=read\r\nbs=4m\r\nexitall_on_error=1\r\nEOF\r\n\r\n# Run the read workload using all client VMs in ~/hostfile\r\nfio --client ~/hostfile /tmp/read.fio&amp;quot;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafef4ca10&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h4&gt;&lt;strong style="vertical-align: baseline;"&gt;여러 프로세스에서 라이브러리를 동시에 로드&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;선택한 클라이언트 VM에서 다음을 실행합니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;# Install PyTorch in a virtual env\r\npython3 -m venv ~/LUSTRE_MOUNT/env\r\nsource ~/LUSTRE_MOUNT/env/bin/activate\r\npip3 install --upgrade pip\r\npip3 install torch torchvision torchaudio \r\ndeactivate\r\n\r\n# Import PyTorch on all client VMs in ~/hostfile, 4 processes per host\r\nmpirun --allow-run-as-root --oversubscribe --hostfile ~/hostfile -N 4 \\\r\n  bash -c \&amp;#x27;source ~/LUSTRE_MOUNT/env/bin/activate &amp;amp;&amp;amp; python3 -c &amp;quot;import torch&amp;quot;\&amp;#x27;&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafed7f110&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;향후 계획 및 다음 단계&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Google Cloud Managed Lustre는 수동 데이터 스테이징 부담을 없애고 동적 등급으로 진입 비용을 낮춤으로써, 단일 목적의 엘리트 엔진에서 전체 AI 수명 주기를 위한 다목적 통합 스토리지 패브릭으로 진화하고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이 시리즈의 2부에서는 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;곧 출시될 객체 통합 기능&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;을 중점적으로 다룰 예정입니다. 많은 기대 부탁드립니다.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;다음 단계&lt;/strong&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;벤치마크를 직접 실행해 보세요(아직 실행하지 않은 경우). &lt;/span&gt;&lt;a href="https://console.cloud.google.com/"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Google Cloud 콘솔&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;을 사용하여 Google Cloud Managed Lustre 인스턴스를 배포하고 위에 제공된 테스트를 실행하여 자체 워크로드를 벤치마크해 보세요.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;동적 등급 살펴보기: 자세한 내용은 &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/managed-lustre/docs/performance-tiers"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Google Cloud Managed Lustre 문서&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;를 참조하세요.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;2부를 기대해 주세요. 이 시리즈의 다음 편에서는 곧 출시될 객체 통합 기능과 이 기능이 AI 및 HPC 스토리지를 어떻게 더욱 간소화하는지에 대해 자세히 살펴보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;Google Cloud Managed Lustre에서 개발부터 학습까지의 수명 주기를 중앙화하세요.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description><pubDate>Sun, 11 Oct 2026 19:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/ko/topics/developers-practitioners/democratizing-managed-lustre-with-lower-cost-and-frictionless-development/</guid><category>Developers &amp; Practitioners</category><media:content height="540" url="https://storage.googleapis.com/gweb-cloudblog-publish/images/democratizing-lustre-with-lower-cost-and-fri.max-600x600_y4nYtDt.jpg" width="540"></media:content><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>저렴한 비용과 원활한 개발로 Managed Lustre 범용화</title><description></description><image>https://storage.googleapis.com/gweb-cloudblog-publish/images/democratizing-lustre-with-lower-cost-and-fri.max-600x600_y4nYtDt.jpg</image><site_name>Google</site_name><url>https://cloud.google.com/blog/ko/topics/developers-practitioners/democratizing-managed-lustre-with-lower-cost-and-frictionless-development/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Barak Epstein </name><title>Senior Product Manager, Google Cloud Managed Lustre</title><department></department><company></company></author><author xmlns:author="http://www.w3.org/2005/Atom"><name>Yuval Ehrental</name><title>Software Engineer, Google Cloud Managed Lustre</title><department></department><company></company></author></item><item><title>Data Agent Kit 정식 버전 출시: 모든 코딩 에이전트에 Google 데이터 클라우드 제공</title><link>https://cloud.google.com/blog/ko/topics/developers-practitioners/data-agent-kit-is-now-ga-bring-google-data-cloud-to-any-coding-agent/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;*이 콘텐츠는 AI 번역 도구를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역에는 오류나 누락이 포함될 수 있습니다. 정확한 정보는 &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/topics/developers-practitioners/data-agent-kit-is-now-ga-bring-google-data-cloud-to-any-coding-agent?e=0&amp;amp;hl=en"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;영문 원본&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;을 참고해 주시기 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;오늘&lt;/span&gt;&lt;a href="https://cloud.google.com/products/data-agent-kit?utm_campaign=CDR_0xaea1deef_default_b566338695&amp;amp;utm_medium=external&amp;amp;utm_source=blog"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Google Cloud Data Agent Kit&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;가 정식 버전으로 출시되었습니다. Data Agent Kit는 무료로 제공되는 모델 컨텍스트 프로토콜(MCP) 도구 및 에이전트 스킬 세트로, Antigravity, Claude Code, Codex 또는 기타 인기 도구를 사용하는지 여부와 관계없이 이미 사용 중인 코딩 에이전트를 Google Cloud 데이터 제품과 직접 연동할 수 있도록 지원합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;정식 버전에서는 개방형 레이크하우스에 대한&lt;/span&gt;&lt;a href="https://cloud.google.com/bigquery/docs/graph-overview?utm_campaign=CDR_0xaea1deef_default_b566338695&amp;amp;utm_medium=external&amp;amp;utm_source=blog"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;BigQuery Graph&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;,&lt;/span&gt;&lt;a href="https://cloud.google.com/bigtable?utm_campaign=CDR_0xaea1deef_default_b566338695&amp;amp;utm_medium=external&amp;amp;utm_source=blog"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Bigtable&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;,&lt;/span&gt;&lt;a href="https://cloud.google.com/dataproc-serverless/docs/overview?utm_campaign=CDR_0xaea1deef_default_b566338695&amp;amp;utm_medium=external&amp;amp;utm_source=blog"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Managed Service for Apache Spark&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 액세스 지원이 추가되고, 일상 업무를 더 빠르고 원활하게 만들어 주는 수십 가지 편의 기능이 개선되었습니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/original_images/00-data-agent-kit-is-now-ga-bring-google-data-cloud-to-any-coding-agent-da.gif"
        
          alt="00-data-agent-kit-is-now-ga-bring-google-data-cloud-to-any-coding-agent-dak-promo"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;Data Agent Kit란 무엇인가요?&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;코딩 에이전트가 SQL, PySpark, 파이프라인 코드를 작성하는 데 매우 능숙해졌습니다. 어떤 테이블이 존재하는지, 어떻게 파티셔닝되어 있는지, 팀에서 어떤 테이블을 신뢰하는지, 어젯밤 작업이 실패한 이유는 무엇인지 등, 환경에 대한 컨텍스트는 코딩 에이전트에 기본 제공되지 않습니다. 이러한 컨텍스트가 없으면 강력한 에이전트라도 가정을 바탕으로 작업해야 하므로, 결국 사용자가 스키마와 오류 로그를 채팅에 붙여넣어 부족한 부분을 채워야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Data Agent Kit는 두 가지 방식으로 이 격차를 메웁니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;MCP 도구:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 15개 이상의 Google 데이터 클라우드 서비스에 연결하여 에이전트가 라이브 환경에서 스키마를 검사하고, 쿼리를 실행하고, 작업 로그를 읽고, 리소스를 관리할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Google이 만든 스킬:&lt;/strong&gt;&lt;a href="https://github.com/GoogleCloudPlatform/data-agent-kit-plugin" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;/a&gt;&lt;strong style="vertical-align: baseline;"&gt;BigQuery SQL 최적화, Bigtable row key 설계, dbt(&lt;/strong&gt;&lt;a href="https://www.getdbt.com/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;데이터 빌드 도구&lt;/span&gt;&lt;/a&gt;&lt;strong style="vertical-align: baseline;"&gt;) 파이프라인 빌드와 같은 데이터 권장사항을 에이전트에 가르치는 Google Cloud 엔지니어의 &lt;/strong&gt;&lt;a href="https://github.com/GoogleCloudPlatform/data-agent-kit-plugin" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;오픈소스 지침&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Data Agent Kit는 VS Code, Antigravity IDE, Cursor, 기타 VS Code 호환 편집기용 IDE 확장 프로그램, Antigravity 2.0, Antigravity CLI, Claude Code, Codex용 플러그인, 또는 사전 설치되어 제공되는&lt;/span&gt;&lt;a href="https://cloud.google.com/shell?utm_campaign=CDR_0xaea1deef_default_b566338695&amp;amp;utm_medium=external&amp;amp;utm_source=blog"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Cloud Shell&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 및&lt;/span&gt;&lt;a href="https://cloud.google.com/workstations?utm_campaign=CDR_0xaea1deef_default_b566338695&amp;amp;utm_medium=external&amp;amp;utm_source=blog"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Cloud Workstations&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 등 이미 사용 중인 환경에서 바로 사용할 수 있습니다. 또한 IDE 확장 프로그램은 Google Cloud 콘솔의 경량 버전을 편집기에 제공하므로 창을 전환하지 않고도 데이터를 탐색하고, 쿼리를 실행하고, 에이전트의 작업을 검토할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;작동 방식&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;에이전트에게 "다음 달에 가장 많이 팔릴 제품의 수요를 예측하고 이를 충족할 만큼 재고가 충분한지 확인해 줘"라고 요청한다고 가정해 보겠습니다. Data Agent Kit는 관련 스킬을 로드하므로 에이전트는 작업에 대한 Google의 권장사항을 따릅니다. 이는&lt;/span&gt;&lt;a href="https://cloud.google.com/dataplex/docs/introduction?utm_campaign=CDR_0xaea1deef_default_b566338695&amp;amp;utm_medium=external&amp;amp;utm_source=blog"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Knowledge Catalog&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;를 검색하여 팀에서 신뢰하는 판매 및 인벤토리 테이블을 찾습니다. 그런 다음 MCP 도구를 사용하여&lt;/span&gt;&lt;a href="https://cloud.google.com/bigquery?utm_campaign=CDR_0xaea1deef_default_b566338695&amp;amp;utm_medium=external&amp;amp;utm_source=blog"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;BigQuery&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;에서 예측을 실행하고, PostgreSQL용 AlloyDB에서 현재 재고 수준을 확인하고, 결합된 답변을 편집기나 터미널로 다시 가져옵니다. 모든 단계는 자체 IAM 권한으로 실행됩니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/01-data-agent-kit-is-now-ga-bring-google-d.max-1000x1000.png"
        
          alt="01-data-agent-kit-is-now-ga-bring-google-data-cloud-to-any-coding-agent_how_it_works"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="qngqb"&gt;Data Agent Kit가 데이터에 연결하는 방법&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;빌드할 수 있는 항목&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Data Agent Kit는 분석, 운영 데이터베이스, 레이크하우스, 파이프라인을 지원합니다. 정식 버전의 새로운 기능부터 시작하여 실제로 어떤 모습인지 살펴보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;분석 및 그래프: BigQuery 및 BigQuery Graph(정식 버전의 새로운 기능)&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;그래프는 사람들이 함께 구매하는 제품이나 공급업체가 인벤토리에 연결되는 방식과 같은 관계를 탐색하는 자연스러운 방법입니다. 그래프를 빌드하려면 일반적으로 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;CREATE PROPERTY GRAPH&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; DDL을 직접 작성하고, GQL을 학습하고, 어떤 키가 실제로 에지를 형성하는지 파악해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;그 대신 원하는 그래프를 설명하면 에이전트가 그래프를 빌드합니다. &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;bigquery-graph-author&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 스킬은 테이블을 노드와 에지에 매핑하고, 제안된 각 관계를 실제 데이터와 대조하여 확인하고, 그래프를 만들기 전에 승인이 필요한 계획을 보여줍니다. 기존에 보유한 ER 다이어그램이나 데이터 모델에서 시작할 수도 있습니다. 그러면 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;bigquery-graph-query&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 스킬이 GQL을 작성하고, IDE의 그래프 시각화 도구를 통해 결과를 클릭하여 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/original_images/02-data-agent-kit-is-now-ga-bring-google-data-cloud-to-any-coding-agent_bq.gif"
        
          alt="02-data-agent-kit-is-now-ga-bring-google-data-cloud-to-any-coding-agent_bqgraph"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="qngqb"&gt;BigQuery 속성 그래프 빌드 및 시각화&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;운영 및 실시간 데이터베이스: Spanner, AlloyDB, Cloud SQL, Bigtable(정식 버전의 새로운 기능)&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;맞춤 피드, 실시간 카운터, 스토어의 '최근 본 항목' 레일과 같은 일부 기능은 즉시 로드되어야 합니다. Bigtable은 바로 이러한 용도로 설계되었으며, 잘 설계된 row key를 사용하면 그 효과를 톡톡히 볼 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;정식 버전 출시와 함께 Bigtable은&lt;/span&gt;&lt;a href="https://cloud.google.com/spanner?utm_campaign=CDR_0xaea1deef_default_b566338695&amp;amp;utm_medium=external&amp;amp;utm_source=blog"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Spanner&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;,&lt;/span&gt;&lt;a href="https://cloud.google.com/alloydb?utm_campaign=CDR_0xaea1deef_default_b566338695&amp;amp;utm_medium=external&amp;amp;utm_source=blog"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;AlloyDB&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;,&lt;/span&gt;&lt;a href="https://cloud.google.com/sql?utm_campaign=CDR_0xaea1deef_default_b566338695&amp;amp;utm_medium=external&amp;amp;utm_source=blog"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Cloud SQL&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;과 함께 Data Agent Kit에서 완전히 지원되는 데이터베이스가 되었습니다. 새로운 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;bigtable-basics&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 스킬은 데이터를 읽는 방식을 중심으로 스키마를 설계하고, 무엇이든 생성하기 전에 핫스팟과 전체 테이블 스캔을 플래그합니다. 그러면 에이전트가 테이블을 만들고 GoogleSQL로 쿼리할 수 있으며, column family는 읽을 수 있는 열로 평탄화됩니다. IDE에서 카탈로그 탐색기의 Bigtable 인스턴스와 테이블을 탐색하고 SQL 편집기에서 쿼리를 실행할 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/original_images/03-data-agent-kit-is-now-ga-bring-google-data-cloud-to-any-coding-agent_bi.gif"
        
          alt="03-data-agent-kit-is-now-ga-bring-google-data-cloud-to-any-coding-agent_bigtable"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="qngqb"&gt;에이전트 가이드 Bigtable 스키마 설계 및 쿼리&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;레이크하우스 및 Spark: Managed Service for Apache Spark 및 Lakehouse for Apache Iceberg(정식 버전의 새로운 기능)&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;에이전트는 이미 BigQuery를 통해 레이크하우스의 Apache Iceberg 테이블을 쿼리할 수 있습니다. 이제 클러스터를 관리할 필요 없이&lt;/span&gt;&lt;a href="https://cloud.google.com/dataproc-serverless/docs/overview?utm_campaign=CDR_0xaea1deef_default_b566338695&amp;amp;utm_medium=external&amp;amp;utm_source=blog"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Managed Service for Apache Spark&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;에서 서버리스 Spark를 통해 동일한 테이블을 사용할 수 있습니다. 각 세션은 상태를 유지하므로 임시 뷰가 문 간에 전달되며, 브랜치, 시간 이동, 스키마 변경을 포함한 Iceberg의 전체 특성 세트를 사용할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;테이블이 모두 Google Cloud에 있을 필요도 없습니다. &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;federate-lakehouse-catalog&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 스킬이 레이크하우스를 AWS Glue 및 Databricks Unity Catalog에 연결하므로 에이전트가 수집 파이프라인을 먼저 빌드하지 않고도 해당 데이터를 제자리에서 쿼리할 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/04-data-agent-kit-is-now-ga-bring-google-d.max-1000x1000.png"
        
          alt="04-data-agent-kit-is-now-ga-bring-google-data-cloud-to-any-coding-agent_lakehouse"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="qngqb"&gt;Managed Service for Apache Spark를 사용하여 Iceberg 테이블 브랜치 및 쿼리&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;파이프라인 및 조정: dbt, Dataform, Managed Service for Apache Airflow&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;로직이 작동하면 에이전트가 이를 자체적으로 실행되는 파이프라인으로 전환할 수 있습니다. dbt 또는&lt;/span&gt;&lt;a href="https://cloud.google.com/dataform?utm_campaign=CDR_0xaea1deef_default_b566338695&amp;amp;utm_medium=external&amp;amp;utm_source=blog"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Dataform&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 모델을 작성하면 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;gcp-pipeline-orchestration&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 스킬이 노트북과 함께&lt;/span&gt;&lt;a href="https://cloud.google.com/composer?utm_campaign=CDR_0xaea1deef_default_b566338695&amp;amp;utm_medium=external&amp;amp;utm_source=blog"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Managed Service for Apache Airflow&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;에서 오케스트레이션 파이프라인으로 예약합니다. 파이프라인에는 모델 업로드 또는 일괄 추론 실행과 같은 Gemini Enterprise Agent Platform 단계도 포함될 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;IDE에서 시각적 파이프라인 캔버스를 통해 각 실행을 추적할 수 있습니다. 작업에 주의가 필요한 경우 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;진단&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;을 클릭하여 로그를 에이전트에 전달하면 됩니다. Airflow 및 Spark 문제 해결 기술은 근본 원인을 추적하고 승인할 수 있는 수정사항을 제안합니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/original_images/05-data-agent-kit-is-now-ga-bring-google-data-cloud-to-any-coding-agent_pi.gif"
        
          alt="05-data-agent-kit-is-now-ga-bring-google-data-cloud-to-any-coding-agent_pipelines"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="qngqb"&gt;에이전트를 사용하여 실패한 Airflow DAG 문제 해결&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;개발자 환경 개선&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;정식 버전은 설정과 일상적인 워크플로도 간소화합니다. 시작할 때 한 번만 로그인하고 사용하는 Google Cloud 서비스를 선택하면 됩니다. Data Agent Kit는 수동 설정 파일 없이 필요한 API를 자동으로 사용 설정하고, 해당하는 스킬을 설치하고, MCP 서버를 구성합니다. IDE 내에서 SQL 편집기와 노트북은 이제 인라인 코드 생성, 테이블에 대한 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;@&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 참조, 제안된 변경사항에 대한 비교 뷰를 지원합니다. 또한 확장 프로그램은 활성 프로젝트, 열려 있는 파일, 방금 실행한 쿼리의 오류를 에이전트와 공유하므로 '이 쿼리 수정'을 요청하면 바로 작동합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;핵심 도구의 속도와 반응성도 개선되었습니다. 새 Spark 노트북은 Spark Connect 런타임을 자동으로 만들고 선택하며, 편집기의 Spark SQL 쿼리는 기본 제공 실행 측정항목과 함께 격리된 세션에서 실행됩니다. 이제 카탈로그 탐색기가 더 빠르게 로드되고 사이드바에 BigQuery 공개 데이터 세트가 포함됩니다. 튜닝된 노트북 스킬은 에이전트가 더 적은 토큰을 사용하면서 노트북 작업을 더 빠르게 완료하는 데 도움이 됩니다. &lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;엔터프라이즈 지원&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Data Agent Kit는 추가 비용 없이 포함되어 있으며, 에이전트가 사용하는 Google Cloud 서비스에 대한 표준 가격만 지불하면 됩니다. 또한 스킬은 에이전트가 파티션 키를 확인하고 BigQuery 쿼리를 실행하기 전에 드라이 런을 실행하여 실수로 전체 테이블을 스캔하는 것을 방지하는 등 비용을 고려한 쿼리 패턴을 사용하도록 유도합니다. 또한 스킬은 GitHub에서 오픈소스로 제공되므로 팀에서 이를 감사하거나 포크하거나 자체 내부 표준에 맞게 커스텀 스킬을 작성할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;액세스 제어를 위해 에이전트는 사용자 또는 사용자가 가장하는 서비스 계정으로 연결되어 행 및 열 수준 보안 정책이 자동으로 적용됩니다. 또한 관리자는 Identity and Access Management(IAM)를 통해 MCP 액세스를 제어하고,&lt;/span&gt;&lt;a href="https://cloud.google.com/security-command-center/docs/model-armor-overview?utm_campaign=CDR_0xaea1deef_default_b566338695&amp;amp;utm_medium=external&amp;amp;utm_source=blog"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Model Armor&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;를 통해 MCP 트래픽을 검사하고,&lt;/span&gt;&lt;a href="https://cloud.google.com/vpc-service-controls?utm_campaign=CDR_0xaea1deef_default_b566338695&amp;amp;utm_medium=external&amp;amp;utm_source=blog"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;VPC 서비스 제어&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 및 주 구성원 액세스 경계 정책을 통해 에이전트의 범위를 지정할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;설치 및 시작하기&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;IDE 또는 터미널에서 1분 이내에 Data Agent Kit를 설정할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;옵션 1: IDE 확장 프로그램 설치&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;IDE 확장 프로그램:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; VS Code, Antigravity IDE, Cursor 또는 VS Code 호환 편집기의 확장 프로그램 패널에서 'Google Cloud Data Agent Kit'를 검색합니다. &lt;/span&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=googlecloudtools.datacloud" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;VS Code Marketplace&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;또는&lt;/span&gt;&lt;a href="https://open-vsx.org/extension/googlecloudtools/datacloud" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Open VSX&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;에서 설치할 수도 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Antigravity 2.0:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;설정 &amp;gt; 맞춤설정 &amp;gt; Google 플러그인으로 빌드&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;로 이동한 다음 Data Agent Kit를 다운로드합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Cloud Shell 및 Cloud Workstations:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 기본적으로 이미 설치되어 있으므로 편집기를 열고 로그인하기만 하면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;옵션 2: CLI 플러그인 설치&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;공식&lt;/span&gt;&lt;a href="https://github.com/GoogleCloudPlatform/data-agent-kit-plugin" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;code style="text-decoration: underline; vertical-align: baseline;"&gt;GoogleCloudPlatform/data-agent-kit-plugin&lt;/code&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 저장소를 사용하여 선호하는 코딩 에이전트에 대한 명령어를 실행합니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;# Antigravity CLI\r\nagy plugin install https://github.com/GoogleCloudPlatform/data-agent-kit-plugin\r\n\r\n# Claude Code\r\nclaude plugin install data-agent-kit-starter-pack@claude-plugins-official\r\n\r\n# Codex CLI\r\ncodex plugin marketplace add GoogleCloudPlatform/data-agent-kit-plugin\r\ncodex plugin add dak@dak-marketplace&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbaff2290d0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;그런 다음 첫 번째 프롬프트를 입력합니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;quot;What are this week&amp;#x27;s fastest rising search terms in the US that weren&amp;#x27;t in the last week&amp;#x27;s top 10? Use the BigQuery public Google Trends dataset.&amp;quot;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbaff000910&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/original_images/06-data-agent-kit-is-now-ga-bring-google-data-cloud-to-any-coding-agent_cl.gif"
        
          alt="06-data-agent-kit-is-now-ga-bring-google-data-cloud-to-any-coding-agent_cli"&gt;
        
        &lt;/a&gt;
      
        &lt;figcaption class="article-image__caption "&gt;&lt;p data-block-key="qngqb"&gt;Claude Code에서 실행되는 Data Agent Kit 플러그인&lt;/p&gt;&lt;/figcaption&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;다음 단계 및 실습 리소스&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;문서 읽기:&lt;/strong&gt;&lt;a href="https://docs.cloud.google.com/data-agent-kit?utm_campaign=CDR_0xaea1deef_default_b566338695&amp;amp;utm_medium=external&amp;amp;utm_source=blog"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Data Agent Kit 문서&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 및&lt;/span&gt;&lt;a href="https://cloud.google.com/products/data-agent-kit?utm_campaign=CDR_0xaea1deef_default_b566338695&amp;amp;utm_medium=external&amp;amp;utm_source=blog"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;제품 개요 페이지&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;를 살펴보세요.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;스킬 살펴보기:&lt;/strong&gt;&lt;a href="https://github.com/GoogleCloudPlatform/data-agent-kit-plugin" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;GitHub&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;에서 스킬을 살펴보고, 별표를 표시하고, 기여해 보세요.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;분석 워크플로 빌드:&lt;/strong&gt;&lt;a href="https://codelabs.developers.google.com/dak-analytics-eng-antigravity-ide?utm_campaign=CDR_0xaea1deef_default_b566338695&amp;amp;utm_medium=external&amp;amp;utm_source=blog" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Data Agent Kit 및 Antigravity IDE를 사용한 분석&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; Codelab을 사용해 보고 관련 블로그인&lt;/span&gt;&lt;a href="https://cloud.google.com/blog/products/data-analytics/agentic-analytics-with-the-data-agent-kit?utm_campaign=CDR_0xaea1deef_default_b566338695&amp;amp;utm_medium=external&amp;amp;utm_source=blog"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Data Agent Kit를 사용한 에이전트 분석&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;을 읽어보세요.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;데이터 과학 파이프라인 빌드:&lt;/strong&gt;&lt;a href="https://codelabs.developers.google.com/dak-data-science-antigravity-ide?utm_campaign=CDR_0xaea1deef_default_b566338695&amp;amp;utm_medium=external&amp;amp;utm_source=blog" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Data Agent Kit 및 Antigravity IDE를 사용한 사기 감지 파이프라인&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; Codelab을 사용해 보세요.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description><pubDate>Sun, 11 Oct 2026 10:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/ko/topics/developers-practitioners/data-agent-kit-is-now-ga-bring-google-data-cloud-to-any-coding-agent/</guid><category>Developers &amp; Practitioners</category><media:content height="540" url="https://storage.googleapis.com/gweb-cloudblog-publish/images/dak_blog_banner.max-600x600.png" width="540"></media:content><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>Data Agent Kit 정식 버전 출시: 모든 코딩 에이전트에 Google 데이터 클라우드 제공</title><description></description><image>https://storage.googleapis.com/gweb-cloudblog-publish/images/dak_blog_banner.max-600x600.png</image><site_name>Google</site_name><url>https://cloud.google.com/blog/ko/topics/developers-practitioners/data-agent-kit-is-now-ga-bring-google-data-cloud-to-any-coding-agent/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Arun Nair</name><title>Product Manager, Google</title><department></department><company></company></author><author xmlns:author="http://www.w3.org/2005/Atom"><name>Jeff Nelson</name><title>Developer Relations Engineer, Google</title><department></department><company></company></author></item><item><title>강화 학습(RL)을 활용한 Gemini 모델 맞춤설정 권장사항 가이드</title><link>https://cloud.google.com/blog/ko/topics/developers-practitioners/best-practices-guide-for-customizing-gemini-models/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;*이 콘텐츠는 AI 번역 도구를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역에는 오류나 누락이 포함될 수 있습니다. 정확한 정보는 &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/topics/developers-practitioners/best-practices-guide-for-customizing-gemini-models?e=0&amp;amp;hl=en"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;영문 원본&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;을 참고해 주시기 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;강화 학습(RL)은 현대적인 LLM 사후 학습의 핵심 요소이지만, 대규모 학습 클러스터가 필요할 뿐만 아니라 Gemini와 같은 독점 모델의 경우 외부 고객이 모델 내부 구조에 접근할 수 없다는 한계가 있습니다. 이에 Google Cloud에서는 이를 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;관리형 RL 파인 튜닝 서비스(RLFT 서비스)&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;로 구현했습니다. 사용자가 프롬프트와 보상 함수를 제공하면, Google Cloud에서 인프라와 독점 모델의 내부 구조를 직접 관리합니다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이제 이 서비스를 통해 Gemini를 최적화할 수 있습니다. 라벨이 지정된 정답 세트를 단순히 학습시키는 것이 아니라, 사용자가 직접 정의한 보상 신호를 통해 모델을 가르칠 수 있습니다. 이 덕분에 지도 미세 조정(SFT)으로는 해결하기 어려운 문제들, 즉 직접 시연하기는 어렵지만 결과에 점수를 매기기는 쉬운 작업들을 처리할 수 있게 됩니다.  &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이 가이드에서는 RL 미세 조정 서비스를 사용하기 위한 실용적인 권장사항을 살펴봅니다. 먼저 RL 학습 루프를 간단히 살펴보고, RL 사용 여부와 시점을 결정하는 방법을 알아보고, 이 접근 방식을 통해 가치를 극대화하는 방법을 소개합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;RLFT란? &lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;RLFT는 라벨이 지정된 정답이 아닌 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;사용자가 정의한 보상 신호&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;를 통해 Gemini를 최적화합니다. 수많은 정답 데이터를 직접 만드는 대신, 응답을 &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;채점&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;하는 프로그램 하나만 작성하면 서비스가 이를 바탕으로 모델을 개선합니다. 이를 통해 &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;직접 보여주기&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;는 어렵지만 &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;검증하기&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;는 쉬운 작업들을 수행할 수 있습니다. 예를 들어, 모든 스키마에 맞는 완벽한 SQL을 일일이 작성하기는 힘들지만, 쿼리를 실행해 보고 그 결과가 맞는지 확인하는 것은 간단한 것과 같습니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/1_-_Single-Step_RL_Training_Loop.max-1000x1000.png"
        
          alt="1 - Single-Step RL Training Loop"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;각 학습 단계에서 서비스는 프롬프트에 대한 여러 후보 대답을 생성하고, 사용자가 정의한 보상으로 점수를 매깁니다. 이를 통해 모델은 기존 Gemini의 특성을 유지하면서도 높은 점수를 받은 대답을 생성할 확률이 높아지도록 개선됩니다. 이 모든 과정을 가능하게 하는 강화 학습은 완전 관리형으로 제공되므로, 사용자가 직접 설정할 필요가 없습니다. 사용자가 직접 제어할 수 있는 유일한 요소이자 결과에 가장 결정적인 영향을 미치는 것은 바로 보상입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;RLFT의 가능성과 한계를 결정짓는 세 가지 특징은 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;모델 자체의 출력으로부터 학습:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 외부 대상을 복제하는 대신 모델이 이미 생성한 결과물을 정교하게 다듬는 방식이므로, SFT보다 관련 없는 기존 역량을 저해할 가능성이 적습니다. &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;과정이 아닌 결과에 보상:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 좋은 결과에 도달하는 모든 응답에 보상을 제공하므로, 정답이 여러 개인 개방형 작업에 적합합니다. &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;기존 역량 강화: &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;  &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;어쩌다 한 번&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; 성공하던 작업을 &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;안정적으로&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; 실행하도록 만들지만, 모델이 원래 할 줄 모르는 기술을 새롭게 가르칠 수는 없습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;RLFT 사용 시점&lt;/strong&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/2_-_RLFT_Approaches_-_Direct_RL_or_SFT_War.max-1000x1000.png"
        
          alt="2 - RLFT Approaches - Direct RL or SFT Warmup to Continuous RLFT"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;프롬프팅과 SFT만으로도 대부분의 최적화가 가능하므로, RLFT를 고려하기 전에 이 방법들을 먼저 충분히 시도해 보세요. RLFT는 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;응답을 평가할 수는 있지만 직접 작성하기에는 비용이 많이 드는 경우&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;, (충실도, 스키마 유효성, 어조 등) 중요한 지표에서 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;SFT가 정체기에 도달한 경우&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;, 단일 참조 정답만으로는 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;동일하게 유효한 여러 정답&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;에 잘못된 페널티를 줄 수 있는 작업에서 진가를 발휘합니다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;SFT와 RLFT는 경쟁 관계가 아니라 상호 보완적인 관계입니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;기본 모델이 이미 어느 정도 성공적인 결과를 내놓고 있다면 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;직접 RLFT&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;를 사용하세요. 보상을 통해 더 나은 답변과 그렇지 못한 답변을 충분히 구분해낼 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;SFT 데이터가 있거나 기본 성공률이 너무 낮아 RL만으로는 효과를 보기 어려운 경우에는 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;SFT → RLFT 2단계 방식&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;을 사용하세요. SFT를 짧고 비용 효율적인 웜 스타트로 활용하세요. 시연 데이터에 과적합되면 RL을 통해 성능을 개선할 여지가 줄어들므로 가볍게 적용하는 것이 좋습니다. 그런 다음 SFT 체크포인트에서 RL을 초기화하는 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;지속적 조정&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;을 통해 RL 단계로 넘어가세요.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;얼리 어답터들의 사례를 보면 이러한 패턴을 통해 RLFT가 가장 큰 가치를 창출하는 영역을 파악할 수 있습니다. 각 패턴은 비즈니스 측면에서 중요하지만, 적은 비용으로는 증명하기 어려웠던 성과들을 스코어링을 통해 입증해 줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;RLFT 사용 사례&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;게임 내 AI 기반 NPC&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;개요:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 다국어로 진행되는 긴 멀티턴 대화에서도 캐릭터의 개성과 브랜드의 정체성을 유지하는 대화 기능입니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;문제:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 기존 모델을 그대로 사용하면 부적절한 언어 선택, 아이템 할루시네이션, 플레이어 무시, 답변 반복 등의 현상이 발생해 몰입감을 해칩니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;목표 및 보상:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;Gemini 자동 평가자(LLM-as-a-judge)&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;가 페르소나, 흐름, 게임 상태 문법을 기준으로 각 턴의 점수를 매기며, 형식 및 언어 오류에는 감점을 부여합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;결과:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 반복되는 루프와 언어 이탈 현상이 사라지고 상태 문법이 안정적으로 유지됨에 따라, 실제 서비스에 바로 투입할 수 있는 수준의 인게임 캐릭터를 대규모로 구현할 수 있게 되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;정형 항목 추출&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;내용:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 공급업체 인보이스나 배송 명세서 같은 비정형 문서에서 여러 항목을 추출하여 정형 레코드로 자동 변환하는 작업입니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;문제:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; SFT가 정체기에 머무는 롱테일 현상 — 필수 필드가 누락되거나(재현율), 데이터에 없는 필드를 억지로 만들어냄(정밀도).&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;목표 및 보상:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;규칙 기반 정밀도/재현율 보상&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;은 모든 필드가 하나의 정답을 모방하는 것이 아니라 소스 텍스트에 기반하도록 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;결과:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 조정이 중단되었던 노이즈 많은 실제 문서에서 필드 수준 정확도가 향상되어 수동 검토 단계를 자동화 프로세스로 전환할 수 있었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;콘텐츠 검토&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;내용:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 복잡한 정책과 결정 트리를 대규모로 적용하는 작업입니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;문제:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 모델이 평가를 회피하기 위해 오탐을 생성하는 할루시네이션을 일으키거나, 잘못된 형식을 사용하는 방식으로 보상 해킹을 시도합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;목표 및 보상:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;Cloud Run 보상&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;은 형식 검증과 결정론적 채점기를 결합하여 다단계 정책 준수를 강제합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;결과:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 모델은 복잡한 예외 조항을 처리하고 오탐을 획기적으로 줄였으며, 보상 해킹을 차단했습니다. 이를 통해 운영 비용 상승의 원인이 되는 수동 검토 업무량을 줄이는 성과를 거두었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;실행 결과로 평가하는 코드&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;내용:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; SQL 또는 API 호출이 고객 데이터에 대해 실제로 실행되는지를 기준으로 평가됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;문제:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; SFT는 단일 참조 쿼리를 모방하는 방식이라, 학습 시 보지 못한 고유 스키마에서는 제대로 작동하지 않습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;목표 및 보상:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;코드 실행 보상&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;은 안전한 샌드박스 환경에서 코드를 실행하며, 코드가 정상적으로 컴파일 및 실행되어 올바른 결과가 반환될 때만 보상을 지급합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;결과:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 이 모델은 폐쇄형 프런티어 모델급의 품질을 유지하면서도 더 낮은 추론 비용으로 첫 시도에 바로 실행 가능한 쿼리를 생성해 냈습니다. 덕분에 기술 지식이 없는 사용자도 자연어만으로 기업 고유 데이터를 조회할 수 있게 되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;HTML을 활용한 프레젠테이션 슬라이드 생성&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;정의:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; HTML/CSS로 작성된 멀티 슬라이드 자료입니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;문제:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 텍스트만으로 학습하면 시각적 품질을 파악할 수 없습니다. 그 결과 오버플로, 요소 잘림, 스타일 불일치 등의 문제가 해결되지 않은 채 그대로 방치될 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;목표 및 보상:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;코드 실행 보상&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;은 슬라이드를 렌더링하고 시각적 디자인, 레이아웃의 무결성, 구조적 완성도 및 평가 기준 준수 여부를 채점합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;결과:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 모델은 테마의 통일성을 유지하면서 레이아웃이 깨지지 않는, 모듈화된 세련된 디자인의 슬라이드 덱을 생성했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;어디서 시작해야 할까요?&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;데이터 세트부터 시작하세요.&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 첫 번째 실행에는 별도의 검증 데이터 세트가 포함된 다양한 프롬프트 세트만으로도 충분합니다. 루프가 안정적으로 수렴하고 보상이 의도한 방향으로 움직이는지 확인한 후 규모를 확장하세요. 학습 데이터와 평가 데이터를 엄격히 분리하세요. 평가 데이터가 오염되면 과적합을 파악하기 어려워집니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;보상 함수부터 시작하세요.&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 코드 또는 설정의 형태로 작성되는 작업 사양이며, 품질을 결정짓는 가장 핵심적인 요소입니다. 좋은 보상은 인간의 선호도와 상관관계가 있어야 하며, 잘못된 형식의 출력에도 견고해야 하고(파싱 실패를 포착하여 시스템이 다운되는 대신 명확한 부정적 점수를 반환), 보상 해킹에 저항할 수 있어야 합니다. 이를 위해 앙상블 판단을 활용하고, 길이에 페널티를 부여하며, 비정상적인 출력에는 하한선을 설정하고, 모델의 의견보다는 검증 가능한 확인 절차를 우선시하는 것이 좋습니다. 출시 전에 오프라인에서 먼저 검증을 거치세요.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;그 외의 과정은 서비스가 알아서 처리합니다. 기본값으로 시작해 콘솔에서 보상 및 평가 곡선을 모니터링하고, 마지막 단계가 아닌 검증 보상이 포화 상태에 도달한 시점의 체크포인트를 선택하세요.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/original_images/3_-_rlft_tutorial.gif"
        
          alt="3 - rlft_tutorial"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;지금 시작하기&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;여러분은 무엇을 빌드해야 하나요? 원하는 것을 만들 수 있는 도구가 준비되어 있습니다. &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;a href="https://docs.cloud.google.com/gemini-enterprise-agent-platform/models/tuning/reinforcement-tuning"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;문서: 강화 학습 파인 튜닝&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description><pubDate>Wed, 07 Oct 2026 04:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/ko/topics/developers-practitioners/best-practices-guide-for-customizing-gemini-models/</guid><category>AI &amp; Machine Learning</category><category>Developers &amp; Practitioners</category><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>강화 학습(RL)을 활용한 Gemini 모델 맞춤설정 권장사항 가이드</title><description></description><site_name>Google</site_name><url>https://cloud.google.com/blog/ko/topics/developers-practitioners/best-practices-guide-for-customizing-gemini-models/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Jiaqi Pan</name><title>Senior Software Engineer, Google</title><department></department><company></company></author><author xmlns:author="http://www.w3.org/2005/Atom"><name>Kunal Jha</name><title>Senior Product Manager, Google</title><department></department><company></company></author></item><item><title>Agent Factory 요약: 에이전트 하네스, 시프트 레프트, 자율 코딩</title><link>https://cloud.google.com/blog/ko/topics/developers-practitioners/agent-factory-recap-agent-harnesses-shifting-left-and-autonomous-coding/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;*이 콘텐츠는 AI 번역 도구를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역에는 오류나 누락이 포함될 수 있습니다. 정확한 정보는 &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/topics/developers-practitioners/agent-factory-recap-agent-harnesses-shifting-left-and-autonomous-coding?e=0&amp;amp;hl=en"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;영문 원본&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;을 참고해 주시기 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이번&lt;/span&gt;&lt;a href="https://www.youtube.com/playlist?list=PLIivdWyY5sqLXR1eSkiM5bE6pFlXC-OSs" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;Agent Factory&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 에피소드에서는 Google Cloud의 소프트웨어 엔지니어이자&lt;/span&gt;&lt;a href="https://cloud.google.com/discover/agent-harness?e=48754805"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;strong style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;에이전트 하네스&lt;/strong&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;라는 용어를 창안한 Ryan Lopopolo와 함께 자율 에이전트를 활용한 인프라 빌드 작업의 현실을 살펴봅니다. 수동 코드 편집기를 없애는 것부터 팀 공동작업을 RPG 게임에서 능력치를 올리는 과정에 비유하는 것까지, Ryan은 풍부한 컨텍스트에 기반을 두고 모델을 그라운딩하고 개발 초기부터 개입하는 것이 어떻게 높은 수준의 에이전트 자율성을 실현할 수 있는지 상세히 설명합니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-video"&gt;



&lt;div class="article-module article-video "&gt;
  &lt;figure&gt;
    &lt;a class="h-c-video h-c-video--marquee"
      href="https://youtube.com/watch?v=F8EZJAm9iO8"
      data-glue-modal-trigger="uni-modal-F8EZJAm9iO8-"
      data-glue-modal-disabled-on-mobile="true"&gt;

      
        &lt;img src="//img.youtube.com/vi/F8EZJAm9iO8/maxresdefault.jpg"
             alt="Harness Engineering Explained: Inside the Stack Behind Antigravity, Claude Code &amp;amp; Cursor"/&gt;
      
      &lt;svg role="img" class="h-c-video__play h-c-icon h-c-icon--color-white"&gt;
        &lt;use xlink:href="#mi-youtube-icon"&gt;&lt;/use&gt;
      &lt;/svg&gt;
    &lt;/a&gt;

    
  &lt;/figure&gt;
&lt;/div&gt;

&lt;div class="h-c-modal--video"
     data-glue-modal="uni-modal-F8EZJAm9iO8-"
     data-glue-modal-close-label="Close Dialog"&gt;
   &lt;a class="glue-yt-video"
      data-glue-yt-video-autoplay="true"
      data-glue-yt-video-height="99%"
      data-glue-yt-video-vid="F8EZJAm9iO8"
      data-glue-yt-video-width="100%"
      href="https://youtube.com/watch?v=F8EZJAm9iO8"
      ng-cloak&gt;
   &lt;/a&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이 게시물에서는 함께 나눈 대화의 핵심 아이디어를 안내합니다. 주제를 빠르게 요약하거나 링크와 타임스탬프를 통해 특정 세그먼트를 더 자세히 살펴보려면 이 게시물을 이용해 보세요.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;에이전트 하네스 - 정의&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;타임스탬프: [&lt;/span&gt;&lt;a href="https://www.youtube.com/watch?v=F8EZJAm9iO8&amp;amp;t=30s" rel="noopener" target="_blank"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;00:30&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;여기서 정의하는 &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;AI 에이전트&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;는 대규모 언어 모델(LLM)과&lt;/span&gt;&lt;a href="https://cloud.google.com/discover/agent-harness?e=48754805"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;에이전트 하네스&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;가 결합된 형태입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;하네스는 모델 자체가 아니라 LLM을 둘러싸고 있는 모든 요소라고 생각하면 됩니다. 예를 들어&lt;/span&gt;&lt;a href="https://antigravity.google/" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Google Antigravity&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;에서&lt;/span&gt;&lt;a href="https://antigravity.google/blog/gemini-3-8-flash-in-google-antigravity" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Gemini 3.8 Flash&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;를 사용하여 작업하는 경우 Gemini Flash는 LLM에 해당하고 Google Antigravity는 하네스에 해당합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;지원 시스템이 없는 모델은 간단한 질문에 즉시 답변할 수 있지만, 자체적으로 실시간 상황을 확인하거나 작업공간과 상호작용할 수 없습니다. 사용자가 &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;"하늘은 왜 파란색이야?"&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;와 같은 질문을 하면 지원 시스템이 없는 LLM도 문제없이 답변할 수 있습니다. 하지만 &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;"오늘 우비를 입어야 할까?"&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;와 같은 질문을 받으면 이 모델에는 필요한 데이터가 없기 때문에 스스로 답변할 수 없습니다. 이때 하네스는 사용자의 의도를 파악하고, 실시간 날씨 도구에 쿼리하고, 해당 컨텍스트를 프롬프트로 다시 구성한 후, 이를 모델에 전달하므로 모델은 정보에 입각한 답변을 생성할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;Ryan Lopopolo가 전하는 에이전트 하네스와 자율 코딩&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Tilde Thurium이 Ryan Lopopolo와 함께 프로덕션 환경에서 완전한 자율 코딩 워크플로를 실행하는 데 필요한 사항에 대해 이야기했습니다. 아래 요약 내용을 살펴보세요.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;프로덕션 코드를 작성할 필요가 없는 하네스 개념의 탄생&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;타임스탬프: [&lt;/span&gt;&lt;a href="https://www.youtube.com/watch?v=F8EZJAm9iO8&amp;amp;t=142s" rel="noopener" target="_blank"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;02:22&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;에이전트 하네스&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;라는 용어는 자율 코딩 에이전트에 관한 Ryan의 광범위한 연구에서 비롯되었으며, 2026년 2월 에이전트 중심 세상에서 코딩 모델의 활용에 대해 다룬&lt;/span&gt;&lt;a href="https://openai.com/index/harness-engineering/" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;에세이&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;에서 집대성되었습니다. Ryan은 지난해 5월 이후로 기존의 코드 편집기를 한번도 열지 않았으며 &lt;/span&gt;&lt;a href="https://cloud.google.com/"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Google Cloud&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;로 이직하는 과정에서도 이 기록을 이어가고 있다고 밝혔습니다. 이 패러다임에서는 엔지니어가 더 이상 개별 구문 라인을 작성하거나 검토하지 않습니다. 대신 자연어 사양 수준에서 작업하고 pull 요청, 문서, 스프레드시트와 같은 최종 아티팩트를 검사합니다. 그런 다음 최종 결과가 조직의 표준을 충족하는지 여부를 판단합니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-pull_quote"&gt;&lt;div class="uni-pull-quote h-c-page"&gt;
  &lt;section class="h-c-grid"&gt;
    &lt;div class="uni-pull-quote__wrapper h-c-grid__col h-c-grid__col--8 h-c-grid__col-m--6 h-c-grid__col-l--6
      h-c-grid__col--offset-2 h-c-grid__col-m--offset-3 h-c-grid__col-l--offset-3"&gt;
      &lt;div class="uni-pull-quote__inner-wrapper h-c-copy h-c-copy"&gt;
        &lt;q class="uni-pull-quote__text"&gt;하네스 엔지니어링이란 모델이 성공할 수 있는 환경에 모델을 배치하는 방법을 연구하고 이를 실무에 적용하는 과정을 말합니다. 이러한 작업을 거치지 않으면 &amp;#x27;프롬프트 작성 후 잘 되기만을 기도&amp;#x27;하는 상황에 처하게 됩니다.&lt;/q&gt;

        
          &lt;cite class="uni-pull-quote__author"&gt;
            
            
              &lt;span class="uni-pull-quote__author-meta"&gt;
                
                  &lt;strong class="h-u-font-weight-medium"&gt;Ryan Lopopolo&lt;/strong&gt;&lt;br /&gt;
                
                
              &lt;/span&gt;
            
          &lt;/cite&gt;
        
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;컨텍스트 큐레이션 및 지연 프롬프트 작성&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;타임스탬프: [&lt;/span&gt;&lt;a href="https://youtu.be/F8EZJAm9iO8?si=dZGjT_rG5fiLeVfm&amp;amp;t=215" rel="noopener" target="_blank"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;03:35&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;사전 하네스 투자는 엔지니어가 프롬프트 작성을 지연해도 효과를 발휘합니다. 저장소에 구조화된 문서, 명확한 인터페이스, 검색 가능한 도구가 포함되어 있다면 매일 아침 프롬프트 상자에 긴 텍스트를 붙여넣을 필요가 없습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;"저는 아주 게으른 프롬프트 작성자가 되고 싶습니다. 모델을 그라운딩하는 데 필요한 도구와 컨텍스트를 제공하는 작업을 완료했다면 긴 프롬프트를 작성할 필요가 없습니다. 모델이 알아서 해결하니까요."&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이 모델은 하네스를 사용하여 관련 컨텍스트를 가져오므로 별도의 감독 없이도 대규모 코드베이스를 탐색하고 복잡한 작업을 실행할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;시프트 레프트: 자율 가드레일로서의 엔지니어링 권장사항&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;타임스탬프: [&lt;/span&gt;&lt;a href="https://www.youtube.com/watch?v=F8EZJAm9iO8&amp;amp;t=300s" rel="noopener" target="_blank"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;05:00&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;에이전트가 실패하면 개발자는 다양한 개입 방식을 고려하게 됩니다. 가장 일반적인 방식은 프롬프트를 수정하거나 다시 시도하는 것이지만, 이를 팀 전체로 확장하기 어렵습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;"제가 생각할 수 있는 가장 간단하고 단순하며 어리석은 개입은 말 그대로 다른 것은 아무것도 변경하지 않고 프롬프트를 다시 시도하는 것입니다. 하지만 시프트 레프트는 프롬프트, 저장소 문서, 린터, 테스트, 업스트림 평가에 이르기까지 비용이 가장 적게 들고 자동화할 수 있는 개발 수명 주기의 초기 단계에 개입하여 문제를 해결하는 것을 의미합니다."&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;다음 단계에서 모델이 올바르게 판단하기를 기대하는 대신, 시프트 레프트를 통해 표준을 환경에 직접 삽입합니다. 린터, 테스트, AGENTS.md 파일은 사용자가 바람직한 결과라고 생각하는 기준을 기억하고 실행하는 역할을 합니다. 따라서 에이전트가 지속적인 개입 없이도 정해진 궤도를 벗어나지 않고 올바르게 작동하도록 보장할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;기존 도구 및 결정론 활용&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;타임스탬프: [&lt;/span&gt;&lt;a href="https://youtu.be/F8EZJAm9iO8?si=0K18aWfjWSkEv0Ws&amp;amp;t=410" rel="noopener" target="_blank"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;06:50&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;에이전트는 사전 학습 데이터에 많이 등장하는 패턴을 이미 반영하는 도구를 사용할 때 진가를 발휘합니다. 모델을 표준 명령줄 인터페이스와 페어링하면 추론이 결정론적 성격을 띠게 되며, 컨텍스트 집계에 따른 부담이 모델에서 신뢰할 수 있는 도구로 옮겨집니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;또한 Ryan은 컨텍스트 효율성을 높이기 위한 환경 설계 방법을 공유했습니다. 바로 링크 앵커가 인라인이 아니라 해당 텍스트 블록 바로 아래에 위치하도록 마크다운 파일을 구성하는 것입니다. 이렇게 하면 컨텍스트가 복잡해지는 것을 방지하고 '중간에 길을 잃는' 검색 문제를 완화할 수 있습니다. Ryan은 최종 상태 아티팩트를 검토하는 방식으로만 작업하기 때문에 문서를 읽기 쉽게 유지하면 실행 과정을 쉽게 검사할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;"저는 pull 요청을 보고 검토할 수 있기를 원합니다. 에이전트가 잘못된 결정을 내렸다면 어디서 잘못되었는지 알아야 에이전트를 바로잡고 다시는 같은 실수를 하지 않도록 할 수 있습니다."&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;장기 계획 및 에이전트 루프 확장&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;타임스탬프: [&lt;/span&gt;&lt;a href="https://youtu.be/F8EZJAm9iO8?si=o3r4mie7FkoYLTTS&amp;amp;t=586" rel="noopener" target="_blank"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;09:45&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;하네스 엔지니어링의 핵심 과제는 에이전트가 장기적인 관점에서 일관성을 유지하도록 하는 것입니다. 인간 조직은 일회성 프롬프트가 아닌 반복적인 개선을 통해 소프트웨어를 개발하므로 에이전트 워크플로도 이러한 주기를 반영해야 합니다. 하네스 엔지니어링은 엄격하게 범위가 정해져 있고 검토 가능한 pull 요청을 사용하여 에이전트의 상태 공간을 좁힙니다. 이러한 신뢰도 높은 변경사항을 엔드 투 엔드로 쌓아 올리면 감독자는 루프 크기를 점진적으로 확장할 수 있으므로, 에이전트는 전체 언어 마이그레이션을 포함한 대규모 이니셔티브를 자율적으로 실행할 수 있을 때까지 신뢰를 구축할 수 있습니다. &lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;RPG 능력치처럼 에이전트 팀 큐레이션&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;타임스탬프: [&lt;/span&gt;&lt;a href="https://youtu.be/F8EZJAm9iO8?si=1l25hbXKZjjKoLsh&amp;amp;t=718" rel="noopener" target="_blank"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;11:58&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;개별 전문 분야에 따라 스프린트 작업을 분배하는 대신, 다양하게 구성된 팀이 에이전트의 역량 강화에 기여하게 되면 에이전트는 모든 구성원의 강점을 담은 핵심적인 업무 생산자로 거듭나게 됩니다. Ryan은 에이전트의 역량을 높이는 과정을 캐릭터 시트를 작성하는 것에 비유했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;"마치 RPG 캐릭터의 능력치를 키우는 것과 비슷합니다. React 설계자가 팀에 새로 합류하면 이 사람의 전문성이 더해져 프런트엔드 아키텍처와 성능 관련 능력치가 크게 향상되는 식이죠."&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이러한 집단적 전문성이 환경에 내재화되면 에이전트는 들어오는 작업을 자율적으로 분류하고 필요에 따라 적합한 기술을 활성화하여 백엔드 설계자와 프런트엔드 전문가의 역할을 모두 수행할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;커스텀 하네스가 아닌 도구에서 시너지 창출&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;타임스탬프: [&lt;/span&gt;&lt;a href="https://youtu.be/F8EZJAm9iO8?si=giil4EL8zs3RDif-&amp;amp;t=878" rel="noopener" target="_blank"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;14:38&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;자체적으로 커스텀 에이전트 하네스를 빌드해야 할지 고민하는 개발자에게 Ryan은 처음부터 빌드하지 말라는 명확한 조언을 건넸습니다. 표준 하네스는 이미 파일 읽기, grep 검색, 명령어 실행과 같은 기본적인 기능을 제공합니다. 스캐폴딩 기능을 과도하게 사용하여 엄격한 맞춤형 프레임워크로 에이전트를 구성하면 기술 부채가 발생하고, 프런티어 모델이 발전함에 따라 매몰 비용이라는 함정에 빠지게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;"도구와 컨텍스트의 품질을 개선하는 데 모든 역량을 집중하면 새로운 모델이 출시될 때마다 자유롭게 도입할 수 있으며, 절대 구식이 되지 않는 시스템에서 지속적으로 시너지를 창출할 수 있습니다."&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Google Cloud 운영 및 기능 격차 해소&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;타임스탬프: [&lt;/span&gt;&lt;a href="https://youtu.be/F8EZJAm9iO8?si=MlXgcYa5QcQqOogM&amp;amp;t=1007" rel="noopener" target="_blank"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;16:47&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Ryan은&lt;/span&gt;&lt;a href="https://cloud.google.com/"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Google Cloud&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;에서 자신의 업무에 대해 이야기하면서 &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;기능 격차&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;, 즉 프런티어 AI 모델이 이론적으로 수행할 수 있는 작업과 현재 프로덕션에서 추출되는 유용한 작업 간의 차이를 없애고자 하는 동기를 설명했습니다. 클라우드는 방대하고 프로그래밍 가능한 플랫폼 역할을 하므로, Google Cloud를 직접 이용하기 위한 인터페이스를 에이전트에 제공하면 인프라를 효율적으로 관리하고 배포할 수 있게 되어, 원시 모델 기능을 실질적인 엔터프라이즈 유틸리티로 전환할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;AI에 대한 기존 사고방식의 지속적인 업데이트&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;타임스탬프: [&lt;/span&gt;&lt;a href="https://youtu.be/F8EZJAm9iO8?si=NSFTXZjs6QvgCFiM&amp;amp;t=1093" rel="noopener" target="_blank"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;18:13&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;AI 개발 속도가 빨라짐에 따라 엔지니어와 팀은 기존의 한계를 적극적으로 극복하고 이러한 모델을 통해 달성할 수 있는 목표를 끊임없이 재평가해야 합니다. Ryan은 "&lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;우리가 가진 훌륭한 도구를 활용하여 어떤 작업이 가능한지에 대한 생각을 지속적으로 업데이트하는 것이 매우 중요합니다&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;"라고 강조했습니다. 6개월 전에는 작동하지 않던 기능이 오늘날의 프런티어 모델에서는 원활하게 실행되는 경우가 종종 있습니다. 개발자는 경직된 워크플로에 갇히기보다는 모든 모델 업그레이드에서 관련성을 유지할 수 있는 확장성이 뛰어난 두 가지 인터페이스인 도구와 컨텍스트를 중심으로 빌드해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;"에이전트는 사용자가 바람직한 결과라고 생각하는 기준에 맞게 마지막 단계까지 조정하기 위해 항상 컨텍스트를 필요로 합니다. 또한 사용자가 바람직한 결과라고 생각하는 기준을 기억하고 실행하는 역할을 하는 더욱 강력한 도구를 활용하여 이 과정을 점진적으로 발전시켜 나간다면, 시간 경과에 따라 모델이 점점 더 흥미로운 작업을 해내는 모습을 보고 계속해서 놀라게 될 것입니다."&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;커스텀 하네스 빌드하기&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;다음으로&lt;/span&gt;&lt;a href="https://www.linkedin.com/in/billyjacobson/" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Billy Jacobson&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;은 개발자가 특정 작업을 위해 자체적으로 에이전트 하네스를 맞춤설정하는 방법을 소개했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;자세히 들여다보기: 커스텀 하네스를 빌드하는 이유&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;타임스탬프: [&lt;/span&gt;&lt;a href="https://www.youtube.com/watch?v=F8EZJAm9iO8&amp;amp;t=1184s&amp;amp;pp=0gcJCWMAwfN6Pr3D" rel="noopener" target="_blank"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;19:44&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;코드를 작성하기에 앞서 Billy는 개발자가 하네스를 블랙박스처럼 취급하기보다는 하네스의 메커니즘을 이해해야 하는 이유를 설명했습니다. &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;"프레임워크를 그냥 사용할 수도 있지만, 훌륭한 엔지니어라면 프레임워크를 제대로 이해해야 합니다"&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;라는 엔지니어링 멘토의 조언을 떠올리며, Billy는 에이전트가 오작동할 때 발생하는 문제를 디버깅하는 가장 좋은 방법은&lt;/span&gt;&lt;a href="https://cloud.google.com/discover/agent-harness?e=48754805"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;하네스&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;를 직접 빌드하는 것이라고 설명했습니다. 모든 워크플로에 대해 설계와 관련한 세 가지 중요한 결정을 평가할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;루프&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: 에이전트가 몇 번 반복 실행해야 하며, 어떤 조건에서 종료 상태를 트리거하나요?&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;도구&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: 에이전트가 어떤 특정 도구에 액세스해야 하며, 언제 어떻게 호출해야 하나요?&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;메모리&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: 대화 메모리와 운영 메모리는 얼마나 중요하며, 언제 검색하거나 압축해야 하나요?&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;선형 에이전트 하네스: 결정론적 단일 패스 실행&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;타임스탬프: [&lt;/span&gt;&lt;a href="https://youtu.be/F8EZJAm9iO8?si=teRfnEVBrXQa0DBl&amp;amp;t=1234" rel="noopener" target="_blank"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;21:34&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Billy는 루프가 필요 없는 결정론적 워크플로를 위해 설계된 미니멀한&lt;/span&gt;&lt;a href="https://docs.cloud.google.com/architecture/choose-design-pattern-agentic-ai-system#sequential-pattern"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;선형 하네스&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;를 시연했습니다. 이 패턴은 높은 수준의 결정론이 필요하고 에이전트가 매번 정확히 동일한 실행 흐름을 수행해야 하는 표적 검사, 파일 변환 또는 단일 턴 데이터 분석에 적합합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;폐쇄 루프 에이전트 하네스: 반복적인 테스트 기반 복구&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;타임스탬프: [&lt;/span&gt;&lt;a href="https://youtu.be/F8EZJAm9iO8?si=SZK9VsaI6x4FpKXT&amp;amp;t=1365" rel="noopener" target="_blank"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;22:45&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;적극적인 버그 수정과 리팩터링이 필요한 작업의 경우&lt;/span&gt;&lt;a href="https://docs.cloud.google.com/architecture/choose-design-pattern-agentic-ai-system#loop-pattern"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;폐쇄 루프 하네스&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;는 검증된 해결책에 도달하는 데 필요한 반복적인 추론을 제공합니다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이 데모에서 Billy는 요구사항을 충족하지 못하는 문제를 해결하기 위해 자동화된 코드 편집을 적용하는 에이전트를 선보였습니다. 이 과정에서 하네스는 업데이트된 코드베이스에 대해 단위 테스트 모음을 실행합니다. 테스트가 실패하면 런타임은 표준 실패 로그와 상세한 스택 트레이스를 캡처하여 해당 오류 진단 정보를 에이전트의 작업 메모리에 직접 제공합니다. 이 프로세스는 모든 단위 테스트를 통과할 때까지 지속적으로 반복되지만, 무한 루프와 과도한 실행 비용을 방지하기 위해 5회 반복으로 제한됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Google의 에이전트 개발 키트(ADK)를 활용한 가드레일 하네스&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;타임스탬프: [&lt;/span&gt;&lt;a href="https://youtu.be/F8EZJAm9iO8?si=iyoPxuMlAkYkrrls&amp;amp;t=1405" rel="noopener" target="_blank"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;23:25&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;핵심 오케스트레이션 파이프라인을 처음부터 다시 작성하지 않고도 커스텀 동작이 필요한 개발자를 위해 Google의&lt;/span&gt;&lt;a href="https://adk.dev/" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;에이전트 개발 키트(ADK)&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;는 자동화된 메모리 관리 및 실행 보호 장치가 포함된 스캐폴딩을 제공합니다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Billy는 ADK의 기본 컨텍스트 압축 기능을 활용해 이전 대화 내용을 요약하여 연장된 디버깅 실행 기간 동안 컨텍스트 윈도우가 과도하게 커지는 것을 방지하는 예시를 살펴보았습니다. 커스텀 인터셉트 후크는 셸 작업을 실행하기 전에 검사하고 필터링하여 재귀적 파일 삭제, 데이터베이스 삭제, 무단 원격 git 푸시와 같은 고위험 작업을 자동으로 차단합니다. 이 아키텍처에서는 도구 실행 경계를 세밀하게 제어하는 동시에 맞춤형 하네스 프레임워크의 유지보수 부담을 줄일 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;3계층 에이전트 개발 스택: Gemini 3.8 Flash, Google Antigravity, Google Skills&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;타임스탬프: [&lt;/span&gt;&lt;a href="https://youtu.be/F8EZJAm9iO8?si=L0T5reEiQBXxZ86H&amp;amp;t=1527" rel="noopener" target="_blank"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;25:27&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;다음으로&lt;/span&gt;&lt;a href="https://www.linkedin.com/in/smithakolan/" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Smitha Kolan&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;은 코딩 에이전트에 항상 더 복잡한 추론 모델이 필요한 것은 아니라는 점을 자세히 설명하면서, 에이전트 스택의 세 가지 계층인 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;모델&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;, &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;하네스&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;, &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;지식&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 간에 균형을 유지하는 것이 고성능의 비결이라고 강조했습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;"코딩 에이전트에 더 스마트한 모델이 필요한 것은 아닙니다. 모델, 하네스, 지식으로 구성된 더 나은 스택이 필요합니다. 이 세 가지가 완벽하게 조화를 이룰 때 모든 것이 달라집니다."&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이어 Smitha는 최근에 즐겨 사용하고 있는 세 가지 도구를 스택의 각 계층별로 하나씩 소개했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;계층 1 | 모델 |&lt;/strong&gt;&lt;a href="https://antigravity.google/blog/gemini-3-8-flash-in-google-antigravity" rel="noopener" target="_blank"&gt;&lt;strong style="vertical-align: baseline;"&gt; &lt;/strong&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;Gemini 3.8 Flash&lt;/strong&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;: 실행 빈도가 높은 에이전트 루프는 작업당 20~60회의 순차적 홉(파일 검사, 함수 업데이트, 단위 테스트 실행)을 실행합니다. 반복이 거듭될수록 지연 시간과 API 비용이 누적되므로, Gemini 3.8 Flash와 같이 반응성이 뛰어난 경량의 모델을 사용하면 막대한 비용을 들이지 않고도 실시간 에이전트 루프를 실용적으로 구현할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;계층 2 | 하네스 |&lt;/strong&gt;&lt;a href="https://antigravity.google/" rel="noopener" target="_blank"&gt;&lt;strong style="vertical-align: baseline;"&gt; &lt;/strong&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;Google Antigravity&lt;/strong&gt;&lt;/a&gt;&lt;strong style="vertical-align: baseline;"&gt;(&lt;/strong&gt;&lt;a href="https://antigravity.google/docs/boost/" rel="noopener" target="_blank"&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;/boos&lt;/strong&gt;t&lt;/a&gt;): 기본 Antigravity는 표준 탐색 및 구성요소 생성 작업을 처리합니다 또한 여기에 &lt;code style="vertical-align: baseline;"&gt;/boost&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 명령어를 추가하면 조정자가 가동되어 특화된 하위 에이전트를 병렬로 조율한 후 최종적으로 파일을 수정하기 전에 독립적인 감사 단계를 수행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;계층 3 | 지식 |&lt;/strong&gt;&lt;a href="https://github.com/google/skills/tree/main" rel="noopener" target="_blank"&gt;&lt;strong style="vertical-align: baseline;"&gt; &lt;/strong&gt;&lt;strong style="text-decoration: underline; vertical-align: baseline;"&gt;Google Skills 저장소&lt;/strong&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;: GitHub에서 19,000개 이상의 별표를 기록했으며 Google Cloud, Firebase, Flutter, 지도 등 다양한 분야에서 엄선된 100개 이상의 도메인 패키지를 보유한 이 저장소는 특정 하네스에 구애받지 않으면서 필요에 따라 정확한 도메인 컨텍스트를 제공하므로 에이전트는 클라우드 구성을 추측하지 않아도 됩니다. &lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;직접 빌드해 보기&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;효과적인 코딩 에이전트를 빌드하려면 단순히 더 큰 모델로 교체하는 관행에서 벗어나야 합니다. 하네스 엔지니어링에 대한 Ryan Lopopolo의 철학에서 알 수 있듯이, 개발자의 역량을 강화하는 길은 권장사항을 개발 초기 단계부터 활용하고 모델 업그레이드 후에도 지속적으로 활용 가능한 풍부한 도구, 결정론적 검증 도구, 잘 선별된 컨텍스트에 투자하는 데 있습니다. 여기에 빠른 추론 모델, 구조화된 오케스트레이션 하네스, 모듈식 도메인 지식이 결합되면 에이전트는 단순한 대화거리에 그치지 않고 신뢰할 수 있는 자율 엔지니어링 파트너로 진화하게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;실제로 적용해 볼 준비가 되셨나요? 이 에피소드에서 다룬 도구와 리소스를 살펴보세요.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;a href="https://antigravity.google/blog/gemini-3-8-flash-in-google-antigravity" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Gemini 3.8 Flash&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;: 멀티홉 에이전트 루프를 위한 빠르고 저렴한 모델입니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;a href="https://antigravity.google/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Google Antigravity&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;a href="https://antigravity.google/docs/boost/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;/boost&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;): 병렬 코딩 에이전트 및 검증을 위한 조정자 하네스입니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;a href="https://github.com/google/skills/tree/main" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Google Skills&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;: Google Cloud, Firebase, Flutter를 위한 모듈식 도메인 지식입니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;a href="https://adk.dev/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;에이전트 개발 키트(ADK)&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;: 안전 가드레일 및 메모리 압축을 위한 커스텀 하네스 미들웨어입니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;a href="https://youtu.be/F8EZJAm9iO8?si=Uptrs898iW1XIRC6" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;전체 에피소드 동영상&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;: 전체 인터뷰와 Factory Floor 라이브 코드 데모입니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;Google의 최신 소식 확인하기&lt;/strong&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Smitha Kolan&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; → &lt;/span&gt;&lt;a href="https://www.linkedin.com/in/smithakolan/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;LinkedIn&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; | &lt;/span&gt;&lt;a href="https://www.youtube.com/@smithakolan" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;YouTube&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; | &lt;/span&gt;&lt;a href="https://x.com/smithakolan" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;X&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Luke Schlangen&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; → &lt;/span&gt;&lt;a href="https://www.linkedin.com/in/lukeschlangen/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;LinkedIn&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; | &lt;/span&gt;&lt;a href="https://www.luke.mn/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;웹사이트&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Ryan Lopopolo&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; → &lt;/span&gt;&lt;a href="https://www.linkedin.com/in/ryanlopopolo/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;LinkedIn&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; |&lt;/span&gt;&lt;a href="https://hyperbo.la/" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Hyperbola&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; | &lt;/span&gt;&lt;a href="https://x.com/_lopopolo" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;X&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Tilde&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;Thurium &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;→ &lt;/span&gt;&lt;a href="https://www.linkedin.com/in/annthurium/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;LinkedIn&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Billy Jacobson&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; → &lt;/span&gt;&lt;a href="https://www.linkedin.com/in/billyjacobson/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;LinkedIn&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; |&lt;/span&gt;&lt;a href="https://x.com/billyjacobson" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;X&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Mollie Pettit&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; → &lt;/span&gt;&lt;a href="https://www.linkedin.com/in/molliepettit/" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;LinkedIn&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; |&lt;/span&gt;&lt;a href="https://dev.to/molliepettit" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;dev.to&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; | &lt;/span&gt;&lt;a href="https://x.com/MollzMP" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;X&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; |&lt;/span&gt;&lt;a href="https://bsky.app/profile/mollzmp.bsky.social" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Bluesky&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description><pubDate>Tue, 06 Oct 2026 19:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/ko/topics/developers-practitioners/agent-factory-recap-agent-harnesses-shifting-left-and-autonomous-coding/</guid><category>Developers &amp; Practitioners</category><media:content height="540" url="https://storage.googleapis.com/gweb-cloudblog-publish/images/agent-factory-recap-agent-harness.max-600x600.png" width="540"></media:content><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>Agent Factory 요약: 에이전트 하네스, 시프트 레프트, 자율 코딩</title><description></description><image>https://storage.googleapis.com/gweb-cloudblog-publish/images/agent-factory-recap-agent-harness.max-600x600.png</image><site_name>Google</site_name><url>https://cloud.google.com/blog/ko/topics/developers-practitioners/agent-factory-recap-agent-harnesses-shifting-left-and-autonomous-coding/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Mollie Pettit</name><title>Developer Relations Engineer</title><department></department><company></company></author><author xmlns:author="http://www.w3.org/2005/Atom"><name>Smitha Kolan</name><title>Senior Developer Relations</title><department></department><company></company></author></item><item><title>AlphaEvolve로 동영상 처리 가속화 가이드</title><link>https://cloud.google.com/blog/ko/topics/developers-practitioners/how-to-speed-up-your-video-processing-with-alphaevolve/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;*이 콘텐츠는 AI 번역 도구를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역에는 오류나 누락이 포함될 수 있습니다. 정확한 정보는 &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/topics/developers-practitioners/how-to-speed-up-your-video-processing-with-alphaevolve?e=0&amp;amp;hl=en"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;영문 원본&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;을 참고해 주시기 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;실시간 스트리밍에서는 1밀리초의 시간도 매우 중요합니다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;예를 들어 초당 30프레임(fps) 환경에서 개발자에게 주어진 프레임 예산은 단 33.3ms에 불과합니다(60fps에서는 16.6ms). 이 짧은 시간 안에 카메라 프레임을 수집하고, 신경망 세분화를 실행하고, 셰이더를 적용한 뒤 출력물을 합성해야 합니다. 이 예산을 1밀리초라도 초과하게 되면 프레임 드롭과 화면 끊김 현상이 발생합니다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;수동 최적화는 지루한 작업으로 악명이 높습니다. Flame 그래프를 분석하고 Swift, C++ 또는 Metal에서 하위 수준 코드를 수동으로 조정하는 데 몇 주가 걸립니다. 일반적인 AI 코딩 어시스턴트는 상용구를 생성할 수 있지만, 대상 하드웨어에 맞게 최적화하거나, 실제 지연 시간을 벤치마킹하거나, 최적화를 통해 시각적 충실도를 유지하도록 보장할 수는 없습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;자율적인 폐쇄 루프 기반의 최적화 혁신은 이러한 패러다임을 바꿉니다. &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/products/ai-machine-learning/alphaevolve-is-available-for-everyone?e=0&amp;amp;utm_source=gemini"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;AlphaEvolve&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;와 같은 도구는 클라우드 규모의 모델 추론과 로컬 하드웨어 실행을 결합하며, 이미 실제 현장에 영향을 미치고 있습니다. &lt;/span&gt;&lt;a href="https://www.doit.com/about?utm_source=gemini" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;DoIt&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;는 Google과의 파트너십을 통해&lt;/span&gt;&lt;a href="https://www.doit.com/about?utm_source=gemini" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;AlphaEvolve를 사용하여 실시간 macOS 스트리밍 앱에서 프로덕션 Swift 코드를 자율적으로 최적화하고, 수동 프로파일링으로 놓친 성능 개선의 여지를 찾아냈습니다(&lt;/span&gt;&lt;a href="https://medium.com/google-cloud/running-alphaevolve-on-your-own-code-f8aeebceb4d0?utm_source=gemini" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;기술 자료&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt; 전문 읽기).&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이 게시물에서는 동영상 파이프라인에 중점을 두지만, 분할 루프 패턴은 마이크로서비스 처리량과 데이터베이스 쿼리부터 ML 텐서 파이프라인과 임베디드 시스템에 이르기까지 성능이 중요한 모든 곳에 적용됩니다. 어떤 경우든 공식은 동일합니다. 클라우드의 Gemini 코드 생성과 도메인별 벤치마크 하네스 및 자동화된 품질 게이트를 결합하는 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;오늘은 AlphaEvolve를 사용하여 동영상 처리 속도를 높이는 방법을 알아보고, 이러한 원칙을 실제 성능 병목 현상에 어떻게 적용할 수 있는지 소개해 드리겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;분할 루프 아키텍처의 이해: &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;AlphaEvolve가 관리형 클라우드 생성(Google Cloud의 Gemini 모델 앙상블)과 로컬 평가(예: 네이티브 Swift/Metal 코드의 컴파일 및 소요 시간 측정)를 분리하는 방식을 알아봅니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;평가 도구 구성 및 품질 게이트:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 구조적 유사성 지수(SSIM)와 같은 지표를 활용해 점수 함수를 설계함으로써, 진화 루프가 성능 수치만을 높이기 위해 벤치마크를 악용하는 상황(예: 속도를 높이려고 렌더링을 아예 건너뛰는 행위)을 방지하는 방법을 알아봅니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;자율 알고리즘 발견:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Gemini 기반의 진화 검색이 어떻게 별도의 프롬프트 없이도 프레임워크 API를 스스로 찾아내고, 지능적인 엔지니어링 절충(예: 프레임 캐싱 제한)을 결정할 수 있는지 살펴봅니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;현실적인 성능 경계 설정: &lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;물리적 하드웨어 하한에 대한 코드 최적화를 측정하는 방법을 알아봅니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;1. AlphaEvolve의 분할 루프 아키텍처 이해 &lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;AlphaEvolve는 폐쇄 루프 진화 프로세스를 실행합니다. 시드 프로그램과 맞춤 점수 함수가 주어지면 혼합된 Gemini 모델이 코드 변형을 제안하고, 각 후보에 대해 점수 함수를 실행하고, 가장 성능이 좋은 코드를 남기고, 여러 세대에 걸쳐 반복하면서 최적의 솔루션에 가까워집니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/1_OsAwmXL.max-1000x1000.jpg"
        
          alt="1"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;AlphaEvolve의 핵심적인 아키텍처상 이점은 두 부분으로 명확하게 구분된다는 점입니다.&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;생성 부분(Google Cloud 관리형 서비스):&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 프롬프트 샘플러, Gemini 모델 앙상블, 프로그램 데이터베이스로 구성됩니다. Google Cloud는 확장, 프롬프트 조정, 생성 메커니즘을 처리합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;평가 부분(고객 관리형 컴퓨팅):&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 코드 품질 점수 산정은 철저하게 도메인별로 특화되어 이루어집니다. 평가 도구 모듈은 사용자가 전적으로 소유하며, 자체 하드웨어 또는 대상 아키텍처(이 경우 네이티브 Swift 코드를 실행하는 macOS)에서 직접 실행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;AlphaEvolve는 클라우드 생성 측면에서 Python 중심이지만, 평가는 어떤 언어로든 작성할 수 있습니다. 커스텀 평가 도구는 swift를 사용하여 각 Swift 후보 코드를 컴파일하고, 이를 표준 참조 웹캠 클립에 대해 실행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;2. 평가 도구 구성 및 품질 게이트&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;AlphaEvolve와 같은 자동화된 최적화 루프는 실제로 동영상 스트림을 직접 '보는' 것이 아닙니다. 평가 도구가 반환하는 숫자 형태의 적합도 점수만 인식할 뿐입니다. 평가 측정항목에 사각지대가 있다면, 진화적 코드 생성은 이를 집요하게 파고들 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;초기 실행에서 원시 지연 시간에 가중치를 둔 단순한 적합도 점수는 놀라운 속도 향상을 가져왔습니다. 모델이 블러 렌더링을 완전히 우회하고 수정되지 않은 프레임을 0밀리초 만에 반환한 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;구조적 유사성 지수 측정(SSIM)&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;모델이 벤치마크를 조작하는 것을 방지하려면, 처리량과 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;구조적 유사성 지수(SSIM)&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 같은 구조적 충실도 지표를 결합한 2계층 점수 함수를 빌드해 보세요.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;speedup = baseline_ms_per_frame / candidate_ms_per_frame\r\nssim    = mean_ssim_vs_golden\r\n\r\n#Disqualify any candidate falling below visual threshold\r\n\r\n\r\nif ssim &amp;lt; 0.98 or worst_frame_ssim &amp;lt; 0.95:\r\n    return {&amp;quot;speedup&amp;quot;: -1e12}   # Disqualified\r\n\r\nreturn {&amp;quot;speedup&amp;quot;: speedup, &amp;quot;ssim&amp;quot;: ssim}&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafeca8c90&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;이를 통해 어떤 이점을 얻을 수 있을까요?&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;최악의 상황을 가정한 클립 테스트:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 정지된 프레임이나 화면이 비어 있는 카메라로 벤치마킹하지 마세요. 후보 코드는 정적인 배경에서는 평균 SSIM 기준을 쉽게 통과할 수 있지만, 머리를 빠르게 돌리는 상황에서는 실패할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;평균과 최솟값 추적 가능:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 평균 기준점과 프레임별 하한을 모두 적용하여 프레임 드롭 또는 마스크 업데이트 지연을 포착합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;자율적인 알고리즘 탐색: &lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;대부분의 개발자는 로컬 마이크로 최적화(예: 도우미 함수 인라인화, 루프 언롤링, 메모리 풀 조정 등)에 생성형 AI를 사용합니다. 하지만 아키텍처 공간이 주어지면 진화 루프는 자체적으로 시스템 최적화를 발견할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;엔지니어링 교훈:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;고립된 루프가 아닌 프레임워크 컨텍스트 제공:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 프롬프트 또는 검색 하네스에 공개 SDK 헤더, 인터페이스 정의 또는 API 참조 기호를 포함합니다. LLM은 컨텍스트 윈도우에 격리된 프레임 처리 콜백만 포함된 경우 시퀀스 인식 하위 시스템을 채택할 수 없습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;다중 프레임 수명 주기 후크 노출:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 후보 코드가 순수 스테이트리스(Stateless) 함수를 강제하는 대신, 실행 전반에서 제한된 상태(예: 이전 마스크 또는 캐시 타임스탬프)를 유지할 수 있도록 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;품질 게이트를 통한 절충점 관리:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; AlphaEvolve에 시간적 마스크 캐싱을 처음 도입했을 당시, 마스크를 너무 공격적으로 캐싱하는 바람에 눈에 띄는 잔상이 발생하기도 했습니다. SSIM 게이트가 움직임 중 발생하는 드리프트를 억제하므로, 별도의 수동 매개변수 조정 없이도 검색이 프로덕션에 즉시 사용 가능한 수준의 캐시 윈도우로 수렴되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;현실적인 성능 경계 설정&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;성능 엔지니어링에서 흔히 저지르는 실수는 기준 없이 막연하게 최적화를 진행하는 것입니다. 2배의 속도 향상을 달성했을 때, 이를 대단한 성과라고 할 수 있을까요? 아니면 3배나 더 개선할 수 있는 여지를 남겨둔 것일까요?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;실시간 미디어에서 총 프레임 시간은 두 가지 카테고리로 나뉩니다.&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;변경 가능한 소프트웨어 오버헤드:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 메모리 할당, 버퍼 형식 변환, 스레드 컨텍스트 전환, API 디스패치 마찰&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;변경할 수 없는 하드웨어 하한:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 원시 신경망 엔진 추론 지연 시간, GPU 셰이더 컴퓨팅 시간, 하드웨어 디스플레이 동기화&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;AlphaEvolve를 최대한 활용하려면 개발자는 이론상 최대 여유 공간을 기준으로 측정해야 합니다.&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;최적화 루프를 실행하기 전에 다음 몇 가지 원칙을 염두에 두세요. &lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;'노옵스(no-ops)' 파이프라인 빌드:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; Swift/C++ 조정, 데이터 마셜링, 프레임 변환을 제거합니다. 사전 준비된 ML 모델과 순수 GPU 패스만 더미 버퍼에 디스패치합니다. 이때 측정된 시간이 물리적 하드웨어의 하한선입니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;도달 가능한 상한 계산:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 가능한 전체 최적화는 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/original_images/2_u73NadS.jpg"
        
          alt="2"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;3. &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;하드웨어 격차에 대한 점수:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 임의의 속도 향상 배수 대신 최적화 효율성을 측정합니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/3_Y7cUASN.max-1000x1000.jpg"
        
          alt="3"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;시작하기 &lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;모든 벤치마크 코드, 테스트 클립, 평가 스크립트, 원시 후보 로그는 오픈소스입니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;GitHub 저장소:&lt;/strong&gt;&lt;a href="https://github.com/SaschaHeyer/gen-ai-livestream/tree/main/alphaevolve/examples/camera-background-blur" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;AlphaEvolve 카메라 배경 블러 예시&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;DoIt와 함께한 우수사례에 대한 자세한 기술 자료:&lt;/strong&gt;&lt;a href="https://medium.com/google-cloud/running-alphaevolve-on-your-own-code-f8aeebceb4d0" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;자체 코드에 AlphaEvolve 적용하기&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description><pubDate>Tue, 06 Oct 2026 07:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/ko/topics/developers-practitioners/how-to-speed-up-your-video-processing-with-alphaevolve/</guid><category>Developers &amp; Practitioners</category><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>AlphaEvolve로 동영상 처리 가속화 가이드</title><description></description><site_name>Google</site_name><url>https://cloud.google.com/blog/ko/topics/developers-practitioners/how-to-speed-up-your-video-processing-with-alphaevolve/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Anant Nawalgaria</name><title>Group AI Product Manager &amp; Engineer, Google</title><department></department><company></company></author><author xmlns:author="http://www.w3.org/2005/Atom"><name>Sascha Heyer</name><title>Principal AI Lead, DoIt</title><department></department><company></company></author></item><item><title>Google Cloud 네트워킹이 AI 워크로드를 위한 유연한 컴퓨팅 선택을 지원하는 방법</title><link>https://cloud.google.com/blog/ko/topics/developers-practitioners/how-google-cloud-networking-supports-your-fluid-compute-choices-for-ai-workloads/</link><description>&lt;div class="block-paragraph"&gt;&lt;p data-block-key="1cnbu"&gt;&lt;i&gt;*이 콘텐츠는 AI 번역 도구를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역에는 오류나 누락이 포함될 수 있습니다. 정확한 정보는&lt;/i&gt; &lt;a href="https://cloud.google.com/blog/topics/developers-practitioners/how-google-cloud-networking-supports-your-fluid-compute-choices-for-ai-workloads?e=0&amp;amp;hl=en"&gt;&lt;i&gt;영문 원본&lt;/i&gt;&lt;/a&gt;&lt;i&gt;을 참고해 주시기 바랍니다.&lt;/i&gt;&lt;/p&gt;&lt;hr/&gt;&lt;p data-block-key="5tdat"&gt;&lt;/p&gt;&lt;p data-block-key="33vm9"&gt;AI 워크로드에 필요한 리소스, 특히 가속기의 가용성을 확보하는 것은 업계 전반에서 어려운 과제입니다. 특정 유형의 가속기를 기반으로 AI 워크로드를 빌드할 경우, 배포가 지연될 수 있습니다. &lt;b&gt;유동적인 컴퓨팅&lt;/b&gt;이라는 개념을 활용하면 사용 사례에 작힙힌 가용 리소스를 기반으로 다양한 옵션을 고려하여 AI 배포를 설계할 수 있습니다.&lt;/p&gt;&lt;p data-block-key="1pr9b"&gt;이 블로그에서는 Google Cloud 네트워킹이 AI 워크로드를 지원하는 방식을 살펴보고, 가속기(GPU 또는 TPU) 선택 시 고려해야 할 사항을 알아봅니다. 가속기 유형에 따라 백엔드 네트워킹 구성요소의 설정이 달라지기 때문입니다.&lt;/p&gt;&lt;h2 data-block-key="bfaq7"&gt;&lt;b&gt;리소스 옵션&lt;/b&gt;&lt;/h2&gt;&lt;p data-block-key="ehck9"&gt;AI 배포를 통해 수행하려는 작업 유형을 결정하면 이제 다음으로 중요한 요소는 해당 작업을 수행할 때ㅐ 필요한 실제 하드웨어입니다. 이 경우 비공개 LLM에 대한 추론을 실행하려고 하며, 대상은&lt;a href="https://cloud.google.com/compute/docs/gpus"&gt; A4 VM&lt;/a&gt;(a4-highgpu-8g)에서 사용할 수 있는 NVIDIA B200 GPU 제품군입니다.&lt;/p&gt;&lt;p data-block-key="5mcin"&gt;이제 수행하려는 작업과 가능한 컴퓨팅 옵션을 파악했습니다. 하지만 이 옵션을 사용할 수 있을까요?&lt;/p&gt;&lt;p data-block-key="a5se9"&gt;리소스를 확보하는 방법은 다음과 같은 몇 가지 옵션이 있습니다.&lt;/p&gt;&lt;ul&gt;&lt;li data-block-key="btisd"&gt;&lt;a href="https://docs.cloud.google.com/compute/docs/instances/about-flex-start-vms"&gt;동적 워크로드 스케줄러(Flex-start VM)&lt;/a&gt;: 필요한 모든 가속기 노드를 동시에 사용할 수 있을 때까지 워크로드를 큐에 추가하고, 일괄적으로 프로비저닝하며, 최대 7일 동안 선점되지 않도록 실행합니다.&lt;/li&gt;&lt;li data-block-key="2ghsv"&gt;&lt;a href="https://docs.cloud.google.com/compute/docs/instances/future-reservations-calendar-mode-overview"&gt;동적 워크로드 스케줄러(캘린더 모드)&lt;/a&gt;: 1~90일 전에 가속기 용량을 예약할 수 있으며, 시작 및 종료 시간이 보장되므로 예약된 사전 학습 실행 및 벤치마킹에 적합합니다.&lt;/li&gt;&lt;li data-block-key="bc7hb"&gt;&lt;a href="https://docs.cloud.google.com/compute/docs/instances/future-reservations-overview"&gt;미래용 예약&lt;/a&gt;: 특정 미래 날짜부터 지정된 영역에서 약정된 하드웨어에 대한 액세스를 보장합니다.&lt;/li&gt;&lt;li data-block-key="eif2m"&gt;&lt;a href="https://cloud.google.com/compute/docs/instances/reservations-overview"&gt;Flex 예약&lt;/a&gt;: 다년간의 약정 없이도 부족한 가속기 노드를 확보할 수 있도록 단기 약정 기간을 제공합니다.&lt;/li&gt;&lt;li data-block-key="2ict"&gt;&lt;a href="https://docs.cloud.google.com/kubernetes-engine/docs/how-to/node-auto-provisioning#enable-workload-level"&gt;동적 노드 자동 프로비저닝 및 ComputeClasses&lt;/a&gt;: Google Kubernetes Engine(GKE)에서 ComputeClasses 내에 여러 제품군을 대체 목록으로 정의하면 기본 풀에 리전 제약이 발생할 경우 클러스터가 대체 가속기 유형을 자동으로 프로비저닝하도록 시도할 수 있습니다.&lt;/li&gt;&lt;li data-block-key="fjt20"&gt;&lt;a href="https://cloud.google.com/compute/docs/instances/spot"&gt;스팟 VM&lt;/a&gt;: 내결함성을 갖추고 체크포인트가 있는 일괄 작업에 대해 잔여 컴퓨팅 용량을 크게 할인된 가격으로 제공합니다.&lt;/li&gt;&lt;/ul&gt;&lt;p data-block-key="7j1cg"&gt;&lt;a href="https://medium.com/google-cloud/never-run-out-of-compute-a-practical-guide-to-gke-resource-obtainability-eab4dea059ca" target="_blank"&gt;자세한 내용은 블로그 게시물 &lt;i&gt;Never Run Out of Compute: A Practical Guide to GKE Resource Obtainability&lt;/i&gt;&lt;/a&gt;(안정적인 컴퓨팅 리소스 확보: GKE 리소스 확보 가능성을 안정적으로 높이기 위한 실무 가이드)에서 확인하세요.&lt;/p&gt;&lt;h2 data-block-key="3ave2"&gt;&lt;b&gt;네트워킹 구성 선택하기&lt;/b&gt;&lt;/h2&gt;&lt;p data-block-key="cma60"&gt;가속기의 네트워킹 구성요소는 선택하는 가속기 유형에 따라 달라집니다. 이 문서에서는 표준 네트워킹, 가속 GPU 네트워킹(&lt;a href="https://docs.cloud.google.com/compute/docs/gpus/gpudirect"&gt;TCPX/TCPXO&lt;/a&gt; 및&lt;a href="https://cloud.google.com/blog/products/networking/rdma-rocev2-for-ai-workloads-on-google-cloud?e=48754805"&gt; RoCEv2&lt;/a&gt;), TPU 네트워킹, Cloud Run의 네 가지 구성을 살펴보겠습니다.&lt;/p&gt;&lt;h3 data-block-key="dk40d"&gt;&lt;b&gt;표준 네트워킹&lt;/b&gt;&lt;/h3&gt;&lt;ul&gt;&lt;li data-block-key="2c18l"&gt;&lt;b&gt;지원되는 가속기:&lt;/b&gt; NVIDIA T4(&lt;a href="https://docs.cloud.google.com/compute/docs/gpus#n1-gpus"&gt;N1 시리즈&lt;/a&gt;), NVIDIA L4(&lt;a href="https://docs.cloud.google.com/compute/docs/gpus#l4-gpus"&gt;G2 시리즈&lt;/a&gt;), NVIDIA A100(&lt;a href="https://docs.cloud.google.com/compute/docs/accelerator-optimized-machines#a2-vms"&gt;A2 머신 시리즈&lt;/a&gt; 단일 노드 및 멀티 노드), Cloud TPU v3, &lt;a href="https://cloud.google.com/tpu/docs/v5e"&gt;Cloud TPU v5e&lt;/a&gt;(단일 호스트/독립형 슬라이스)&lt;/li&gt;&lt;li data-block-key="eaeho"&gt;&lt;b&gt;아키텍처:&lt;/b&gt; 노드는 표준 TCP/IP 기반의&lt;a href="https://cloud.google.com/compute/docs/networking/using-gvnic"&gt; Google 가상 NIC(gVNIC)&lt;/a&gt;를 사용하여 기본&lt;a href="https://cloud.google.com/vpc/docs/vpc"&gt; Virtual Private Cloud(VPC)&lt;/a&gt; 네트워크를 통해 통신합니다.&lt;/li&gt;&lt;li data-block-key="4i755"&gt;&lt;b&gt;워크로드 적합성:&lt;/b&gt; Google Cloud 컴퓨팅 환경 전반에서 간단한 이식성을 제공하여 분산 데이터 전처리, 분리된 파이프라인 단계, 독립적인 추론 복제본, 표준 VPC 라우팅 및 네트워크 정책을 사용하는 컴퓨터 비전 워크로드를 지원합니다.&lt;/li&gt;&lt;/ul&gt;&lt;h3 data-block-key="aic00"&gt;&lt;b&gt;가속 GPU 네트워킹(TCPX/TCPXO 및 RoCEv2)&lt;/b&gt;&lt;/h3&gt;&lt;p data-block-key="331f4"&gt;분산 학습과 멀티 노드 추론에는 대규모 파라미터 교환과 집합 통신을 처리하기 위해 특화된 멀티 레일 네트워크 패브릭이 필요합니다.&lt;/p&gt;&lt;h3 data-block-key="a44l1"&gt;&lt;b&gt;GPUDirect-TCPX 및 TCPXO 패브릭&lt;/b&gt;&lt;/h3&gt;&lt;ul&gt;&lt;li data-block-key="4mt5"&gt;&lt;b&gt;지원되는 가속기&lt;/b&gt;: NVIDIA H100(&lt;a href="https://docs.cloud.google.com/compute/docs/accelerator-optimized-machines#a3-high-vms"&gt;A3 High VM&lt;/a&gt;, 레일 4개) 및 NVIDIA H100 Mega(&lt;a href="https://docs.cloud.google.com/compute/docs/accelerator-optimized-machines#a3-mega-vms"&gt;A3 Mega VM&lt;/a&gt;, 레일 8개).&lt;/li&gt;&lt;li data-block-key="7e8hv"&gt;&lt;b&gt;아키텍처:&lt;/b&gt; 커스텀&lt;a href="https://docs.cloud.google.com/compute/docs/gpus/gpudirect#a3-high-and-a3-edge"&gt; GPUDirect-TCPX&lt;/a&gt;(전용 VPC 4개) 및&lt;a href="https://docs.cloud.google.com/compute/docs/gpus/gpudirect#a3-mega"&gt; GPUDirect-TCPXO&lt;/a&gt;(전용 VPC 8개) 오프로드 엔진을 사용하여 기본 RDMA 하드웨어 없이도 표준 이더넷 인프라에서 높은 처리량의 멀티 레일 GPU 통신을 구현합니다.&lt;/li&gt;&lt;li data-block-key="e52bk"&gt;&lt;b&gt;배포 청사진:&lt;/b&gt; 이러한 멀티 VPC 토폴로지는 &lt;a href="https://docs.cloud.google.com/cluster-toolkit/docs/setup/cluster-blueprint"&gt;Cluster Toolkit&lt;/a&gt;의 사전 빌드된 청사진을 사용하는 등 다양한 방법으로 배포할 수 있습니다.&lt;/li&gt;&lt;/ul&gt;&lt;h3 data-block-key="1hftg"&gt;&lt;b&gt;RoCEv2 패브릭(VM 및 베어메탈)&lt;/b&gt;&lt;/h3&gt;&lt;ul&gt;&lt;li data-block-key="famvn"&gt;&lt;b&gt;지원되는 가속기&lt;/b&gt;: NVIDIA H200(&lt;a href="https://docs.cloud.google.com/compute/docs/gpus#h200-gpus"&gt;A3 Ultra VM&lt;/a&gt;), NVIDIA B200(&lt;a href="https://docs.cloud.google.com/compute/docs/gpus#b200-gpus"&gt;A4 VM&lt;/a&gt;), NVIDIA GB200 NVL72(&lt;a href="https://docs.cloud.google.com/compute/docs/gpus#gb200-gpus"&gt;A4X VM&lt;/a&gt;), NVIDIA GB300(&lt;a href="https://docs.cloud.google.com/compute/docs/gpus#gb300-gpus"&gt;A4X Max 베어메탈&lt;/a&gt;).&lt;/li&gt;&lt;li data-block-key="8bi4q"&gt;&lt;b&gt;영역 네트워크 프로필:&lt;/b&gt; RoCEv2는 특수한 영역 네트워크 프로필에 연결된 전용 RDMA VPC를 통해 작동합니다. VM 인스턴스(A3 Ultra, A4, A4X)는&lt;a href="https://docs.cloud.google.com/vpc/docs/rdma-network-profiles#roce-supported-features"&gt; ZONE-vpc-roce&lt;/a&gt; 프로필을 사용하고, 베어메탈 인스턴스(예: A4X Max)는 전용&lt;a href="https://docs.cloud.google.com/vpc/docs/rdma-network-profiles#roce-metal-supported-features"&gt; ZONE-vpc-roce-metal&lt;/a&gt; 베어메탈 프로필을 사용합니다.&lt;/li&gt;&lt;li data-block-key="frm66"&gt;&lt;b&gt;레일 정렬 패브릭:&lt;/b&gt; 이 전용 VPC는 GPU 통신을 위해 엄격하게 격리되어 있으며 가속기 NIC에 직접 매핑된 서브넷을 포함합니다. 백엔드 네트워크는 레일별로 정렬되어 있고 점보 프레임(&lt;a href="https://cloud.google.com/vpc/docs/mtu"&gt;MTU 8896&lt;/a&gt;)을 지원하며, 레일간 간섭을 최소화하면서 가족에게 피해 입히지 않도록 비차단 멀티 테라비트 대역폭을 제공합니다.&lt;/li&gt;&lt;li data-block-key="1ql6i"&gt;&lt;b&gt;GKE를 통한 자동화된 네트워크 구성 영지&lt;/b&gt;&lt;a href="https://docs.cloud.google.com/kubernetes-engine/docs/how-to/allocate-network-resources-dra"&gt; &lt;b&gt;동적 리소스 할당 네트워크(DRANET)&lt;/b&gt;&lt;/a&gt;: GKE에 이러한 GPU를 배포할 때 GKE 관리형 DRANET을 사용하여 추가 네트워크를 자동으로 프로비저닝하고 RDMA 네트워크 인터페이스를 GPU에 매핑하는 드라이버를 할당할 수 있습니다. 그런 다음 표준 Kubernetes 리소스 클레임을 사용하여 워크로드 포드에서 직접 할당하고 사용할 수 있습니다.&lt;/li&gt;&lt;li data-block-key="88nge"&gt;&lt;b&gt;턴키 배포&lt;/b&gt;:&lt;a href="https://cloud.google.com/cluster-toolkit/docs/overview"&gt; Cluster Toolkit&lt;/a&gt;의 자동화된 청사진을 사용하여 RDMA VPC, MTU 조정, tooling 포함한 전체 엔드 투 엔드 스택을 배포할 수 있습니다.&lt;/li&gt;&lt;/ul&gt;&lt;h3 data-block-key="17j5u"&gt;&lt;b&gt;TPU 네트워킹&lt;/b&gt;&lt;/h3&gt;&lt;ul&gt;&lt;li data-block-key="nvqd"&gt;&lt;b&gt;지원되는 가속기&lt;/b&gt;:&lt;a href="https://cloud.google.com/tpu/docs/v4"&gt; Cloud TPU v4&lt;/a&gt;,&lt;a href="https://cloud.google.com/tpu/docs/v5p"&gt; Cloud TPU v5p&lt;/a&gt;,&lt;a href="https://cloud.google.com/tpu/docs/v5e"&gt; Cloud TPU v5e&lt;/a&gt;(멀티 호스트 포드 슬라이스),&lt;a href="https://cloud.google.com/tpu/docs/v6e"&gt; Cloud TPU v6ee&lt;/a&gt;(Trillium), 튜토리얼:&lt;a href="https://docs.cloud.google.com/tpu/docs/tpu7x"&gt; TPU7x&lt;/a&gt;(Ironwood)&lt;/li&gt;&lt;li data-block-key="asoh0"&gt;&lt;b&gt;칩 간 상호 연결(ICI)&lt;/b&gt;: TPU Pod 또는 슬라이스 내부에서 칩은 2D 또는 3D 토러스 메시로 구성된 전용 초저지연 광학 링크를 통해 직접 통신하며 기존 네트워크 스택을 완전히 우회합니다.&lt;/li&gt;&lt;li data-block-key="bpm21"&gt;&lt;b&gt;광학 회로 스위치&lt;/b&gt;(OCS): TPU v4 및 TPU v5p SuperPod에서 소프트웨어로 재구성할 수 있는 OCS 장치를 사용합니다. 물리적 네트워크 토폴로지를 동적으로 변경하고, 결함이 있는 트레이를 우회하며, 케이블을 수동으로 다시 연결하지 않고도 원하는 크기의 가속기 슬라이스를 구성할 수 있도록 합니다.&lt;/li&gt;&lt;li data-block-key="a6vc6"&gt;&lt;b&gt;멀티 NIC 아키텍처&lt;/b&gt;(TPU v6e 이상): 이전 TPU 세대가 슬라이스 내부 통신에는 ICI를 사용하고 호스트 트래픽에는 단일 NIC에 의존했던 것과는 달리, Cloud TPU v6e(Trillium) 및 TPU7x는 기본 네이티브 NIC 아키텍처를 도입했습니다. 작업자 노드는 표준 Kubernetes 관리 트래픽을 기본 VPC로 격리하는 동시에 높은 처리량의 TPU 데이터 및 교차 슬라이스 통신을 위해 구성된 별도의 VPC를 사용합니다.&lt;/li&gt;&lt;li data-block-key="1hqrg"&gt;&lt;a href="https://docs.cloud.google.com/kubernetes-engine/docs/how-to/allocate-network-resources-dra#use-non-rdma-interfaces-tpu"&gt;&lt;b&gt;TPUDRANET&lt;/b&gt;&lt;/a&gt;&lt;b&gt; 배포&lt;/b&gt;: GKE에 이러한 TPU를 배포할 때 GKE 관리형 DRANET을 사용하여 추가 네트워크를 자동으로 프로비저닝하고 TPU 통신을 위한 드라이버를 할당할 수 있습니다. 그런 다음 표준 Kubernetes 리소스 클레임을 사용하여 워크로드 포드에서 직접 할당하고 사용할 수 있습니다.&lt;/li&gt;&lt;li data-block-key="4g232"&gt;&lt;b&gt;데이터 센터 네트워크(DCN) 멀티슬라이스&lt;/b&gt;: 개별 TPU 슬라이스를 넘어 확장헤야 하는 모델의 경우,&lt;a href="https://docs.cloud.google.com/tpu/docs/multislice-introduction"&gt; Cloud TPU 멀티슬라이스&lt;/a&gt;가 이러한 전용 멀티 NIC 경로를 활용하여 Google의 고속 Jupiter 데이터 센터 네트워크를 통해 여러 개의 독립적인 ICI 메시를 연결합니다.&lt;/li&gt;&lt;/ul&gt;&lt;h3 data-block-key="5tvdd"&gt;&lt;b&gt;Cloud Run&lt;/b&gt;&lt;/h3&gt;&lt;ul&gt;&lt;li data-block-key="9asne"&gt;&lt;b&gt;지원되는 가속기:&lt;/b&gt; &lt;a href="https://cloud.google.com/run/docs/configuring/services/gpu"&gt;Cloud Run GPU 서비스&lt;/a&gt;의 NVIDIA L4(G2 시리즈) 및 NVIDIA RTX PRO 6000(Blackwell)&lt;/li&gt;&lt;li data-block-key="273sm"&gt;&lt;b&gt;VPC 직접 연결 이그레스&lt;/b&gt;: &lt;a href="https://cloud.google.com/run/docs/configuring/vpc-direct-vpc"&gt;VPC 직접 연결 이그레스&lt;/a&gt;를 통해 1분 이내에 IP를 할당하여 서버리스 컨테이너를 비공개 VPC 네트워크에 직접 바인딩합니다. 이를 통해 공개 인터넷을 거치거나 기존 커넥터 VM을 사용하지 않고도 내부 데이터 레이크, 데이터베이스, 비공개 API에 안전하고 지연 시간이 짧은 액세스를 제공합니다.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/how-google-cloud-networking-supports-your-.max-1000x1000.jpg"
        
          alt="how-google-cloud-networking-supports-your-fluid-compute-choices-networks"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph"&gt;&lt;h2 data-block-key="1cnbu"&gt;&lt;b&gt;요약&lt;/b&gt;&lt;/h2&gt;&lt;p data-block-key="906oc"&gt;Google Cloud 네트워킹 옵션은 다양한 가속기 유형을 지원합니다. 유연한 컴퓨팅을 활용하면 워크로드 성능을 최적화하는 최상의 설계에 맞춰 네트워크 구성을 조정할 수 있습니다.&lt;/p&gt;&lt;h2 data-block-key="5l2hp"&gt;&lt;b&gt;다음 단계&lt;/b&gt;&lt;/h2&gt;&lt;p data-block-key="60so5"&gt;다음 리소스를 통해 Google Cloud AI 인프라 및 네트워킹 아키텍처를 자세히 살펴보세요.&lt;/p&gt;&lt;ul&gt;&lt;li data-block-key="7b4ll"&gt;블로그:&lt;a href="https://cloud.google.com/blog/ko/topics/ai-infrastructure/best-practices-for-dynamic-capacity-management?e=48754805&amp;amp;hl=ko"&gt; AI 인프라를 위한 동적 용량 관리&lt;/a&gt;&lt;/li&gt;&lt;li data-block-key="8g62o"&gt;튜토리얼:&lt;a href="https://discuss.google.dev/t/how-to-build-an-elastic-scalable-llm-inference-platform-on-gke-using-fluid-compute/388108" target="_blank"&gt; Fluid Compute를 사용하여 GKE에서 탄력적이고 확장 가능한 LLM 추론 플랫폼을 빌드하는 방법&lt;/a&gt;&lt;/li&gt;&lt;li data-block-key="6kpvf"&gt;블로그:&lt;a href="https://cloud.google.com/blog/products/networking/how-google-cloud-networking-supports-your-ai-workloads"&gt; Google Cloud 네트워킹이 AI 워크로드를 지원하는 방법&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-block-key="fiat2"&gt;질문이 있거나, 자세한 내용이 궁금하거나, 의견을 공유하고 싶으신가요? &lt;a href="https://www.linkedin.com/in/ammett/" target="_blank"&gt;LinkedIn&lt;/a&gt;을 통해 저에게 알려주세요.&lt;/p&gt;&lt;/div&gt;</description><pubDate>Mon, 05 Oct 2026 13:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/ko/topics/developers-practitioners/how-google-cloud-networking-supports-your-fluid-compute-choices-for-ai-workloads/</guid><category>Networking</category><category>Developers &amp; Practitioners</category><media:content height="540" url="https://storage.googleapis.com/gweb-cloudblog-publish/images/how-google-cloud-networking-supports-your-fl.max-600x600_VSTWN6E.png" width="540"></media:content><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>Google Cloud 네트워킹이 AI 워크로드를 위한 유연한 컴퓨팅 선택을 지원하는 방법</title><description></description><image>https://storage.googleapis.com/gweb-cloudblog-publish/images/how-google-cloud-networking-supports-your-fl.max-600x600_VSTWN6E.png</image><site_name>Google</site_name><url>https://cloud.google.com/blog/ko/topics/developers-practitioners/how-google-cloud-networking-supports-your-fluid-compute-choices-for-ai-workloads/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Ammett Williams</name><title>Developer Relations Engineer</title><department></department><company></company></author></item><item><title>AI 에이전트 빌드의 기초를 다질 수 있는 기회</title><link>https://cloud.google.com/blog/ko/topics/developers-practitioners/your-chance-to-start-building-ai-agents-from-the-absolute-basics/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;*이 콘텐츠는 AI 번역 도구를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역에는 오류나 누락이 포함될 수 있습니다. 정확한 정보는&lt;/span&gt;&lt;a href="https://docs.google.com/document/d/1AJE7Kfx9F9OgPso_jiBqzXdGBOqXJZ4T7Zr-AnsZpSU/edit?tab=t.0" rel="noopener" target="_blank"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt; 영문 원본&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;을 참고해 주시기 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;최근 'AI 에이전트'에 대한 이야기를 많이 들었지만 실제로 어떻게 빌드해야 할지 잘 모르겠나요? 머신러닝에 대한 배경지식이나 수년간의 소프트웨어 경험이 없어도 시작할 수 있습니다. 가장 좋은 학습 방법은 직접 해 보는 것입니다. 그래서 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;Agent Valley&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;를 빌드했습니다.   &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Agent Valley&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;는 5주간 진행되는 무료 라이브 학습 시리즈로, 처음부터 시작해 나만의 실습형 에이전트 시스템을 빌드할 수 있도록 설계되었습니다. 지루한 터미널 줄을 쳐다보는 대신 작고 로우 폴리곤의 가상 세계에서 빌드하고 플레이할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;강사 소개&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Google의 우수 DevRel 엔지니어 중 한 명인 애니 왕이 직접 알려드립니다. 이 과정은 처음부터 끝까지 실습 위주로 진행되며, 상호작용이 가능하고 초보자도 쉽게 따라 할 수 있도록 설계되었습니다. Google에서 AI 시스템을 실제로 설계하는 사람들이 AI 시스템을 빌드하는 방법을 배우고 싶다면 이번 기회를 놓치지 마세요.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;학습 방식&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;노트북의 분할 화면 작업공간에서 빌드하면서 학습합니다. 첫날에는 플레이 캐릭터이자 저장 파일 역할을 하는 커스텀 로우 폴리 동료를 설명하고 소환합니다. 동료를 이끌고 계곡의 5개 구역을 탐험하는 동안 게임 바로 옆에 실시간 런타임 검사기가 표시되어 AI가 실시간으로 무엇을 생각하고 결정하며 비용을 얼마나 지출하는지 정확히 보여줍니다. 설정 과정이 전혀 어렵지 않습니다. Google에서 이러한 실습을 실행할 수 있는 환경을 제공하므로 바로 빌드를 시작할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;5개의 모듈식 세션으로 구성된 Agent 101 라이브 (언제든지 참여 가능) &lt;/strong&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;1주 차: 소환의 숲 (제어)&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; · 동료를 소환하고 대화 전반에 걸쳐 동료의 기억과 특성을 일관되게 유지하는 방법을 알아보세요.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;2주 차: 빌드야드 (분해)&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; · 여러 AI 어시스턴트가 서로의 작업을 방해하지 않고 병렬로 협업할 수 있도록 대규모 프로젝트를 분해하는 방법을 알아봅니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;3주 차: 마켓 스트리트 (COORDINATE)&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; · 가상 매장을 열어 보세요. 트랜잭션과 반품이 원활하게 진행되고 충돌이 발생하지 않도록 안정적인 코드를 작성하는 방법을 배웁니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;4주 차: 보관함 (기억하기)&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; · 동반자에게 추억을 선물하세요. 에이전트가 혼동하거나 내용을 지어내지 않고도 과거의 세부정보를 기억하도록 돕는 방법을 알아보세요.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;5주 차: 야시장 (라이브)&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; · 대단원의 막을 내립니다. 시스템을 빠르고 저렴하게 유지하면서 에이전트가 불꽃놀이나 무대 조명과 같은 세상의 이벤트에 실시간으로 반응하도록 만드는 방법을 알아보세요.              &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/agent-valley-roadmap-2160x2700.max-1000x1000.png"
        
          alt="agent-valley-roadmap-2160x2700"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;라이브 스트림에 참여하세요    &lt;/strong&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;5 화 9월 1일 시작 · 오전 10:00 (태평양 표준시)&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;코딩과 플레이를 통해 배우고 싶어 하는 AI 에이전트 초보자                                                       &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;참석 신청하기: &lt;/span&gt;&lt;a href="https://goo.gle/agent101" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;goo.gle/agent101&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description><pubDate>Fri, 02 Oct 2026 02:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/ko/topics/developers-practitioners/your-chance-to-start-building-ai-agents-from-the-absolute-basics/</guid><category>Developers &amp; Practitioners</category><media:content height="540" url="https://storage.googleapis.com/gweb-cloudblog-publish/images/Agent_Valley_Hero_Blog.max-600x600.png" width="540"></media:content><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>AI 에이전트 빌드의 기초를 다질 수 있는 기회</title><description></description><image>https://storage.googleapis.com/gweb-cloudblog-publish/images/Agent_Valley_Hero_Blog.max-600x600.png</image><site_name>Google</site_name><url>https://cloud.google.com/blog/ko/topics/developers-practitioners/your-chance-to-start-building-ai-agents-from-the-absolute-basics/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Christina Lin</name><title>Developer Relations Engineering Manager</title><department></department><company></company></author></item><item><title>Cloud Run 샌드박스에서 AI 생성 코드를 안전하게 실행</title><link>https://cloud.google.com/blog/ko/topics/developers-practitioners/google-cloud-run-sandboxes-are-in-public-preview/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;*이 콘텐츠는 AI 번역 도구를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역에는 오류나 누락이 포함될 수 있습니다. 정확한 정보는 &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/topics/developers-practitioners/google-cloud-run-sandboxes-are-in-public-preview?e=48754805"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;영문 원본&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;을 참고해 주시기 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Google Cloud에서 자주 듣는 질문이 있습니다. 호스트 애플리케이션, 데이터, 클라우드 사용자 인증 정보를 위험에 빠뜨리지 않고 AI 생성 코드나 신뢰할 수 없는 바이너리를 안전하게 실행하려면 어떻게 해야 할까요? 즉, 권한이 더 높은 신뢰할 수 있는 프로그램과 완전히 분리된 안전한 공간을 AI로 작성된 프로그램에 어떻게 제공할 수 있을까요?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;지금까지 개발자는 컨테이너 클러스터를 사용하여 복잡한 샌드박스 인프라를 빌드하거나 특수한 서드 파티 microVM 런타임에 대한 비용을 지불해야 했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;오늘 &lt;/span&gt;&lt;a href="https://www.wearedevelopers.com/world-congress" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;WeAreDevelopers World Congress&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;에서 Google Cloud Run 샌드박스의 공개 프리뷰를 발표합니다. Cloud Run 샌드박스는 신뢰할 수 없는 코드와 에이전트 워크로드를 실행하기 위해 특별히 빌드된 기본 제공의 안전한 초고속 런타임 환경으로, 밀리초 단위로 시작됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;다음 예시에서는 평균 지연 시간 500ms로 1,000개의 샌드박스를 시작, 실행, 중지하는 Cloud Run 서비스에서 신뢰할 수 없는 Python 코드를 안전하게 실행하기 위해 요청을 보냅니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/original_images/sandbox_1000_-_100_ok.gif"
        
          alt="sandbox 1000 - 100 ok"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이 게시물에서는 이 기능과 핵심 사용 사례에 대해 자세히 알아보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Cloud Run 샌드박스란 무엇인가요?&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Cloud Run 샌드박스는 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;기존 Cloud Run 서비스 인스턴스 내에서&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 거의 즉시 생성할 수 있는 경량의 격리된 실행 경계입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;LLM이 동적으로 생성된 Python 스크립트를 실행하여 비즈니스 마진을 계산하거나, 헤드리스 브라우저를 가동하여 웹 조사를 수행해야 하는 경우 Cloud Run 샌드박스는 서버리스 환경을 벗어나지 않고도 이러한 태스크를 실행할 수 있는 안전한 격리된 샌드박스를 제공합니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/run_sandbox_arch.max-1000x1000.jpg"
        
          alt="run_sandbox_arch"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;핵심 사용 사례&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;LLM 코드 인터프리터:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; AI 제품에 고급 데이터 분석 기능을 빌드합니다. 모델이 Python, R 또는 SQL 코드를 작성하고 실행하여 데이터 세트를 분석하고, 차트를 생성하고, 복잡한 수학 연산을 안전하게 수행할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;헤드리스 브라우저:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 에이전트에게 브라우저를 실행할 수 있는 안전한 환경을 제공합니다. 호스트 머신을 위험에 빠뜨리지 않고 웹페이지를 안전하게 스크랩하고, 스크린샷을 찍고, 웹 워크플로를 자동화할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;사용자 제출 코드 실행:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; AI 외에도 Cloud Run에서 호스팅되는 플랫폼은 샌드박스를 사용하여 자체 최종 사용자가 업로드한 커스텀 스크립트, 플러그인 또는 웹훅을 안전하게 실행할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;작동 방식: 개발자 경험&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Cloud Run 서비스에서 샌드박스를 사용 설정하는 방법은 배포에 단일 플래그를 추가하는 것만큼 간단합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;1단계: 샌드박스 런처 사용 설정&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Cloud Run 서비스를 배포할 때 gcloud 또는 YAML 구성을 통해 샌드박스 런처를 사용 설정합니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;gcloud beta run deploy my-agent-service \\\r\n    --image=gcr.io/my-project/agent-image \\\r\n    --sandbox-launcher&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbb0c21c350&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;2단계: 코드에서 샌드박스를 기본적으로 생성&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;사용 설정하면 경량 샌드박스 CLI 바이너리가 실행 환경에 자동으로 마운트됩니다. 에이전트 애플리케이션은 표준 하위 프로세스 호출을 사용하여 프로그래매틱 방식으로 샌드박스를 생성할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;LLM이 생성한 신뢰할 수 없는 Python 스크립트를 얼마나 쉽게 실행할 수 있는지 보여드리겠습니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;import subprocess\r\n\r\ndef run_untrusted_code(llm_code: str):\r\n    # 1. Write the untrusted LLM code to a local file\r\n    with open(&amp;quot;/tmp/generated_script.py&amp;quot;, &amp;quot;w&amp;quot;) as f:\r\n        f.write(llm_code)\r\n        \r\n    # 2. Run it inside the secure sandbox\r\n    # The sandbox shares your container\&amp;#x27;s filesystem tools but runs in a secure silo\r\n    result = subprocess.run(\r\n        [&amp;quot;sandbox&amp;quot;, &amp;quot;do&amp;quot;, &amp;quot;--&amp;quot;, &amp;quot;python3&amp;quot;, &amp;quot;/tmp/generated_script.py&amp;quot;],\r\n        capture_output=True,\r\n        text=True,\r\n        timeout=10\r\n    )\r\n    \r\n    return result.stdout if result.returncode == 0 else result.stderr&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbb0c21cb90&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;보안 내재화 설계: 기본적으로 제로 트러스트&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Cloud Run 샌드박스는 악의적이거나 잘못된 코드 실행으로부터 호스트 애플리케이션과 클라우드 리소스를 보호하도록 설계되었습니다. 런타임은 다음 세 가지 중요한 보안 경계를 적용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;1. &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;사용자 인증 정보 및 환경 격리:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 이러한 샌드박스는 Cloud Run 서비스의 환경 변수에 액세스할 수 없으며 Google Cloud 메타데이터 서버를 호출할 수도 없습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;2. &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;잠긴 네트워크 이그레스 (기본 거부):&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 기본적으로 샌드박스는 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;아웃바운드 네트워크 액세스가 전혀 없습니다&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;. 악의적인 서버로 데이터를 무단 반출하려는 스크립트를 실행하도록 에이전트를 속이는 경우 네트워크 요청은 시스템 레이어에서 차단됩니다. 이그레스는 명시적으로 요청된 경우에만 사용 설정할 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;sandbox do --allow-egress -- curl https://api.github.com&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbaff777290&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;3. &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;안전한 파일 시스템 오버레이:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 샌드박스는 컨테이너의 파일 시스템에 대한 읽기 전용 뷰로 실행되므로 설치된 패키지, Python 런타임, 바이너리를 사용할 수 있지만 모든 변경사항은 격리된 임시 메모리 오버레이에 기록됩니다. 샌드박스 실행이 종료되면 생성된 모든 파일이 폐기됩니다. 샌드박스 전반에서 재사용할 수 있도록 필요에 따라 파일을 가져오고 내보낼 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;# Write data from the sandbox to an archive file that can be persisted\r\nsandbox do --write --export-tar=/tmp/work.tar \\\r\n  -- /bin/bash -c &amp;quot;mkdir -p /tmp/work &amp;amp;&amp;amp; echo \&amp;#x27;task-complete\&amp;#x27; &amp;gt; /tmp/work/status.txt&amp;quot;\r\n\r\n# Import the archive file in a new sandbox\r\nsandbox do --write --import-tar=/tmp/work.tar \\\r\n  -- /bin/bash -c &amp;quot;cat /tmp/work/status.txt&amp;quot;&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafed09910&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;ADK 및 ComputeSDK 기본 제공 지원&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Cloud Run 샌드박스는 새로운 &lt;/span&gt;&lt;a href="https://adk.dev/" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;에이전트 개발 키트&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;의 다음 버전에서 &lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt;&lt;code&gt;CloudRunSandboxCodeExecutor&lt;/code&gt;와 함께 지원됩니다. 이 통합을 통해 Cloud Run에서 실행되는 ADK 에이전트는 단일 라인으로 코드를 실행할 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;from google.adk.agents import Agent\r\nfrom google.adk.integrations.cloud_run import CloudRunSandboxCodeExecutor\r\n\r\nanalyst_agent = Agent(\r\n    name=&amp;quot;cloud_run_data_analyst&amp;quot;,\r\n    model=&amp;quot;gemini-3.1-pro-preview&amp;quot;,\r\n    system_instruction=(\r\n        &amp;quot;You are an expert data analyst. Write and execute Python code to answer &amp;quot;\r\n        &amp;quot;user questions and process data safely.&amp;quot;\r\n    ),\r\n    code_executor=CloudRunSandboxCodeExecutor(),\r\n)&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafed0b450&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;샌드박스를 실행하기 위한 벤더 불문 SDK인 &lt;/span&gt;&lt;a href="https://docs.computesdk.com/getting-started/introduction" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;ComputeSDK&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;에도 Cloud Run 샌드박스가 추가되었습니다. 이 SDK를 사용하면 Cloud Run 서비스 외부에서 샌드박스를 원격으로 호출하거나 서비스에서 로컬 도구로 직접 사용할 수 있습니다. Cloud Run 샌드박스에 이 SDK를 사용하는 방법은 &lt;/span&gt;&lt;a href="https://github.com/computesdk/computesdk/tree/main/packages/cloud-run" rel="noopener" target="_blank"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;여기&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;에서 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;지금 시작하기&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;온디맨드 가상 머신에 높은 프리미엄을 부과하는 전용 샌드박스 호스팅 플랫폼과 달리 Cloud Run 샌드박스는 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;기존에 할당된 CPU와 메모리에서 직접 실행&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;됩니다. 샌드박스는 실행 중인 인스턴스의 리소스를 공유하므로 이 기능을 사용하는 데 추가 비용이나 프리미엄이 들지 않습니다. 문서는 &lt;/span&gt;&lt;a href="https://docs.cloud.google.com/run/docs/code-execution"&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;여기&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;에서 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;</description><pubDate>Thu, 01 Oct 2026 21:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/ko/topics/developers-practitioners/google-cloud-run-sandboxes-are-in-public-preview/</guid><category>Developers &amp; Practitioners</category><media:content height="540" url="https://storage.googleapis.com/gweb-cloudblog-publish/images/sandbox_blog_hero_image.max-600x600.jpg" width="540"></media:content><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>Cloud Run 샌드박스에서 AI 생성 코드를 안전하게 실행</title><description></description><image>https://storage.googleapis.com/gweb-cloudblog-publish/images/sandbox_blog_hero_image.max-600x600.jpg</image><site_name>Google</site_name><url>https://cloud.google.com/blog/ko/topics/developers-practitioners/google-cloud-run-sandboxes-are-in-public-preview/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Ryan Pei</name><title>Product Manager</title><department></department><company></company></author><author xmlns:author="http://www.w3.org/2005/Atom"><name>Greg Block</name><title>Software Engineer</title><department></department><company></company></author></item><item><title>Kotlin용 Google 생성형 AI SDK 1.0 발표: Gemini에 대한 관용적인 멀티플랫폼 액세스</title><link>https://cloud.google.com/blog/ko/topics/developers-practitioners/announcing-the-google-gen-ai-sdk-for-kotlin-10-idiomatic-multiplatform-access-to-gemini/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;*이 콘텐츠는 AI 번역 도구를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역에는 오류나 누락이 포함될 수 있습니다. 정확한 정보는 &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/topics/developers-practitioners/announcing-the-google-gen-ai-sdk-for-kotlin-10-idiomatic-multiplatform-access-to-gemini?e=0&amp;amp;hl=en"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;영문 원본&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;을 참고해 주시기 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Kotlin 애플리케이션에 최신 생성형 AI 기능을 통합하기 위해 원시 HTTP 클라이언트를 조작하거나 서로 다른 Java 라이브러리를 연결할 필요가 없습니다. 오늘 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;Kotlin용 Google 생성형 AI SDK 1.0 출시&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;google-genai-kotlin&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;)를 발표하게 되어 기쁩니다. 지금 바로 &lt;/span&gt;&lt;a href="https://github.com/googleapis/kotlin-genai" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;GitHub의 &lt;/span&gt;&lt;code style="text-decoration: underline; vertical-align: baseline;"&gt;googleapis/kotlin-genai&lt;/code&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;에서 코드를 살펴보고, 실행 가능한 샘플을 탐색하고, 프로젝트에 별표를 표시할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;Kotlin 멀티플랫폼(KMP)&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 라이브러리로 처음부터 빌드된 이 SDK는 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;JVM&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;(백엔드 서비스, 서버리스 함수, 데스크톱)과 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;Android&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;를 모두 타겟팅하는 개발자에게 관용적인 Kotlin 패러다임(퍼스트 클래스 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;코루틴&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;, 비동기 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;Flow&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 스트리밍, 이름이 지정된 기본 파라미터가 있는 변경 불가능한 데이터 클래스 포함)을 제공합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이 SDK는 최소한의 구성 조정으로 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;Gemini Developer API&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;(Google AI Studio)와 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;Gemini Enterprise Agent Platform&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;(Google Cloud 기반) 모두와 상호작용할 수 있는 통합 영역을 제공합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;1. 시작하기: 종속 항목 추가&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;SDK는 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;com.google.genai:google-genai-kotlin&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 아래의 Maven Central에 게시됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Kotlin 멀티플랫폼(KMP)&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;멀티플랫폼 애플리케이션의 경우 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;commonMain&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 소스 세트에 종속 항목을 추가합니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;// build.gradle.kts\r\nkotlin {\r\n    sourceSets {\r\n        commonMain.dependencies {\r\n            implementation(&amp;quot;com.google.genai:google-genai-kotlin:1.0.0&amp;quot;)\r\n        }\r\n    }\r\n}&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbaff910f10&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;표준 JVM 프로젝트&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;단일 플랫폼 Kotlin 프로젝트의 경우 Gradle은 Gradle 모듈 메타데이터를 통해 최적의 변형을 자동으로 선택합니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;// build.gradle.kts\r\ndependencies {\r\n    implementation(&amp;quot;com.google.genai:google-genai-kotlin:1.0.0&amp;quot;)\r\n}&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbaff0c9750&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;2. 단항 및 스트리밍 텍스트 생성 및 채팅&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;기본 진입점은 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;Client&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 클래스입니다. 환경 변수(Google AI Studio의 경우 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;GEMINI_API_KEY&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 또는 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;GOOGLE_API_KEY&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;, 표준 Google Cloud 애플리케이션 기본 사용자 인증 정보의 경우 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;GOOGLE_GENAI_USE_ENTERPRISE=true&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;)를 기반으로 HTTP 연결 및 인증을 자동으로 관리합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;Gemini Flash를 사용한 단일 프롬프트 요청&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Kotlin의 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;use&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 확장 프로그램을 사용하면 클라이언트의 기본 네트워크 엔진과 HTTP 연결이 깔끔하게 해제됩니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;import com.google.genai.kotlin.Client\r\nimport kotlinx.coroutines.runBlocking\r\n\r\nfun main() = runBlocking {\r\n    Client().use { client -&amp;gt;\r\n        val response = client.models.generateContent(\r\n            model = &amp;quot;gemini-flash-latest&amp;quot;,\r\n            text = &amp;quot;Explain quantum entanglement in two sentences.&amp;quot;\r\n        )\r\n\r\n        println(response.text)\r\n    }\r\n}&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbaff0cb210&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;코루틴을 사용한 지연 시간이 짧은 스트리밍 &lt;/strong&gt;&lt;code style="vertical-align: baseline;"&gt;Flow&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;대화형 UI 및 반응형 CLI 도구의 경우 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;generateContentStream&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;은 콜드 Kotlin 코루틴 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;Flow&amp;lt;GenerateContentResponse&amp;gt;&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;를 반환하여 토큰 청크를 실시간으로 전송합니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;import com.google.genai.kotlin.Client\r\nimport kotlinx.coroutines.runBlocking\r\n\r\nfun main() = runBlocking {\r\n    Client().use { client -&amp;gt;\r\n        val responseFlow = client.models.generateContentStream(\r\n            model = &amp;quot;gemini-flash-latest&amp;quot;,\r\n            text = &amp;quot;Outline the key architectural patterns for microservices on Google Cloud.&amp;quot;\r\n        )\r\n\r\n        responseFlow.collect { chunk -&amp;gt;\r\n            chunk.text?.let { print(it) }\r\n        }\r\n        println()\r\n    }\r\n}&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbaff0cb490&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;strong style="vertical-align: baseline;"&gt;멀티턴 대화(채팅)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;요청 차례마다 대화 기록을 수동으로 관리하는 것은 번거로울 수 있습니다. SDK에는 컨텍스트를 자동으로 유지하고, 대화를 추가하고, 대화 기록의 형식을 지정하고, 함수 호출을 처리하는 전용 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;chat&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt; 서비스가 포함되어 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;import com.google.genai.kotlin.Client\r\nimport com.google.genai.kotlin.types.Content\r\nimport com.google.genai.kotlin.types.GenerateContentConfig\r\nimport kotlinx.coroutines.runBlocking\r\n\r\nfun main() = runBlocking {\r\n    Client().use { client -&amp;gt;\r\n        val config = GenerateContentConfig(\r\n            systemInstruction = Content.fromText(&amp;quot;You are an expert Google Cloud Solutions Architect.&amp;quot;)\r\n        )\r\n\r\n        // Create a multi-turn chat session\r\n        val chat = client.chats.create(\r\n            model = &amp;quot;gemini-flash-latest&amp;quot;,\r\n            config = config\r\n        )\r\n\r\n        // Turn 1\r\n        val firstResponse = chat.sendMessage(&amp;quot;We are designing an event-driven ingestion pipeline on Google Cloud.&amp;quot;)\r\n        println(&amp;quot;Gemini: ${firstResponse.text}\\n&amp;quot;)\r\n\r\n        // Turn 2: context from the first turn is included automatically\r\n        val secondResponse = chat.sendMessage(&amp;quot;Which managed messaging service should we choose: Pub/Sub or Kafka?&amp;quot;)\r\n        println(&amp;quot;Gemini: ${secondResponse.text}\\n&amp;quot;)\r\n    }\r\n}&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbaff0c8d10&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;code style="vertical-align: baseline;"&gt;chat.sendMessageStream(...)&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;을 사용하여 멀티턴 채팅 대답을 스트리밍할 수도 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;3. Google 검색을 사용해 그라운딩된 멀티모달 분석&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Gemini의 멀티모달 추론은 외부 검증과 결합할 때 특히 효과적입니다. 예를 들어 기술, 의료 또는 과학 다이어그램을 분석할 때 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;Google 검색 그라운딩&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;을 연결하여 실시간 웹 소스와 사실 주장을 교차 검증할 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;import com.google.genai.kotlin.Client\r\nimport com.google.genai.kotlin.types.*\r\nimport java.io.File\r\nimport kotlinx.coroutines.runBlocking\r\n\r\nfun main() = runBlocking {\r\n    Client().use { client -&amp;gt;\r\n        val imageBytes = File(&amp;quot;src/main/resources/medical_diagram.png&amp;quot;).readBytes()\r\n\r\n        val content = Content(\r\n            parts = listOf(\r\n                Part(inlineData = Blob(mimeType = &amp;quot;image/png&amp;quot;, data = imageBytes)),\r\n                Part(text = &amp;quot;Is this anatomical diagram accurate? Verify labels against authoritative medical sources.&amp;quot;)\r\n            )\r\n        )\r\n\r\n        // Enable Google Search as a grounding tool\r\n        val config = GenerateContentConfig(\r\n            tools = listOf(Tool(googleSearch = GoogleSearch()))\r\n        )\r\n\r\n        val response = client.models.generateContent(\r\n            model = &amp;quot;gemini-flash-latest&amp;quot;,\r\n            content = content,\r\n            config = config\r\n        )\r\n\r\n        println(&amp;quot;=== Analysis ===&amp;quot;)\r\n        println(response.text)\r\n\r\n        // Inspect citations and search queries\r\n        val grounding = response.groundingMetadata\r\n        println(&amp;quot;\\n=== Search Queries Executed ===&amp;quot;)\r\n        grounding?.webSearchQueries?.forEach { println(&amp;quot;- $it&amp;quot;) }\r\n\r\n        println(&amp;quot;\\n=== Grounding Sources ===&amp;quot;)\r\n        grounding?.groundingChunks?.mapNotNull { it.web }?.forEach { source -&amp;gt;\r\n            println(&amp;quot;- ${source.title}: ${source.uri}&amp;quot;)\r\n        }\r\n    }\r\n}&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbaff0c9290&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;4. 시각적 생성 및 대화 기반 수정: Gemini 3 이미지 제품군&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;SDK는 Google의 최신 이미지 생성 모델(리더보드에서 &lt;/span&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;Nano Banana&lt;/span&gt;&lt;span style="vertical-align: baseline;"&gt; 시리즈 모델로 널리 알려짐)을 완벽하게 지원합니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;이미지 생성 및 저장&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;생성된 이미지 바이트는 대답 부분에서 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;Blob&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;으로 직접 전달됩니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;import com.google.genai.kotlin.Client\r\nimport java.io.File\r\nimport kotlinx.coroutines.runBlocking\r\n\r\nfun main() = runBlocking {\r\n    Client().use { client -&amp;gt;\r\n        val response = client.models.generateContent(\r\n            model = &amp;quot;gemini-3.1-flash-image&amp;quot;, // Nano Banana 2\r\n            text = &amp;quot;A photorealistic blueprint of an eco-friendly modern datacenter, isometric view, 4k&amp;quot;\r\n        )\r\n\r\n        val imagePart = response.parts?.firstOrNull { it.inlineData != null }\r\n        imagePart?.inlineData?.data?.let { bytes -&amp;gt;\r\n            File(&amp;quot;datacenter_blueprint.png&amp;quot;).writeBytes(bytes)\r\n            println(&amp;quot;Image generated and saved successfully.&amp;quot;)\r\n        }\r\n    }\r\n}&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbaff0ca490&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;대화형 이미지 간 편집&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;동일한 요청에서 기존 이미지와 대화 기반 수정 요청 사항을 전달할 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;val originalImage = File(&amp;quot;input.png&amp;quot;).readBytes()\r\n\r\nval editPrompt = Content(\r\n    parts = listOf(\r\n        Part(inlineData = Blob(mimeType = &amp;quot;image/png&amp;quot;, data = originalImage)),\r\n        Part(text = &amp;quot;Change the daylight illumination to a dramatic twilight skyline with illuminated windows.&amp;quot;)\r\n    )\r\n)\r\n\r\nval editResponse = client.models.generateContent(\r\n    model = &amp;quot;gemini-3-pro-image&amp;quot;, // Nano Banana Pro\r\n    content = editPrompt\r\n)&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbaff0ca790&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;5. Gemini Live와의 실시간 양방향 상호작용&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;지연 시간이 짧은 음성, 오디오, 실시간 멀티모달 상호작용을 위해 SDK는 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;client.live.connect(...)&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;를 사용하여 지속적인 WebSocket 연결을 통해 &lt;/span&gt;&lt;strong style="vertical-align: baseline;"&gt;Gemini Live API&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;를 지원합니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;import com.google.genai.kotlin.Client\r\nimport com.google.genai.kotlin.types.AudioTranscriptionConfig\r\nimport com.google.genai.kotlin.types.LiveConnectConfig\r\nimport kotlinx.coroutines.launch\r\nimport kotlinx.coroutines.runBlocking\r\n\r\nfun main() = runBlocking {\r\n    Client().use { client -&amp;gt;\r\n        val model = if (client.enterprise) &amp;quot;gemini-live-2.5-flash-native-audio&amp;quot;\r\n                    else &amp;quot;gemini-3.1-flash-live-preview&amp;quot;\r\n\r\n        val config = LiveConnectConfig(\r\n            outputAudioTranscription = AudioTranscriptionConfig()\r\n        )\r\n\r\n        // Establish real-time bidirectional WebSocket session\r\n        client.live.connect(model, config).use { session -&amp;gt;\r\n            println(&amp;quot;Connected to Gemini Live session!&amp;quot;)\r\n\r\n            // Launch collector for server messages (audio and text transcriptions)\r\n            val receiveJob = launch {\r\n                session.receive().collect { serverMessage -&amp;gt;\r\n                    serverMessage.serverContent?.outputTranscription?.text?.let { text -&amp;gt;\r\n                        print(text)\r\n                    }\r\n                }\r\n            }\r\n\r\n            // Stream real-time text (or raw PCM audio blobs via session.sendRealtimeInput(audio = ...))\r\n            session.sendRealtimeInput(text = &amp;quot;Hello Gemini! Give me a 5-second motivational quote.&amp;quot;)\r\n\r\n            // When finished, clean up\r\n            receiveJob.cancel()\r\n            session.closeSession()\r\n        }\r\n    }\r\n}&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbaff0cbf90&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;6. 정형 도구 및 함수 호출&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;에이전트형 워크플로를 빌드하거나 LLM을 백엔드 마이크로서비스와 연결할 때 개발자는 &lt;/span&gt;&lt;code style="vertical-align: baseline;"&gt;FunctionDeclaration&lt;/code&gt;&lt;span style="vertical-align: baseline;"&gt;을 통해 정형 JSON 스키마를 전달할 수 있습니다. 모델은 도구를 호출할 시점을 지능적으로 선택합니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;val telemetryTool = FunctionDeclaration(\r\n    name = &amp;quot;getDatacenterMetrics&amp;quot;,\r\n    description = &amp;quot;Fetch real-time CPU and thermal telemetry for a Google Cloud region&amp;quot;,\r\n    parameters = Schema(\r\n        type = Type.OBJECT,\r\n        properties = mapOf(&amp;quot;region&amp;quot; to Schema(type = Type.STRING)),\r\n        required = listOf(&amp;quot;region&amp;quot;)\r\n    )\r\n)\r\n\r\nval response = client.models.generateContent(\r\n    model = &amp;quot;gemini-flash-latest&amp;quot;,\r\n    text = &amp;quot;Check telemetry for europe-west1&amp;quot;,\r\n    config = GenerateContentConfig(\r\n        tools = listOf(Tool(functionDeclarations = listOf(telemetryTool)))\r\n    )\r\n)\r\n\r\nresponse.functionCalls?.firstOrNull()?.let { call -&amp;gt;\r\n    println(&amp;quot;Model triggered tool: ${call.name} with arguments: ${call.args}&amp;quot;)\r\n}&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbaff0c9ad0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;또한 채팅 서비스를 사용할 때 자동 함수 호출(AFC)을 활용할 수 있습니다. 즉, 다음 예시에서 볼 수 있듯이 채팅 대화에서 선언된 함수를 SDK가 자동으로 투명하게 호출할 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;fun main() = runBlocking {\r\n    // A mocked function\r\n    val getWeather = callableFunction(&amp;quot;get_weather&amp;quot;, paramName = &amp;quot;city&amp;quot;) { city: String -&amp;gt;\r\n        &amp;quot;18 degrees and sunny in $city&amp;quot;\r\n    }\r\n\r\n    Client().use { client -&amp;gt;\r\n        val chat = client.chats.create(\r\n            model = &amp;quot;gemini-flash-latest&amp;quot;,\r\n            automaticFunctionCalling = AutomaticFunctionCalling(getWeather),\r\n        )\r\n\r\n        // SDK calls get_weather if needed in this conversation\r\n        println(chat.sendMessage(&amp;quot;What is the weather in Zurich?&amp;quot;).text)\r\n    }\r\n}&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbaff0cbdd0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;h2&gt;&lt;strong style="vertical-align: baseline;"&gt;다음 단계&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Kotlin용 Google 생성형 AI SDK 1.0 출시로 백엔드 서버 생태계(Ktor, Spring Boot, Quarkus, Micronaut)와 모바일 애플리케이션 전반의 Kotlin 개발자는 이제 생성형 AI 애플리케이션을 빌드하기 위한 깔끔한 멀티플랫폼 기반을 갖추게 되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;자세히 알아보고 시작하려면 다음 리소스를 확인하세요.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;GitHub 저장소:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;a href="https://github.com/googleapis/kotlin-genai" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;github.com/googleapis/kotlin-genai&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;에서 소스, 별표, 토론을 확인하세요.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;문서 및 샘플:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;a href="https://github.com/googleapis/kotlin-genai/tree/main/examples" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Kotlin 생성형 AI 샘플 모음&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;을 살펴보세요.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;피드백:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;a href="https://github.com/googleapis/kotlin-genai" rel="noopener" target="_blank"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;GitHub&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;에서 직접 문제를 신고하거나, 기능을 제안하거나, pull 요청을 제출하세요.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Kotlin과 Gemini로 빌드할 멋진 결과물을 기대하겠습니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;</description><pubDate>Thu, 01 Oct 2026 19:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/ko/topics/developers-practitioners/announcing-the-google-gen-ai-sdk-for-kotlin-10-idiomatic-multiplatform-access-to-gemini/</guid><category>Developers &amp; Practitioners</category><media:content height="540" url="https://storage.googleapis.com/gweb-cloudblog-publish/images/google-genai-sdk-kotlin.max-600x600.png" width="540"></media:content><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>Kotlin용 Google 생성형 AI SDK 1.0 발표: Gemini에 대한 관용적인 멀티플랫폼 액세스</title><description></description><image>https://storage.googleapis.com/gweb-cloudblog-publish/images/google-genai-sdk-kotlin.max-600x600.png</image><site_name>Google</site_name><url>https://cloud.google.com/blog/ko/topics/developers-practitioners/announcing-the-google-gen-ai-sdk-for-kotlin-10-idiomatic-multiplatform-access-to-gemini/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Guillaume Laforge</name><title>Developer Advocate</title><department></department><company></company></author></item><item><title>Spanner 마이그레이션: Antigravity CLI를 사용한 이중 쓰기 자동화로 중단 최소화</title><link>https://cloud.google.com/blog/ko/topics/developers-practitioners/using-antigravity-cli-to-streamline-dual-write-database-migration/</link><description>&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;*이 콘텐츠는 AI 번역 도구를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역에는 오류나 누락이 포함될 수 있습니다. 정확한 정보는 &lt;/span&gt;&lt;a href="https://cloud.google.com/blog/topics/developers-practitioners/using-antigravity-cli-to-streamline-dual-write-database-migration?e=0&amp;amp;hl=en"&gt;&lt;span style="font-style: italic; text-decoration: underline; vertical-align: baseline;"&gt;영문 원본&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic; vertical-align: baseline;"&gt;을 참고해 주시기 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;기존 데이터 레이어를 현대화해야 했던 Google의 재무 엔지니어링팀은 고가용성 기능을 제공하고 전 세계에 분산된 strong consistency를 갖춘 멀티모델 데이터베이스인 &lt;/span&gt;&lt;a href="https://cloud.google.com/spanner?e=48754805"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Spanner&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;를 선택했습니다. 하지만 프로덕션 서비스를 오프라인으로 전환하지 않고 Spanner로 마이그레이션하는 것은 엔지니어링 측면에서 어려운 과제였습니다. 애플리케이션을 담당하는 내부 팀으로서 수십 개의 데이터 액세스 객체(DAO)에서 이중 쓰기 로직을 수동으로 다시 작성해야 했는데, 이 프로세스는 시간도 오래 걸리고 인적 오류가 빈번하게 발생했습니다. 또한 중단 없이 이 작업을 수행하려면 코드베이스의 모든 DAO에서 여러 단계에 걸쳐 이중 쓰기 아키텍처를 구현해야 했습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이 문제를 해결하기 위해 다른 접근 방식을 취했습니다. 헤드리스 모드에서 Antigravity CLI를 사용하는 자동화된 리팩터링 파이프라인을 빌드했습니다. 이를 통해 프로덕션 환경을 준비하는 동안 스테이징 환경에서 엄격한 데이터 동등성을 유지하면서 마이그레이션 속도를 크게 높일 수 있었습니다. &lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;과제: 이중 쓰기 마이그레이션의 구조&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;재무 정보 정확성이 필수적인 높은 처리량의 프로덕션 서비스를 마이그레이션할 때는 단순한 컷오버 스크립트로는 충분하지 않습니다. 모든 이전 데이터 백필 및 검증이 완료될 때까지 기존 데이터 스토어와 Spanner 양쪽에 동일한 쓰기 작업이 동시에 이루어지는지 확인해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;마이그레이션은 다음과 같은 세 가지 단계로 구성했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;이전 백필:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 참조 무결성을 유지하면서 기존의 이전 기록을 Spanner에 복사합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;이중 쓰기/이중 읽기 구현:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 마이그레이션 기간 동안 모든 DAO를 수정하여 기본 데이터 스토어와 Cloud Spanner에 모두 변경 사항을 동시에 기록합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;자동화된 API 검증 및 동등성 검사:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; RPC 트래픽을 가로채고 모든 쓰기 작업이 두 저장소에서 바이트 단위로 동일하게 기록되는지 엔드 투 엔드로 검증합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
&lt;div class="block-image_full_width"&gt;






  
    &lt;div class="article-module h-c-page"&gt;
      &lt;div class="h-c-grid"&gt;
  

    &lt;figure class="article-image--large
      
      
        h-c-grid__col
        h-c-grid__col--6 h-c-grid__col--offset-3
        
        
      "
      &gt;

      
      
        
        &lt;img
            src="https://storage.googleapis.com/gweb-cloudblog-publish/images/1_-_Dual_Write_Architecture.max-1000x1000.png"
        
          alt="1 - Dual Write Architecture"&gt;
        
        &lt;/a&gt;
      
    &lt;/figure&gt;

  
      &lt;/div&gt;
    &lt;/div&gt;
  




&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;아키텍처 패턴은 깔끔했지만 현재 규모에서는 마찰이 발생하기 시작했습니다. 각 DAO에는 다음이 필요하기 때문입니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;복잡한 도메인 모델을 Spanner 스키마 열에 매핑하는 전용 MutationConverter 클래스&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;이중 쓰기 브랜치 처리 및 롤백 또는 오류 보고 로직&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;span style="vertical-align: baseline;"&gt;FakeTimeSource와 같은 가짜 시간 소스와 테스트 더블을 사용하여 기본 데이터 스토어와 Spanner에서 모두 쓰기 작업을 검증하는 단위 테스트 모음&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;30개가 넘는 DAO에 정밀도가 높은 이러한 코드 변경을 동일하게 수동으로 수행하려면 엔지니어링 작업에 수개월이 걸렸을 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;솔루션: 표준화된 변형 컨버터 패턴&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;자동화 파이프라인이 안정적으로 깔끔한 코드를 생성할 수 있는지 검증하기 위해 먼저 분리된 MutationConverter 인터페이스를 중심으로 DAO 리팩터링 패턴을 표준화했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;핵심 DAO 비즈니스 로직 내에 원시 Spanner 테이블 이름과 열 할당을 직접 삽입하는 대신 Spanner 스키마 변환을 전용 컨버터 단위로 분리했습니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="block-code"&gt;&lt;dl&gt;
    &lt;dt&gt;code_block&lt;/dt&gt;
    &lt;dd&gt;&amp;lt;ListValue: [StructValue([(&amp;#x27;code&amp;#x27;, &amp;#x27;// Example of the standardized pattern generated by our pipeline\r\n\r\ntype BpcTransferAmountsMutationConverter interface {\r\n    ToInsertMutation(entity *model.BpcTransferAmount) (*spanner.Mutation, error)\r\n    ToUpdateMutation(entity *model.BpcTransferAmount) (*spanner.Mutation, error)\r\n}\r\n\r\ntype bpcTransferAmountsMutationConverterImpl struct {\r\n    tableName string\r\n}\r\n\r\nfunc (c *bpcTransferAmountsMutationConverterImpl) ToInsertMutation(entity *model.BpcTransferAmount) (*spanner.Mutation, error) {\r\n    if entity == nil {\r\n        return nil, errors.New(&amp;quot;entity cannot be nil&amp;quot;)\r\n    }\r\n    \r\n    // Map domain fields to Cloud Spanner table schema\r\n    cols := []string{&amp;quot;TransferId&amp;quot;, &amp;quot;AmountCents&amp;quot;, &amp;quot;CurrencyCode&amp;quot;, &amp;quot;LastModifiedTimestamp&amp;quot;}\r\n    vals := []interface{}{\r\n        entity.TransferId,\r\n        entity.AmountCents,\r\n        entity.CurrencyCode,\r\n        spanner.CommitTimestamp, // Use Spanner commit timestamps\r\n    }\r\n    \r\n    return spanner.Insert(c.tableName, cols, vals), nil\r\n}&amp;#x27;), (&amp;#x27;language&amp;#x27;, &amp;#x27;&amp;#x27;), (&amp;#x27;caption&amp;#x27;, &amp;lt;wagtail.rich_text.RichText object at 0x7fbafee1ded0&amp;gt;)])]&amp;gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
&lt;div class="block-paragraph_advanced"&gt;&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;DAO와 Spanner SDK(spanner.Mutation) 간에 엄격하고 결정론적인 계약을 수립함으로써 AI 코딩 에이전트가 추론하고 안정적으로 생성할 수 있는 정확한 대상 사양을 만들었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;헤드리스 모드에서 Antigravity CLI를 사용하는 이유&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;IDE의 대화형 AI 채팅 인터페이스는 탐색적인 코딩 작업에는 적합하지만 전체 코드베이스에서 여러 파일을 체계적으로 업데이트하는 작업에는 적합하지 않습니다. 예외 상황을 놓치지 않으면서 수십 개의 대상에 반복 가능한 리팩터링을 적용해야 하는 경우 자동화된 워크플로가 필요합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;이에 따라 헤드리스 모드(-p)에서 Antigravity CLI를 실행하는 조정 스크립트(migration_ui.py)를 빌드하여 이 문제를 해결했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;헤드리스 모드를 사용하면 수동으로 터미널에 프롬프트를 입력할 필요 없이 Antigravity를 셸 스크립트, 지속적 통합 파이프라인, 백그라운드 자동화 작업 내에서 직접 실행할 수 있습니다. 이러한 접근 방식을 통해 다음의 세 가지 주요 방향으로 작업을 확장할 수 있었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;결정론적 프롬프트 아키텍처:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 프롬프트를 버전 제어가 가능한 엔지니어링 아티팩트로 취급했습니다. 타임스탬프 직렬화, null 허용 여부 변환, 변형 모호성, FakeTimeSource 테스트 주입과 같은 일반적인 Spanner 예외 상황을 처리하기 위한 정확한 규칙을 재사용 가능한 프롬프트 템플릿에 직접 성문화했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;일괄 실행 및 자동 검증:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 조정 스크립트는 대상 DAO 이름을 입력으로 받아 기존의 단일 쓰기 소스 코드와 스키마를 가져온 후 구조적 규칙과 함께 헤드리스 모드의 Antigravity에 전달합니다. Antigravity는 새로운 컨버터, 리팩터링된 이중 쓰기 DAO, 해당 단위 테스트를 생성합니다. 그런 다음 스크립트가 Blaze 테스트를 실행합니다. 린터 오류 또는 테스트 어설션이 실패하면 오류 로그가 Antigravity에 직접 전달되어 자체 수정됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;대규모 야간 실행:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 루프가 무인으로 실행되므로 엔지니어는 하루 일과가 끝날 때 10개의 DAO를 큐에 추가할 수 있습니다. 그러면 다음 날 아침까지 파이프라인은 10개의 변경 목록을 생성, 테스트, 검증하여 사람이 코드 검토를 할 수 있도록 준비합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;결과 및 클라우드 엔지니어를 위한 핵심 내용 정리&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;Spanner의 분산 데이터베이스 기본 요소와 Antigravity CLI의 헤드리스 자동화를 결합한 결과, 엔지니어링 조직 전반에서 다음과 같은 분명한 이점을 얻을 수 있었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;마이그레이션 작업량 대폭 감소&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt;: 이전에는 광범위한 수동 코딩과 테스트가 필요했던 DAO 이중 쓰기 마이그레이션이 훨씬 짧은 시간 내에 완료되고 검토되었습니다. &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;높은 안정성의 데이터 마이그레이션:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 생성된 모든 DAO가 동일한 테스트를 거친 MutationConverter 패턴을 준수하고 Spanner 테스트 더블에 대한 자동화된 단위 테스트를 거쳤기 때문에 광범위한 마이그레이션 테스트 중에도 높은 수준의 데이터 충실도를 유지할 수 있었습니다. &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;더 가치 있는 엔지니어링 업무에 집중:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 엔지니어는 반복적인 상용구 리팩터링을 피하고 데이터 모델링, 아키텍처 복원력, 성능 최적화 등에 집중할 수 있는 시간을 확보했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;다음 데이터베이스 마이그레이션을 위한 3가지 팁&lt;/strong&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;스키마 변환을 먼저 분리:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 마이그레이션 스크립트를 작성하기 전에 기존 비즈니스 로직에서 새로운 클라우드 데이터베이스 SDK 요구사항을 격리하는 엄격한 인터페이스(예: MutationConverter)를 정의하세요. AI 에이전트는 명확하고 제한된 설계 패턴이 주어질 때 가장 효과적으로 작동합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;양방향 채팅에서 헤드리스 자동화로 전환:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; 3~4개 이상의 파일에서 반복적인 리팩터링을 실행할 때는 스크립트 기반의 헤드리스 워크플로에 투자하세요. 프롬프트 입력과 테스트 검증을 자동화된 빌드 단계로 처리하면 품질과 일관성을 유지하는 데 도움이 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: decimal; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;빌드 시스템을 가드레일로 활용:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; AI 생성 루프를 빌드 및 테스트 하네스(bazel test 또는 go test)에 직접 연결하세요. 이를 통해 모델은 개발자가 코드를 검토하기 전에 컴파일 및 어설션 오류를 수정할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;strong style="vertical-align: baseline;"&gt;시작하기&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style="vertical-align: baseline;"&gt;금융 시스템을 마이그레이션하는 경우에도, 클라우드 네이티브 애플리케이션을 처음부터 빌드하는 경우에도 Spanner와 Antigravity는 확장 가능한 소프트웨어 개발을 위한 기반을 제공합니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;Cloud Spanner 살펴보기:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;a href="https://cloud.google.com/spanner/docs"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;Google Cloud Spanner 문서&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;에서 Spanner의 분산 아키텍처에 대해 자세히 알아보세요.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li aria-level="1" style="list-style-type: disc; vertical-align: baseline;"&gt;
&lt;p role="presentation"&gt;&lt;strong style="vertical-align: baseline;"&gt;개발자를 위한 Gemini 알아보기:&lt;/strong&gt;&lt;span style="vertical-align: baseline;"&gt; &lt;/span&gt;&lt;a href="https://cloud.google.com/use-cases/ai-for-developers"&gt;&lt;span style="text-decoration: underline; vertical-align: baseline;"&gt;개발자를 위한 Google Cloud AI&lt;/span&gt;&lt;/a&gt;&lt;span style="vertical-align: baseline;"&gt;에서 AI 지원 코딩과 헤드리스 CLI 자동화가 엔지니어링 워크플로에 어떤 도움이 되는지 알아보세요.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description><pubDate>Thu, 01 Oct 2026 19:00:00 +0000</pubDate><guid>https://cloud.google.com/blog/ko/topics/developers-practitioners/using-antigravity-cli-to-streamline-dual-write-database-migration/</guid><category>AI &amp; Machine Learning</category><category>Cloud Migration</category><category>Developers &amp; Practitioners</category><og xmlns:og="http://ogp.me/ns#"><type>article</type><title>Spanner 마이그레이션: Antigravity CLI를 사용한 이중 쓰기 자동화로 중단 최소화</title><description></description><site_name>Google</site_name><url>https://cloud.google.com/blog/ko/topics/developers-practitioners/using-antigravity-cli-to-streamline-dual-write-database-migration/</url></og><author xmlns:author="http://www.w3.org/2005/Atom"><name>Sachin Mathapati</name><title>Application Engineer</title><department></department><company></company></author></item></channel></rss>