<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Rihpig</title>
    <description>The latest articles on DEV Community by Rihpig (@rihpig).</description>
    <link>https://dev.to/rihpig</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2745155%2Ff727be57-3d98-4e9b-90ef-46211b492018.jpg</url>
      <title>DEV Community: Rihpig</title>
      <link>https://dev.to/rihpig</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rihpig"/>
    <language>en</language>
    <item>
      <title>Seedance 2.0 API 2026 사용법</title>
      <dc:creator>Rihpig</dc:creator>
      <pubDate>Sat, 04 Apr 2026 12:59:17 +0000</pubDate>
      <link>https://dev.to/rihpig/seedance-20-api-2026-sayongbeob-1mmm</link>
      <guid>https://dev.to/rihpig/seedance-20-api-2026-sayongbeob-1mmm</guid>
      <description>&lt;h2&gt;
  
  
  요약 (TL;DR)
&lt;/h2&gt;

&lt;p&gt;Seedance 2.0 API는 2026년 4월 2일 Volcengine Ark를 통해 출시되었습니다. POST 요청으로 동영상 생성 작업을 제출한 다음, 상태가 "성공"에 도달할 때까지 GET 엔드포인트를 폴링합니다. 이 API는 텍스트-투-비디오, 이미지-투-비디오, 첫/마지막 프레임 제어, 다중 모드 참조, 원본 오디오 생성을 지원합니다. 5초 길이의 1080p 동영상은 대략 $0.93의 비용이 듭니다. 동영상은 24시간 이내에 다운로드해야 하며, 이후에는 URL이 만료됩니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;지금 Apidog 사용해 보기&lt;/a&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://hypereal.cloud" rel="noopener noreferrer"&gt;Hypereal AI&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://hypereal.cloud/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9no1b7kwev33vq2bcepw.png" alt="Hypereal AI"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hypereal.cloud/" rel="noopener noreferrer"&gt;Hypereal AI 사용해 보기&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  소개
&lt;/h2&gt;

&lt;p&gt;2026년 4월 2일, ByteDance의 Volcengine Ark 플랫폼은 공식 Seedance 2.0 API를 출시했습니다. 이 날짜 전까지는 Seedance 2.0 동영상을 생성하려면 웹 콘솔만 사용해야 했습니다. 본 문서는 개발자가 실제 API를 프로그래밍 방식으로 호출하는 방법을 다룹니다.&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;비동기 작업 패턴&lt;/strong&gt;: POST로 작업을 생성 → 작업 ID 반환 → GET 엔드포인트 폴링. 실제 배포 전 Apidog 테스트 시나리오로 전체 워크플로를 시뮬레이션하세요. POST 제출, 작업 ID 추출, GET 폴링, 최종 동영상 URL 확인까지 아래 Apidog 섹션의 단계를 따라 실습할 수 있습니다.&lt;/p&gt;

&lt;p&gt;이 문서에서는 입력 유형, 가격 계산, 실무 오류 처리까지 실전 개발에 필요한 내용을 다룹니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  Seedance 2.0이란 무엇인가요?
&lt;/h2&gt;

&lt;p&gt;Seedance 2.0은 ByteDance의 동영상 생성 모델입니다. Volcengine Ark에서 &lt;code&gt;doubao-seedance-2-0-260128&lt;/code&gt; (표준) 및 &lt;code&gt;doubao-seedance-2-0-fast-260128&lt;/code&gt; (빠른 저품질) 모델 ID로 사용합니다.&lt;/p&gt;

&lt;p&gt;지원 입력:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;텍스트-투-비디오, 이미지-투-비디오&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;첫/마지막 프레임 제어&lt;/strong&gt;: 두 개의 이미지를 북엔드로 지정&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;다중 모드 참조&lt;/strong&gt;: 이미지/동영상/오디오 복합 입력&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;원본 오디오 생성&lt;/strong&gt;: 대화, 효과음, 음악 등&lt;/li&gt;
&lt;li&gt;8개+ 언어 립싱크&lt;/li&gt;
&lt;li&gt;자연어로 카메라 움직임 제어 (예: 돌리, 트래킹)&lt;/li&gt;
&lt;li&gt;최대 15초, 최대 2K 해상도, 24fps, 1:1~21:9 화면비 지원&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  무엇이 바뀌었나: 가이드 vs 공식 API
&lt;/h2&gt;

&lt;p&gt;2026년 2월 &lt;a href="http://apidog.com/blog/how-to-use-seedance-2-0/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;이전 가이드&lt;/a&gt;는 Seedance 2.0 웹 콘솔 사용법만 제공했습니다.&lt;br&gt;&lt;br&gt;
2026년 4월부터는 &lt;strong&gt;API로 동영상 파이프라인을 자동화&lt;/strong&gt;하고, 어떤 언어에서도 Seedance를 자체 시스템에 통합할 수 있습니다. 본 문서는 개발자 중심의 자동화 사용법에 집중합니다.&lt;/p&gt;
&lt;h2&gt;
  
  
  선행 조건
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://www.volcengine.com/" rel="noopener noreferrer"&gt;volcengine.com&lt;/a&gt;에서 Volcengine 계정 생성
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;콘솔에서 API 키 발급:&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://console.volcengine.com/ark/region:ark+cn-beijing/apikey
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;환경 변수로 설정:&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ARK_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your-api-key-here"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;모든 API 요청의 Authorization 헤더에 사용:&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Authorization: Bearer YOUR_ARK_API_KEY
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;&lt;p&gt;신규 계정은 1080p 15초 동영상 약 8개 분량의 무료 체험 크레딧 제공&lt;/p&gt;&lt;/li&gt;

&lt;/ol&gt;

&lt;h2&gt;
  
  
  텍스트-투-비디오: 첫 번째 요청
&lt;/h2&gt;

&lt;p&gt;모든 요청의 기본 URL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;https://ark.cn-beijing.volces.com/api/v3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  cURL 예제
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$ARK_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "doubao-seedance-2-0-260128",
    "content": [
      {
        "type": "text",
        "text": "A golden retriever running through a sunlit wheat field, wide tracking shot, cinematic"
      }
    ],
    "resolution": "1080p",
    "ratio": "16:9",
    "duration": 5,
    "watermark": false
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;응답:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cgt-2025xxxxxxxx-xxxx"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Python 예제 (공식 SDK)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;SDK 설치:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;volcenginesdkarkruntime
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;작업 제출:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;volcenginesdkarkruntime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Ark&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Ark&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ARK_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content_generation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;doubao-seedance-2-0-260128&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;A golden retriever running through a sunlit wheat field, wide tracking shot, cinematic&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;resolution&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1080p&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;ratio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;16:9&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;watermark&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;작업 ID는 폴링에 사용합니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  비동기 작업 패턴: 제출, 폴링, 다운로드
&lt;/h2&gt;

&lt;p&gt;동영상 생성은 즉시 완료되지 않습니다. 5초 1080p 기준 60~120초 소요.&lt;br&gt;&lt;br&gt;
상태 수명주기:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;queued -&amp;gt; running -&amp;gt; succeeded
                  -&amp;gt; failed
                  -&amp;gt; expired
                  -&amp;gt; cancelled
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;queued&lt;/code&gt;/&lt;code&gt;running&lt;/code&gt;이 아닌 상태가 될 때까지 폴링합니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  전체 Python 폴링 루프
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;volcenginesdkarkruntime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Ark&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Ark&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ARK_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;# Step 1: 작업 제출
&lt;/span&gt;&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content_generation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;doubao-seedance-2-0-260128&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Aerial shot of a mountain lake at sunrise, slow dolly forward&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;resolution&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1080p&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;ratio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;16:9&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;watermark&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;task_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Task submitted: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Step 2: 폴링 (지수 백오프)
&lt;/span&gt;&lt;span class="n"&gt;wait&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content_generation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Status: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;succeeded&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;video_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;video_url&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Video URL: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;video_url&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;break&lt;/span&gt;
    &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;expired&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cancelled&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Task ended with status: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;break&lt;/span&gt;

    &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wait&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;wait&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wait&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Step 3: 성공 시 동영상 다운로드
&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;succeeded&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;video_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;output.mp4&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;wb&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;iter_content&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chunk_size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8192&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Downloaded: output.mp4&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;지수 백오프는 API 부하 방지에 필수입니다. 60초 상한 권장.&lt;/p&gt;

&lt;h2&gt;
  
  
  이미지-투-비디오 (I2V): 정지 이미지 애니메이션화
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;content&lt;/code&gt; 배열에 &lt;code&gt;image_url&lt;/code&gt; 객체 추가. 이미지는 첫 프레임이 됩니다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content_generation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;doubao-seedance-2-0-260128&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;The woman slowly turns her head and smiles at the camera&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com/portrait.jpg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;ratio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;adaptive&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;watermark&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ratio&lt;/code&gt;를 &lt;code&gt;"adaptive"&lt;/code&gt;로 설정하면 입력 이미지 비율에 맞춰 생성&lt;/li&gt;
&lt;li&gt;각 이미지는 30MB 미만, 요청당 최대 9개까지&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  첫 프레임과 마지막 프레임: 시작점과 끝점 제어
&lt;/h2&gt;

&lt;p&gt;첫/마지막 프레임 이미지를 순서대로 전달하면, 중간 동작을 자동 생성합니다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content_generation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;doubao-seedance-2-0-260128&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;The flower blooms from bud to full open, macro lens, soft light&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com/flower-bud.jpg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com/flower-open.jpg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;ratio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;adaptive&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;watermark&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;두 이미지: 첫 프레임, 마지막 프레임으로 해석
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;return_last_frame: true&lt;/code&gt; 사용 시, 마지막 프레임 이미지를 추가로 반환 (시퀀스 연결에 활용)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  다중 모드 참조: 이미지, 동영상, 오디오 결합
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;content&lt;/code&gt; 배열에 이미지, 동영상, 오디오를 복합 입력으로 제공할 수 있습니다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;이미지: 최대 9개 (각 30MB 이하)&lt;/li&gt;
&lt;li&gt;동영상: 최대 3개 (각 2~15초, 50MB 이하)&lt;/li&gt;
&lt;li&gt;오디오: 최대 3개 (MP3, 각 15MB 이하)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;예시:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content_generation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;doubao-seedance-2-0-260128&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Match the visual style of the reference clip and add the provided background audio&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com/style-reference.jpg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;video_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;video_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com/motion-reference.mp4&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;audio_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;audio_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com/background-music.mp3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;ratio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;16:9&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;watermark&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;동영상 참조를 추가하면 V2V 요금이 적용 (백만 토큰당 $3.90)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  원본 오디오 생성
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;generate_audio: true&lt;/code&gt; 옵션으로 동영상과 동기화된 오디오를 생성합니다.&lt;br&gt;&lt;br&gt;
대화, 효과음, 주변음, 음악, 립싱크(8개+ 언어) 지원.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content_generation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;doubao-seedance-2-0-260128&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;A street musician plays guitar outside a cafe in Paris, crowds passing by, city sounds&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;resolution&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1080p&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;ratio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;16:9&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;generate_audio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;watermark&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;오디오 생성은 무음 동영상보다 토큰 소모량이 소폭 증가합니다. 비용 계산에 반영하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  해상도, 비율 및 길이 제어
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;resolution&lt;/strong&gt;: &lt;code&gt;"480p"&lt;/code&gt;, &lt;code&gt;"720p"&lt;/code&gt;, &lt;code&gt;"1080p"&lt;/code&gt;, &lt;code&gt;"2K"&lt;/code&gt; (기본: 1080p)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ratio&lt;/strong&gt;: &lt;code&gt;"16:9"&lt;/code&gt;, &lt;code&gt;"9:16"&lt;/code&gt;, &lt;code&gt;"4:3"&lt;/code&gt;, &lt;code&gt;"3:4"&lt;/code&gt;, &lt;code&gt;"21:9"&lt;/code&gt;, &lt;code&gt;"1:1"&lt;/code&gt;, &lt;code&gt;"adaptive"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;duration&lt;/strong&gt;: 4~15 (초, 기본: 5)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;빠른 모델(&lt;code&gt;doubao-seedance-2-0-fast-260128&lt;/code&gt;)은 프로토타입/프롬프트 반복에, 표준 모델은 최종 출력에 권장.&lt;/p&gt;

&lt;p&gt;Seedance 2.0은 오디오-비디오 공동 생성, 프레임 제어, 다중 모드 입력이 필요할 때 가장 적합합니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  응답에서 비용 확인하기
&lt;/h2&gt;

&lt;p&gt;성공 응답의 &lt;code&gt;usage&lt;/code&gt; 필드를 확인하세요:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"usage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"completion_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;246840&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"total_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;246840&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;토큰 수는 동영상 길이와 해상도에 비례
&lt;/li&gt;
&lt;li&gt;1080p 기준: 5초 ≈ 102,960 토큰, 15초 ≈ 309,000 토큰
&lt;/li&gt;
&lt;li&gt;T2V/I2V: 백만 토큰당 46위안(약 $6.40), V2V: 28위안(약 $3.90)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;예상 비용:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;5초 1080p: $0.93&lt;/li&gt;
&lt;li&gt;10초 1080p: $1.32&lt;/li&gt;
&lt;li&gt;15초 1080p: $1.97&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;completion_tokens&lt;/code&gt; × 토큰 단가로 애플리케이션별 비용 추적 시스템을 구축하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  중요: 24시간 이내에 동영상을 다운로드하세요
&lt;/h2&gt;

&lt;p&gt;응답의 &lt;code&gt;video_url&lt;/code&gt;은 24시간 후 만료됩니다.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;상태가 &lt;code&gt;succeeded&lt;/code&gt;로 바뀌자마자 즉시 파일을 자체 저장소에 다운로드하세요.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;execution_expires_after&lt;/code&gt;는 작업 기록(48시간) 기준이지만, 동영상 URL은 24시간 후 만료됩니다.&lt;/li&gt;
&lt;li&gt;작업 기록은 7일까지만 API에서 조회 가능&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Apidog로 Seedance API를 테스트하는 방법
&lt;/h2&gt;

&lt;p&gt;비동기 패턴에서는 연속적 요청/응답 흐름이 필요합니다. &lt;strong&gt;Apidog&lt;/strong&gt; 테스트 시나리오로 아래와 같이 구현하세요.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr7qpzpmtge0bkzzppks6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr7qpzpmtge0bkzzppks6.png" alt="Apidog 테스트 시나리오"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  실습 단계
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1단계: 테스트 시나리오 생성&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apidog 테스트 모듈 → "Seedance 2.0 동영상 생성" 새 시나리오
&lt;/li&gt;
&lt;li&gt;환경 변수 &lt;code&gt;ARK_API_KEY&lt;/code&gt; 등록, &lt;code&gt;{{ARK_API_KEY}}&lt;/code&gt;로 참조&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2단계: 제출 요청 추가&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;POST: &lt;code&gt;https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Authorization: &lt;code&gt;Bearer {{ARK_API_KEY}}&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;JSON 본문에 모델/컨텐츠 입력
&lt;/li&gt;
&lt;li&gt;변수 추출: JSONPath &lt;code&gt;$.id&lt;/code&gt; → 환경 변수 &lt;code&gt;TASK_ID&lt;/code&gt; 저장&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3단계: 대기 프로세서 추가&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;30초 Wait 프로세서 삽입 (처리 시간 보장)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4단계: For 루프에 폴링 요청 추가&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;최대 20회 반복 For 루프
&lt;/li&gt;
&lt;li&gt;루프 내:

&lt;ol&gt;
&lt;li&gt;GET: &lt;code&gt;https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks/{{TASK_ID}}&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;10초 Wait
&lt;/li&gt;
&lt;li&gt;Break If: &lt;code&gt;$.status == "succeeded"&lt;/code&gt; 또는 &lt;code&gt;$.status == "failed"&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5단계: 어설션 추가&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;루프 종료 후:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$.status&lt;/code&gt;가 &lt;code&gt;"succeeded"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$.content.video_url&lt;/code&gt;이 비어 있지 않음&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Apidog는 각 단계, 작업 ID, 폴링 응답, 어설션 결과까지 전체 리포트를 제공합니다.&lt;/p&gt;

&lt;p&gt;cURL 명령도 Apidog 시나리오에 직접 Import하여 빠르게 테스트할 수 있습니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  가격 분석: 10초 동영상의 비용
&lt;/h2&gt;

&lt;p&gt;Seedance API는 토큰 기반 과금제를 사용합니다.&lt;br&gt;&lt;br&gt;
| 작업 유형 | 요금 (100만 토큰당) |&lt;br&gt;
|---|---|&lt;br&gt;
| 1080p T2V / I2V | 46 위안 (약 $6.40) |&lt;br&gt;
| V2V (동영상 참조 입력) | 28 위안 (약 $3.90) |&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;길이&lt;/th&gt;
&lt;th&gt;대략적인 토큰 수&lt;/th&gt;
&lt;th&gt;비용 (T2V/I2V)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;5초&lt;/td&gt;
&lt;td&gt;~103,000&lt;/td&gt;
&lt;td&gt;~$0.66 위안 / ~$0.93&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10초&lt;/td&gt;
&lt;td&gt;~206,000&lt;/td&gt;
&lt;td&gt;~$9.48 위안 / ~$1.32&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15초&lt;/td&gt;
&lt;td&gt;~309,000&lt;/td&gt;
&lt;td&gt;~$14.21 위안 / ~$1.97&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;신규 계정: 15초 동영상 약 8개 분량 무료 크레딧 제공&lt;/li&gt;
&lt;li&gt;저해상도(480p)로 개발, 최종 결과만 고해상도 사용 권장&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  일반적인 오류 및 해결 방법
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;429 Too Many Requests&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;동시 작업 수 초과 시 발생
&lt;/li&gt;
&lt;li&gt;지수 백오프(10초→20→40→60초 상한)로 재시도&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;status: "failed"&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;안전 필터 위반, 파일 손상/과대용량, 유효하지 않은 파라미터
&lt;/li&gt;
&lt;li&gt;입력 및 프롬프트 재확인 후 재시도&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;status: "expired"&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;대기열 체류 시간 초과
&lt;/li&gt;
&lt;li&gt;재시도 필요, 복구 불가&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;video_url 403 오류&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;24시간 다운로드 제한 초과
&lt;/li&gt;
&lt;li&gt;동일 파라미터+시드로 재생성&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;시드 재현성&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;이전 응답의 &lt;code&gt;seed&lt;/code&gt; 값 재사용 시 동일 결과 근접 재현 가능&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  결론
&lt;/h2&gt;

&lt;p&gt;Seedance 2.0 API는 동영상 생성 자동화에 최적화된 강력한 모델 접근을 제공합니다.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;비동기 패턴: POST 제출 → 폴링 → 즉시 다운로드&lt;/li&gt;
&lt;li&gt;다중 모드 입력, 오디오-비디오 동시 생성, 프레임 제어 등 고급 기능 지원&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;프로덕션 전 Apidog 테스트 시나리오로, 폴링 로직/변수 추출/URL 만료 문제를 사전에 검증하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  자주 묻는 질문
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: &lt;code&gt;doubao-seedance-2-0-260128&lt;/code&gt;과 &lt;code&gt;doubao-seedance-2-0-fast-260128&lt;/code&gt;의 차이점은?&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;표준 모델: 고품질, 프로덕션 기본값
&lt;/li&gt;
&lt;li&gt;빠른 모델: 저품질, 빠른 처리, 프롬프트 반복에 활용&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Q: 중국 외 지역 사용 가능?&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;엔드포인트는 베이징. 해외에서도 호출 가능(지연 증가).
&lt;/li&gt;
&lt;li&gt;계정/지역 제한은 Volcengine 약관 참고&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Q: 여러 클립을 긴 동영상으로 연결하려면?&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;return_last_frame: true&lt;/code&gt; 사용 → 마지막 프레임 이미지를 다음 요청의 첫 프레임으로
&lt;/li&gt;
&lt;li&gt;반복 생성 후, 동영상 편집 라이브러리로 연결&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Q: 원본 오디오 생성 비용은?&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;오디오-비디오 공동 생성으로 토큰 소모 소폭 증가.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;generate_audio: true&lt;/code&gt; 옵션 시 &lt;code&gt;completion_tokens&lt;/code&gt;가 다소 증가&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Q: 폴링 대신 웹훅 사용 가능?&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;네, 제출 시 &lt;code&gt;callback_url&lt;/code&gt; 매개변수 추가
&lt;/li&gt;
&lt;li&gt;상태 변화시 결과를 해당 URL로 POST&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Q: 9개 이미지 제한 초과 시?&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;400 유효성 오류 반환
&lt;/li&gt;
&lt;li&gt;이미지 수를 9개 이하로 제한&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Q: 시드 매개변수가 완전한 재현 보장?&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;동일 파라미터+모델 버전이면 근접 재현
&lt;/li&gt;
&lt;li&gt;서버 모델 업데이트 등 외부 요인 영향 가능&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Q: 여러 작업 비용 추적은?&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;각 응답의 &lt;code&gt;completion_tokens&lt;/code&gt; × 토큰 단가
&lt;/li&gt;
&lt;li&gt;DB에 기록하여 자체 비용 추적 시스템 구축
&lt;/li&gt;
&lt;li&gt;별도 API 비용 대시보드는 없음&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;추가 자동화 실습, 실전 API 테스트, 반복적인 워크플로 구현에는 &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; 활용을 권장합니다.&lt;/strong&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Grok 텍스트 비디오 API 사용법 완벽 가이드</title>
      <dc:creator>Rihpig</dc:creator>
      <pubDate>Fri, 03 Apr 2026 08:42:10 +0000</pubDate>
      <link>https://dev.to/rihpig/grok-tegseuteu-bidio-api-sayongbeob-wanbyeog-gaideu-nbj</link>
      <guid>https://dev.to/rihpig/grok-tegseuteu-bidio-api-sayongbeob-wanbyeog-gaideu-nbj</guid>
      <description>&lt;h2&gt;
  
  
  요약
&lt;/h2&gt;

&lt;p&gt;Grok 텍스트-투-비디오 API는 텍스트 프롬프트로 비디오를 생성합니다. &lt;code&gt;POST /v1/videos/generations&lt;/code&gt;를 호출하면 바로 &lt;code&gt;request_id&lt;/code&gt;를 받고, 상태가 &lt;code&gt;"done"&lt;/code&gt;이 될 때까지 &lt;code&gt;GET /v1/videos/{request_id}&lt;/code&gt;로 폴링합니다. 모델은 &lt;code&gt;grok-imagine-video&lt;/code&gt;이며, 480p 기준 초당 $0.05부터 과금됩니다. xAI Python SDK는 폴링을 자동화합니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;지금 Apidog을 사용해보세요&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  소개
&lt;/h2&gt;

&lt;p&gt;xAI는 2026년 1월 한 달간 12억 개의 비디오를 생성했습니다. 이는 Grok 텍스트-투-비디오 API가 출시된 첫 달의 기록입니다. 같은 달, Artificial Analysis 텍스트-투-비디오 리더보드 1위도 차지했습니다. 이는 인프라의 대규모 검증을 의미합니다.&lt;/p&gt;

&lt;p&gt;이 가이드는 첫 요청 생성부터 결과 폴링, 매개변수 조정, 프롬프트 최적화, 참조 이미지 활용, 기존 비디오 확장/편집, 텍스트-투-비디오 적합성 판단까지 실무에 필요한 모든 단계를 다룹니다.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 API는 비동기식입니다. 프론트엔드가 비디오 준비를 기다릴 수 없으므로, 테스트마다 크레딧을 소진하지 않고 폴링 흐름을 개발할 수단이 필요합니다. Apidog의 Smart Mock을 사용하면 생성/폴링 엔드포인트를 모두 모의할 수 있어 백엔드가 없어도 비디오 플레이어 UI 개발이 가능합니다. 아래 테스트 섹션을 참고해 Apidog을 무료로 다운로드해보세요.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Grok 텍스트-투-비디오 API란?
&lt;/h2&gt;

&lt;p&gt;Grok 텍스트-투-비디오 API는 &lt;code&gt;https://api.x.ai&lt;/code&gt;에서 제공하는 xAI 미디어 생성 API입니다. 텍스트 프롬프트만으로 &lt;code&gt;grok-imagine-video&lt;/code&gt; 모델이 짧은 비디오 클립을 생성합니다. 별도의 원본 이미지는 필요 없습니다.&lt;/p&gt;

&lt;p&gt;또한 동기식 이미지 생성(&lt;code&gt;POST /v1/images/generations&lt;/code&gt;, 모델 &lt;code&gt;grok-imagine-image&lt;/code&gt;, 이미지당 $0.02)과 비디오 확장·편집용 엔드포인트도 함께 제공됩니다.&lt;/p&gt;

&lt;p&gt;텍스트-투-비디오와 이미지-투-비디오는 근본적으로 다릅니다. 텍스트-투-비디오는 오로지 프롬프트 설명에 따라 장면, 움직임, 스타일을 모두 생성합니다. 원본 이미지를 애니메이션화하고 싶다면 &lt;a href="http://apidog.com/blog/grok-image-to-video-api/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Grok 이미지-투-비디오 API 가이드&lt;/a&gt;를 참고하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  텍스트-투-비디오 생성 구조 (비동기 패턴)
&lt;/h2&gt;

&lt;p&gt;비디오 생성은 몇 초~몇 분이 걸릴 수 있으므로 비동기 패턴을 사용합니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;흐름 요약&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;프롬프트와 함께 POST 요청.&lt;/li&gt;
&lt;li&gt;즉시 &lt;code&gt;request_id&lt;/code&gt; 반환(1초 이내).&lt;/li&gt;
&lt;li&gt;xAI 서버에서 비디오 생성.&lt;/li&gt;
&lt;li&gt;해당 &lt;code&gt;request_id&lt;/code&gt;로 GET 폴링.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;status&lt;/code&gt;가 &lt;code&gt;"done"&lt;/code&gt;이 되면 비디오 URL 제공.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;비동기 패턴은 HTTP 연결을 짧게 유지하고, 원하는 주기로 진행 상황 확인이 가능합니다. 프론트엔드는 결과를 기다리며 로딩 상태를 처리해야 합니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  사전 준비
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;xAI 계정&lt;/strong&gt;: &lt;a href="https://console.x.ai" rel="noopener noreferrer"&gt;console.x.ai&lt;/a&gt;에서 가입&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API 키&lt;/strong&gt;: xAI 콘솔에서 생성 후 안전하게 보관(모든 요청에 Bearer 토큰으로 사용)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;환경 변수로 관리하세요:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;XAI_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your_api_key_here"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python SDK 설치(선택):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;xai-sdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvi4f1gdevs2pth1c3l0f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvi4f1gdevs2pth1c3l0f.png" alt="API 키 생성을 보여주는 xAI 콘솔 스크린샷"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  첫 텍스트-투-비디오 요청
&lt;/h2&gt;

&lt;h3&gt;
  
  
  curl 사용 예시
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.x.ai/v1/videos/generations &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$XAI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "grok-imagine-video",
    "prompt": "A golden retriever running through autumn leaves in slow motion, cinematic lighting"
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;응답 예시:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"request_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"d97415a1-5796-b7ec-379f-4e6819e08fdf"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Python (requests) 예시
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;XAI_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;BASE_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.x.ai&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content-Type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;grok-imagine-video&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;A golden retriever running through autumn leaves in slow motion, cinematic lighting&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BASE_URL&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/v1/videos/generations&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;request_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;request_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Generation started. Request ID: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;request_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  비디오 결과 폴링
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;request_id&lt;/code&gt;를 받으면, 상태가 &lt;code&gt;"done"&lt;/code&gt;이 될 때까지 &lt;code&gt;GET /v1/videos/{request_id}&lt;/code&gt;로 폴링합니다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;"processing"&lt;/code&gt;: 생성 중&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;"done"&lt;/code&gt;: 완료(비디오 URL 제공)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;"failed"&lt;/code&gt;: 실패&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Python 폴링 루프 예시:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;XAI_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;BASE_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.x.ai&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;poll_video&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_attempts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BASE_URL&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/v1/videos/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;request_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;attempt&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_attempts&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;progress&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;progress&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;시도 &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;attempt&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;: status=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;, progress=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;progress&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;%&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;done&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;
        &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;RuntimeError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;비디오 생성 실패: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;TimeoutError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;max_attempts&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;번의 시도 후에도 비디오가 준비되지 않았습니다.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;generate_video&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BASE_URL&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/v1/videos/generations&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content-Type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;grok-imagine-video&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;request_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;request_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;요청 ID: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;request_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;poll_video&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;video_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;video&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;비디오 준비 완료: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;video_url&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;video_url&lt;/span&gt;

&lt;span class="n"&gt;video_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;generate_video&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;A timelapse of a city skyline at sunset transitioning to night, aerial view&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;폴링 완료 응답 예시:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"done"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"video"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://vidgen.x.ai/....mp4"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"duration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"respect_moderation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"progress"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"usage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"cost_in_usd_ticks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;500000000&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  xAI Python SDK로 간소화
&lt;/h2&gt;

&lt;p&gt;SDK는 폴링을 자동으로 처리합니다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;xai_sdk&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Client&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;XAI_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;grok-imagine-video&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;A golden retriever running through autumn leaves in slow motion&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;resolution&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;720p&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;aspect_ratio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;16:9&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;비디오 URL: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;지속 시간: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;초&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;재시도, 진행상황, 간격 제어가 필요하면 직접 원시 HTTP 요청을 사용하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  효과적인 비디오 프롬프트 작성법
&lt;/h2&gt;

&lt;p&gt;상세하고 구조화된 프롬프트가 고품질 비디오를 만듭니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;장면 설명&lt;/strong&gt;: 주제와 배경을 구체적으로 작성&lt;br&gt;&lt;br&gt;
&lt;strong&gt;움직임&lt;/strong&gt;: 무엇이 어떻게 움직이는지 명확히&lt;br&gt;&lt;br&gt;
&lt;strong&gt;카메라 스타일&lt;/strong&gt;: "클로즈업", "트래킹 샷", "드론 뷰" 등&lt;br&gt;&lt;br&gt;
&lt;strong&gt;조명·분위기&lt;/strong&gt;: "골든 아워", "네온 불빛", "안개 낀 아침" 등&lt;br&gt;&lt;br&gt;
&lt;strong&gt;스타일 참조&lt;/strong&gt;: "시네마틱", "애니메이션" 등 병행 가능&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;구조 예시:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A lone astronaut floats past the International Space Station,
tether drifting behind them. The camera tracks slowly
alongside, showing Earth below. Cinematic, IMAX quality,
warm sunrise light reflecting off the visor.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  해상도, 지속 시간, 화면 비율 제어
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;duration&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"duration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;1~15초, 기본 6초 (길수록 비용 증가)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;resolution&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"resolution"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"720p"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;"480p"&lt;/code&gt;(기본), &lt;code&gt;"720p"&lt;/code&gt; 두 가지&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;aspect_ratio&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"aspect_ratio"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"9:16"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;비율&lt;/th&gt;
&lt;th&gt;용도&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;16:9&lt;/td&gt;
&lt;td&gt;데스크톱, YouTube, 프레젠테이션(기본)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9:16&lt;/td&gt;
&lt;td&gt;TikTok, Instagram Reels, 모바일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1:1&lt;/td&gt;
&lt;td&gt;Instagram 피드, 소셜 카드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4:3&lt;/td&gt;
&lt;td&gt;클래식 비디오, 프레젠테이션&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3:4&lt;/td&gt;
&lt;td&gt;세로 모바일 콘텐츠&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3:2&lt;/td&gt;
&lt;td&gt;표준 사진 비율&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2:3&lt;/td&gt;
&lt;td&gt;세로 사진&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;전체 매개변수 예시:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.x.ai/v1/videos/generations &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$XAI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "grok-imagine-video",
    "prompt": "A coastal town at dawn, waves breaking gently on a rocky shore",
    "duration": 10,
    "resolution": "720p",
    "aspect_ratio": "16:9"
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  비디오 스타일을 안내하는 참조 이미지 사용
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;reference_images&lt;/code&gt; 파라미터에 최대 7개의 이미지 URL 배열을 전달하면, 생성 비디오의 시각 스타일·톤을 보정할 수 있습니다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"grok-imagine-video"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"prompt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"A coastal town at dawn, waves breaking gently on a rocky shore"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"reference_images"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/my-style-reference.jpg"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/color-palette-reference.jpg"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;팁:&lt;/strong&gt; 비슷한 미학의 이미지 세트를 사용하세요. 서로 너무 다른 이미지는 결과를 불안정하게 만듭니다.&lt;br&gt;&lt;br&gt;
참조 이미지는 프롬프트를 보완할 뿐, 주제가 되지는 않습니다.&lt;br&gt;&lt;br&gt;
이미지-투-비디오와는 달리, 참조 이미지를 쓸 때도 장면은 프롬프트가 결정합니다.&lt;/p&gt;
&lt;h2&gt;
  
  
  생성 비디오 확장 및 편집
&lt;/h2&gt;

&lt;p&gt;xAI는 생성된 비디오를 다루기 위한 두 가지 엔드포인트를 제공합니다.&lt;/p&gt;
&lt;h3&gt;
  
  
  비디오 확장
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;POST /v1/videos/extensions&lt;/code&gt;&lt;br&gt;&lt;br&gt;
기존 비디오의 &lt;code&gt;request_id&lt;/code&gt;와 새로운 프롬프트를 전달해 장면을 추가합니다.&lt;br&gt;&lt;br&gt;
15초 제한을 우회해 더 긴 시퀀스 생성에 유리합니다.&lt;/p&gt;
&lt;h3&gt;
  
  
  비디오 편집
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;POST /v1/videos/edits&lt;/code&gt;&lt;br&gt;&lt;br&gt;
생성된 비디오를 텍스트 지침에 따라 수정(스타일 변경, 장면 수정, 효과 적용 등)&lt;/p&gt;

&lt;p&gt;두 엔드포인트 모두 &lt;code&gt;request_id&lt;/code&gt; 반환 및 폴링 패턴은 동일합니다.&lt;/p&gt;
&lt;h2&gt;
  
  
  API 응답에서 비용 확인
&lt;/h2&gt;

&lt;p&gt;모든 완료된 응답에는 &lt;code&gt;usage.cost_in_usd_ticks&lt;/code&gt;가 포함됩니다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"usage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"cost_in_usd_ticks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;500000000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;USD 변환: 10,000,000으로 나누세요.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;cost_in_usd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;usage&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cost_in_usd_ticks&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;10_000_000&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;비용: $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;cost_in_usd&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# 출력: Cost: $0.0500
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;가격표:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;해상도&lt;/th&gt;
&lt;th&gt;초당 가격&lt;/th&gt;
&lt;th&gt;10초 클립&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;480p&lt;/td&gt;
&lt;td&gt;$0.05&lt;/td&gt;
&lt;td&gt;$0.50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;720p&lt;/td&gt;
&lt;td&gt;$0.07&lt;/td&gt;
&lt;td&gt;$0.70&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;응답의 &lt;code&gt;cost_in_usd_ticks&lt;/code&gt;를 기록하면, 별도의 결제 API 없이도 사용량 대시보드를 구축할 수 있습니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apidog로 Grok 비디오 API 테스트하는 방법
&lt;/h2&gt;

&lt;p&gt;비동기 폴링 패턴은 프론트엔드 테스트에 부담을 줍니다. 실제 API 호출마다 비용과 시간이 들기 때문입니다. Apidog의 Smart Mock 기능을 활용하면 이 과정을 효율적으로 자동화할 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmit5bu2s8zqtmpzxfpbs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmit5bu2s8zqtmpzxfpbs.png" alt="Apidog Smart Mock 구성 스크린샷"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  사용 사례 1: 프론트엔드 개발용 Smart Mock
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://apidog.com/api-mocking/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog의 Smart Mock&lt;/a&gt;으로 두 엔드포인트의 스키마를 정의하고, 현실적인 가짜 응답을 즉시 받을 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;생성 엔드포인트 모의:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;프로젝트에 &lt;code&gt;POST /v1/videos/generations&lt;/code&gt; 엔드포인트 생성&lt;/li&gt;
&lt;li&gt;응답 스키마: 단일 &lt;code&gt;request_id&lt;/code&gt; 문자열 필드&lt;/li&gt;
&lt;li&gt;Smart Mock이 자동으로 UUID 반환&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;폴링 엔드포인트 모의:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;GET /v1/videos/{request_id}&lt;/code&gt; 생성&lt;/li&gt;
&lt;li&gt;응답 스키마: &lt;code&gt;status&lt;/code&gt;, &lt;code&gt;video.url&lt;/code&gt;, &lt;code&gt;video.duration&lt;/code&gt;, &lt;code&gt;progress&lt;/code&gt;, &lt;code&gt;usage.cost_in_usd_ticks&lt;/code&gt; 등 포함&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;"status": "done"&lt;/code&gt; 및 플레이스홀더 MP4 URL 반환&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;예시 모의 응답:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"done"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"video"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://vidgen.x.ai/mock-video-12345.mp4"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"duration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"respect_moderation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"progress"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"usage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"cost_in_usd_ticks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;400000000&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;프론트엔드 개발자는 이 모의 서버로 전체 UI를 구축/테스트할 수 있습니다. 모의 응답을 &lt;code&gt;"failed"&lt;/code&gt;로 바꿔 오류 상태도 테스트 가능하며, 실제 API 크레딧은 소모되지 않습니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  사용 사례 2: 폴링 루프 테스트 시나리오
&lt;/h3&gt;

&lt;p&gt;Apidog의 테스트 시나리오로 생성-폴링 전체 흐름을 자동 검증할 수 있습니다.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;생성 요청:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;POST /v1/videos/generations&lt;/code&gt; 추가
&lt;/li&gt;
&lt;li&gt;후처리기로 응답 &lt;code&gt;$.request_id&lt;/code&gt;를 &lt;code&gt;videoRequestId&lt;/code&gt; 변수에 저장&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;폴링 루프:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;GET /v1/videos/{{videoRequestId}}&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;중단 조건: &lt;code&gt;response.body.status == "done"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;반복 사이 5초 대기&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;결과 확인:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;최종 GET의 &lt;code&gt;$.video.url&lt;/code&gt;이 비어 있지 않은지 Assertion 처리&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;이 방식으로 폴링 로직이 변경될 때마다 자동 회귀 테스트가 가능합니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  텍스트-투-비디오 vs 이미지-투-비디오: 선택 기준
&lt;/h2&gt;

&lt;p&gt;두 모드 모두 &lt;code&gt;grok-imagine-video&lt;/code&gt; 모델을 사용하지만 목적이 다릅니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;텍스트-투-비디오 사용 사례:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;개념/스크립트 기반 원본 콘텐츠 생성&lt;/li&gt;
&lt;li&gt;모델이 장면을 창의적으로 생성&lt;/li&gt;
&lt;li&gt;사용자 프롬프트 입력 중심&lt;/li&gt;
&lt;li&gt;원본 이미지가 필요 없는 경우&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;이미지-투-비디오 사용 사례:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;제품 사진, 일러스트, 브랜드 자산 등에서 애니메이션화&lt;/li&gt;
&lt;li&gt;기존 이미지의 세부 요소 유지 필요&lt;/li&gt;
&lt;li&gt;연속 이미지의 일관된 애니메이션&lt;/li&gt;
&lt;li&gt;직접 만든 이미지나 사진을 활용&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;핵심 차이: 텍스트-투-비디오는 ‘창조’, 이미지-투-비디오는 ‘애니메이션화’입니다.&lt;br&gt;&lt;br&gt;
자세한 내용은 &lt;a href="https://apidog.com/api-mocking/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Grok 이미지-투-비디오 API 가이드&lt;/a&gt; 참고.&lt;/p&gt;

&lt;p&gt;입력 유형에 따라 런타임에서 두 엔드포인트를 분기할 수 있습니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  일반적인 오류 및 해결 방법
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;401 권한 없음&lt;/strong&gt;: API 키 누락/만료/형식 오류. Authorization 헤더 형식 및 키 활성 여부 확인.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;429 너무 많은 요청&lt;/strong&gt;: 속도 제한. 분당 60회, 초당 1회 이하로 폴링 간격(최소 5초) 유지.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;폴링 status: "failed"&lt;/strong&gt;: 프롬프트가 검열에 걸림. &lt;code&gt;respect_moderation&lt;/code&gt;이 true인지 확인하고 프롬프트 수정.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;비디오 URL 404&lt;/strong&gt;: 비디오 URL은 임시. 생성 직후 바로 다운로드 필요.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;빈/정지 비디오&lt;/strong&gt;: 모호한 프롬프트/움직임 언어 부족. 명확한 움직임, 방향, 속도 명시.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;느린 폴링&lt;/strong&gt;: 720p/긴 비디오는 생성 시간이 더 걸림. 개발/테스트엔 480p+짧은 duration 권장.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  결론
&lt;/h2&gt;

&lt;p&gt;Grok 텍스트-투-비디오 API는 프롬프트 → 비디오까지의 워크플로우를 간단히 구현할 수 있게 해줍니다. 폴링 비동기 패턴만 정확히 구현하면, 나머지(지속 시간/해상도/화면비율/참조 이미지 등)는 쉽게 조정 가능합니다.&lt;/p&gt;

&lt;p&gt;프로덕션에서는 &lt;code&gt;cost_in_usd_ticks&lt;/code&gt;로 비용 추적을 반드시 추가하세요.&lt;br&gt;&lt;br&gt;
개발 중엔 Apidog에서 엔드포인트를 모의해 프론트엔드가 대기 없이 개발할 수 있게 하세요.&lt;br&gt;&lt;br&gt;
통합 단계에서는 테스트 시나리오로 폴링 로직의 신뢰성을 확보하세요.&lt;/p&gt;

&lt;p&gt;Grok 비디오 API용 모의 서버 및 자동화 테스트 시나리오를 구축하려면 Apidog을 지금 무료로 사용해보세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  자주 묻는 질문
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q. 텍스트-투-비디오 생성에는 어떤 모델 이름을 사용해야 하나요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A. &lt;code&gt;grok-imagine-video&lt;/code&gt;를 사용하세요. 이는 &lt;code&gt;/v1/videos/generations&lt;/code&gt;의 &lt;code&gt;model&lt;/code&gt; 필드에 필요합니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q. 비디오 생성에는 얼마나 걸리나요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A. 480p 짧은 클립은 30초 내외, 720p 긴 클립은 수 분 소요. 폴링 주기는 5~10초 간격 권장.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q. 15초보다 긴 비디오를 생성할 수 있나요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A. 단일 요청으론 불가. 최대 duration 15초. 더 길게하려면 &lt;code&gt;POST /v1/videos/extensions&lt;/code&gt;로 이어붙이세요.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q. 생성된 비디오는 어떻게 다운로드하나요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A. 폴링 완료 응답의 &lt;code&gt;result.video.url&lt;/code&gt;을 사용해 즉시 MP4로 저장하세요. URL은 임시입니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q. 프롬프트가 콘텐츠 검열에 걸리면?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A. 작업은 &lt;code&gt;"failed"&lt;/code&gt; 상태로 종료되고, &lt;code&gt;respect_moderation&lt;/code&gt;이 true로 표시됨. 프롬프트 수정 후 재시도.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q. 비디오 API 무료 등급이 있나요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A. 초당 과금 방식이며, 무료 등급은 없습니다. 신규 계정 크레딧 제공 여부는 &lt;a href="https://console.x.ai" rel="noopener noreferrer"&gt;console.x.ai&lt;/a&gt;에서 확인.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q. &lt;code&gt;reference_images&lt;/code&gt;와 원본 이미지 시작 방식 차이?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A. 참조 이미지는 스타일 가이드만 가능, 주제가 되지 않음. 이미지-투-비디오의 원본 이미지는 실제 첫 프레임이 됨.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q. 크레딧을 쓰지 않고 폴링 루프 테스트하려면?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A. Apidog의 Smart Mock으로 생성/폴링 엔드포인트 모두 모의. &lt;code&gt;"processing"&lt;/code&gt;/&lt;code&gt;"done"&lt;/code&gt; 상태별 응답을 설정해 실제 API 없이 폴링 코드 검증 가능.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Grok 이미지-비디오 API 사용법 (단계별 가이드)</title>
      <dc:creator>Rihpig</dc:creator>
      <pubDate>Fri, 03 Apr 2026 08:36:38 +0000</pubDate>
      <link>https://dev.to/rihpig/grok-imiji-bidio-api-sayongbeob-dangyebyeol-gaideu-330m</link>
      <guid>https://dev.to/rihpig/grok-imiji-bidio-api-sayongbeob-dangyebyeol-gaideu-330m</guid>
      <description>&lt;h2&gt;
  
  
  세 줄 요약
&lt;/h2&gt;

&lt;p&gt;그록 이미지-투-비디오 API는 &lt;code&gt;grok-imagine-video&lt;/code&gt; 모델을 사용하여 정적 이미지를 비디오 클립으로 애니메이션화합니다. 이미지 URL, 프롬프트 및 선택적 설정을 &lt;code&gt;https://api.x.ai/v1/videos/generations&lt;/code&gt;로 POST하면 API가 즉시 &lt;code&gt;request_id&lt;/code&gt;를 반환합니다. 이후 &lt;code&gt;GET /v1/videos/{request_id}&lt;/code&gt;로 폴링하여 &lt;code&gt;status&lt;/code&gt;가 &lt;code&gt;"done"&lt;/code&gt;이 될 때까지 상태를 확인합니다. 비디오 재생 시간은 1~15초 지정 가능하며, 480p 출력 기준 초당 0.05달러부터 과금됩니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Apidog를 지금 사용해보세요&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  소개
&lt;/h2&gt;

&lt;p&gt;2026년 1월 28일, xAI는 &lt;code&gt;grok-imagine-video&lt;/code&gt; 모델을 공개 API로 출시했습니다. 첫 달에만 12억 개의 비디오가 생성되었고, Artificial Analysis 텍스트-투-비디오 순위표 1위를 차지했습니다. 이미지-투-비디오는 사진과 설명 프롬프트를 전달하면 이미지를 짧은 비디오(MP4)로 자동 애니메이션화합니다.&lt;/p&gt;

&lt;p&gt;이 API는 작업 제출 후 완료를 폴링하는 비동기 흐름을 사용합니다. 첫 POST가 200 OK를 반환해도, 실제로는 폴링 루프에서 &lt;code&gt;"processing"&lt;/code&gt;, &lt;code&gt;"done"&lt;/code&gt;, &lt;code&gt;"failed"&lt;/code&gt; 상태 처리가 올바르게 작동해야 통합이 완성됩니다.&lt;/p&gt;

&lt;p&gt;Apidog의 테스트 시나리오(Test Scenarios)는 &lt;code&gt;/v1/videos/generations&lt;/code&gt;로 POST → &lt;code&gt;request_id&lt;/code&gt; 추출 → 폴링 및 완료 확인 → 비디오 URL 검증의 전체 시퀀스를 자동화할 수 있습니다. 아래 실습을 진행하려면 Apidog를 무료로 다운로드하십시오.&lt;/p&gt;

&lt;h2&gt;
  
  
  그록 이미지-투-비디오 API란 무엇인가요?
&lt;/h2&gt;

&lt;p&gt;그록 이미지-투-비디오 API는 xAI의 비디오 생성 솔루션입니다. &lt;code&gt;grok-imagine-video&lt;/code&gt; 모델은 제공된 이미지를 시작 프레임으로 받아, 프롬프트에 따라 자연스러운 움직임을 생성합니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;API 엔드포인트:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST https://api.x.ai/v1/videos/generations
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;인증:&lt;/strong&gt; Bearer 토큰 사용&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;Authorization: Bearer YOUR_XAI_API_KEY
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;API 키는 &lt;a href="https://console.x.ai" rel="noopener noreferrer"&gt;xAI 콘솔&lt;/a&gt;에서 발급받을 수 있습니다. 동일한 엔드포인트로 텍스트-투-비디오(이미지 없이), 비디오 확장, 편집도 지원합니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  이미지-투-비디오 프로세스 작동 방식
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;image&lt;/code&gt; 매개변수: 출력 비디오의 &lt;strong&gt;첫 프레임&lt;/strong&gt; 지정&lt;/li&gt;
&lt;li&gt;프롬프트: 장면의 움직임과 변화를 안내&lt;/li&gt;
&lt;li&gt;첫 프레임은 항상 제공한 이미지에서 시작&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;예:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
일출 호수 사진과 &lt;code&gt;"아침 안개가 드리워지고 잔잔한 물결이 수면에 퍼진다"&lt;/code&gt; 프롬프트를 입력하면, 첫 프레임은 이미지 그대로, 이후 프레임은 물결과 안개가 움직입니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;이미지-투-비디오를 써야 하는 경우&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;제품/브랜드 사진 등 특정 이미지를 기반으로 움직임을 만들고 싶을 때&lt;/li&gt;
&lt;li&gt;시작 프레임의 시각적 일관성이 중요한 경우&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;텍스트-투-비디오가 적합한 경우&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;이미지 없이 아이디어만 빠르게 실험할 때&lt;/li&gt;
&lt;li&gt;모델에게 장면 구성을 맡기고 싶을 때&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  전제 조건
&lt;/h2&gt;

&lt;p&gt;API 호출 전 준비사항:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://console.x.ai" rel="noopener noreferrer"&gt;console.x.ai&lt;/a&gt; 계정&lt;/li&gt;
&lt;li&gt;xAI 콘솔에서 발급받은 &lt;strong&gt;API 키&lt;/strong&gt; (환경 변수로 보관)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python 3.8+&lt;/strong&gt; 또는 &lt;strong&gt;Node.js 18+&lt;/strong&gt; (예제 코드 제공)&lt;/li&gt;
&lt;li&gt;공개 이미지 URL 또는 Base64 인코딩 데이터 URI&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fozcnsdoclf1obpc6q6w3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fozcnsdoclf1obpc6q6w3.png" alt="API 키 준비 예시"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;API 키 환경 변수 등록:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;XAI_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your_key_here"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;xAI Python SDK 설치:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
클라이언트 사용 시&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;xai-sdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;순수 HTTP 호출은 &lt;code&gt;requests&lt;/code&gt;(Python) 또는 &lt;code&gt;fetch&lt;/code&gt;(Node.js)만 있으면 충분합니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  첫 번째 이미지-투-비디오 요청하기
&lt;/h2&gt;

&lt;h3&gt;
  
  
  curl 사용
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.x.ai/v1/videos/generations &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$XAI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "grok-imagine-video",
    "prompt": "Gentle waves move across the surface, morning mist rises slowly",
    "image": {
      "url": "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1a/24701-nature-natural-beauty.jpg/1280px-24701-nature-natural-beauty.jpg"
    },
    "duration": 6,
    "resolution": "720p",
    "aspect_ratio": "16:9"
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;응답 예시:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"request_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"d97415a1-5796-b7ec-379f-4e6819e08fdf"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;비디오는 아직 준비되지 않았으므로 폴링이 필요합니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  Python 사용 (순수 요청)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;api_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;XAI_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;grok-imagine-video&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Gentle waves move across the surface, morning mist rises slowly&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://upload.wikimedia.org/wikipedia/commons/thumb/1/1a/24701-nature-natural-beauty.jpg/1280px-24701-nature-natural-beauty.jpg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;duration&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;resolution&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;720p&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;aspect_ratio&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;16:9&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content-Type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.x.ai/v1/videos/generations&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;request_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;request_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Job started: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;request_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Base64 이미지 사용
&lt;/h3&gt;

&lt;p&gt;공개 URL이 없을 때는 데이터 URI로 이미지 인코딩:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;my_image.jpg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rb&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;encoded&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;b64encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data:image/jpeg;base64,&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;encoded&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  결과 폴링하기
&lt;/h2&gt;

&lt;p&gt;비디오 생성은 비동기식이므로, 다음과 같이 결과를 폴링합니다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET https://api.x.ai/v1/videos/{request_id}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;상태 값:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;상태&lt;/th&gt;
&lt;th&gt;의미&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;"processing"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;비디오 렌더링 중&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;"done"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;비디오 준비 완료, URL 제공&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;"failed"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;생성 중 에러 발생&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;완료 응답 예시:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"done"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"video"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://vidgen.x.ai/....mp4"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"duration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"progress"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  전체 Python 폴링 루프
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;poll_video&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.x.ai/v1/videos/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;request_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Status: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; | Progress: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;progress&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;%&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;done&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;video&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;RuntimeError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Video generation failed for &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;request_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# 사용 예시
&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;poll_video&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Video URL: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Duration: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;duration&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;s&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TIP:&lt;/strong&gt; 폴링 간격은 5초 이상으로 설정하세요. API는 분당 60회(초당 1회) 제한이 있습니다.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  xAI Python SDK 사용
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;xai-sdk&lt;/code&gt; 라이브러리를 사용하면 폴링/상태처리/에러 전파를 자동으로 관리합니다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;xai_sdk&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Client&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;XAI_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="n"&gt;video&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;grok-imagine-video&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Gentle waves move across the surface, morning mist rises slowly&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com/landscape.jpg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;resolution&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;720p&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;aspect_ratio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;16:9&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Video URL: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Duration: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;s&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;폴링, 재시도, 로깅 등 세밀한 제어가 필요하면 순수 HTTP 방식을, 간결한 코드가 필요하면 SDK를 사용하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  해상도, 재생 시간 및 화면 비율 제어
&lt;/h2&gt;

&lt;h3&gt;
  
  
  재생 시간
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;duration&lt;/code&gt;: 1~15초 (기본 6초)&lt;/li&gt;
&lt;li&gt;예시:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nl"&gt;"duration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  해상도
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;값&lt;/th&gt;
&lt;th&gt;설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;"480p"&lt;/td&gt;
&lt;td&gt;기본값. 저비용, 빠른 생성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"720p"&lt;/td&gt;
&lt;td&gt;고화질. 초당 0.07달러&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"resolution"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"720p"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  화면 비율
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;값&lt;/th&gt;
&lt;th&gt;사용 사례&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;"16:9"&lt;/td&gt;
&lt;td&gt;기본, 풍경&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"9:16"&lt;/td&gt;
&lt;td&gt;모바일, 스토리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"1:1"&lt;/td&gt;
&lt;td&gt;소셜 썸네일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"4:3"&lt;/td&gt;
&lt;td&gt;프리젠테이션&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"3:4"&lt;/td&gt;
&lt;td&gt;인물&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"3:2"&lt;/td&gt;
&lt;td&gt;표준 사진&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"2:3"&lt;/td&gt;
&lt;td&gt;세로 인물&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;image&lt;/code&gt;가 주어지면 이미지 비율이 기본, 명시적으로 재정의 가능.&lt;/p&gt;




&lt;h2&gt;
  
  
  스타일 지정을 위한 참조 이미지 사용
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;image&lt;/code&gt;&lt;/strong&gt;: 비디오 첫 프레임으로 사용됨&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;reference_images&lt;/code&gt;&lt;/strong&gt;: 최대 7개, 스타일/분위기/조명 등 렌더링에 간접 영향
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"grok-imagine-video"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"prompt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"A product rotating slowly on a clean white surface"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"image"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/product-shot.jpg"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"reference_images"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/brand-style-reference-1.jpg"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/lighting-reference.jpg"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"duration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"resolution"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"720p"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;참조 이미지는 첫 프레임 자체가 되지 않고, 스타일만 유도합니다.&lt;br&gt;&lt;br&gt;
&lt;code&gt;image&lt;/code&gt; 없이 &lt;code&gt;reference_images&lt;/code&gt;만 넘기면 텍스트-투-비디오 + 스타일 안내 효과.&lt;/p&gt;
&lt;h2&gt;
  
  
  비디오 확장 및 편집
&lt;/h2&gt;
&lt;h3&gt;
  
  
  비디오 확장
&lt;/h3&gt;

&lt;p&gt;기존 비디오에 이어서 추가 생성:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.x.ai/v1/videos/extensions &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$XAI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "grok-imagine-video",
    "video_id": "your_original_request_id",
    "prompt": "The mist continues to lift as sunlight breaks through",
    "duration": 5
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;응답의 &lt;code&gt;request_id&lt;/code&gt;로 동일하게 폴링.&lt;/p&gt;

&lt;h3&gt;
  
  
  비디오 편집
&lt;/h3&gt;

&lt;p&gt;프롬프트 기반 비디오 내용 수정:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.x.ai/v1/videos/edits &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$XAI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "grok-imagine-video",
    "video_id": "your_original_request_id",
    "prompt": "Change the sky to a dramatic sunset with deep orange tones"
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;확장/편집 모두 비동기 방식 및 폴링 패턴 동일.&lt;/p&gt;

&lt;h2&gt;
  
  
  가격 분석: 10초 비디오 비용
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;구성 요소&lt;/th&gt;
&lt;th&gt;비용&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;입력 이미지&lt;/td&gt;
&lt;td&gt;$0.002/이미지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;480p 출력&lt;/td&gt;
&lt;td&gt;$0.05/초&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;720p 출력&lt;/td&gt;
&lt;td&gt;$0.07/초&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;예시: 720p 10초 비디오&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;입력 이미지: $0.002&lt;/li&gt;
&lt;li&gt;출력: 10초 × $0.07 = $0.70&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;총계: $0.702&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;예시: 480p 6초 비디오(기본)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;입력 이미지: $0.002&lt;/li&gt;
&lt;li&gt;출력: 6초 × $0.05 = $0.30&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;총계: $0.302&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;입력 이미지 요금은 매 요청마다 부과됩니다. 동일 이미지를 반복 사용한다면 호출을 효율적으로 계획하세요.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;텍스트-투-비디오(이미지 미포함)의 경우 $0.002 입력 요금이 면제됩니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apidog로 그록 비디오 API 통합을 테스트하는 방법
&lt;/h2&gt;

&lt;p&gt;비동기 패턴은 단순 요청 테스트로는 검증이 어렵습니다. 다음을 자동화해야 합니다:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;생성 요청이 &lt;code&gt;request_id&lt;/code&gt; 반환&lt;/li&gt;
&lt;li&gt;폴링 중 &lt;code&gt;"processing"&lt;/code&gt; 상태 처리&lt;/li&gt;
&lt;li&gt;최종 응답에서 &lt;code&gt;status == "done"&lt;/code&gt; 및 비디오 URL 검증&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Apidog의 Test Scenario 예시&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. 새 테스트 시나리오 생성&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Apidog에서 테스트 모듈 → &lt;code&gt;+&lt;/code&gt; → "Grok 이미지-투-비디오 비동기 흐름" 생성&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. 생성 요청 단계 추가&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;URL: &lt;code&gt;https://api.x.ai/v1/videos/generations&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;메서드: POST&lt;/li&gt;
&lt;li&gt;헤더: &lt;code&gt;Authorization: Bearer {{xai_api_key}}&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;본문(JSON):
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"grok-imagine-video"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"prompt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Gentle mist rises from the water as light filters through the trees"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"image"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/your-test-image.jpg"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"duration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"resolution"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"480p"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;3. request_id 추출&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;변수 이름: &lt;code&gt;video_request_id&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;소스: 응답 본문&lt;/li&gt;
&lt;li&gt;추출: JSONPath, &lt;code&gt;$.request_id&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. 폴링 루프&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For 루프 프로세서 추가&lt;/li&gt;
&lt;li&gt;루프 내부 GET 요청:

&lt;ul&gt;
&lt;li&gt;URL: &lt;code&gt;https://api.x.ai/v1/videos/{{video_request_id}}&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;헤더: &lt;code&gt;Authorization: Bearer {{xai_api_key}}&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;변수 추출: &lt;code&gt;video_status&lt;/code&gt;, JSONPath &lt;code&gt;$.status&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Wait 프로세서(5000ms) 추가&lt;/li&gt;
&lt;li&gt;Break 조건: &lt;code&gt;{{video_status}} == "done"&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5. 비디오 URL 검증&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For 루프 후, 마지막 GET&lt;/li&gt;
&lt;li&gt;Assertion: &lt;code&gt;$.video.url&lt;/code&gt; 필드가 비어있지 않음&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;자세한 활용법은 Apidog의 공식 가이드 참고&lt;br&gt;&lt;br&gt;
(모든 apidog.com 링크는 자동으로 UTM 파라미터가 추가됨)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;시나리오 실행&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;테스트 시나리오에서 Run 클릭&lt;/li&gt;
&lt;li&gt;보고서에는 각 단계 상태와 타이밍 표시&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;CI/CD 통합 예시&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apidog run &lt;span class="nt"&gt;--scenario&lt;/span&gt; grok-video-async-flow &lt;span class="nt"&gt;--env&lt;/span&gt; production
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  일반적인 오류 및 해결 방법
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;401 Unauthorized&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
API 키 확인. 올바른 Bearer 토큰인지, xAI 콘솔에서 활성화되었는지 점검&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;422 Unprocessable Entity&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
필수 필드 누락, 잘못된 본문 구조, 접근 불가 이미지 URL 등. URL을 브라우저에서 직접 검증&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;이미지 URL 접근 불가&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
xAI 서버에서 접근 가능한 공개 URL 또는 Base64 데이터 URI 사용&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"processing" 상태 무한 대기&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
일반적으로 30초~수분 소요. 10분 이상이면 새 요청 제출&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;429 요청 제한&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
분당 60회/초당 1회 제한. 폴링 간격 늘리기(&lt;code&gt;time.sleep(1)&lt;/code&gt; 등)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Base64 업로드 오류&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
MIME 타입 접두사(&lt;code&gt;data:image/jpeg;base64,&lt;/code&gt; 등) 정확히 입력&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;화면 비율 불일치&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
명시적 &lt;code&gt;aspect_ratio&lt;/code&gt;가 원본 이미지와 크게 다르면 레터박스/크롭 발생&lt;br&gt;&lt;br&gt;
가능하면 원본 이미지 비율 유지&lt;/p&gt;

&lt;h2&gt;
  
  
  결론
&lt;/h2&gt;

&lt;p&gt;그록 이미지-투-비디오 API는 정적 이미지를 애니메이션화하는 강력한 도구입니다. 이미지를 POST, 프롬프트 입력, &lt;code&gt;request_id&lt;/code&gt;로 폴링, 결과 MP4 다운로드까지 간단한 패턴으로 사용할 수 있습니다.&lt;br&gt;&lt;br&gt;
&lt;code&gt;grok-imagine-video&lt;/code&gt; 모델은 2026년 Artificial Analysis 1위를 차지했고, 한 달간 10억 개 이상의 비디오가 생성되었습니다.&lt;/p&gt;

&lt;p&gt;비동기 폴링 패턴은 통합의 핵심 난관입니다. Apidog의 테스트 시나리오를 활용하면 변수 추출, 폴링 루프, 최종 URL 검증까지 자동화하여, 문제를 사전에 발견할 수 있습니다.&lt;/p&gt;

&lt;p&gt;Apidog를 무료로 다운로드하여 통합을 시작해보세요. 신용카드 정보는 필요하지 않습니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  자주 묻는 질문 (FAQ)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q. 어떤 모델 이름을 써야 하나요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A. &lt;code&gt;grok-imagine-video&lt;/code&gt;를 &lt;code&gt;model&lt;/code&gt; 필드에 지정하세요.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q. &lt;code&gt;image&lt;/code&gt;와 &lt;code&gt;reference_images&lt;/code&gt; 차이는?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A. &lt;code&gt;image&lt;/code&gt;는 첫 프레임, &lt;code&gt;reference_images&lt;/code&gt;는 스타일 안내. 둘 다 조합 가능&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q. 비디오 생성 시간은?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A. 6초 480p: 1~3분, 15초 720p: 4~8분. 5초마다 폴링 권장&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q. 로컬 파일도 원본 이미지로 사용 가능?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A. 예. Base64 데이터 URI로 인코딩 후 &lt;code&gt;image.url&lt;/code&gt;에 입력&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q. &lt;code&gt;aspect_ratio&lt;/code&gt;를 생략하면?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A. &lt;code&gt;image&lt;/code&gt; 입력 시 원본 이미지 비율, 아니면 기본 16:9&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q. 10초 720p 비디오 비용은?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A. 입력 이미지 $0.002 + 10초 × $0.07 = $0.702&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q. 요청 제한은?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A. 분당 60회, 초당 1회. 생성 POST/폴링 GET 모두 포함&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q. 15초 이상 비디오도 가능한가?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A. 예. &lt;code&gt;/v1/videos/extensions&lt;/code&gt;로 이어붙이기 가능. 각 단계별로 폴링&lt;/p&gt;




</description>
    </item>
    <item>
      <title>2026년 Bird SMS API 가격: 비용 완벽 분석</title>
      <dc:creator>Rihpig</dc:creator>
      <pubDate>Fri, 03 Apr 2026 07:08:34 +0000</pubDate>
      <link>https://dev.to/rihpig/2026nyeon-bird-sms-api-gagyeog-biyong-wanbyeog-bunseog-24ma</link>
      <guid>https://dev.to/rihpig/2026nyeon-bird-sms-api-gagyeog-biyong-wanbyeog-bunseog-24ma</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Bird SMS API는 &lt;strong&gt;미국 발신 메시지당 $0.00331&lt;/strong&gt;, &lt;strong&gt;미국 수신 메시지당 $0.003&lt;/strong&gt;부터 시작합니다. 주요 SMS API 제공업체 대비 상당히 저렴하며, 하루 5건 무료 SMS가 포함된 무료 요금제도 지원합니다. 월 $49 Pro 요금제에는 1,000건의 SMS 크레딧이 포함됩니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;오늘 Apidog를 무료로 사용해보세요&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  소개
&lt;/h2&gt;

&lt;p&gt;MessageBird는 2023년에 Bird로 브랜드를 변경했습니다. AI 기반 옴니채널 커뮤니케이션(SMS, WhatsApp, 이메일, 음성)에 집중하고, 가격 모델 또한 투명한 종량제 요금으로 변경되었습니다. Bird의 기본 SMS 비용은 Twilio, Vonage, 그 외 주요 공급업체보다 낮습니다.&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;SMS 통합 개발 시, 정확한 가격 데이터와 빠른 API 테스트가 모두 필요하다면 Apidog를 활용하세요. 추가 코드 없이 Bird API 요청을 설계·테스트하고 응답을 검증할 수 있습니다. &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;apidog.com&lt;/a&gt;에서 무료로 시작하면, 몇 분 만에 Bird SMS 통합을 검증할 수 있습니다.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;이 글에서는 2025~2026년 기준 Bird SMS 실제 비용, 추가 비용 요인, 그리고 경쟁사와의 비교까지 실무적인 관점에서 다룹니다.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bird SMS 가격 개요
&lt;/h2&gt;

&lt;p&gt;Bird의 SMS 가격 구조는 두 가지로 나뉩니다.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;플랫폼 요금제&lt;/strong&gt; (월별 구독)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;메시지당 요금&lt;/strong&gt; (요금제 외 종량제)&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;요금제&lt;/th&gt;
&lt;th&gt;월 비용&lt;/th&gt;
&lt;th&gt;포함된 SMS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;무료&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;일 5건의 SMS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pro&lt;/td&gt;
&lt;td&gt;$49&lt;/td&gt;
&lt;td&gt;월 1,000건의 SMS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enterprise&lt;/td&gt;
&lt;td&gt;맞춤형&lt;/td&gt;
&lt;td&gt;맞춤형 볼륨&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;요금제 초과분은 별도 과금됩니다. 미국 기준 메시지당 요금은 아래와 같습니다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;발신 SMS&lt;/strong&gt;: $0.00331/건&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;수신 SMS&lt;/strong&gt;: $0.003/건&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bird의 상세 요금 페이지에서 항상 최신 요금을 확인하세요: &lt;a href="https://bird.com/en/pricing/sms" rel="noopener noreferrer"&gt;bird.com/en/pricing/sms&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  가격 분석: SMS, MMS, WhatsApp, 이메일
&lt;/h2&gt;

&lt;h3&gt;
  
  
  SMS
&lt;/h3&gt;

&lt;p&gt;미국 SMS는 $0.00331/건(발신). 지역별 예시:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;국가&lt;/th&gt;
&lt;th&gt;발신 요금(예시)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;미국&lt;/td&gt;
&lt;td&gt;~$0.00331&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;영국&lt;/td&gt;
&lt;td&gt;~€0.036&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;호주&lt;/td&gt;
&lt;td&gt;~€0.009&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;독일&lt;/td&gt;
&lt;td&gt;~€0.056&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;인도&lt;/td&gt;
&lt;td&gt;경로에 따라 다름&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;브라질&lt;/td&gt;
&lt;td&gt;~€0.047&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;미국/캐나다는 별도의 이동통신사 요금(10DLC 등)이 추가됩니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  MMS
&lt;/h3&gt;

&lt;p&gt;MMS(사진 포함)는 SMS보다 3~5배 높은 비용이 발생합니다. 미국/캐나다 번호만 지원하며, 국가별 MMS 요금은 &lt;a href="https://bird.com/en/pricing/sms" rel="noopener noreferrer"&gt;bird.com/en/pricing/sms&lt;/a&gt;에서 확인하세요.&lt;/p&gt;

&lt;h3&gt;
  
  
  WhatsApp
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bird 처리 수수료&lt;/strong&gt; (1,000 메시지당):&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;볼륨&lt;/th&gt;
&lt;th&gt;1,000 메시지당&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1 ~ 1,000&lt;/td&gt;
&lt;td&gt;$0.001&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1,001 ~ 100,000&lt;/td&gt;
&lt;td&gt;$0.005&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;100,001 ~ 500,000&lt;/td&gt;
&lt;td&gt;$0.0045&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;500,001 이상&lt;/td&gt;
&lt;td&gt;$0.004&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Meta 통과 수수료&lt;/strong&gt; (미국 기준):

&lt;ul&gt;
&lt;li&gt;마케팅: $0.0250/대화&lt;/li&gt;
&lt;li&gt;유틸리티: $0.0034/대화&lt;/li&gt;
&lt;li&gt;인증: $0.0034/대화&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Meta 수수료는 마크업 없이 원가 통과됩니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  이메일
&lt;/h3&gt;

&lt;p&gt;API 등급 기준, 이메일은 $0.001/건부터 시작. Pro 요금제에는 월 10,000건 이메일이 포함됩니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  음성
&lt;/h3&gt;

&lt;p&gt;음성 API는 분당 $0.013~$0.015(미국 발신 기준). 수신은 더 저렴하며, 대량 요금은 별도 협의가 필요합니다.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bird 청구서에 영향을 미치는 요인
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;국가 및 이동통신사 라우팅&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
국가별 요금 차이가 큽니다(예: 미국 &amp;lt;$0.004, 독일 &amp;gt;€0.05). 발송 국가별 요금표를 반드시 확인하세요.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;번호 유형&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10DLC&lt;/strong&gt;: 표준 미국 번호, TCR 등록 필요&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;단문 코드&lt;/strong&gt;: 5~6자리, 월 $500~$1,000 임대료&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;수신자 부담 번호&lt;/strong&gt;: 월 $2~$3
번호 임대료는 별도 청구됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;메시지 길이/인코딩&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GSM-7: 160자/세그먼트, 초과 시 분할 과금&lt;/li&gt;
&lt;li&gt;유니코드: 70자/세그먼트
예) 200자 메시지 + 이모지 → 3개 세그먼트 과금&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;채널 혼합&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
SMS 실패 시 WhatsApp 등으로 대체하면 각각 요금이 추가됩니다. Flow Builder 자동화 사용 시 반드시 비용을 시뮬레이션하세요.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;볼륨&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
대량 발송자는 Enterprise 요금제에서 맞춤 할인 협상 가능.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  숨겨진 비용 및 수수료
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;미국 이동통신사 수수료(10DLC)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;브랜드 등록: $4~$44(1회)&lt;/li&gt;
&lt;li&gt;캠페인 등록: 약 $10/월(캠페인당)&lt;/li&gt;
&lt;li&gt;메시지당 추가 이동통신사 요금&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;전화번호 임대&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;장문 코드: 월 $1~$2&lt;/li&gt;
&lt;li&gt;수신자 부담 번호: 월 $2~$3&lt;/li&gt;
&lt;li&gt;단문 코드: 월 $500~$1,000&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;인바운드 SMS 및 웹훅 처리&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;미국 인바운드 SMS: $0.003/건&lt;/li&gt;
&lt;li&gt;옵트아웃/헬프 등 키워드 응답도 과금&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;플랫폼 구독&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pro 요금제: 월 $49(1,000건 SMS 포함)&lt;/li&gt;
&lt;li&gt;볼륨 초과 시 추가 과금&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  Bird와 다른 대안 비교
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;제공업체&lt;/th&gt;
&lt;th&gt;미국 발신 SMS&lt;/th&gt;
&lt;th&gt;미국 수신 SMS&lt;/th&gt;
&lt;th&gt;참고&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bird&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$0.00331&lt;/td&gt;
&lt;td&gt;$0.003&lt;/td&gt;
&lt;td&gt;가장 낮은 기본 요금&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Twilio&lt;/td&gt;
&lt;td&gt;$0.0079&lt;/td&gt;
&lt;td&gt;$0.0079&lt;/td&gt;
&lt;td&gt;높은 기본 요금, 생태계 강점&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Telnyx&lt;/td&gt;
&lt;td&gt;~$0.004&lt;/td&gt;
&lt;td&gt;~$0.001&lt;/td&gt;
&lt;td&gt;경쟁력, 이동통신사 직접 모델&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plivo&lt;/td&gt;
&lt;td&gt;$0.0055&lt;/td&gt;
&lt;td&gt;$0.0005&lt;/td&gt;
&lt;td&gt;더 낮은 수신 요금&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Bird는 발신 비용에서 가장 저렴하며, 옴니채널/자동화가 필요한 경우 최적입니다. 단순 SMS API만 원하면 Telnyx나 Plivo도 고려하세요.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bird 시작하기
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://bird.com" rel="noopener noreferrer"&gt;bird.com&lt;/a&gt;에서 &lt;strong&gt;무료 계정 생성&lt;/strong&gt; (하루 5건 무료 SMS, 신용카드 불필요)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;브랜드/캠페인 등록&lt;/strong&gt; (10DLC 규정 준수, 대시보드에서 신청, 1~3영업일 소요)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;전화번호 프로비저닝&lt;/strong&gt; (Numbers API 또는 대시보드 사용)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;첫 API 호출&lt;/strong&gt;
Bird는 REST API(JSON) 기반입니다.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.bird.com/v1/messages &lt;span class="se"&gt;\&lt;/span&gt;
     &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: AccessKey {YOUR_ACCESS_KEY}"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
     &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
     &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
         "originator": "+1XXXXXXX",
         "recipients": ["+1YYYYYYY"],
         "body": "Test message from Bird API."
      }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;인증/SDK/웹훅 등 Bird 공식 문서: &lt;a href="https://docs.bird.com" rel="noopener noreferrer"&gt;docs.bird.com&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  결론
&lt;/h2&gt;

&lt;p&gt;Bird SMS API는 미국 발신 메시지당 $0.00331로 업계 최저가를 제공합니다. 무료 요금제에서 신용카드 없이 바로 테스트 가능하며, Pro 요금제(월 $49)는 월 1,000건 SMS로 팀 스타트에 적합합니다.&lt;/p&gt;

&lt;p&gt;단, 미국 10DLC 이동통신사 수수료, 번호 임대료, 국가별 국제 요금 등 숨겨진 비용까지 명확히 산정해야 합니다. 초기에 비용 모델링에 포함시키세요.&lt;/p&gt;

&lt;p&gt;실제 통합 전 Apidog에서 Bird API 요청 빌딩, 테스트 시나리오, 응답 검증을 자동화하면 개발 효율이 높아집니다.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;미국에서 Bird SMS API 메시지당 가격은 얼마인가요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Bird는 미국 발신 SMS당 $0.00331, 수신 SMS당 $0.003을 청구합니다. 개발자 API 등급 기준이며, 10DLC 등 이동통신사 수수료는 별도입니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bird는 MessageBird와 같은 회사인가요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
네. MessageBird는 2023년에 Bird로 리브랜딩되었습니다. 2011년 네덜란드 설립, 글로벌 고객(Heineken, Uber 등)이 사용 중입니다. 문서상 일부 MessageBird 명칭이 남아있을 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bird는 수신 SMS에도 비용이 부과되나요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
네. 미국 수신 메시지당 $0.003이 발생합니다. 옵트아웃/도움말 응답 등도 포함됩니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bird 무료 요금제는 어떤가요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
하루 5건 SMS, 10건 이메일, 15건 AI 에이전트 메시지 포함. 신용카드 없이 API 테스트에 적합합니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bird SMS 가격은 Twilio와 비교해 어떤가요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Bird의 미국 발신 SMS($0.00331)는 Twilio($0.0079)보다 저렴합니다. 월 10만 건 기준 Bird는 $331, Twilio는 $790(대량 발송시 Twilio 할인 가능).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bird SMS에 숨겨진 수수료가 있나요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
통신사 등록, 캠페인 등록(약 $10/월), 메시지당 통신사 요금, 번호 임대료(월 $1~$2), 국제 메시지 고요금 등이 추가될 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;실제 메시지 없이 Bird SMS API를 테스트하려면?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Apidog의 Smart Mock 기능을 활용하면 API 응답을 시뮬레이션할 수 있습니다. 또한 Bird 샌드박스를 통해 본인 인증 번호로 테스트가 가능합니다. Apidog 테스트 시나리오로 실서비스에 영향 없이 검증하세요.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>트윌리오 SMS API 가격: 2026년 완벽 분석</title>
      <dc:creator>Rihpig</dc:creator>
      <pubDate>Fri, 03 Apr 2026 03:54:36 +0000</pubDate>
      <link>https://dev.to/rihpig/teuwilrio-sms-api-gagyeog-2026nyeon-wanbyeog-bunseog-4img</link>
      <guid>https://dev.to/rihpig/teuwilrio-sms-api-gagyeog-2026nyeon-wanbyeog-bunseog-4img</guid>
      <description>&lt;h2&gt;
  
  
  요약
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;미국 장거리 코드 SMS (발신 및 수신): &lt;strong&gt;메시지당 $0.0083&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;MMS 발신: &lt;strong&gt;메시지당 $0.022&lt;/strong&gt;; MMS 수신: &lt;strong&gt;메시지당 $0.0165&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;수신자 부담 SMS: &lt;strong&gt;메시지당 $0.0083&lt;/strong&gt; + 통신사 추가 요금&lt;/li&gt;
&lt;li&gt;단축 코드 임대료: 무작위 코드 월 &lt;strong&gt;$1,000&lt;/strong&gt;; 맞춤 코드 월 &lt;strong&gt;$1,500&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;10DLC 브랜드 등록: &lt;strong&gt;$4.50 일회성 요금&lt;/strong&gt; (2025년 8월 업데이트); 캠페인 &lt;strong&gt;월 $1.50 ~ $10&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;전화번호 (장거리 코드): &lt;strong&gt;월 $1.15&lt;/strong&gt;; 수신자 부담: &lt;strong&gt;월 $2.15&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;통신사 요금은 모든 기본 가격에 추가됨&lt;/li&gt;
&lt;li&gt;월 15만 메시지 이상 시 자동 볼륨 할인&lt;/li&gt;
&lt;li&gt;무료 체험 가능; 시작 시 신용카드 불필요&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;지금 Apidog를 체험해보세요&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  서론
&lt;/h2&gt;

&lt;p&gt;Twilio는 많은 개발팀에게 기본적인 SMS API로 자리잡았습니다. 문서가 잘 되어 있고, 가동 시간도 안정적이며, REST API도 깔끔하게 설계되어 있습니다. 하지만 사이드 프로젝트에서 실제 프로덕션 환경으로 넘어가면, 비용이 빠르게 증가합니다. 단순히 메시지당 요금만 내는 것이 아니라, Twilio 기본 요금, 통신사 수수료, 전화번호 요금, 10DLC 등록 비용까지 추가로 지불해야 합니다.&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Tip:&lt;/strong&gt; SMS 워크플로우를 프로덕션에 적용하기 전, Apidog를 사용해 Twilio 웹훅 응답이 OpenAPI 스펙에 맞는지 자동화 테스트로 검증하세요. 상태 코드, 응답 스키마, CI/CD 계약 테스트까지 Apidog 무료 체험으로 확인할 수 있습니다.&lt;/p&gt;

&lt;p&gt;이 글에서는 Twilio 가격 구조의 모든 요소를 분석합니다. 청구서를 키우는 요인, 놓치기 쉬운 부분, 그리고 Twilio가 다른 대안과 어떻게 비교되는지까지 실용적인 정보를 제공합니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  Twilio SMS 가격 개요
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.twilio.com/en-us/pricing/messaging" rel="noopener noreferrer"&gt;Twilio는 종량제(Pay-as-you-go) 가격 정책&lt;/a&gt;을 사용합니다. 메시지 세그먼트별, 전화번호별, 그리고 선택적 기능 및 등록 비용이 별도 청구됩니다. 약정 사용 할인을 별도로 협상하지 않는 한, 계약이나 최소 지출 의무는 없습니다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;미국 장거리 코드 SMS 기본 요금: 인바운드/아웃바운드 모두 &lt;strong&gt;세그먼트당 $0.0083&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;통신사 수수료, 번호 임대료, 10DLC 등록 비용이 추가됨&lt;/li&gt;
&lt;li&gt;월 15만 메시지 이상 시 자동 볼륨 할인(별도 협상 불필요)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  가격 분석: SMS, MMS, 수신자 부담, 단축 코드
&lt;/h2&gt;

&lt;h3&gt;
  
  
  장거리 코드 SMS (10자리 번호)
&lt;/h3&gt;

&lt;p&gt;장거리 코드는 미국에서 대부분의 A2P(애플리케이션-대-개인) 메시징에 사용됩니다.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;메시지 유형&lt;/th&gt;
&lt;th&gt;세그먼트당 가격&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SMS 발신&lt;/td&gt;
&lt;td&gt;$0.0083&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SMS 수신&lt;/td&gt;
&lt;td&gt;$0.0083&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MMS 발신&lt;/td&gt;
&lt;td&gt;$0.022&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MMS 수신&lt;/td&gt;
&lt;td&gt;$0.0165&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;중요:&lt;/strong&gt; Twilio는 메시지당이 아닌 &lt;strong&gt;세그먼트당&lt;/strong&gt; 요금을 청구합니다. GSM-7 기준 160자, 유니코드 포함 시 70자마다 1세그먼트로 계산됩니다. 예를 들어, 200자 일반 텍스트는 2세그먼트 비용이 발생합니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  수신자 부담 번호
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;SMS 인/아웃바운드: 세그먼트당 $0.0083&lt;/li&gt;
&lt;li&gt;MMS 발신: $0.022 / MMS 수신: $0.02&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;수신자 부담 번호는 대량 일방향 메시징에 적합하며 10DLC 등록이 필요 없어서 비용 절감 가능. 단, 최대 처리량을 위해 별도 인증 필요.&lt;/p&gt;

&lt;h3&gt;
  
  
  단축 코드 (5-6자리 번호)
&lt;/h3&gt;

&lt;p&gt;단축 코드는 대량/고속 캠페인에 사용됩니다. SMS 요금은 동일하지만 번호 임대료가 매우 높음.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;단축 코드 유형&lt;/th&gt;
&lt;th&gt;월별 비용&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;무작위 단축 코드&lt;/td&gt;
&lt;td&gt;월 $1,000 (분기 청구)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;맞춤 단축 코드&lt;/td&gt;
&lt;td&gt;월 $1,500 (분기 청구)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;자체 맞춤 단축 코드&lt;/td&gt;
&lt;td&gt;월 $500 (분기 청구)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;MMS 활성화 시 $500 일회성 요금 추가&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  볼륨 할인
&lt;/h3&gt;

&lt;p&gt;Twilio는 장거리 코드, 수신자 부담, 단축 코드 모두 자동 계층 볼륨 할인을 적용합니다.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;월별 메시지&lt;/th&gt;
&lt;th&gt;세그먼트당 가격&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1 ~ 150,000&lt;/td&gt;
&lt;td&gt;$0.0083&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;150,001 ~ 300,000&lt;/td&gt;
&lt;td&gt;$0.0081&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;300,001 ~ 500,000&lt;/td&gt;
&lt;td&gt;$0.0079&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;500,001 ~ 750,000&lt;/td&gt;
&lt;td&gt;$0.0077&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;750,001 ~ 1,000,000&lt;/td&gt;
&lt;td&gt;$0.0075&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1,000,001+&lt;/td&gt;
&lt;td&gt;$0.0073&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;볼륨은 번호 유형별로 분리되어 계산됩니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  Twilio 청구서에 영향을 미치는 요인
&lt;/h2&gt;

&lt;h3&gt;
  
  
  전화번호 유형
&lt;/h3&gt;

&lt;p&gt;발신 번호 유형에 따라 요금이 달라집니다. 장거리 코드, 수신자 부담, 단축 코드 각각 별도 볼륨 계층을 가짐.&lt;/p&gt;

&lt;h3&gt;
  
  
  메시지 세그먼트
&lt;/h3&gt;

&lt;p&gt;모든 메시지는 세그먼트 단위로 청구됩니다. 유니코드 문자, 긴 메시지는 세그먼트 수가 늘어나 총 비용이 증가합니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  통신사 수수료
&lt;/h3&gt;

&lt;p&gt;Twilio 기본 요금 외에, 미국 주요 통신사는 메시지당 자체 추가 수수료를 부과하며, Twilio는 이 비용을 그대로 전달합니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;장거리 코드 통신사 수수료 (SMS 발신):&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;통신사&lt;/th&gt;
&lt;th&gt;발신 수수료&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AT&amp;amp;T&lt;/td&gt;
&lt;td&gt;$0.0035&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;T-Mobile&lt;/td&gt;
&lt;td&gt;$0.0045&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Verizon&lt;/td&gt;
&lt;td&gt;$0.004&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;US Cellular&lt;/td&gt;
&lt;td&gt;$0.005&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;기타 모든 통신사&lt;/td&gt;
&lt;td&gt;$0.004&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;MMS는 AT&amp;amp;T $0.009, T-Mobile $0.01 추가.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;예시:&lt;/strong&gt; AT&amp;amp;T로 SMS 1건 발신 시, $0.0083(Twilio) + $0.0035(통신사) = &lt;strong&gt;$0.0118/세그먼트&lt;/strong&gt; → 기본 가격보다 42% 높음.&lt;/p&gt;

&lt;h3&gt;
  
  
  대상 국가
&lt;/h3&gt;

&lt;p&gt;국제 메시지 요금은 국가별로 상이. 예: 영국 $0.04, 인도 $0.0029, 브라질 $0.075 등.&lt;/p&gt;

&lt;h3&gt;
  
  
  10DLC 등록
&lt;/h3&gt;

&lt;p&gt;미국 A2P 10DLC 시스템은 기업이 브랜드 및 메시징 캠페인을 등록해야 하며, 미등록 트래픽은 필터링됩니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  숨겨진 비용 및 수수료
&lt;/h2&gt;

&lt;h3&gt;
  
  
  10DLC 등록 수수료
&lt;/h3&gt;

&lt;p&gt;2025년 8월 TCR 정책 업데이트로 가격이 변경됨.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;브랜드 등록:&lt;/strong&gt; 개인/소량 $4.50, 표준 $46 (일회성)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;캠페인 등록:&lt;/strong&gt; 심사 $15(일회성), 캠페인별 월 $1.50~$10&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;캠페인 유형&lt;/th&gt;
&lt;th&gt;월별 요금&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;개인 사업자&lt;/td&gt;
&lt;td&gt;$2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;소량 혼합&lt;/td&gt;
&lt;td&gt;$1.50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;표준&lt;/td&gt;
&lt;td&gt;$10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;자선단체/501(c)(3)&lt;/td&gt;
&lt;td&gt;$3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;긴급 서비스&lt;/td&gt;
&lt;td&gt;$5&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;표준 심사 $41.50, 이의제기 $11, Authentication Plus 재시도 $12.50/회&lt;/p&gt;

&lt;h3&gt;
  
  
  전화번호 수수료
&lt;/h3&gt;

&lt;p&gt;전화번호 유지 월별 요금: 장거리 코드 $1.15, 수신자 부담 $2.15&lt;br&gt;&lt;br&gt;
여러 번호 프로비저닝 시 누적 비용 주의&lt;/p&gt;
&lt;h3&gt;
  
  
  실패 메시지 처리 수수료
&lt;/h3&gt;

&lt;p&gt;"실패" 상태 메시지당 &lt;strong&gt;$0.001&lt;/strong&gt; 청구&lt;/p&gt;
&lt;h3&gt;
  
  
  선택적 기능 추가 요금
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Engagement Suite(링크 단축, 클릭 추적): 월 1,000건 무료, 이후 건당 $0.015&lt;/li&gt;
&lt;li&gt;Compliance Toolkit(AI 규정 준수): 건당 $0.015&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  지원 플랜
&lt;/h3&gt;

&lt;p&gt;무료 지원은 제한적. 유료 Developer 플랜 월 $250~, 엔터프라이즈는 그 이상&lt;/p&gt;
&lt;h2&gt;
  
  
  Twilio가 대안들과 비교되는 방식
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;공급자&lt;/th&gt;
&lt;th&gt;미국 SMS 발신&lt;/th&gt;
&lt;th&gt;미국 SMS 수신&lt;/th&gt;
&lt;th&gt;전화번호&lt;/th&gt;
&lt;th&gt;10DLC 필요 여부&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Twilio&lt;/td&gt;
&lt;td&gt;$0.0083 + 통신사 수수료&lt;/td&gt;
&lt;td&gt;$0.0083 + 통신사 수수료&lt;/td&gt;
&lt;td&gt;월 $1.15&lt;/td&gt;
&lt;td&gt;예&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plivo&lt;/td&gt;
&lt;td&gt;$0.005&lt;/td&gt;
&lt;td&gt;$0.00035&lt;/td&gt;
&lt;td&gt;월 $0.80&lt;/td&gt;
&lt;td&gt;예&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Telnyx&lt;/td&gt;
&lt;td&gt;$0.004&lt;/td&gt;
&lt;td&gt;$0.004&lt;/td&gt;
&lt;td&gt;월 $1.00&lt;/td&gt;
&lt;td&gt;예&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bird&lt;/td&gt;
&lt;td&gt;약 $0.007&lt;/td&gt;
&lt;td&gt;약 $0.007&lt;/td&gt;
&lt;td&gt;상이함&lt;/td&gt;
&lt;td&gt;예&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Plivo, Telnyx는 Twilio보다 발신/수신 요금이 저렴&lt;/li&gt;
&lt;li&gt;Twilio는 개발자 경험, 문서, 글로벌 커버리지, 생태계 통합에서 강점&lt;/li&gt;
&lt;li&gt;볼륨이 중요하다면 Plivo/Telnyx, 복잡한 기능/서드파티 연동이 필요하다면 Twilio 고려&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Twilio를 무료로 테스트하는 방법
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;신용카드 없이 무료 체험 계정 생성 가능&lt;/li&gt;
&lt;li&gt;체험 계정에 소량 크레딧 제공&lt;/li&gt;
&lt;li&gt;인증되지 않은 번호로 메시지 전송 시 "Sent from your Twilio trial account" 접두사 포함(유료 업그레이드시 제거)&lt;/li&gt;
&lt;li&gt;무료 체험으로 할 수 있는 것:

&lt;ul&gt;
&lt;li&gt;테스트 번호 프로비저닝&lt;/li&gt;
&lt;li&gt;API를 통한 SMS 송수신&lt;/li&gt;
&lt;li&gt;수신 웹훅 전달 테스트&lt;/li&gt;
&lt;li&gt;콘솔 및 사용 로그 탐색&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;업그레이드 후에는 종량제, 월 최소 요금 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Apidog로 Twilio SMS 통합을 테스트하는 방법
&lt;/h2&gt;

&lt;p&gt;Twilio 자격 증명과 웹훅을 설정했다면, 자동화된 테스트로 통합 안정성을 검증해야 합니다. 수동 메시지 전송은 확장성과 신뢰성이 떨어집니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgcuec6nm1uksjpraul5p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgcuec6nm1uksjpraul5p.png" alt="Apidog 테스트 시나리오" width="800" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apidog 테스트 시나리오&lt;/strong&gt; 활용법:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Twilio 웹훅 엔드포인트 OpenAPI 스펙을 테스트 시나리오로 가져오기&lt;/li&gt;
&lt;li&gt;SMS 발송, 전송 콜백 수신, 인바운드 회신 등 단계별 플로우 추가&lt;/li&gt;
&lt;li&gt;오케스트레이션 모드로 단계 순서 지정 및 연속 실행&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;{{$.stepId.response.body.field}}&lt;/code&gt; 구문으로 단계별 데이터(예: 메시지 SID) 연결&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;예시 코드 스니펫:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"to"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"+1XXXXXXXXXX"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"from"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"+1YYYYYYYYYY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"body"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"테스트 메시지"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;이후, 전송 결과에서 SID를 받아 다음 단계에서 활용.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;계약 테스트&lt;/strong&gt;까지 적용하려면:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OpenAPI 스펙에 웹훅 페이로드 스키마 정의&lt;/li&gt;
&lt;li&gt;Apidog에서 응답 유효성 자동 검사(상태 코드, 필수 필드, 데이터 타입, 추가 필드 없음 등)&lt;/li&gt;
&lt;li&gt;테스트/디버그/자동화 단계 모두에서 스키마 일치 여부 자동 검증&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;시작 방법:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog 무료 다운로드&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Twilio API 스펙 가져오기 또는 웹훅 스키마 정의&lt;/li&gt;
&lt;li&gt;실제 SMS 워크플로우를 반영한 테스트 시나리오 생성 및 실행&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  결론
&lt;/h2&gt;

&lt;p&gt;Twilio SMS API 가격은 미국 장거리 코드 기준 세그먼트당 $0.0083에서 시작하지만, 실제 메시지 비용에는 통신사 수수료, 번호 임대료, 10DLC 등록 등이 반드시 포함됩니다. 예를 들어 AT&amp;amp;T 발신은 세그먼트당 약 $0.0118이 됩니다. 표준 10DLC 캠페인 사용 시 월 $10이 추가됩니다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;가격 구조는 투명하며 할인은 자동 적용&lt;/li&gt;
&lt;li&gt;볼륨, 메시지 세그먼트, 통신사 수수료, 번호, 등록 비용 등 모든 요소를 합산해 모델링 필요&lt;/li&gt;
&lt;li&gt;통합을 구축했다면 Apidog의 테스트 시나리오와 계약 테스트로 Twilio 웹훅 흐름 및 API 응답 일치 여부를 자동화 검증할 수 있음&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  자주 묻는 질문
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: Twilio에서 미국 발신 SMS의 기본 가격은 얼마인가요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: 장거리 코드 발신 SMS는 세그먼트당 $0.0083(기본) + 통신사 수수료(AT&amp;amp;T $0.0035 등)로, AT&amp;amp;T 발신 실제 비용은 $0.0118/세그먼트입니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Twilio는 수신 SMS에 대해 요금을 부과하나요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: 예. 장거리 코드/수신자 부담 번호 모두 수신 SMS 세그먼트당 $0.0083 청구. 발신 통신사에 따라 추가 수수료 발생 가능.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: 10DLC는 무엇이며, 비용이 있나요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: 10DLC는 미국 10자리 장거리 코드 A2P 메시징 등록 시스템입니다. 브랜드 등록 $4.50(일회성), 캠페인당 월 $1.50~$10 필요.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Twilio 단축 코드 비용은?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: 무작위 단축 코드 월 $1,000, 맞춤 단축 코드 월 $1,500(분기 청구). MMS 활성화시 $500 일회성 추가. SMS 요율은 $0.0083/건.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: 볼륨 할인이 있나요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: 예, 번호 유형별 월 15만건 초과 시 자동 할인이 적용되며, 100만건 이상은 $0.0073까지 내려감.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Twilio 무료 체험이 있나요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: 예. 신용카드 없이 무료 체험계정 생성, 크레딧 제공, 업그레이드 전에는 발신 메시지에 접두사 포함.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: 저렴한 Twilio 대안은?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: Plivo(발신 $0.005, 수신 $0.00035), Telnyx(발신/수신 $0.004)가 있음. 기능 및 문서 품질은 Twilio가 우위.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;실제 요금 모델링, 자동화된 테스트, 비용 최적화까지, Twilio SMS API를 제대로 활용하려면 위 내용을 실전으로 적용해보세요.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgcuec6nm1uksjpraul5p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgcuec6nm1uksjpraul5p.png" alt="Apidog 테스트 시나리오" width="800" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Vonage SMS API 가격: 2026년 요금 안내</title>
      <dc:creator>Rihpig</dc:creator>
      <pubDate>Fri, 03 Apr 2026 03:49:19 +0000</pubDate>
      <link>https://dev.to/rihpig/vonage-sms-api-gagyeog-2026nyeon-yogeum-annae-1lkg</link>
      <guid>https://dev.to/rihpig/vonage-sms-api-gagyeog-2026nyeon-yogeum-annae-1lkg</guid>
      <description>&lt;h2&gt;
  
  
  요약 (TL;DR)
&lt;/h2&gt;

&lt;p&gt;미국에서 Vonage SMS API 요금은 &lt;strong&gt;발신 메시지당 $0.00809&lt;/strong&gt;, &lt;strong&gt;수신 메시지당 $0.00649&lt;/strong&gt;부터 시작합니다. 월 최소 요금이 없으므로, 보내고 받는 만큼만 지불합니다. 국제 요금은 국가별로 다르며 일부 시장에서는 메시지당 $1.00를 초과할 수 있습니다. Vonage SMS 통합 기능을 구축하거나 테스트하는 경우, Apidog를 사용하면 코드를 출시하기 전에 테스트 요청을 쉽게 보내고, 응답을 검증하며, 오류를 포착할 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;오늘 Apidog를 무료로 체험해 보세요&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  소개
&lt;/h2&gt;

&lt;p&gt;Nexmo에 대해 들어본 적이 있다면 이미 Vonage를 아실 겁니다. 2016년, Vonage는 개발자 중심의 SMS 및 통신 API 플랫폼인 Nexmo를 인수했습니다. Nexmo 브랜드는 개발자들 사이에서 수년 동안 유지되었으며, &lt;code&gt;developer.vonage.com&lt;/code&gt; (이전 nexmo.com/developers)이 기술 허브 역할을 하는 것을 여전히 볼 수 있습니다. 2022년, Ericsson은 Vonage 인수를 완료하여 글로벌 통신 강자로 편입시켰지만, API 사업을 위해 Vonage 브랜드를 그대로 유지했습니다.&lt;/p&gt;

&lt;p&gt;오늘날 Vonage는 10만 개 이상의 기업에 서비스를 제공하며, 160만 명의 등록된 개발자가 API를 기반으로 구축하고 있습니다. 이는 사용한 만큼만 지불하는(pay-as-you-go) 요금 모델, 약정 없는 계약, 190개 이상의 국가를 포괄하는 성숙한 플랫폼입니다.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;팁:&lt;/strong&gt; 통합 작업을 더 진행하기 전에, 강력한 API 테스트 도구가 필요하다면 &lt;strong&gt;Apidog&lt;/strong&gt;를 활용하세요. Vonage SMS 요청 테스트, 응답 스키마 검증, 여러 API 호출 워크플로 자동화까지 모두 무료로 시작할 수 있습니다(신용카드 불필요).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Vonage SMS 요금 개요
&lt;/h2&gt;

&lt;p&gt;Vonage는 SMS API에 대해 종량제 모델을 제공합니다. 시작 시 플랫폼 수수료나 월 구독료가 없으며, 메시지당 요금을 지불합니다. 요금은 국가, 번호 유형에 따라 달라집니다.&lt;/p&gt;

&lt;p&gt;미국 주요 요금은 다음과 같습니다:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;메시지 유형&lt;/th&gt;
&lt;th&gt;메시지당 가격&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;발신 SMS (미국 LVN)&lt;/td&gt;
&lt;td&gt;$0.00809&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;수신 SMS (미국 LVN)&lt;/td&gt;
&lt;td&gt;$0.00649&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;발신 SMS (미국 수신자 부담)&lt;/td&gt;
&lt;td&gt;영업팀에 문의&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;수신 SMS (미국 수신자 부담)&lt;/td&gt;
&lt;td&gt;무료&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;LVN&lt;/strong&gt;(Local Virtual Number): Vonage의 표준 10DLC(10자리 장문 코드) 번호를 의미합니다.&lt;/li&gt;
&lt;li&gt;국가별, 번호 유형별 요율은 Vonage 대시보드에서 실시간으로 확인 및 Excel 요금표 다운로드 가능.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  요금 세부 정보: 발신, 수신, MMS, WhatsApp
&lt;/h2&gt;

&lt;h3&gt;
  
  
  발신 SMS
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;발신 메시지는 앱에서 최종 사용자에게 전송됩니다.&lt;/li&gt;
&lt;li&gt;미국 LVN 사용 시 &lt;strong&gt;$0.00809&lt;/strong&gt;/메시지(2026년 초 기준).&lt;/li&gt;
&lt;li&gt;공식 대시보드에서 최신 요율을 반드시 확인.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  수신 SMS
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Vonage 번호로 수신되는 메시지는 &lt;strong&gt;$0.00649&lt;/strong&gt;/메시지(미국 LVN).&lt;/li&gt;
&lt;li&gt;일부 수신자 부담 번호는 무료 수신 가능(계정별 확인 필요).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  MMS 요금
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;MMS는 Vonage Messages API로 지원되나, 요금은 공개되지 않음.&lt;/li&gt;
&lt;li&gt;시장/통신사별로 달라지므로 영업팀에 문의 필요.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Vonage를 통한 WhatsApp
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Meta(WhatsApp) 요금과 별도의 Vonage 플랫폼 수수료가 존재:

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;WhatsApp 수수료:&lt;/strong&gt; Meta 기준, 대화 카테고리별 상이(마케팅/인증 등). &lt;a href="https://www.whatsapp.com/business/pricing" rel="noopener noreferrer"&gt;Meta WhatsApp 요금 참고&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vonage 플랫폼 수수료:&lt;/strong&gt; 메시지당 $0.00015부터, 카테고리/볼륨에 따라 변동.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Facebook Messenger
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Messages API 이용 시 &lt;strong&gt;$0.0011/메시지&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  RCS (Rich Communication Service)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;미국 내 이동통신사별 요율:&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;이동통신사&lt;/th&gt;
&lt;th&gt;RCS 리치(텍스트)&lt;/th&gt;
&lt;th&gt;RCS 리치 미디어&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;T-Mobile&lt;/td&gt;
&lt;td&gt;$0.00620&lt;/td&gt;
&lt;td&gt;$0.01250&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Verizon&lt;/td&gt;
&lt;td&gt;$0.00400&lt;/td&gt;
&lt;td&gt;$0.00600&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AT&amp;amp;T&lt;/td&gt;
&lt;td&gt;$0.00450&lt;/td&gt;
&lt;td&gt;$0.01000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;US Cellular&lt;/td&gt;
&lt;td&gt;$0.00620&lt;/td&gt;
&lt;td&gt;$0.01350&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;RCS 국가당 &lt;strong&gt;$600&lt;/strong&gt; 일회성 설정 수수료 추가.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Vonage 청구서에 영향을 미치는 요인
&lt;/h2&gt;

&lt;p&gt;월별 비용을 결정하는 주요 변수:&lt;/p&gt;

&lt;h3&gt;
  
  
  목적지 국가
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;국가별 요금 차이 큼(미국 &amp;lt; $0.01, 일부 아프리카/동남아 $0.50+).&lt;/li&gt;
&lt;li&gt;글로벌 요금표 확인 필수.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  번호 유형
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;장문 코드(10DLC):&lt;/strong&gt; 표준, 저렴.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;수신자 부담 번호:&lt;/strong&gt; A2P 캠페인용, 수신 무료 빈번.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;단문 코드:&lt;/strong&gt; 대량 발송용, 등록 필요, 대여료 높음.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  번호 대여료
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;미국 LVN은 월 몇 달러부터 시작.&lt;/li&gt;
&lt;li&gt;수신자 부담/단문 코드는 더 비싸며, 메시지당 요금 외 추가.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  메시지 인코딩
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;표준 SMS: GSM-7(160자).&lt;/li&gt;
&lt;li&gt;유니코드(이모티콘 등) 포함 시 70자/1SMS로 계산, 장문은 여러 SMS로 나뉨.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  이동통신사 할증료
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;미국 통신사들은 10DLC 등에서 별도 할증료 부과, Vonage가 그대로 전달함.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  주의해야 할 숨겨진 비용
&lt;/h2&gt;

&lt;h3&gt;
  
  
  지원 등급
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;무료: 커뮤니티/문서.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;프리미엄(24/7, 전담 관리자): $3,300/월&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  애드온 API
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;애드온&lt;/th&gt;
&lt;th&gt;월별 비용&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Audit API&lt;/td&gt;
&lt;td&gt;$550/월&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;자동 교정(PII 제거)&lt;/td&gt;
&lt;td&gt;$1,100/월&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reports API&lt;/td&gt;
&lt;td&gt;$495/월(또는 CDR당 $0.00049)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Audit API: 규제 준수 용도.&lt;/li&gt;
&lt;li&gt;자동 교정: 로그 내 PII 자동 제거.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Verify API 비용
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;성공 인증당 $0.0572&lt;/strong&gt; (실패/시도별 메시징 요금 별도).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  번호 등록(미국 10DLC)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;TCR 등록 필수(브랜드 일회성/캠페인 월별 수수료).&lt;/li&gt;
&lt;li&gt;미등록 시 메시지 필터링 위험.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Vonage 대(對) 대안
&lt;/h2&gt;

&lt;p&gt;미국 SMS 주요 제공업체 비교:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;제공업체&lt;/th&gt;
&lt;th&gt;미국 발신 SMS&lt;/th&gt;
&lt;th&gt;미국 수신 SMS&lt;/th&gt;
&lt;th&gt;무료 체험&lt;/th&gt;
&lt;th&gt;지원&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Vonage&lt;/td&gt;
&lt;td&gt;$0.00809&lt;/td&gt;
&lt;td&gt;$0.00649&lt;/td&gt;
&lt;td&gt;예(인증 번호만)&lt;/td&gt;
&lt;td&gt;유료 등급, 24/7 월 $3,300&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Twilio&lt;/td&gt;
&lt;td&gt;$0.0079&lt;/td&gt;
&lt;td&gt;$0.0075&lt;/td&gt;
&lt;td&gt;예($15 크레딧)&lt;/td&gt;
&lt;td&gt;유료 $250/월~&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plivo&lt;/td&gt;
&lt;td&gt;$0.0055&lt;/td&gt;
&lt;td&gt;$0.0005&lt;/td&gt;
&lt;td&gt;예&lt;/td&gt;
&lt;td&gt;무료 기본, 유료 옵션&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Telnyx&lt;/td&gt;
&lt;td&gt;$0.004&lt;/td&gt;
&lt;td&gt;$0.002&lt;/td&gt;
&lt;td&gt;예($5 크레딧)&lt;/td&gt;
&lt;td&gt;무료 이메일, 유료 전화&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Telnyx: 저렴하지만 신생 플랫폼.&lt;/li&gt;
&lt;li&gt;Plivo: 수신 요금 저렴, 개발자 평판 높음.&lt;/li&gt;
&lt;li&gt;Twilio: 생태계/문서/통합 강점.&lt;/li&gt;
&lt;li&gt;Vonage: 가격 중간, 통신사급 네트워크 제공.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Vonage 무료로 체험하는 방법
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.vonage.com/communications-apis/pricing/" rel="noopener noreferrer"&gt;Vonage 무료 체험 계정&lt;/a&gt;을 빠르게 시작할 수 있습니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  얻을 수 있는 것
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;테스트용 Vonage 가상 번호&lt;/li&gt;
&lt;li&gt;즉시 발급되는 API Key, Secret&lt;/li&gt;
&lt;li&gt;전체 문서/SDK 접근&lt;/li&gt;
&lt;li&gt;제한된 테스트 크레딧&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  제한되는 사항
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;체험 계정은 인증된 전화번호로만 메시지 발신 가능(사기 방지).&lt;/li&gt;
&lt;li&gt;유료 전환 전 임의 번호 발신 불가.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  시작 방법 (Step-by-step)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://dashboard.nexmo.com" rel="noopener noreferrer"&gt;dashboard.nexmo.com&lt;/a&gt; 또는 &lt;a href="https://www.vonage.com/communications-apis/" rel="noopener noreferrer"&gt;vonage.com/communications-apis&lt;/a&gt; 접속&lt;/li&gt;
&lt;li&gt;이메일로 무료 계정 생성&lt;/li&gt;
&lt;li&gt;전화번호 인증&lt;/li&gt;
&lt;li&gt;대시보드에서 API Key/Secret 획득&lt;/li&gt;
&lt;li&gt;REST API 또는 공식 SDK(Node.js, Python, PHP, Ruby, Java, .NET, Go) 활용해 첫 API 호출 실행&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ueumbyjp6vt2xicifxk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ueumbyjp6vt2xicifxk.png" alt="API 키와 API 시크릿이 강조 표시된 Vonage 대시보드" width="800" height="493"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Apidog로 Vonage SMS 통합을 테스트하는 방법
&lt;/h2&gt;

&lt;p&gt;API Key와 Secret이 준비되었다면, Apidog로 실제 메시지 전송 전 자동화 테스트를 구축할 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi04oh5iormtlr02zuvt3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi04oh5iormtlr02zuvt3.png" alt="여러 API 요청과 어설션을 보여주는 Apidog 테스트 시나리오 빌더" width="800" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  테스트 시나리오 구성 절차
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Apidog 테스트 모듈&lt;/strong&gt;에서 새 시나리오 생성&lt;/li&gt;
&lt;li&gt;단계 추가 방식:

&lt;ul&gt;
&lt;li&gt;OpenAPI 스펙으로 Vonage 엔드포인트 가져오기&lt;/li&gt;
&lt;li&gt;REST API 엔드포인트 직접 요청 추가&lt;/li&gt;
&lt;li&gt;Vonage 문서의 cURL 명령 복사 후 자동 변환&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;예시: Vonage SMS 발송 요청(&lt;code&gt;https://rest.nexmo.com/sms/json&lt;/code&gt;)에 API Key, Secret, 발신자, 수신자, 메시지 본문 입력&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  응답 검증
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Apidog는 응답 스키마 자동 체크 지원. Vonage SMS API 성공 응답 구조는 다음과 유사:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"messages"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"message-id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"xxxxxxxxx"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;기타&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;필드&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;테스트 어설션 예시:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTTP 상태 코드 &lt;code&gt;200&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;messages[0].status === "0"&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;messages[0].message-id&lt;/code&gt; 값 존재&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;실패(예: status 1, 2, 4 등) 시 테스트가 빨간색으로 표시되며, 즉시 응답 본문 확인 가능.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  요청 간 데이터 전달
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Apidog의 &lt;code&gt;{{$.stepId.response.body.field}}&lt;/code&gt; 문법으로 &lt;code&gt;message-id&lt;/code&gt; 등 응답값을 다음 요청에 자동 전달 가능.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  CI/CD 자동화
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Apidog는 GitHub Actions, GitLab CI, Jenkins 연동 지원.&lt;/li&gt;
&lt;li&gt;테스트 시나리오를 CLI로 내보내고 풀리퀘스트마다 실행, SMS 통합 회귀 방지에 최적.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog.com에서 무료로 시작하세요&lt;/a&gt;. 신용카드 불필요.&lt;/p&gt;

&lt;h2&gt;
  
  
  결론
&lt;/h2&gt;

&lt;p&gt;Vonage SMS API는 월별 최소 요금 없이 종량제로 운영됩니다. 미국 기준 발신 $0.00809, 수신 $0.00649/메시지. 비용은 국가, 번호, 인코딩에 따라 달라지며, Audit API, 자동 교정, 24/7 지원 등은 별도 월 비용이 추가됩니다.&lt;/p&gt;

&lt;p&gt;대안으로 Telnyx, Plivo는 저렴하며, Twilio는 생태계가 넓습니다. Vonage는 Ericsson 지원의 글로벌 안정성이 필요할 때 적합합니다.&lt;/p&gt;

&lt;p&gt;라이브 전환 전 Apidog로 Vonage 메시지 흐름 자동 테스트를 구축해, 모든 응답을 검증하고 개발 단계에서 오류를 사전에 방지하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  자주 묻는 질문 (FAQ)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Vonage는 Nexmo와 동일한가요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
네. Vonage는 2016년에 Nexmo를 인수했습니다. 개발자 플랫폼은 여전히 &lt;code&gt;developer.vonage.com&lt;/code&gt;에서 접근할 수 있으며, 많은 레거시 통합은 &lt;code&gt;rest.nexmo.com&lt;/code&gt;을 API 엔드포인트로 사용합니다. 이제 두 브랜드는 동일한 제품을 지칭합니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vonage는 SMS에 대해 월별 요금을 부과하나요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
SMS API 자체에는 월별 플랫폼 요금이 없습니다. 보내고 받는 메시지당 요금과 사용하는 가상 번호에 대한 번호 대여료를 지불합니다. Audit API 및 자동 교정과 같은 선택적 애드온에는 월별 요금이 부과됩니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vonage 전화번호는 얼마인가요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
미국 지역 가상 번호(장문 코드)는 월 몇 달러부터 시작합니다. 수신자 부담 번호와 단문 코드는 더 비쌉니다. 해당 국가의 현재 번호 대여 요금은 Vonage 대시보드에서 확인하세요.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vonage SMS는 어떤 국가를 지원하나요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Vonage는 190개 이상의 국가에서 SMS를 지원합니다. 요율은 크게 다릅니다. 이동통신사 관계가 제한적인 일부 국가는 메시지당 $0.50 이상이 들 수 있습니다. 전체 내역은 Vonage 대시보드에서 글로벌 요금표를 다운로드하세요.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vonage는 대량 할인(볼륨 할인)을 제공하나요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
네. Vonage는 대량 발신자를 위한 맞춤형 요금을 제공합니다. 월별 메시지 양이 많은 경우, 영업팀에 문의하여 맞춤 요율을 협상하세요. 맞춤 계약이 있기 전까지는 기본 종량제 요율이 적용됩니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;무료로 수신 SMS를 받을 수 있나요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
미국 수신자 부담 번호는 종종 무료로 수신 SMS를 받습니다. 장문 코드 번호는 미국에서 수신 메시지당 $0.00649를 부과합니다. 수신 요금은 국가별로 다르므로, 대상 시장의 요금표를 확인하세요.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vonage는 SMS 부문에서 Twilio와 어떻게 비교되나요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Vonage의 미국 발신 요율($0.00809)은 Twilio($0.0079)보다 약간 높습니다. Twilio는 더 큰 개발자 생태계와 더 많은 타사 통합을 가지고 있습니다. Vonage는 Ericsson을 통한 이동통신사 수준의 네트워크 관계에서 차별화되며, 특정 국제 시장에서 경쟁력 있는 가격을 제공하는 경향이 있습니다. 순수한 미국 A2P 메시징의 경우, 가격 차이가 충분히 작아서 개발자 경험과 지원 품질이 최종 결정을 이끄는 경우가 많습니다.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Cursor 3, API 개발자에게 어떤 의미일까요?</title>
      <dc:creator>Rihpig</dc:creator>
      <pubDate>Fri, 03 Apr 2026 03:44:14 +0000</pubDate>
      <link>https://dev.to/rihpig/cursor-3-api-gaebaljaege-eoddeon-yimiilggayo-g7k</link>
      <guid>https://dev.to/rihpig/cursor-3-api-gaebaljaege-eoddeon-yimiilggayo-g7k</guid>
      <description>&lt;p&gt;&lt;strong&gt;요약:&lt;/strong&gt; Cursor 3는 2026년 4월 2일 출시된 IDE 혁신 버전으로, 에이전트 중심의 작업 공간과 병렬 실행, 구조화된 MCP 도구 출력, 클라우드-로컬 핸드오프 등 API 개발 생산성을 극대화하는 주요 기능을 제공합니다. 특히 Apidog의 MCP 서버와 연동하면, AI 에이전트가 라이브 API 사양을 직접 읽고 스키마 기반 코드를 자동 생성할 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;지금 Apidog을 사용해보세요&lt;/a&gt;
&lt;/p&gt;

&lt;h2 id="%EC%9D%B4%EB%AF%B8-%EC%98%88%EA%B2%AC%EB%90%98%EC%97%88%EB%8D%98-%EB%B3%80%ED%99%94"&gt;이미 예견되었던 변화&lt;/h2&gt;

&lt;p&gt;AI 코드 에디터는 지난 2년간 빠르게 발전해왔지만, Cursor 3는 단순한 업데이트가 아닙니다. 개발 환경의 핵심을 에디터 중심에서 에이전트 중심으로 완전히 재설계했습니다.&lt;/p&gt;

&lt;p&gt;이전에는 파일을 열고, 에이전트에게 한 번씩 요청하고, 직접 변경사항을 검토해야 했습니다. 이제는 브라우저 탭처럼 여러 에이전트를 동시에 실행하고, 병렬로 작업하며, 가장 적합한 결과를 선택할 수 있습니다.&lt;/p&gt;

&lt;p&gt;API 개발은 스펙 관리, 테스트, 문서화, 스키마 일치 등 여러 작업을 병렬로 수행해야 하므로 Cursor 3의 변화가 특히 실질적입니다.&lt;/p&gt;

&lt;p&gt;💡Cursor 3는 API 사양을 직접 알지 못합니다. Apidog MCP 서버와 연결하면, 에이전트가 OpenAPI 스키마, 엔드포인트, 테스트 시나리오를 실시간으로 읽어와 정확한 스키마 기반 코드를 생성할 수 있습니다.&lt;/p&gt;

&lt;p&gt;아래에서는 Cursor 3의 주요 업데이트, API 개발에 미치는 영향, 그리고 Apidog MCP 서버와 연결하여 바로 적용할 수 있는 워크플로우를 단계별로 안내합니다.&lt;/p&gt;

&lt;h2 id="cursor-3%EC%9D%98-%EC%83%88%EB%A1%9C%EC%9A%B4-%EA%B8%B0%EB%8A%A5"&gt;Cursor 3의 새로운 기능&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://cursor.com/blog/cursor-3" rel="noopener noreferrer"&gt;Cursor 3&lt;/a&gt;의 주요 변화와 API 개발자를 위한 핵심 기능을 실전 관점에서 살펴봅니다.&lt;/p&gt;

&lt;h3 id="%EC%97%90%EC%9D%B4%EC%A0%84%ED%8A%B8-%EC%B0%BD"&gt;에이전트 창&lt;/h3&gt;

&lt;p&gt;에이전트 창은 에디터 중심 레이아웃을 대체하며, 여러 리포지토리와 환경(로컬, Git 워크트리, 원격 머신, 클라우드)에서 에이전트를 병렬로 실행할 수 있습니다.&lt;/p&gt;

&lt;p&gt;실행: &lt;code&gt;Cmd+Shift+P -&amp;gt; Agents Window&lt;/code&gt;로 진입. 에디터와 에이전트 창 간 자유 전환 가능.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-59.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-59.png" alt="" width="800" height="466"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;활용 예시:&lt;/strong&gt; 한 에이전트가 라이브러리 버그를 수정하는 동안, 다른 에이전트는 새로운 API 엔드포인트를 스캐폴딩하도록 각각 병렬로 작업시킬 수 있습니다. 각 에이전트의 진행 상황을 실시간 모니터링하고, 필요시 중간 개입 및 최종 승인만 하면 됩니다.&lt;/p&gt;

&lt;h3 id="%EB%94%94%EC%9E%90%EC%9D%B8-%EB%AA%A8%EB%93%9C"&gt;디자인 모드&lt;/h3&gt;

&lt;p&gt;디자인 모드에서는 브라우저 UI에서 직접 요소를 선택, 강조, 주석 달기가 가능합니다. 복잡한 UI 설명 없이도 에이전트 컨텍스트로 전달할 수 있습니다.&lt;/p&gt;

&lt;p&gt;주요 단축키:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Cmd+Shift+D&lt;/code&gt;: 디자인 모드 토글&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Shift+drag&lt;/code&gt;: 영역 선택&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Cmd+L&lt;/code&gt;: 요소를 채팅에 추가&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-60.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-60.png" alt="" width="800" height="466"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id="mcp-%EC%95%B1-%EA%B5%AC%EC%A1%B0%ED%99%94%EB%90%9C-%EC%BD%98%ED%85%90%EC%B8%A0-%EC%B6%9C%EB%A0%A5"&gt;MCP 앱: 구조화된 콘텐츠 출력&lt;/h3&gt;

&lt;p&gt;Cursor 3의 MCP 서버 도구 출력은 이제 구조화된 데이터 반환을 지원합니다. 즉, Apidog MCP 서버에서 엔드포인트, 스키마, 테스트 결과 등 API 정보를 깔끔한 데이터 객체로 에이전트에 제공합니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-61.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-61.png" alt="" width="800" height="524"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;실제 스키마 데이터가 즉시 활용되므로, 에이전트가 추측 대신 명확한 타입 정보를 기반으로 코드를 생성할 수 있습니다.&lt;/p&gt;

&lt;h3 id="%EC%9B%8C%ED%81%AC%ED%8A%B8%EB%A6%AC-best-of-n-%EB%B0%8F-%EA%B2%A9%EB%A6%AC"&gt;워크트리, /best-of-n, 격리&lt;/h3&gt;

&lt;p&gt;
&lt;code&gt;/worktree&lt;/code&gt;: 격리된 Git 워크트리에서 안전하게 실험 및 대체 구현 가능.&lt;br&gt;
&lt;code&gt;/best-of-n&lt;/code&gt;: 여러 모델(GPT-4o, Claude, Gemini 등)로 같은 작업을 병렬 실행, 각자 독립 워크트리에서 결과 비교 후 최적안 채택.
&lt;/p&gt;

&lt;h3 id="%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EB%A1%9C%EC%BB%AC-%ED%95%B8%EB%93%9C%EC%98%A4%ED%94%84"&gt;클라우드-로컬 핸드오프&lt;/h3&gt;

&lt;p&gt;클라우드와 로컬 환경을 오가며 작업 실행이 가능합니다. 예를 들어, 클라우드에서 장기 작업을 시작하고, 필요시 로컬로 가져와 테스트할 수 있습니다.&lt;/p&gt;

&lt;h2 id="api-%EA%B0%9C%EB%B0%9C%EC%97%90-%EB%AF%B8%EC%B9%98%EB%8A%94-%EC%98%81%ED%96%A5"&gt;API 개발에 미치는 영향&lt;/h2&gt;

&lt;p&gt;API 개발은 스펙, 클라이언트, 에디터, 터미널, 문서 도구 등 다양한 컨텍스트 전환이 빈번합니다. Cursor 3와 MCP 연동은 이 복잡함을 크게 줄입니다.&lt;/p&gt;

&lt;h3 id="%EB%B3%91%EB%A0%AC-%EC%97%94%EB%93%9C%ED%8F%AC%EC%9D%B8%ED%8A%B8-%EA%B0%9C%EB%B0%9C"&gt;병렬 엔드포인트 개발&lt;/h3&gt;

&lt;p&gt;여러 엔드포인트를 각각 별도의 에이전트 인스턴스에 설명해 한번에 병렬 생성 및 검토가 가능합니다. 검사가 통과한 결과만 병합하고, 불합격 결과는 폐기하세요.&lt;/p&gt;

&lt;h3 id="%EC%8A%A4%ED%82%A4%EB%A7%88-%EC%9D%B8%EC%8B%9D-%EC%BD%94%EB%93%9C-%EC%83%9D%EC%84%B1"&gt;스키마 인식 코드 생성&lt;/h3&gt;

&lt;p&gt;에이전트가 OpenAPI 사양에 직접 접근하여, 실제 데이터 구조에 맞는 코드(예: Node.js/Express 핸들러, TypeScript 인터페이스 등)를 자동 생성합니다. 추측이 아닌 실시간 사양 기반 코드가 곧바로 나옵니다.&lt;/p&gt;

&lt;h3 id="%EC%97%90%EB%94%94%ED%84%B0-%EB%82%B4-%EA%B3%84%EC%95%BD-%ED%85%8C%EC%8A%A4%ED%8A%B8"&gt;에디터 내 계약 테스트&lt;/h3&gt;

&lt;p&gt;에이전트는 터미널 명령 실행을 지원하므로, Apidog CLI와 통합해 코드 생성 후 즉시 테스트 시나리오를 자동 실행할 수 있습니다.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;apidog run --scenario &amp;lt;test-id&amp;gt; --env &amp;lt;env&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;테스트 결과가 실패하면 에이전트가 자동으로 수정 루프에 진입합니다.&lt;/p&gt;

&lt;h3 id="%ED%95%AD%EC%83%81-%EC%B5%9C%EC%8B%A0-%EC%83%81%ED%83%9C%EB%A5%BC-%EC%9C%A0%EC%A7%80%ED%95%98%EB%8A%94-%EB%AC%B8%EC%84%9C"&gt;항상 최신 상태를 유지하는 문서&lt;/h3&gt;

&lt;p&gt;에이전트가 API 문서와 코드의 불일치를 자동 감지하고, 실시간으로 수정 제안을 제공합니다. 반복적인 문서 동기화 작업이 자동화됩니다.&lt;/p&gt;

&lt;h3 id="%EB%B3%80%ED%95%98%EC%A7%80-%EC%95%8A%EC%9D%80-%EA%B2%83"&gt;변하지 않은 것&lt;/h3&gt;

&lt;p&gt;Cursor 3는 QA 플랫폼이 아니므로 인증, 성능 등 테스트의 모든 책임을 대체하지 않습니다. MCP 구조화 출력은 Apidog MCP 서버 등 일부 MCP 서버에서만 지원됩니다.&lt;/p&gt;

&lt;h2 id="cursor-3-apidog-mcp-%EC%84%9C%EB%B2%84-%ED%8A%B9%EC%A0%95-%EC%9B%8C%ED%81%AC%ED%94%8C%EB%A1%9C%EC%9A%B0"&gt;Cursor 3 + Apidog MCP 서버: 실전 워크플로우&lt;/h2&gt;

&lt;h3 id="%EC%84%A4%EC%A0%95"&gt;설정&lt;/h3&gt;

&lt;p&gt;Cursor 설정에 Apidog MCP 서버를 추가합니다. 예시:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  "mcpServers": {
    "apidog": {
      "command": "npx",
      "args": ["-y", "@apidog/mcp-server@latest"],
      "env": {
        "APIDOG_ACCESS_TOKEN": "your_access_token"
      }
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;토큰은 Apidog 계정 설정 &amp;gt; API 액세스 토큰에서 발급.&lt;/p&gt;

&lt;h3 id="%EC%9B%8C%ED%81%AC%ED%94%8C%EB%A1%9C%EC%9A%B0-%EC%82%AC%EC%96%91%EC%97%90%EC%84%9C-%EC%83%88-%EC%97%94%EB%93%9C%ED%8F%AC%EC%9D%B8%ED%8A%B8-%EC%8A%A4%EC%BA%90%ED%8F%B4%EB%94%A9"&gt;워크플로우: 사양에서 새 엔드포인트 스캐폴딩&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Apidog 프로젝트에서 &lt;code&gt;POST /invoices&lt;/code&gt; 등 신규 엔드포인트 사양 및 테스트 시나리오 작성&lt;/li&gt;
&lt;li&gt;에이전트 창에서 작업을 지정
&lt;blockquote&gt;
"Apidog 프로젝트에서 POST /invoices 엔드포인트를 찾아 요청 및 응답 스키마를 읽고, Node.js/Express 핸들러를 생성하세요. 테스트 시나리오를 실행해 통과 여부를 확인하세요."
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;에이전트가 &lt;code&gt;get_endpoint_detail&lt;/code&gt;로 스키마를 읽고, 코드를 생성, &lt;code&gt;apidog run --scenario invoice-creation-test --env staging&lt;/code&gt;으로 테스트 실행, 오류시 자동 패치&lt;/li&gt;
&lt;li&gt;최종 코드를 검토 후 병합&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id="%EB%B3%B5%EC%9E%A1%ED%95%9C-%EC%97%94%EB%93%9C%ED%8F%AC%EC%9D%B8%ED%8A%B8%EC%97%90-%EB%8C%80%ED%95%9C-best-of-n-%EC%9D%B4%EC%A0%90"&gt;복잡한 엔드포인트와 /best-of-n&lt;/h3&gt;

&lt;p&gt;세 모델의 에이전트가 각각 동일한 Apidog 사양을 기반으로 구현을 생성하고, Cursor 워크트리 뷰에서 결과를 비교—최적의 구현을 선택하세요.&lt;/p&gt;

&lt;h3 id="%EB%AC%B8%EC%84%9C-%EB%8F%99%EA%B8%B0%ED%99%94-%EC%9C%A0%EC%A7%80"&gt;문서 동기화 유지&lt;/h3&gt;

&lt;blockquote&gt;
"POST /invoices에 대한 Apidog 문서를 코드와 비교해 불일치가 있다면 표시하세요. 코드 응답 형식이 다르면 사양을 업데이트하세요."
&lt;/blockquote&gt;

&lt;p&gt;에이전트가 MCP 도구로 두 소스를 읽고, 실시간 비교해 동기화 작업을 자동화합니다.&lt;/p&gt;

&lt;p&gt;Apidog의 MCP 서버 연동 및 CLI 자동화 파이프라인 구축은 추가 가이드(내부: apidog mcp 서버 개요, cli 시작하기 등)를 참고하세요.&lt;/p&gt;

&lt;h2 id="%EC%8B%A4%EC%9A%A9%EC%A0%81%EC%9D%B8-%EC%84%A4%EC%A0%95-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0"&gt;실용적인 설정: 바로 시작하기&lt;/h2&gt;

&lt;h3 id="%EB%8B%A8%EA%B3%84-1-cursor-%EC%97%85%EA%B7%B8%EB%A0%88%EC%9D%B4%EB%93%9C"&gt;1. Cursor 최신 버전 설치&lt;/h3&gt;

&lt;p&gt;cursor.com에서 최신 버전을 다운로드, &lt;code&gt;Cmd+Shift+P&lt;/code&gt;로 "Agents Window" 실행 확인.&lt;/p&gt;

&lt;h3 id="%EB%8B%A8%EA%B3%84-2-apidog-%EC%95%A1%EC%84%B8%EC%8A%A4-%ED%86%A0%ED%81%B0-%EC%83%9D%EC%84%B1"&gt;2. Apidog 액세스 토큰 발급&lt;/h3&gt;

&lt;p&gt;Apidog 로그인 &amp;gt; 계정 설정 &amp;gt; API 액세스 토큰에서 읽기 권한 토큰 생성 및 복사.&lt;/p&gt;

&lt;h3 id="%EB%8B%A8%EA%B3%84-3-cursor%EC%97%90-apidog-mcp-%EC%84%9C%EB%B2%84-%EC%B6%94%EA%B0%80"&gt;3. Cursor에 Apidog MCP 서버 추가&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;{
  "mcpServers": {
    "apidog": {
      "command": "npx",
      "args": ["-y", "@apidog/mcp-server@latest"],
      "env": {
        "APIDOG_ACCESS_TOKEN": "your_token_here",
        "APIDOG_PROJECT_ID": "your_project_id"
      }
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;프로젝트 ID는 Apidog URL에서 확인. 저장 후 Cursor 재시작.&lt;/p&gt;

&lt;h3 id="%EB%8B%A8%EA%B3%84-4-%EC%97%B0%EA%B2%B0-%ED%99%95%EC%9D%B8"&gt;4. 연결 테스트&lt;/h3&gt;

&lt;p&gt;에이전트 창에서 "내 Apidog 프로젝트의 엔드포인트를 나열하세요."라고 입력, 엔드포인트 목록이 반환되면 정상 연결.&lt;/p&gt;

&lt;h3 id="%EB%8B%A8%EA%B3%84-5-apidog-cli-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EA%B5%AC%EC%84%B1"&gt;5. Apidog CLI 설치 및 구성&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;npm install -g apidog-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;code&gt;apidog -v&lt;/code&gt;로 설치 확인. Apidog 내의 시나리오 CLI 명령을 복사해 Cursor 통합 터미널 또는 에이전트 워크플로우에 바로 적용.&lt;/p&gt;

&lt;h3 id="%EB%8B%A8%EA%B3%84-6-%EC%B2%AB-mcp-%EA%B8%B0%EB%B0%98-%EC%97%90%EC%9D%B4%EC%A0%84%ED%8A%B8-%EC%9E%91%EC%97%85-%EC%8B%A4%ED%96%89"&gt;6. 첫 MCP 기반 에이전트 작업 실행&lt;/h3&gt;

&lt;p&gt;예시 프롬프트: "Apidog에서 User 객체 스키마를 찾아 동일한 TypeScript 인터페이스를 생성하세요."&lt;br&gt;실제 스키마와 결과를 확인해 통합 상태를 검증하세요. 이후 코딩, 테스트, 문서화 자동화 루프를 자유롭게 확장할 수 있습니다.&lt;/p&gt;

&lt;h2 id="%EB%A7%88%EB%AC%B4%EB%A6%AC"&gt;마무리&lt;/h2&gt;

&lt;p&gt;Cursor 3는 AI 에이전트 중심의 개발 환경으로 전환해 API 개발을 병렬화하고, 사양 기반 코드 생성 및 테스트 자동화까지 실질적으로 구현할 수 있게 합니다. Apidog MCP 서버와의 구조화 데이터 연동으로, 개발자는 반복적인 수정 없이, 실제 사양에 맞는 코드를 빠르게 얻고, 문서와 코드의 동기화도 자동화할 수 있습니다.&lt;/p&gt;

&lt;p&gt;이제 Cursor 3와 Apidog MCP, CLI를 조합해 일상적인 API 개발 워크플로우를 자동화된 루프로 전환해보세요.&lt;/p&gt;

&lt;h2 id="%EC%9E%90%EC%A3%BC-%EB%AC%BB%EB%8A%94-%EC%A7%88%EB%AC%B8"&gt;자주 묻는 질문&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Cursor 3가 기존 IDE 인터페이스를 대체하나요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
아니요. 에이전트 창이 추가된 것이며, 기존 IDE 기능도 함께 사용 가능합니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cursor 3와 이전 버전의 차이점은 무엇인가요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
아키텍처 중심이 에디터에서 에이전트로 전환. 병렬 실행, 클라우드-로컬 핸드오프, 디자인 모드, &lt;code&gt;/worktree&lt;/code&gt;, &lt;code&gt;/best-of-n&lt;/code&gt; 등 신규 명령 및 인터페이스 추가.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apidog MCP 서버는 Cursor 3에 어떻게 연결하나요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Cursor 설정 &amp;gt; MCP에서 Apidog MCP 서버를 추가하면, 에이전트가 직접 API 엔드포인트, 스키마, 테스트 시나리오를 호출형 도구로 읽을 수 있습니다. 구조화된 데이터로 타입 정보까지 자동 반영됩니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cursor 3 에이전트가 Apidog 테스트 시나리오를 자동으로 실행할 수 있나요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
네, Apidog CLI와 연동하면 에이전트가 터미널 명령을 통해 테스트 시나리오를 실행, 결과를 판독해 코드까지 자동 수정하는 피드백 루프를 구축할 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;에이전트 창을 사용하려면 유료 플랜이 필요한가요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
에이전트 창은 무료 플랜에서도 사용 가능. 단, 클라우드 에이전트 실행(오프라인 연속 작업 등)은 유료 플랜에서 지원됩니다. 자세한 플랜 정보는 &lt;a href="https://cursor.com/pricing" rel="noopener noreferrer"&gt;cursor.com/pricing&lt;/a&gt; 참고.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Gemma 4 API 백엔드 실행 방법</title>
      <dc:creator>Rihpig</dc:creator>
      <pubDate>Fri, 03 Apr 2026 02:34:34 +0000</pubDate>
      <link>https://dev.to/rihpig/gemma-4-api-baegendeu-silhaeng-bangbeob-4i15</link>
      <guid>https://dev.to/rihpig/gemma-4-api-baegendeu-silhaeng-bangbeob-4i15</guid>
      <description>&lt;p&gt;&lt;strong&gt;요약:&lt;/strong&gt; Google은 2026년 4월 Gemma 4를 출시했습니다. Gemma 4는 Apache 2.0 라이선스로 배포되는 네 가지 오픈 모델 제품군으로, 표준 벤치마크에서 동급 대비 20배 이상 큰 모델을 능가하는 성능을 제공합니다. Google AI Studio, Vertex AI에서 Gemma 4 API를 호출하거나 Ollama, vLLM을 통해 로컬에서 활용할 수 있습니다. Apidog의 Smart Mock 기능을 함께 사용하면 단일 목 규칙 없이 OpenAPI 스키마 기반의 실제와 같은 API 응답을 자동 생성할 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;지금 Apidog을 사용해보세요&lt;/a&gt;
&lt;/p&gt;

&lt;h2 id="%EC%86%8C%EA%B0%9C"&gt;소개&lt;/h2&gt;

&lt;p&gt;대부분의 오픈 소스 AI 모델은 기능성과 배포 용이성 사이에서 선택을 강요합니다. 노트북에서 실행하기엔 너무 크거나, 다단계 추론이 불가능할 정도로 작은 경우가 많습니다. Gemma 4는 이 기존 한계를 해결합니다.&lt;/p&gt;

&lt;p&gt;Gemma 4는 Google DeepMind의 역대 가장 강력한 오픈 모델 제품군입니다. 31B Dense 모델은 Arena AI 리더보드에서 모든 오픈 모델 중 3위, 26B MoE 모델은 6위를 차지했습니다. 두 모델 모두 단일 80GB GPU에서 실행이 가능하고, E2B/E4B 경량 모델은 모바일·엣지 디바이스에서 오프라인 작동이 가능합니다.&lt;/p&gt;

&lt;p&gt;API 개발 관점에서 Gemma 4는 함수 호출, 구조화된 JSON 출력, 256K 컨텍스트 창을 기본 지원합니다. 테스트 데이터 생성, 목(mock) 작성, API 응답 분석 등 AI 기반 API 도구 구축에 즉시 활용 가능합니다.&lt;/p&gt;

&lt;p&gt;💡Gemma 4로 개발 중이고, AI가 생성한 응답을 OpenAPI 스펙에 맞게 검증해야 한다면 Apidog의 Smart Mock 엔진을 활용하세요. API 정의에서 스키마 기반의 목(mock) 응답을 자동 생성해줍니다. 별도의 목 규칙 작성이 필요 없습니다. Smart Mock이 스키마를 읽고 실용적인 테스트 데이터를 즉시 생성합니다. Apidog을 무료로 다운로드해 Gemma 4 API 워크플로우에 연동해보세요.&lt;/p&gt;

&lt;h2 id="gemma-4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-%EC%83%88%EB%A1%9C%EC%9A%B4-%EC%A0%90%EC%9D%80"&gt;Gemma 4란 무엇이며, 새로운 점은?&lt;/h2&gt;

&lt;p&gt;Gemma 4는 Google DeepMind의 4세대 오픈 언어 모델입니다. "Gemma"는 라틴어로 "보석"을 의미하며, 2024년 초 첫 번째 시리즈가 등장한 이후 4억 회 이상 다운로드되었습니다. 커뮤니티는 10만 개 이상의 변형을 만들었고, Google은 이를 "Gemmaverse"로 부릅니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-52.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-52.png" alt="" width="800" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Gemma 4는 &lt;a href="https://goo.gle/gemma-4-apache-2" rel="noopener noreferrer"&gt;Apache 2.0 라이선스&lt;/a&gt;로 배포됩니다. 상업적 제약 없이 사용, 수정, 배포가 가능해 기업과 스타트업에 실질적 이점을 제공합니다.&lt;/p&gt;

&lt;p&gt;주요 혁신은 "매개변수당 지능"입니다. 31B Dense 모델은 GPT-4, Claude 3 Sonnet과 유사한 기능을 훨씬 적은 컴퓨팅 비용으로 제공합니다. Arena AI(2026년 4월 기준)에서 Gemma 4 31B는 600B+ 파라미터 모델도 능가합니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-51.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-51.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gemma 3 대비 핵심 개선점:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;네이티브 멀티모달 입력:&lt;/strong&gt; 이미지, 비디오(모든 모델), 오디오(E2B/E4B) 입력 지원&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;더 긴 컨텍스트 창:&lt;/strong&gt; E2B/E4B: 128K, 26B/31B: 256K 토큰&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;에이전트 워크플로우 지원:&lt;/strong&gt; 함수 호출, 구조화된 JSON 출력, 시스템 프롬프트 지원&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;고급 추론:&lt;/strong&gt; 수학·다단계 이행 등에서 Gemma 3 대비 대폭 개선&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;140+개 언어 지원:&lt;/strong&gt; 글로벌 API에 즉시 활용 가능&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Apache 2.0 라이선스:&lt;/strong&gt; 완전한 상업적 자유 보장&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id="gemma-4-%EB%AA%A8%EB%8D%B8-%EB%B3%80%ED%98%95-%EB%B0%8F-%EA%B8%B0%EB%8A%A5"&gt;Gemma 4 모델 변형 및 기능&lt;/h2&gt;

&lt;p&gt;Google은 4가지 크기로 Gemma 4를 출시했습니다. 각 모델은 타겟 하드웨어 계층이 다릅니다.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;모델&lt;/th&gt;
&lt;th&gt;매개변수&lt;/th&gt;
&lt;th&gt;활성 매개변수 (추론)&lt;/th&gt;
&lt;th&gt;컨텍스트&lt;/th&gt;
&lt;th&gt;최적 용도&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;E2B&lt;/td&gt;
&lt;td&gt;유효 2B&lt;/td&gt;
&lt;td&gt;약 2B&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;모바일, IoT, 오프라인 엣지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E4B&lt;/td&gt;
&lt;td&gt;유효 4B&lt;/td&gt;
&lt;td&gt;약 4B&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;휴대폰, Raspberry Pi, Jetson Orin&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;26B MoE&lt;/td&gt;
&lt;td&gt;총 26B&lt;/td&gt;
&lt;td&gt;약 3.8B 활성&lt;/td&gt;
&lt;td&gt;256K&lt;/td&gt;
&lt;td&gt;지연 시간에 민감한 서버 작업&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;31B Dense&lt;/td&gt;
&lt;td&gt;31B&lt;/td&gt;
&lt;td&gt;31B&lt;/td&gt;
&lt;td&gt;256K&lt;/td&gt;
&lt;td&gt;최고 품질, 연구, 미세 조정&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;E2B/E4B는 MoE(Mixture of Experts) 아키텍처로 일부 파라미터만 활성화해 저전력·저RAM 환경(모바일, IoT 등)에 최적화되어 있습니다. 26B MoE는 3.8B 활성 파라미터로 빠른 추론과 품질의 균형을 제공합니다. 31B Dense는 최고 품질, 복잡한 API 테스트 및 미세 조정에 적합합니다.&lt;/p&gt;

&lt;p&gt;모든 모델 변형은 함수 호출과 JSON 출력 모드를 지원하므로 API 자동화, 목(mock) 생성, 테스트 등 다양한 개발 워크플로우에 즉각 적용할 수 있습니다.&lt;/p&gt;

&lt;h2 id="gemma-4-api-%EC%84%A4%EC%A0%95-%EB%8B%A8%EA%B3%84%EB%B3%84-%EC%95%88%EB%82%B4"&gt;Gemma 4 API 설정: 단계별 안내&lt;/h2&gt;

&lt;p&gt;Gemma 4는 세 가지 주요 방법으로 호출할 수 있습니다: Google AI Studio(가장 빠름), Vertex AI(기업용), Ollama/vLLM(로컬 배포). 각 방법별 구현 절차는 다음과 같습니다.&lt;/p&gt;

&lt;h3 id="%EC%98%B5%EC%85%98-1-google-ai-studio-%ED%94%84%EB%A1%9C%ED%86%A0%ED%83%80%EC%9D%B4%ED%95%91%EC%97%90-%EA%B6%8C%EC%9E%A5"&gt;옵션 1: Google AI Studio (프로토타이핑)&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://aistudio.google.com" rel="noopener noreferrer"&gt;Google AI Studio&lt;/a&gt;에서 무료 계정 생성 후 API 키를 발급받으세요.&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;google-genai
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;기본 텍스트 호출 예시:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;google.generativeai&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;genai&lt;/span&gt;

&lt;span class="n"&gt;genai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;configure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;genai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;GenerativeModel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemma-4-31b-it&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate_content&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Generate a JSON object for a user account with id, email, and created_at fields.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;구조화된 JSON 응답이 필요하다면 &lt;code&gt;response_mime_type&lt;/code&gt;을 사용하세요:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;google.generativeai&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;genai&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;

&lt;span class="n"&gt;genai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;configure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;genai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;GenerativeModel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemma-4-31b-it&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;generation_config&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;response_mime_type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
Generate 3 sample user objects for an e-commerce API. 
Each user should have: id (integer), email (string), username (string), 
created_at (ISO 8601 timestamp), and subscription_tier (free|pro|enterprise).
Return as a JSON array.
&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate_content&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;indent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3 id="%EC%98%B5%EC%85%98-2-ollama%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%A1%9C%EC%BB%AC-%EB%B0%B0%ED%8F%AC"&gt;옵션 2: Ollama로 로컬 배포&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://ollama.com" rel="noopener noreferrer"&gt;Ollama&lt;/a&gt;를 설치한 후 모델을 가져옵니다.&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama pull gemma4
ollama serve
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;OpenAI 호환 API 예시:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://localhost:11434/api/chat&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemma4&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;messages&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Generate a valid JSON response for a REST API /products endpoint. Include id, name, price, and stock fields.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;stream&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;message&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3 id="%EC%98%B5%EC%85%98-3-api-%EC%98%A4%EC%BC%80%EC%8A%A4%ED%8A%B8%EB%A0%88%EC%9D%B4%EC%85%98%EC%9D%84-%EC%9C%84%ED%95%9C-%ED%95%A8%EC%88%98-%ED%98%B8%EC%B6%9C"&gt;옵션 3: 함수 호출 기반 API 오케스트레이션&lt;/h3&gt;

&lt;p&gt;Gemma 4의 네이티브 함수 호출로 도구를 정의하고 API 워크플로우를 자동화할 수 있습니다.&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;google.generativeai&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;genai&lt;/span&gt;

&lt;span class="n"&gt;genai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;configure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;tools&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;function_declarations&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;get_api_schema&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;description&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Retrieve the OpenAPI schema for a given endpoint path&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;parameters&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;object&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;properties&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;endpoint_path&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;string&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;description&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;The API endpoint path, e.g. /users/{id}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
                        &lt;span class="p"&gt;},&lt;/span&gt;
                        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;method&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;string&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;enum&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;GET&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;POST&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PUT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DELETE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PATCH&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
                        &lt;span class="p"&gt;}&lt;/span&gt;
                    &lt;span class="p"&gt;},&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;required&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;endpoint_path&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;method&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;genai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;GenerativeModel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemma-4-31b-it&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate_content&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;I need to test the GET /users/{id} endpoint. What schema should the response follow?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# 함수 호출 여부 확인
&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;candidates&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parts&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;function_call&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;fc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;candidates&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parts&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;function_call&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Model called function: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;fc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;With args: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;이 방식으로 Gemma 4 기반의 에이전트 API 테스트 파이프라인을 쉽게 구축할 수 있습니다.&lt;/p&gt;

&lt;h2 id="gemma-4%EB%A1%9C-ai-%EA%B8%B0%EB%B0%98-api-%EB%AA%A9mock-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0"&gt;Gemma 4로 AI 기반 API 목(mock) 구축하기&lt;/h2&gt;

&lt;p&gt;Gemma 4는 실제와 같은 목(mock) 데이터 자동 생성에 매우 적합합니다. 백엔드 없이 프론트엔드 개발, 엣지 케이스 테스트 등에서 실질적으로 활용할 수 있습니다.&lt;/p&gt;

&lt;p&gt;OpenAPI 스키마 기반 목 데이터 생성 예시:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;google.generativeai&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;genai&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;

&lt;span class="n"&gt;genai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;configure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;genai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;GenerativeModel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemma-4-31b-it&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;generation_config&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;response_mime_type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;schema&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;object&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;properties&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;integer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;order_number&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;string&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pattern&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;^ORD-[0-9]{6}$&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;string&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;enum&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pending&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;shipped&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;delivered&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cancelled&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;total&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;number&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;minimum&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;items&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;array&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;items&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;object&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;properties&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;product_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;integer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;quantity&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;integer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;minimum&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;unit_price&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;number&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;created_at&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;string&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;format&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;date-time&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
Generate 5 realistic mock responses for an order management API.
Each response must conform exactly to this JSON Schema:
&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;schema&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;indent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;

Make the data realistic: use realistic prices, product IDs, and varied statuses.
Return as a JSON array of 5 order objects.
&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate_content&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;mock_orders&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mock_orders&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;indent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Gemma 4는 JSON Schema 제약을 이해하므로, 열거형·패턴·숫자 범위 제약까지 충실하게 목 데이터를 생성합니다. 이 방식으로 모든 OpenAPI 응답 스키마에 대해 실제와 같은 목 데이터를 자동화할 수 있습니다.&lt;/p&gt;

&lt;p&gt;고급 목킹이 필요하다면, 조건부 로직(예: 특정 ID에 대해 오류 응답 반환 등)도 프롬프트에 포함해 요청별 상황을 반영할 수 있습니다. 256K 컨텍스트 창을 활용하면 한 번에 여러 엔드포인트 목 응답도 생성 가능합니다.&lt;/p&gt;

&lt;p&gt;실전 워크플로우 예시: Apidog 컬렉션을 OpenAPI로 내보내 프롬프트에 붙여넣고, Gemma 4에 엔드포인트별 테스트 케이스 10개씩 요청하세요. 단시간 내에 방대한 목 데이터셋을 구축할 수 있습니다.&lt;/p&gt;

&lt;h2 id="apidog%EC%9C%BC%EB%A1%9C-gemma-4-api-%EC%9D%91%EB%8B%B5-%ED%85%8C%EC%8A%A4%ED%8A%B8%ED%95%98%EA%B8%B0"&gt;Apidog으로 Gemma 4 API 응답 테스트하기&lt;/h2&gt;

&lt;p&gt;Gemma 4가 생성한 데이터를 API 파이프라인에 적용하려면, 응답이 스키마와 일치하는지 자동 검증이 필요합니다. Apidog의 테스트 시나리오(Test Scenarios)를 활용하세요.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-53.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-53.png" alt="" width="800" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;실행 절차는 다음과 같습니다.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 4 API 엔드포인트를 Apidog에 추가&lt;/strong&gt;: 프로젝트 내 새 엔드포인트 생성 → URL 설정 → 예상 응답 스키마 등록&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smart Mock으로 기준 응답 생성&lt;/strong&gt;: 스키마 기반 자동 목 데이터를 생성해 실제 응답 구조를 미리 확인&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;테스트 시나리오 생성&lt;/strong&gt;: Apidog 테스트 모듈에서 Gemma 4 API 호출, 응답 검증을 단계별로 설정&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;단언(assertion) 설정&lt;/strong&gt;: 상태 코드, 헤더, JSON 필드 존재 여부, 파싱된 결과의 스키마 일치 여부를 검증&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;데이터 기반 테스트 실행&lt;/strong&gt;: CSV/JSON 파일로 다양한 프롬프트 변형을 불러와 대량 테스트 자동화&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-54.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-54.png" alt="" width="800" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Apidog의 변수 추출, 다단계 워크플로우, CLI·CI/CD 연동을 활용하면 Gemma 4 기반 API 테스트를 완전 자동화할 수 있습니다.&lt;/p&gt;

&lt;h2 id="%EC%8B%A4%EC%A0%9C-%EC%82%AC%EC%9A%A9-%EC%82%AC%EB%A1%80"&gt;실제 사용 사례&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;API 테스트 데이터 생성:&lt;/strong&gt; OpenAPI 스키마와 JSON 출력 모드로 수백 건의 현실적인 테스트 레코드 자동 생성&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;지능형 API 목킹:&lt;/strong&gt; 정적 목 서버 대신, Gemma 4로 쿼리별 동적·상황별 응답 생성&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API 문서 생성:&lt;/strong&gt; 코드베이스 전체를 프롬프트에 넣고 문서화되지 않은 엔드포인트의 OpenAPI 문서 자동 생성&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;응답 스키마 유효성 검사:&lt;/strong&gt; Gemma 4로 API 응답 분석 및 스키마 위반 자동 탐지&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;자동 회귀 테스트 작성:&lt;/strong&gt; API 사양+버그 리포트 입력 → 재현 가능한 회귀 테스트 케이스 자동 생성&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id="api-%EC%82%AC%EC%9A%A9%EC%9D%84-%EC%9C%84%ED%95%9C-gemma-4-vs-%EB%8B%A4%EB%A5%B8-%EC%98%A4%ED%94%88-%EB%AA%A8%EB%8D%B8"&gt;API 사용을 위한 Gemma 4 vs 다른 오픈 모델&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;모델&lt;/th&gt;
&lt;th&gt;매개변수&lt;/th&gt;
&lt;th&gt;컨텍스트&lt;/th&gt;
&lt;th&gt;JSON 출력&lt;/th&gt;
&lt;th&gt;함수 호출&lt;/th&gt;
&lt;th&gt;라이선스&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Gemma 4 31B&lt;/td&gt;
&lt;td&gt;31B&lt;/td&gt;
&lt;td&gt;256K&lt;/td&gt;
&lt;td&gt;네이티브&lt;/td&gt;
&lt;td&gt;네이티브&lt;/td&gt;
&lt;td&gt;Apache 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemma 4 26B MoE&lt;/td&gt;
&lt;td&gt;26B (3.8B 활성)&lt;/td&gt;
&lt;td&gt;256K&lt;/td&gt;
&lt;td&gt;네이티브&lt;/td&gt;
&lt;td&gt;네이티브&lt;/td&gt;
&lt;td&gt;Apache 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Llama 3.3 70B&lt;/td&gt;
&lt;td&gt;70B&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;프롬프트를 통해&lt;/td&gt;
&lt;td&gt;프롬프트를 통해&lt;/td&gt;
&lt;td&gt;Llama 커뮤니티&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mistral 7B&lt;/td&gt;
&lt;td&gt;7B&lt;/td&gt;
&lt;td&gt;32K&lt;/td&gt;
&lt;td&gt;프롬프트를 통해&lt;/td&gt;
&lt;td&gt;제한적&lt;/td&gt;
&lt;td&gt;Apache 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qwen 2.5 72B&lt;/td&gt;
&lt;td&gt;72B&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;네이티브&lt;/td&gt;
&lt;td&gt;네이티브&lt;/td&gt;
&lt;td&gt;Apache 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;API 툴링에는 네이티브 JSON 출력, 함수 호출 지원, 긴 컨텍스트 창이 중요합니다. Gemma 4 31B/26B는 모두 해당 기능을 기본 제공하며, 실행 비용도 최적화되어 있습니다.&lt;/p&gt;

&lt;p&gt;Llama 3.3 70B는 강력하지만 컴퓨팅 리소스가 2배 이상 필요합니다. Mistral 7B는 빠르지만, 컨텍스트 창과 JSON/함수 호출 지원이 제한적입니다. Qwen 2.5 72B는 다국어에 강점이 있으나, 역시 대형 하드웨어가 필수입니다. Gemma 4의 Apache 2.0 라이선스는 상업적 배포에 있어 가장 명확합니다.&lt;/p&gt;

&lt;p&gt;실제 사용 시, 지연 시간에 민감하면 Gemma 4 26B MoE, 최고 품질 출력이 필요하다면 31B Dense를 선택하세요.&lt;/p&gt;

&lt;h2 id="%EA%B2%B0%EB%A1%A0"&gt;결론&lt;/h2&gt;

&lt;p&gt;Gemma 4는 API 툴링 구축을 위한 신뢰성 높은 오픈 소스 대안입니다. Apache 2.0 라이선스, 네이티브 함수 호출/JSON 출력 지원, 다양한 하드웨어 계층 지원 등으로 API 워크플로우에 쉽게 통합할 수 있습니다.&lt;/p&gt;

&lt;p&gt;AI 생성 데이터와 API 유효성 검증을 연결하려면 Gemma 4와 Apidog을 조합하세요. Gemma 4로 목 데이터 생성, Apidog Smart Mock으로 스키마 기반 프로토타입, 테스트 시나리오로 계약 일치 검증까지 한 번에 구축할 수 있습니다.&lt;/p&gt;

&lt;h2 id="faq"&gt;FAQ&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Gemma 4란 무엇인가요?&lt;/strong&gt; Gemma 4는 2026년 4월 출시된 Google DeepMind 오픈 언어 모델 제품군입니다. E2B, E4B, 26B MoE, 31B Dense 네 가지 버전이 있으며, Apache 2.0 라이선스가 적용됩니다. 31B 모델은 Arena AI 리더보드에서 오픈 모델 3위입니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gemma 4는 무료로 사용할 수 있나요?&lt;/strong&gt; 모델 가중치는 Apache 2.0에 따라 무료 다운로드/사용이 가능합니다. 직접 실행 시 컴퓨팅 비용만 부담하면 되며, Google AI Studio의 경우 무료 티어와 유료 요금제가 있습니다. Vertex AI는 Google Cloud 요금이 적용됩니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gemma 4는 구조화된 JSON을 출력할 수 있나요?&lt;/strong&gt; 네. Google Generative AI SDK의 &lt;code&gt;response_mime_type: "application/json"&lt;/code&gt; 옵션으로 네이티브 JSON 출력이 가능합니다. API 통합 시 항상 유효한 JSON을 자동 파싱할 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;API 개발에 있어 Gemma 4와 GPT-4o의 차이는?&lt;/strong&gt; GPT-4o는 로컬 배포가 불가능하고, API 비용이 높은 독점 모델입니다. Gemma 4 31B는 무료 로컬 배포가 가능하며, 벤치마크 역시 경쟁력이 높습니다. 데이터 프라이버시·비용 제어가 필요하다면 Gemma 4가 실용적입니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;내 API 데이터로 Gemma 4를 미세 조정할 수 있나요?&lt;/strong&gt; 네. Google AI Studio, Vertex AI, Hugging Face TRL 등에서 미세 조정 지원합니다. 도메인별 OpenAPI 스키마/응답 패턴에 특화된 모델을 만들 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gemma 4를 로컬에서 실행하려면 어떤 하드웨어가 필요한가요?&lt;/strong&gt; 31B/26B는 bfloat16 형식에서 80GB H100 GPU에 적합합니다. 양자화 버전은 16–24GB VRAM의 소비자 GPU에서도 실행됩니다. E4B/E2B는 Raspberry Pi, Jetson 등 모바일·엣지 디바이스에서도 작동합니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gemma 4는 함수 호출을 지원하나요?&lt;/strong&gt; 네. 모든 모델에서 함수 호출을 네이티브로 지원합니다. 도구를 JSON 스키마로 정의하면, 모델이 호출 시기를 판단하고 구조화된 인수를 반환합니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gemma 4 API 응답을 자동 테스트하려면?&lt;/strong&gt; Apidog 테스트 시나리오(Test Scenarios)로 워크플로우를 만드세요. Gemma 4 API 엔드포인트 등록 → 요청/응답 검증 단계 추가 → 단언(assertion) 설정 → 로컬/CLI/CI/CD에서 자동 실행이 가능합니다.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Qwen3.6-Plus API: 터미널 벤치마크에서 Claude 능가</title>
      <dc:creator>Rihpig</dc:creator>
      <pubDate>Thu, 02 Apr 2026 09:28:12 +0000</pubDate>
      <link>https://dev.to/rihpig/qwen36-plus-api-teomineol-bencimakeueseo-claude-neungga-4bi4</link>
      <guid>https://dev.to/rihpig/qwen36-plus-api-teomineol-bencimakeueseo-claude-neungga-4bi4</guid>
      <description>&lt;h2&gt;
  
  
  요약
&lt;/h2&gt;

&lt;p&gt;Qwen3.6-Plus가 공식 출시되었습니다. SWE-bench Verified에서 78.8%, Terminal-Bench 2.0에서 61.6%를 기록해 Claude Opus 4.5를 능가합니다. 1M 토큰 컨텍스트 윈도우, 에이전트 루프를 위한 새로운 &lt;code&gt;preserve_thinking&lt;/code&gt; 매개변수를 제공하며, OpenAI 호환 API로 Claude Code, OpenClaw, Qwen Code와 바로 연동됩니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Apidog를 지금 사용해보세요&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  미리보기에서 정식 출시까지
&lt;/h2&gt;

&lt;p&gt;OpenRouter의 Qwen 3.6 Plus 미리보기를 경험했다면, 이 모델의 성능을 이미 확인하셨을 겁니다. 미리보기는 3월 30일에 대기 없이 무료로 공개되어 이틀간 40만 건 요청, 4억 토큰을 처리했습니다.&lt;/p&gt;

&lt;p&gt;정식 출시는 프로덕션 수준의 안정성, SLA 기반 가동 시간, API 매개변수 확장(특히 에이전트 작업을 위한 기능 강화)을 제공합니다. 본 가이드에서는 주요 변경점, API 호출법, Apidog를 통한 통합 테스트 방법을 실전 위주로 다룹니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qwen3.6-Plus란 무엇인가
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://qwen.ai/blog?id=qwen3.6" rel="noopener noreferrer"&gt;Qwen3.6-Plus&lt;/a&gt;는 Alibaba Qwen팀이 제공하는 Mixture-of-Experts(MoE) 모델입니다. Qwen3.5 시리즈처럼 희소 활성화(sparse activation) 구조로, 밀집 모델 대비 낮은 연산 비용에 동급 이상의 성능을 제공합니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;주요 스펙:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1백만 토큰 컨텍스트 윈도우(기본)&lt;/li&gt;
&lt;li&gt;연쇄 사고 추론 (CoT) 지원&lt;/li&gt;
&lt;li&gt;에이전트 작업용 &lt;code&gt;preserve_thinking&lt;/code&gt; 매개변수&lt;/li&gt;
&lt;li&gt;네이티브 멀티모달(이미지, 비디오, 문서) 지원&lt;/li&gt;
&lt;li&gt;OpenAI/Anthropic 호환 API&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;곧 오픈소스 소형 변형 모델(가중치 공개)도 출시 예정입니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  벤치마크 결과
&lt;/h2&gt;

&lt;h3&gt;
  
  
  코딩 에이전트
&lt;/h3&gt;

&lt;p&gt;Qwen3.6-Plus는 SWE-bench 작업에선 Claude Opus 4.5에 근소하게 뒤지지만, 터미널 작업에서는 모든 모델을 앞섭니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F56nehdw7rei6u9ghff6v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F56nehdw7rei6u9ghff6v.png" alt="Terminal-Bench 2.0 결과" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Terminal-Bench 2.0은 32코어, 48GB RAM 환경에서 3시간 내 실전 셸 작업을 평가합니다. Qwen3.6-Plus가 61.6%, Claude Opus 4.5가 59.3%로 실제 개발 시나리오에서 의미 있는 차이를 보입니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  일반 에이전트 및 도구 사용
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;벤치마크&lt;/th&gt;
&lt;th&gt;Claude Opus 4.5&lt;/th&gt;
&lt;th&gt;Qwen3.6-Plus&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TAU3-Bench&lt;/td&gt;
&lt;td&gt;70.2%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;70.7%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepPlanning&lt;/td&gt;
&lt;td&gt;33.9%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;41.5%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCPMark&lt;/td&gt;
&lt;td&gt;42.3%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;48.2%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCP-Atlas&lt;/td&gt;
&lt;td&gt;71.8%&lt;/td&gt;
&lt;td&gt;74.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WideSearch&lt;/td&gt;
&lt;td&gt;76.4%&lt;/td&gt;
&lt;td&gt;74.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;MCPMark는 GitHub MCP v0.30.3 도구 호출을 평가합니다. Qwen3.6-Plus의 DeepPlanning/ MCPMark 우위는 장기 플래닝 및 툴 통합 시 강점입니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  추론 및 지식
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;벤치마크&lt;/th&gt;
&lt;th&gt;Claude Opus 4.5&lt;/th&gt;
&lt;th&gt;Qwen3.6-Plus&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPQA&lt;/td&gt;
&lt;td&gt;87.0%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;90.4%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LiveCodeBench v6&lt;/td&gt;
&lt;td&gt;84.8%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;87.1%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IFEval strict&lt;/td&gt;
&lt;td&gt;90.9%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;94.3%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MMLU-Pro&lt;/td&gt;
&lt;td&gt;89.5%&lt;/td&gt;
&lt;td&gt;88.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;GPQA(대학원 수준 과학 추론), IFEval strict(출력 형식/제약 준수) 부문에서 Qwen3.6-Plus가 앞섭니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  멀티모달
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;벤치마크&lt;/th&gt;
&lt;th&gt;Qwen3.6-Plus&lt;/th&gt;
&lt;th&gt;참고&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OmniDocBench 1.5&lt;/td&gt;
&lt;td&gt;91.2%&lt;/td&gt;
&lt;td&gt;표에서 1위&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RefCOCO avg&lt;/td&gt;
&lt;td&gt;93.5%&lt;/td&gt;
&lt;td&gt;표에서 1위&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;We-Math&lt;/td&gt;
&lt;td&gt;89.0%&lt;/td&gt;
&lt;td&gt;표에서 1위&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CountBench&lt;/td&gt;
&lt;td&gt;97.6%&lt;/td&gt;
&lt;td&gt;표에서 1위&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OSWorld-Verified&lt;/td&gt;
&lt;td&gt;62.5%&lt;/td&gt;
&lt;td&gt;Claude(66.3%)에 뒤짐&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;OSWorld-Verified(데스크탑 사용)는 Claude가 우위, 공간/문서 이해는 Qwen3.6-Plus가 선두입니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  API 호출 방법
&lt;/h2&gt;

&lt;p&gt;Qwen3.6-Plus는 Alibaba Cloud Model Studio에서 사용 가능합니다. API 키는 &lt;a href="https://modelstudio.alibabacloud.com" rel="noopener noreferrer"&gt;modelstudio.alibabacloud.com&lt;/a&gt;에서 발급받으세요.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;기본 API 엔드포인트:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;싱가포르: &lt;code&gt;https://dashscope-intl.aliyuncs.com/compatible-mode/v1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;베이징: &lt;code&gt;https://dashscope.aliyuncs.com/compatible-mode/v1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;미국 버지니아: &lt;code&gt;https://dashscope-us.aliyuncs.com/compatible-mode/v1&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  스트리밍을 사용한 기본 호출
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DASHSCOPE_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://dashscope-intl.aliyuncs.com/compatible-mode/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;completion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;qwen3.6-plus&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Review this Python function and find bugs.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
    &lt;span class="n"&gt;extra_body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;enable_thinking&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;reasoning&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;
&lt;span class="n"&gt;answer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;
&lt;span class="n"&gt;is_answering&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;completion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;continue&lt;/span&gt;
    &lt;span class="n"&gt;delta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;hasattr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;reasoning_content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reasoning_content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;is_answering&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;reasoning&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reasoning_content&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;is_answering&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;is_answering&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;
        &lt;span class="n"&gt;answer&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;flush&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  preserve_thinking 매개변수
&lt;/h3&gt;

&lt;p&gt;정식 버전에서는 &lt;code&gt;preserve_thinking&lt;/code&gt; 옵션이 추가되었습니다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;preserve_thinking: true&lt;/code&gt;로 설정하면, 이전 대화 모든 턴의 연쇄 추론 내용이 보존됩니다.&lt;/li&gt;
&lt;li&gt;다단계 에이전트/오케스트레이션에서는 반드시 활성화하세요.&lt;/li&gt;
&lt;li&gt;기본값은 비활성화(토큰 절약 목적)입니다.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;completion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;qwen3.6-plus&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;conversation_history&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;extra_body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;enable_thinking&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;preserve_thinking&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;# 턴 전체 추론 체인 유지
&lt;/span&gt;    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Qwen3.6-Plus를 Claude Code와 함께 사용
&lt;/h3&gt;

&lt;p&gt;Qwen API는 Anthropic 프로토콜을 지원합니다. 환경 변수 세팅만으로 Claude Code에서 바로 사용 가능합니다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @anthropic-ai/claude-code

&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"qwen3.6-plus"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_SMALL_FAST_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"qwen3.6-plus"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_BASE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;https://dashscope-intl.aliyuncs.com/apps/anthropic
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_AUTH_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_dashscope_api_key

claude
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Qwen3.6-Plus를 OpenClaw와 함께 사용
&lt;/h3&gt;

&lt;p&gt;OpenClaw(구 Moltbot/Clawdbot) 오픈소스 코딩 에이전트를 설치하고 Model Studio 엔드포인트로 설정하세요.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Node.js 22+ 필요&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://molt.bot/install.sh | bash

&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;DASHSCOPE_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_key
openclaw dashboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;~/.openclaw/openclaw.json&lt;/code&gt;에 아래 설정을 병합하세요.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"models"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"providers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"alibaba-coding-plan"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"baseUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://coding-intl.dashscope.aliyuncs.com/v1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"apiKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"${DASHSCOPE_API_KEY}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"models"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"qwen3.6-plus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"reasoning"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"agents"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"defaults"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"models"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"qwen3.6-plus"&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Qwen3.6-Plus를 Qwen Code와 함께 사용
&lt;/h3&gt;

&lt;p&gt;Qwen Code는 Qwen 전용 오픈소스 터미널 에이전트입니다. OAuth 로그인 시 하루 1,000회 무료 호출이 제공됩니다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @qwen-code/qwen-code@latest
qwen
&lt;span class="c"&gt;# /auth 입력 후 무료 티어 활성화&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  preserve_thinking이 에이전트 동작을 변경하는 이유
&lt;/h2&gt;

&lt;p&gt;대부분의 LLM API는 각 턴을 독립적으로 처리합니다. 단일 Q&amp;amp;A는 문제 없지만, 다단계 에이전트에서는 이전 추론을 잃어버려 일관성이 깨집니다.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;preserve_thinking&lt;/code&gt;을 활성화하면, 모든 턴의 연쇄 추론이 다음 응답 생성 시 반영됩니다. 즉, 8단계 에이전트가 2, 4, 6단계의 분석까지 파악, 더 일관된 결정을 내릴 수 있습니다.&lt;/p&gt;

&lt;p&gt;Alibaba 벤치마크에 따르면, 중복 추론도 줄어들고, 장기 워크플로우에서 토큰 소모도 감소합니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;에이전트 루프 예시:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;conversation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;agent_step&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;preserve&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;conversation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;user_message&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;qwen3.6-plus&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;conversation&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;extra_body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;enable_thinking&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;preserve_thinking&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;preserve&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;
    &lt;span class="n"&gt;conversation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;assistant&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;

&lt;span class="c1"&gt;# 다단계 코드 리뷰 에이전트 예시
&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;agent_step&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Analyze the auth module for security issues.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;agent_step&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Now suggest fixes for the top 3 issues you found.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;agent_step&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Write tests that validate each fix.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;preserve_thinking&lt;/code&gt;이 없으면 3단계에서 1단계의 결과를 모델이 모릅니다. 이 기능으로 연쇄 추론이 온전히 유지됩니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  무엇에 가장 적합한가
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;리포지토리 수준 버그 수정&lt;/strong&gt;: SWE-bench Verified 78.8%, Pro 56.6%. 자동 코드 수정/검토 파이프라인에 적합.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;터미널 자동화&lt;/strong&gt;: Terminal-Bench 2.0 1위. 셸 기반 다단계 파일/프로세스 작업, 빌드 파이프라인.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP 도구 호출&lt;/strong&gt;: MCPMark 48.2%(최고). MCP 연동 자동화에 최적.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;장문 컨텍스트 문서 분석&lt;/strong&gt;: 1M 토큰 윈도우로 코드베이스 전체/대규모 문서 분석에 유리.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;프론트엔드 코드 생성&lt;/strong&gt;: QwenWebBench 기준 Claude와 동급(1501.7 vs 1517.9 Elo).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;다국어&lt;/strong&gt;: WMT24++ 84.3%(최고), 23개 언어 MAXIFE 88.2%. 비영어권 사용에 강함.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Apidog로 Qwen3.6-Plus API 호출 테스트하기
&lt;/h2&gt;

&lt;p&gt;Qwen3.6-Plus 엔드포인트는 OpenAI와 호환되므로 &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;에서 바로 테스트할 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3lln60azqwzlva81kvps.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3lln60azqwzlva81kvps.png" alt="Apidog 테스트 예시" width="800" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;POST 엔드포인트:
&lt;code&gt;https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;환경변수로 API 키 추가:
&lt;code&gt;Authorization: Bearer {{DASHSCOPE_API_KEY}}&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;응답 어설션 예시:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Response contains choices&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;have&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;property&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;choices&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;be&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;a&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;and&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;not&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;empty&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;No empty reasoning when thinking enabled&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;choice&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;choice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;reasoning_content&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;choice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;reasoning_content&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;not&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;be&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;empty&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;팁:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;개발 중에는 Smart Mock으로 응답을 시뮬레이션해 토큰 소모 없이 에이전트 로직을 빠르게 검증할 수 있습니다.&lt;/li&gt;
&lt;li&gt;다단계 에이전트라면 여러 요청을 테스트 시나리오로 연결해 각 단계의 응답 구조와 &lt;code&gt;preserve_thinking&lt;/code&gt; 유지 여부를 확인하세요.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog를 무료로 다운로드&lt;/a&gt;하여 바로 시작하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  다음은 무엇인가
&lt;/h2&gt;

&lt;p&gt;Qwen팀은 수일 내 오픈소스 소형 변형 모델(희소 MoE, Apache 2.0 가중치)을 출시할 예정입니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;로드맵 주요 목표:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;복잡한 다중 파일 문제 해결을 위한 장기 리포지토리 작업&lt;/li&gt;
&lt;li&gt;GUI 에이전트 및 시각적 코딩이 부가가치가 아닌 기본 기능으로 자리잡는 멀티모달 에이전트&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Qwen3.5 오픈소스 모델은 출시 즉시 많이 배포된 자체호스팅 모델이 되었습니다. Qwen3.6도 이 패턴을 따를 가능성이 높습니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  결론
&lt;/h2&gt;

&lt;p&gt;Qwen3.6-Plus는 Claude Opus 4.5와의 격차를 좁혔으며, 터미널 자동화, MCP 도구 호출, 장기 플래닝에선 확실한 우위를 점합니다. 1M 토큰 컨텍스트, Anthropic 프로토콜 지원, &lt;code&gt;preserve_thinking&lt;/code&gt; 옵션은 실제 프로덕션 에이전트 구축에 실질적인 장점입니다.&lt;/p&gt;

&lt;p&gt;OpenRouter의 무료 미리보기는 모델 평가에 적합했고, 공식 API는 안정성 및 에이전트 중심 기능을 강화했습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;은&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OpenAI 호환 엔드포인트 테스트&lt;/li&gt;
&lt;li&gt;응답 어설션 작성&lt;/li&gt;
&lt;li&gt;Smart Mock으로 오프라인 개발&lt;/li&gt;
&lt;li&gt;모델/버전 교체 시 회귀 테스트&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;등 API 통합 품질 확보에 적합합니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  자주 묻는 질문
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Qwen3.6-Plus와 미리보기 버전의 차이점은?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
미리보기(&lt;code&gt;qwen/qwen3.6-plus-preview&lt;/code&gt;)는 2026년 3월 30일 OpenRouter에 출시. 정식 출시는 &lt;code&gt;preserve_thinking&lt;/code&gt; 매개변수, SLA 기반 가동 시간, Model Studio 지원 추가. 소형 오픈소스 모델도 곧 출시.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;preserve_thinking&lt;/code&gt;은 언제 써야 하나요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
기본은 현재 턴 추론만 보존. &lt;code&gt;preserve_thinking: true&lt;/code&gt;로 설정 시 모든 이전 턴의 연쇄 추론을 유지. 다단계 에이전트 루프 등 과거 추론이 행동에 영향을 미치는 경우 반드시 사용.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Qwen3.6-Plus와 Claude Opus 4.5 비교?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Claude Opus 4.5가 SWE-bench Verified(80.9% vs 78.8%), OSWorld-Verified(66.3% vs 62.5%)에서 우위. Qwen3.6-Plus는 Terminal-Bench 2.0(61.6% vs 59.3%), MCPMark(48.2% vs 42.3%), DeepPlanning(41.5% vs 33.9%), GPQA(90.4% vs 87.0%)에서 앞섬.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Qwen3.6-Plus를 Claude Code와 함께 쓸 수 있나요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
가능. &lt;code&gt;ANTHROPIC_BASE_URL&lt;/code&gt;을 Dashscope Anthropic 호환 엔드포인트로, &lt;code&gt;ANTHROPIC_MODEL&lt;/code&gt;을 &lt;code&gt;qwen3.6-plus&lt;/code&gt;로, &lt;code&gt;ANTHROPIC_AUTH_TOKEN&lt;/code&gt;을 Dashscope API 키로 설정.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Qwen3.6-Plus는 오픈소스인가요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
호스팅 API 모델은 오픈 웨이트가 아님. 곧 오픈소스 소형 변형 모델이 공개됩니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;무료 액세스는 어떻게?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Qwen Code 설치(&lt;code&gt;npm install -g @qwen-code/qwen-code@latest&lt;/code&gt;), 실행 후 &lt;code&gt;/auth&lt;/code&gt; 입력, OAuth 로그인 시 하루 1,000건 무료 API 호출 제공.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;컨텍스트 윈도우 크기는?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
기본 1백만 토큰. 공식 벤치 일부는 256K 기준이지만, API 기본값은 1M.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;배포 전 API 통합 테스트 방법은?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
엔드포인트를 Apidog로 가져오고, 환경 변수로 API 키 추가, 응답 어설션 작성, 오프라인 개발 시 Smart Mock 사용. 여러 요청을 시나리오로 연결해 다단계 에이전트 동작을 엔드 투 엔드로 검증.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Holo3: 최고의 컴퓨터 사용 모델?</title>
      <dc:creator>Rihpig</dc:creator>
      <pubDate>Thu, 02 Apr 2026 08:49:39 +0000</pubDate>
      <link>https://dev.to/rihpig/holo3-coegoyi-keompyuteo-sayong-model-k4</link>
      <guid>https://dev.to/rihpig/holo3-coegoyi-keompyuteo-sayong-model-k4</guid>
      <description>&lt;h2&gt;
  
  
  요약 (TL;DR)
&lt;/h2&gt;

&lt;p&gt;2026년 3월 31일, H Company는 Holo3를 출시했습니다. Holo3는 전문가 혼합(mixture-of-experts) 모델로, 선도적인 데스크톱 컴퓨터 사용 벤치마크인 OSWorld-Verified에서 역대 최고 점수인 78.85%를 기록했습니다. 이 모델은 GPT-5.4와 Opus 4.6을 훨씬 저렴한 비용으로 능가합니다. API는 현재 활성화되어 있으며, 35B 변형 모델은 Apache 2.0 라이선스 하에 HuggingFace에서 공개 가중치로 제공됩니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Apidog를 지금 체험해보세요&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  대부분의 개발자가 해결하지 못한 컴퓨터 사용 격차
&lt;/h2&gt;

&lt;p&gt;API 자동화와 CI/CD 파이프라인을 구축해도, 아직 API가 없는 레거시 엔터프라이즈 소프트웨어, REST 이전의 데스크톱 앱, 그리고 여러 UI를 넘나드는 복잡한 워크플로우는 자동화가 어렵습니다.&lt;/p&gt;

&lt;p&gt;기존 RPA 도구(UiPath, Automation Anywhere)는 UI 변경에 매우 취약한 화면 좌표 스크립트에 의존하며, 결국 수동 작업으로 돌아가는 경우가 많습니다.&lt;/p&gt;

&lt;p&gt;컴퓨터 사용 AI는 이 한계를 극복합니다. 스크린샷을 기반으로 클릭, 입력, 스크롤 등 액션을 지시할 수 있어 API가 없는 GUI 환경도 자동화할 수 있습니다. 2026년 3월, H Company가 공개한 Holo3는 이 영역에서 가장 강력한 공개 모델입니다.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 데스크톱 소프트웨어 자동화 워크플로우나 테스트 파이프라인을 구축 중이라면, Holo3 API 구조를 파악하는 것이 중요합니다. Apidog와 함께라면 API 설계/테스트 후 Holo3 호출을 워크플로우에 쉽게 연결할 수 있습니다.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Holo3란 무엇인가요?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://hcompany.ai/holo3" rel="noopener noreferrer"&gt;Holo3&lt;/a&gt;는 컴퓨터 사용 모델입니다. 데스크톱 또는 브라우저의 스크린샷과 작업 지시를 입력하면, 해당 화면에서 실행할 액션(클릭, 입력, 스크롤 등)을 응답합니다. 결과를 받아 반복적으로 실행하며, 최종적으로 작업을 완료합니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3aoh5dvl0jtpi764v8qu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3aoh5dvl0jtpi764v8qu.png" alt="Holo3 예시" width="800" height="616"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;H Company는 두 가지 변형 모델을 제공합니다:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Holo3-122B-A10B&lt;/strong&gt; — 122B 파라미터, 10B 활성. &lt;a href="https://hcompany.ai/holo-models-api" rel="noopener noreferrer"&gt;API 전용&lt;/a&gt;으로 제공되며, 벤치마크 최고 성능을 기록했습니다.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Holo3-35B-A3B&lt;/strong&gt; — 35B 파라미터, 3B 활성. &lt;a href="https://huggingface.co/Hcompany/Holo3-35B-A3B" rel="noopener noreferrer"&gt;Apache 2.0 라이선스&lt;/a&gt;로 공개 가중치 제공, 무료 등급 API 지원, 자체 호스팅 가능.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;MoE(전문가 혼합) 아키텍처는 토큰당 일부 파라미터만 활성화해, 실행 비용을 크게 줄입니다. H Company는 Holo3-122B-A10B가 GPT-5.4 및 Opus 4.6 대비 작업당 비용이 더 낮다고 밝히고 있습니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  OSWorld-Verified: 벤치마크가 실제로 측정하는 것
&lt;/h2&gt;

&lt;p&gt;OSWorld-Verified는 AI 컴퓨터 사용 평가를 위한 업계 표준 벤치마크입니다. 단순 출력 평가가 아니라, 실제 컴퓨터에서 작업을 실행하여 결과를 검증합니다.&lt;/p&gt;

&lt;p&gt;벤치마크 작업 예시:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;단일 앱 작업 (파일 열기, 양식 작성 등)&lt;/li&gt;
&lt;li&gt;교차 앱 워크플로우 (PDF 값 추출 후 이메일 전송 등)&lt;/li&gt;
&lt;li&gt;여러 시스템을 오가며 컨텍스트를 유지하는 장기 시퀀스&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Holo3-122B-A10B는 OSWorld-Verified에서 &lt;strong&gt;78.85%&lt;/strong&gt;의 기록을 세웠습니다. 참고로 기존 SOTA 모델(Anthropic, OpenAI)은 60~65%대였습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F15te4auw5vh59u6lsyf9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F15te4auw5vh59u6lsyf9.png" alt="벤치마크 비교 그래프" width="800" height="631"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;특히 다중 앱 작업 등 복잡한 시나리오에서 Holo3가 기존 모델 대비 높은 정확도를 보입니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  Holo3 훈련 방식: 에이전틱 학습 플라이휠
&lt;/h2&gt;

&lt;p&gt;대부분의 컴퓨터 사용 모델은 정적인 시연 데이터로 훈련됩니다. H Company는 &lt;strong&gt;에이전틱 학습 플라이휠&lt;/strong&gt;이라는 연속 훈련 루프를 도입했습니다:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;합성 내비게이션 데이터&lt;/strong&gt;: 사람이 지시한 시나리오 예제로 데이터 생성&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;도메인 외 증강&lt;/strong&gt;: UI 엣지 케이스, 비정상 상태 등 데이터 다양성 증대&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;큐레이션된 강화학습&lt;/strong&gt;: RL 파이프라인에서 직접 작업 완료율을 극대화하는 데이터만 필터링 사용&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;훈련 데이터는 &lt;strong&gt;합성 환경 팩토리&lt;/strong&gt;에서 생성됩니다. 이 환경은 에이전트가 실제 비즈니스 워크플로우를 경험할 수 있도록 시나리오별 웹앱/엔터프라이즈 앱을 자동 생성합니다.&lt;/p&gt;

&lt;p&gt;이 방식 덕분에 Holo3는 같은 파라미터 규모의 다른 모델(Qwen3.5 등)보다 실제 작업에서 더 뛰어난 성능을 보입니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  Holo3 API 호출 방법
&lt;/h2&gt;

&lt;p&gt;Holo3 API는 "스크린샷 → 액션 → 반복" 패턴을 따릅니다. 실제 연동을 위한 절차는 다음과 같습니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. 인증 설정
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# H Company Inference API base URL&lt;/span&gt;
https://api.hcompany.ai/v1

&lt;span class="c"&gt;# Header&lt;/span&gt;
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://hcompany.ai/holo-models-api" rel="noopener noreferrer"&gt;API 키 발급&lt;/a&gt; 후, 무료 등급으로 Holo3-35B-A3B 사용 가능.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. 작업과 함께 스크린샷 전송
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;httpx&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pyautogui&lt;/span&gt;

&lt;span class="c1"&gt;# 스크린샷 캡처
&lt;/span&gt;&lt;span class="n"&gt;screenshot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pyautogui&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;screenshot&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;screenshot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/tmp/screen.png&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/tmp/screen.png&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rb&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;image_b64&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;b64encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;httpx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.hcompany.ai/v1/computer-use&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer YOUR_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;holo3-122b-a10b&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;task&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Open the invoice folder and find the most recent PDF&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;screenshot&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;image_b64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;screen_width&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1920&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;screen_height&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1080&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. 액션 파싱 및 실행
&lt;/h3&gt;

&lt;p&gt;API는 다음과 같이 구조화된 액션을 반환합니다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"click"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"coordinate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;245&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;380&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"reasoning"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"The invoice folder icon is visible at this position"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;지원 액션: &lt;code&gt;click&lt;/code&gt;, &lt;code&gt;double_click&lt;/code&gt;, &lt;code&gt;right_click&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt;, &lt;code&gt;key&lt;/code&gt;, &lt;code&gt;scroll&lt;/code&gt;, &lt;code&gt;screenshot_request&lt;/code&gt;, &lt;code&gt;task_complete&lt;/code&gt; 등.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. 완료될 때까지 반복
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;run_computer_use_task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;step&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_steps&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;screenshot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;capture_screen&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;call_holo3_api&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;screenshot&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;action&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;action_type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;task_complete&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Done in &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;step&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; steps&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;result&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

        &lt;span class="nf"&gt;execute_action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;TimeoutError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Task not completed within step limit&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Apidog로 Holo3 API 호출 테스트하기
&lt;/h2&gt;

&lt;p&gt;Holo3 API 통합 후, 프로덕션 자동화를 위해 반드시 안정성을 검증해야 합니다. &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;는 이런 테스트에 최적화되어 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;엔드포인트 추가&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
Apidog에서 &lt;code&gt;https://api.hcompany.ai/v1/computer-use&lt;/code&gt;를 HTTP 요청으로 생성, API 키는 환경 변수로 관리하세요.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;요청 유효성 검사&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
Apidog의 테스트 어설션(assertions) 기능을 활용하면 응답 구조를 자동 검증할 수 있습니다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Apidog post-response script 예시&lt;/span&gt;
&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Action type is valid&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;validActions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;click&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;key&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;scroll&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;task_complete&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;screenshot_request&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;validActions&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;include&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;action_type&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Coordinates are within screen bounds&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;action&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;coordinate&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;coordinate&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;be&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;within&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1920&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;coordinate&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;be&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;within&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1080&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;API 목(Mock) 사용&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
Apidog의 Smart Mock을 통해 실제 API 호출 없이 현실적인 Holo3 응답을 생성해, 통합 테스트나 프론트엔드 개발을 병렬로 진행할 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;테스트 시나리오 작성&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
여러 Holo3 요청을 연결해 복잡한 멀티스텝 작업 루프를 시뮬레이션, 실제 배포 전에 시퀀스의 일관성과 안정성을 검증하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  Holo3 vs Claude Computer Use vs OpenAI Operator 비교
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Holo3-122B&lt;/th&gt;
&lt;th&gt;Holo3-35B&lt;/th&gt;
&lt;th&gt;Claude Computer Use&lt;/th&gt;
&lt;th&gt;OpenAI Operator&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OSWorld-Verified&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;78.85%&lt;/td&gt;
&lt;td&gt;~55% (예상)&lt;/td&gt;
&lt;td&gt;~65%&lt;/td&gt;
&lt;td&gt;~62%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;API 접근&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;예&lt;/td&gt;
&lt;td&gt;예 (무료 등급)&lt;/td&gt;
&lt;td&gt;예&lt;/td&gt;
&lt;td&gt;예&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;공개 가중치&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;아니요&lt;/td&gt;
&lt;td&gt;예 (Apache 2.0)&lt;/td&gt;
&lt;td&gt;아니요&lt;/td&gt;
&lt;td&gt;아니요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;자체 호스팅&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;아니요&lt;/td&gt;
&lt;td&gt;예&lt;/td&gt;
&lt;td&gt;아니요&lt;/td&gt;
&lt;td&gt;아니요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GPT-5.4 대비 비용&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;더 낮음&lt;/td&gt;
&lt;td&gt;훨씬 낮음&lt;/td&gt;
&lt;td&gt;비슷함&lt;/td&gt;
&lt;td&gt;GPT-5.4 가격&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;적합 용도&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;프로덕션 엔터프라이즈&lt;/td&gt;
&lt;td&gt;개발/테스트/오픈소스&lt;/td&gt;
&lt;td&gt;Anthropic 생태계&lt;/td&gt;
&lt;td&gt;OpenAI 생태계&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;실무 선택 팁:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Holo3-122B&lt;/strong&gt;: 복잡 다중 앱 워크플로우, 높은 신뢰성/정확성 필요 시&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Holo3-35B&lt;/strong&gt;: 개발·테스트·오픈소스·자체 호스팅 필요 시&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Computer Use&lt;/strong&gt;: Anthropic API 중심 스택&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenAI Operator&lt;/strong&gt;: GPT-5.4 및 OpenAI 단일 공급망 선호 시&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  엔터프라이즈 사용 사례
&lt;/h2&gt;

&lt;p&gt;Holo3는 API 기반 자동화가 불가한 워크플로우도 지원합니다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;레거시 시스템 데이터 입력&lt;/strong&gt;: REST API 없는 2000년대 ERP/CRM UI에 데이터 입출력 자동화&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;교차 플랫폼 조정&lt;/strong&gt;: PDF→스프레드시트→대시보드 등 복수 앱 시퀀스 자동화&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;웹앱 회귀 테스트&lt;/strong&gt;: 취약한 셀레늄 스크립트 대신 Holo3로 자연어 기반 테스트 자동화&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;경쟁 정보 분석&lt;/strong&gt;: 스크래핑 방지 웹사이트에서 구조적 데이터 추출&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;H Company 벤치마크에 따르면, Holo3는 전자상거래/비즈니스/협업/다중 앱 등 다양한 엔터프라이즈 시나리오에서 강력한 성능을 보입니다. 특히 다중 앱 워크플로우에서 경쟁 대비 확실한 우위를 입증했습니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  다음 단계: 적응형 에이전시
&lt;/h2&gt;

&lt;p&gt;H Company는 &lt;strong&gt;적응형 에이전시(Adaptive Agency)&lt;/strong&gt;라는 차세대 방향성을 명확히 제시하고 있습니다. 이는 기존에 본 적 없는 맞춤형 엔터프라이즈 소프트웨어를 실시간으로 탐색·학습해 작업을 수행하는 모델입니다.&lt;/p&gt;

&lt;p&gt;현재의 모델들은 제한된 환경에서만 훈련되어, 미지의 내부 툴에서는 성공률이 낮습니다. 적응형 에이전시는 초회 접촉 시 소프트웨어 구조를 추론하고, 사전 학습 없이 업무를 실행하는 것을 목표로 합니다.&lt;/p&gt;

&lt;p&gt;이 단계가 구현된다면, 엔터프라이즈 컴퓨터 사용 AI의 마지막 한계가 제거될 것입니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  결론
&lt;/h2&gt;

&lt;p&gt;Holo3는 데스크톱 컴퓨터 사용 자동화에서 새로운 기준을 세웠습니다. OSWorld-Verified 78.85%라는 압도적 성능, 복잡한 다중 앱 루프에서의 안정성, 그리고 Holo3-35B-A3B의 무료·오픈소스 가중치 제공으로 개발자 접근성도 높아졌습니다.&lt;/p&gt;

&lt;p&gt;통합 패턴은 단순합니다: 스크린샷 → POST 요청 → 액션 실행 → 반복. Apidog는 응답 검증, 목(mock) 데이터, 통합 테스트 시나리오 등 실제 배포 전 신뢰성을 높일 수 있는 모든 기능을 제공합니다.&lt;/p&gt;

&lt;p&gt;데스크톱 GUI 자동화가 필요하다면, &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog를 무료로 사용&lt;/a&gt;해보고 Holo3 연동을 사전에 검증해보세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  자주 묻는 질문 (FAQ)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Holo3는 무엇인가요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Holo3는 H Company의 컴퓨터 사용 AI 모델로, 스크린샷을 입력으로 받아 데스크톱 또는 브라우저에서 작업을 완료하기 위한 액션(클릭, 키 입력, 스크롤)을 반환합니다. OSWorld-Verified 벤치마크에서 78.85%를 기록하며, 해당 분야 최고 점수입니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Holo3는 오픈 소스인가요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Holo3-35B-A3B는 Apache 2.0 라이선스로 HuggingFace에서 공개 가중치 제공, 자체 호스팅이 가능합니다. 122B 모델은 API 전용입니다. 두 모델 모두 API 무료 등급으로 사용 가능합니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OSWorld 벤치마크는 어떻게 작동하나요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
OSWorld는 AI가 실제 컴퓨터에서 웹 내비게이션, 파일 관리, 교차 앱 워크플로우 등 실제 작업을 수행하도록 테스트합니다. 성공 여부는 작업 후 시스템 상태로 검증하며, 단순 출력 평가가 아닙니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Holo3와 Claude Computer Use의 차이는?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Holo3-122B는 OSWorld-Verified에서 78.85%로 Claude Computer Use(약 65%) 대비 높으며, 작업당 비용도 더 저렴합니다. Anthropic API 기반 팀에는 Claude도 강력한 선택지입니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Holo3를 로컬에서 실행할 수 있나요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
네. Holo3-35B-A3B는 Apache 2.0 라이선스 가중치로 HuggingFace에서 다운로드 후 자체 호스팅이 가능합니다. 122B 모델은 API만 지원합니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;컴퓨터 사용 API의 주요 활용 사례는?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
레거시 시스템 자동화, 교차 앱 데이터 워크플로우, 일반 언어 기반 웹앱 회귀 테스트, 경쟁 정보 스크래핑 등 사람이 수동 처리하던 데스크톱 작업 대체가 가능합니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Holo3 API 통합 테스트 방법은?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Apidog에서 엔드포인트를 등록하고, 응답 어설션을 설정하고, 개발 중엔 API 목(mock) 기능을 활용하세요. 여러 요청을 시나리오로 연결해 실제 배포 전 통합 오류를 사전에 발견할 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Holo3 로드맵의 "적응형 에이전시"란?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
H Company는 미지의 엔터프라이즈 소프트웨어를 실시간 탐색·학습해, 사전 훈련 데이터 없이 UI 구조를 이해하고 작업을 실행하는 모델 개발에 집중하고 있습니다. 이는 맞춤형 엔터프라이즈 배포의 마지막 한계를 제거할 것입니다.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>axios 1.14.1 공급망 공격: 지금 해야 할 일</title>
      <dc:creator>Rihpig</dc:creator>
      <pubDate>Thu, 02 Apr 2026 08:46:44 +0000</pubDate>
      <link>https://dev.to/rihpig/axios-1141-gonggeubmang-gonggyeog-jigeum-haeya-hal-il-1odg</link>
      <guid>https://dev.to/rihpig/axios-1141-gonggeubmang-gonggyeog-jigeum-haeya-hal-il-1odg</guid>
      <description>&lt;h2&gt;
  
  
  요약
&lt;/h2&gt;

&lt;p&gt;2026년 3월 30-31일, npm에서 axios 버전 1.14.1과 0.30.4가 악성 종속성으로 인해 침해당했으며, 이는 감염된 기기에 원격 접속 트로이 목마(RAT)를 설치합니다. 두 버전 모두 게시가 취소되었습니다. 안전한 버전은 1.14.0입니다. &lt;a href="mailto:axios@1.14.1"&gt;axios@1.14.1&lt;/a&gt; 또는 0.30.4를 설치했다면, 해당 기기를 침해당한 것으로 간주하고 모든 자격 증명을 즉시 교체하십시오.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Apidog를 지금 사용해보세요&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  axios란 무엇이며, 왜 중요한가요?
&lt;/h2&gt;

&lt;p&gt;axios는 npm에서 매주 1억 회 다운로드되는 핵심 HTTP 클라이언트 라이브러리입니다. 프런트엔드 프레임워크, 백엔드 Node.js 서비스 그리고 다양한 기업 애플리케이션에서 사용됩니다. 이러한 근본적인 패키지가 침해되면 그 영향은 체인 전체로 확산됩니다.&lt;/p&gt;

&lt;p&gt;2026년 3월 30일부터 31일까지 짧은 기간 동안, 단순히 &lt;code&gt;npm install&lt;/code&gt; 명령을 실행한 개발자들은 자신도 모르는 사이 악성코드를 시스템에 설치했습니다.&lt;/p&gt;

&lt;p&gt;이 사건은 가상의 위험이 아니라 실제로 발생한 공급망 공격입니다. 페이로드는 임의 명령 실행, 데이터 유출, 감염 기기에 상주할 수 있는 멀티스테이지 원격 접속 트로이 목마였습니다.&lt;/p&gt;

&lt;p&gt;팀에서 axios를 사용하고, &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;로 HTTP 클라이언트 통합을 설계/테스트하고 있다면, 다음 배포 전 반드시 아래 내용을 점검하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  공격 타임라인
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;2026년 3월 30일 23:59:12 UTC:&lt;/strong&gt; &lt;code&gt;nrwise@proton.me&lt;/code&gt; 계정이 &lt;code&gt;plain-crypto-js@4.2.1&lt;/code&gt; 악성 패키지 게시. 18시간 전 게시된 4.2.0 버전은 정상.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2026년 3월 31일 00:05:41 UTC:&lt;/strong&gt; Socket 자동화 시스템이 &lt;code&gt;plain-crypto-js@4.2.1&lt;/code&gt;을 6분 만에 악성으로 플래그.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2026년 3월 31일 자정 직후:&lt;/strong&gt; &lt;code&gt;axios@1.14.1&lt;/code&gt;이 npm에 게시되며, 침해된 &lt;code&gt;plain-crypto-js@4.2.1&lt;/code&gt;을 종속성으로 포함. 해당 릴리스는 공식 GitHub 태그에 없음.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2026년 3월 31일 오전:&lt;/strong&gt; GitHub 이슈 &lt;code&gt;#10604&lt;/code&gt;에서 침해 보고. 관리자는 공격자 접근 권한을 즉시 철회하지 못함(더 높은 npm 권한 때문).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2026년 3월 31일:&lt;/strong&gt; &lt;code&gt;axios@1.14.1&lt;/code&gt; 및 &lt;code&gt;axios@0.30.4&lt;/code&gt;가 npm에서 게시 취소됨. 관리자는 토큰 철회, 게시 제어 강화 등 대응 시작.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  공격 방식
&lt;/h2&gt;

&lt;p&gt;공격자는 axios의 게시 워크플로우 허점(장기 지속 npm 토큰)을 악용하여, 정상 릴리스 프로세스 밖에서 악성 버전을 게시했습니다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;새 버전은 &lt;code&gt;plain-crypto-js@4.2.1&lt;/code&gt;(정상처럼 보이는 암호화 유틸리티 타이포스쿼트)을 종속성으로 도입했습니다.&lt;/li&gt;
&lt;li&gt;해당 패키지 내부에는 다단계 페이로드가 포함되어 있었습니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  악성 페이로드 동작
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;설치 시 실행:&lt;/strong&gt; npm 라이프사이클 스크립트로 보조 페이로드 드롭.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RAT 배포:&lt;/strong&gt; 지속적인 백도어 오픈.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;유출:&lt;/strong&gt; 임의 셸 명령 실행, 환경 변수/비밀 읽기, 네트워크로 데이터 전송.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;RAT는 재부팅 후에도 지속됩니다. npm 패키지 제거만으로는 해결되지 않으니 반드시 명시적인 검색/제거 조치가 필요합니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  제가 영향을 받았나요?
&lt;/h2&gt;

&lt;p&gt;다음 조건에 해당하면 영향을 받았을 수 있습니다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;2026년 3월 30일 23:59 UTC ~ 3월 31일 정오 UTC&lt;/strong&gt; 사이에 &lt;code&gt;npm install axios&lt;/code&gt; 또는 &lt;code&gt;npm install&lt;/code&gt; 실행(axios가 package.json에 있을 때)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;node_modules/axios/package.json&lt;/code&gt;에 1.14.1 또는 0.30.4 버전이 표시됨&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;package-lock.json&lt;/code&gt; 또는 &lt;code&gt;yarn.lock&lt;/code&gt;에서 axios가 1.14.1 또는 0.30.4로 해결됨&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  즉시 확인 방법
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 설치된 버전 확인&lt;/span&gt;
npm list axios

&lt;span class="c"&gt;# 잠금 파일에서 axios 버전 찾기&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s1"&gt;'"axios"'&lt;/span&gt; package-lock.json | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-5&lt;/span&gt;

&lt;span class="c"&gt;# plain-crypto-js 존재 여부 확인&lt;/span&gt;
npm list plain-crypto-js
&lt;span class="nb"&gt;ls &lt;/span&gt;node_modules/plain-crypto-js 2&amp;gt;/dev/null &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"INFECTED"&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Not found"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;plain-crypto-js&lt;/code&gt;가 node_modules에 존재하면, 악성 버전을 실제로 실행한 것입니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  지금 해야 할 일
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. axios를 즉시 안전 버전으로 업데이트
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;axios@1.14.0
&lt;span class="c"&gt;# 또는 최신 안전 버전으로 고정&lt;/span&gt;
npm &lt;span class="nb"&gt;install &lt;/span&gt;axios@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;확인:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm list axios
&lt;span class="c"&gt;# 1.14.0 이상(혹은 1.14.x의 클린 릴리스)이 표시되어야 합니다&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. 침해된 버전을 설치했다면
&lt;/h3&gt;

&lt;p&gt;단순 업데이트가 아니라, 해당 기기가 침해된 것으로 간주하고 아래 조치를 수행하세요.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;그 기기에서 접근 가능한 &lt;strong&gt;모든 비밀을 즉시 교체&lt;/strong&gt;: API 키, DB 자격 증명, SSH 키, 클라우드 토큰, &lt;code&gt;.env&lt;/code&gt; 변수 등&lt;/li&gt;
&lt;li&gt;환경 변수 내 민감 정보 노출 여부 확인&lt;/li&gt;
&lt;li&gt;영향받은 기간 내 아웃바운드 네트워크 연결 감사(알 수 없는 IP 연결 탐지)&lt;/li&gt;
&lt;li&gt;지속성 체크: cron 작업, 시작 스크립트, systemd 서비스 등 감염 시점에 추가/수정된 항목 확인&lt;/li&gt;
&lt;li&gt;침해된 버전이 설치된 서버/CI 러너라면 재이미징, 노트북은 자격 증명 전면 교체&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. CI/CD 파이프라인 감사
&lt;/h3&gt;

&lt;p&gt;해당 기간 &lt;code&gt;npm install&lt;/code&gt;을 실행한 빌드 파이프라인이 있다면, CI 환경도 침해되었을 수 있습니다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 빌드 로그에서 axios@1.14.1 설치 내역 확인&lt;/span&gt;

&lt;span class="c"&gt;# CI 환경의 node_modules 점검&lt;/span&gt;
npm list axios plain-crypto-js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;CI 파이프라인에서 접근 가능한 모든 비밀(배포 키, 클라우드 자격 증명, 레지스트리 토큰 등)도 교체하세요.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. 잠금 파일(package-lock.json, yarn.lock) 확인 및 재생성
&lt;/h3&gt;

&lt;p&gt;잠금 파일에 1.14.1이 존재한다면 반드시 재생성해야 합니다.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 잠금 파일 제거 후 재설치&lt;/span&gt;
&lt;span class="nb"&gt;rm &lt;/span&gt;package-lock.json
npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;새 잠금 파일이 안전한 버전으로 axios를 해결하는지 반드시 커밋 전에 확인하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apidog를 사용하여 axios API 호출 감사
&lt;/h2&gt;

&lt;p&gt;API 호출에 axios를 사용한다면, &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;는 종속성 업데이트 후에도 API 요청이 정상 동작하는지 빠르게 확인할 수 있습니다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="mailto:axios@1.14.0"&gt;axios@1.14.0&lt;/a&gt; 이상으로 업데이트 후, Apidog로 기존 API 엔드포인트를 가져와 회귀 테스트를 실행하세요.&lt;/li&gt;
&lt;li&gt;악성 버전이 요청/응답 페이로드를 변조했을 가능성도 있으므로, Apidog의 어설션 기능을 적극 활용하세요.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Apidog 응답 후 어설션 예시&lt;/span&gt;
&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;응답이 깨끗합니다 — 주입된 필드가 없습니다&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;not&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;have&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;property&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;__injected&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;X-Injected-Header&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;be&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Apidog에서 전체 테스트 스위트를 실행하면, 프로덕션 배포 전 HTTP 클라이언트 동작에 대한 신뢰성 기준선을 확보할 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog 무료 체험&lt;/a&gt;으로 HTTP 클라이언트 회귀 테스트를 바로 시작하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  npm의 공급망 공격을 막기 어려운 이유
&lt;/h2&gt;

&lt;p&gt;axios 공격은 예외가 아닙니다. 아래는 주목할 만한 npm 또는 OSS 공급망 공격 사례입니다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;event-stream (2018):&lt;/strong&gt; 악성 관리자가 비트코인 지갑을 노린 페이로드 주입 (주간 800만 다운로드)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ua-parser-js (2021):&lt;/strong&gt; 암호화폐 채굴기/비밀번호 탈취기 포함&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;node-ipc (2022):&lt;/strong&gt; 특정 국가 대상 파괴적 코드 추가&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;xz utils (2024):&lt;/strong&gt; Linux 핵심 압축 라이브러리에 백도어 심기&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;axios (2026):&lt;/strong&gt; 관리자 자격 증명 침해 + 악성 종속성(RAT) 배포&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;공통점: &lt;strong&gt;코드가 아닌 게시 계정에 대한 신뢰&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
npm의 구조상, 관리자 계정이 침해되면 공격자는 동일한 신뢰/권한을 이어받아 악성 패키지를 게시할 수 있습니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  실제로 도움이 되는 공급망 보안 조치
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;조치&lt;/th&gt;
&lt;th&gt;내용&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;잠금 파일(&lt;code&gt;package-lock.json&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;정확한 버전 고정, 자동 업데이트 방지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CI의 &lt;code&gt;npm audit&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;배포 전 알려진 취약점 감지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Socket.dev / Snyk&lt;/td&gt;
&lt;td&gt;행동 분석으로 CVE 등록 전에도 이상 탐지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;npm 2단계 인증&lt;/td&gt;
&lt;td&gt;계정 침해 난이도 상승&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;단기 토큰으로 &lt;code&gt;npm publish&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;토큰 유출 시 노출 기간 최소화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PR에서 잠금 파일 검토&lt;/td&gt;
&lt;td&gt;예기치 못한 종속성 변경 감지&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;axios 팀도 장기 토큰 문제를 인지하고, 더 엄격한 게시 제어로 전환 중입니다. 하지만 공급망 보안은 생태계 전체의 노력이 필요합니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  침해 지표 (IOCs)
&lt;/h2&gt;

&lt;p&gt;Socket 분석 기준:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;악성 패키지:&lt;/strong&gt; &lt;code&gt;plain-crypto-js@4.2.1&lt;/code&gt;, &lt;code&gt;axios@1.14.1&lt;/code&gt;, &lt;code&gt;axios@0.30.4&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;게시자 이메일:&lt;/strong&gt; &lt;code&gt;nrwise@proton.me&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;행동:&lt;/strong&gt; npm 설치 시 네트워크 연결, RAT 지속성, 환경 변수/비밀 유출&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;안전한 axios 버전:&lt;/strong&gt; 1.14.0 이하(0.30.4 제외), 1.13.x, 1.12.x&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;감염 의심 시 &lt;a href="mailto:security@npmjs.com"&gt;security@npmjs.com&lt;/a&gt;으로 신고하고, 로그를 보존하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  결론
&lt;/h2&gt;

&lt;p&gt;axios 1.14.1 침해 사건은 종속성 보안이 일회성 점검이 아니라 &lt;strong&gt;지속적이고 자동화된 프로세스&lt;/strong&gt;이어야 함을 보여줍니다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;버전을 잠그고&lt;/li&gt;
&lt;li&gt;CI에서 Socket과 같은 행동 분석 도구를 실행하며&lt;/li&gt;
&lt;li&gt;이상 징후 발견 시 즉시 자격 증명 교체&lt;/li&gt;
&lt;li&gt;PR/코드 리뷰에서 잠금 파일을 꼼꼼히 살펴보세요&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;axios 업데이트 후 API 통합 신뢰를 재구축하려면, &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;는 배포 전 HTTP 클라이언트 동작을 검증할 수 있는 테스트 시나리오, 어설션, 목킹 도구를 제공합니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;어떤 axios 버전이 침해되었나요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;axios@1.14.1&lt;/code&gt;, &lt;code&gt;axios@0.30.4&lt;/code&gt;입니다. 두 버전 모두 npm에서 게시가 취소되었습니다. 안전한 버전은 &lt;code&gt;1.14.0&lt;/code&gt;(또는 1.13.x, 1.12.x 라인의 모든 버전)입니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;악성 axios 페이로드는 무엇을 하나요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;plain-crypto-js@4.2.1&lt;/code&gt;을 가져와, 원격 접속 트로이 목마(RAT)를 포함한 다단계 페이로드를 배포합니다. RAT는 임의 명령 실행, 환경 변수 및 비밀 유출, 재부팅 후 지속 등이 가능합니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;침해된 버전을 설치했는지 어떻게 알 수 있나요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;npm list axios&lt;/code&gt; 실행 시 1.14.1 또는 0.30.4가 표시되면 영향을 받은 것입니다. 또한 &lt;code&gt;npm list plain-crypto-js&lt;/code&gt;로 plain-crypto-js가 존재하는지 확인하세요.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;axios만 업데이트하면 충분한가요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
아닙니다. 업데이트는 향후 악성 종속성 설치를 막지만, RAT가 이미 기기에 설치되어 있을 수 있습니다. 침해된 버전을 설치했다면 모든 비밀을 교체하고, 기기에서 지속성(백도어) 여부를 반드시 점검하세요.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;공격자는 어떻게 관리자가 아니면서 npm에 게시할 수 있었나요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
공격자는 관리자 자격 증명을 침해, 게시 권한이 있는 장기 npm 토큰을 악용한 것으로 보입니다. axios 팀은 게시 제어 강화를 진행 중입니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;이것과 일반적인 취약점의 차이는 무엇인가요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
취약점은 정상 코드 내 결함입니다. 공급망 공격은 신뢰받는 게시 채널을 통해 악성 코드를 주입합니다. 침해된 코드는 axios GitHub 저장소에는 존재하지 않고, npm 게시에 직접 주입되었습니다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;향후 공급망 공격으로부터 프로젝트를 어떻게 보호할 수 있나요?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
잠금 파일 사용, CI에서 &lt;code&gt;npm audit&lt;/code&gt; 실행, Socket.dev 등 행동 분석 도구 추가, npm 2단계 인증 활성화, 단기 게시 토큰 사용, PR에서 잠금 파일 변경사항 감사 등 보안 수칙을 철저히 준수하세요.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>2026년 최고의 AI 코딩 에이전트? 클로드 코드 vs 오픈클로</title>
      <dc:creator>Rihpig</dc:creator>
      <pubDate>Thu, 02 Apr 2026 08:16:34 +0000</pubDate>
      <link>https://dev.to/rihpig/2026nyeon-coegoyi-ai-koding-eijeonteu-keulrodeu-kodeu-vs-opeunkeulro-557</link>
      <guid>https://dev.to/rihpig/2026nyeon-coegoyi-ai-koding-eijeonteu-keulrodeu-kodeu-vs-opeunkeulro-557</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR / 빠른 답변
&lt;/h2&gt;

&lt;p&gt;Claude Code는 터미널 및 IDE에서 코드 편집, 저장소 인식 추론, 자동 리뷰, 제어된 코딩 루프 등 집중적인 소프트웨어 엔지니어링 워크플로우에 적합합니다. OpenClaw는 다중 채널 메시징, 다중 공급자 라우팅, 플러그인 생태계, 게이트웨이 수준 자동화 등 광범위한 에이전트 작업에 더 강력합니다.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;API 팀에 실용적인 스택은 "Claude Code vs OpenClaw" 단일 선택이 아닙니다. 코딩 및 오케스트레이션에 적합한 도구를 사용한 후, &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;로 API 수명주기를 설계, 테스트, 디버깅, 목킹, 문서화까지 일원화하세요.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;지금 Apidog를 사용해보세요&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  소개
&lt;/h2&gt;

&lt;p&gt;대부분의 "Claude Code vs OpenClaw" 비교글은 한 문장 요약으로 끝나지만, 이는 실제 도구 선택에 부족합니다.&lt;/p&gt;

&lt;p&gt;엔지니어링 팀은 각 도구의 스택 내 역할, 운영 부담, 보안 제어, 실제 사용자 피드백까지 실질적인 정보를 필요로 합니다.&lt;/p&gt;

&lt;p&gt;이 글에서는 다음을 실전 관점에서 비교합니다:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;제품 범위 및 아키텍처&lt;/li&gt;
&lt;li&gt;CLI/자동화 인터페이스&lt;/li&gt;
&lt;li&gt;권한/승인/샌드박싱&lt;/li&gt;
&lt;li&gt;메모리·컨텍스트 모델&lt;/li&gt;
&lt;li&gt;통합/채널 지원 범위&lt;/li&gt;
&lt;li&gt;다중 에이전트 운영 제어&lt;/li&gt;
&lt;li&gt;커뮤니티 사용 사례&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;또한, 코딩 에이전트와 API 수명주기 도구가 분리될 때 Apidog의 핵심 역할도 명확히 설명합니다.&lt;/p&gt;

&lt;p&gt;Apidog를 초기에 언급하는 이유: 코딩 에이전트만으로 API 전체 품질을 담보할 수 없습니다. 스키마 우선 설계, 회귀 테스트, 목킹, 문서화 등 실무 API 품질은 Apidog 같은 일원화된 시스템이 필요합니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  주요 섹션 1: 핵심 제품 차이점
&lt;/h2&gt;

&lt;p&gt;Claude Code와 OpenClaw는 일부 영역이 겹치지만, 완전한 대체재는 아닙니다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code&lt;/strong&gt;: 코드베이스 이해, 파일 편집, 명령 실행, IDE 연동, 세션·CI 워크플로우 등 개발자 코드 루프에 최적화된 에이전트.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenClaw&lt;/strong&gt;: 모델 공급자, 채널 커넥터, 플러그인, 다중 에이전트 라우팅/운영자 제어 등, 게이트웨이 스타일 에이전트 플랫폼.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  일상 업무에서의 의미
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code: 개발자 루프(코드/저장소) 최적화&lt;/li&gt;
&lt;li&gt;&lt;p&gt;OpenClaw: 에이전트 플랫폼(운영/채널) 루프 최적화&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;저장소/PR 중심 팀 → Claude Code 적합&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;다중 채널/공급자/게이트웨이 제어 필요 → OpenClaw 적합&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  빠른 포지셔닝 표
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;범주&lt;/th&gt;
&lt;th&gt;Claude Code&lt;/th&gt;
&lt;th&gt;OpenClaw&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;주요 방향성&lt;/td&gt;
&lt;td&gt;코딩 에이전트&lt;/td&gt;
&lt;td&gt;에이전트 플랫폼 + 게이트웨이&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;주요 가치&lt;/td&gt;
&lt;td&gt;개발자 워크플로우 품질&lt;/td&gt;
&lt;td&gt;통합 및 오케스트레이션 범위&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;인터페이스 우선순위&lt;/td&gt;
&lt;td&gt;터미널 + IDE&lt;/td&gt;
&lt;td&gt;CLI + 채널 + 플러그인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;초기 채택자&lt;/td&gt;
&lt;td&gt;백엔드/플랫폼 개발팀&lt;/td&gt;
&lt;td&gt;자동화 중심 운영팀&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API 수명주기 범위&lt;/td&gt;
&lt;td&gt;부분적(코딩)&lt;/td&gt;
&lt;td&gt;부분적(자동화)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  주요 섹션 2: 기능별 전체 비교
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1) CLI 및 명령 모델
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code&lt;/strong&gt;: 대화/비대화, 세션, 시스템 프롬프트, 모델 설정, 워크트리/도구 제한 등 코딩 중심 CLI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenClaw&lt;/strong&gt;: 에이전트, 모델, 메모리, 승인, 샌드박스, 브라우저, 크론, 웹훅, 채널, 플러그인, 시크릿, 보안 등 운영 전체 CLI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;실전 팁&lt;/strong&gt;: 코딩 업무에 특화된 CLI는 Claude Code, 다중 운영/통합 필요시 OpenClaw 선택&lt;/p&gt;

&lt;h3&gt;
  
  
  2) IDE 통합 및 코딩 UX
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code&lt;/strong&gt;: VS Code 확장, 인라인 diff, 진단, 컨텍스트, IDE 도구 통합 등&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenClaw&lt;/strong&gt;: 코딩 지원은 있으나, IDE 중심보다는 교차 채널/플랫폼 기능 중심&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;실전 팁&lt;/strong&gt;: IDE 네이티브 개발 루프 → Claude Code, 시스템 간 워크플로우 → OpenClaw&lt;/p&gt;

&lt;h3&gt;
  
  
  3) 다중 에이전트 및 위임
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code&lt;/strong&gt;: 하위 에이전트/에이전트 팀 병렬 지원&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenClaw&lt;/strong&gt;: 다중 에이전트 라우팅, 별도 워크스페이스/정책 경계 명확&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;실전 팁&lt;/strong&gt;: 단순 병렬 코딩 → Claude Code, 복잡한 에이전트 분할·운영 → OpenClaw&lt;/p&gt;

&lt;h3&gt;
  
  
  4) 메모리 및 장기 컨텍스트
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code&lt;/strong&gt;: &lt;code&gt;CLAUDE.md&lt;/code&gt; 및 자동 프로젝트 메모리&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenClaw&lt;/strong&gt;: 시맨틱 검색, 파일 색인/검색 명령 등&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;실전 팁&lt;/strong&gt;: 세션 내장형 메모리 → Claude Code, 명시적 운영 메모리 → OpenClaw&lt;/p&gt;

&lt;h3&gt;
  
  
  5) 보안 제어: 권한, 승인, 샌드박싱
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code&lt;/strong&gt;: 권한 설정, hook 기반 정책, 도구 액세스 제어&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenClaw&lt;/strong&gt;: 배포/신뢰 경계, 승인 정책, 게이트웨이 보안 강화&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;실전 팁&lt;/strong&gt;: 코딩 정책 거버넌스 → Claude Code, 운영/채널 보안 강화 → OpenClaw&lt;/p&gt;

&lt;h3&gt;
  
  
  6) 훅(Hooks) 및 결정적 안전 장치
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code&lt;/strong&gt;: 도구 이벤트 기반 결정적 훅&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenClaw&lt;/strong&gt;: 게이트웨이/플러그인/운영 명령 기반 이벤트 자동화&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;실전 팁&lt;/strong&gt;: 코드 표준/명령 안전 → Claude Code, 운영 자동화/통합 → OpenClaw&lt;/p&gt;

&lt;h3&gt;
  
  
  7) 모델 공급자 유연성
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code&lt;/strong&gt;: Claude 우선, 일부 외부 인프라 지원&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenClaw&lt;/strong&gt;: 다수 모델 공급자 카탈로그, 빠른 전환 지원&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;실전 팁&lt;/strong&gt;: Claude만 → Claude Code, 다양한 공급자 혼합 → OpenClaw&lt;/p&gt;

&lt;h3&gt;
  
  
  8) 채널 및 메시징 통합
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code&lt;/strong&gt;: 협업 지원은 있으나 핵심 기능 아님&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenClaw&lt;/strong&gt;: Telegram, Slack, Discord, WhatsApp, Teams 등 다채널 공식 지원&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;실전 팁&lt;/strong&gt;: 채널 중심 자동화 → OpenClaw&lt;/p&gt;

&lt;h3&gt;
  
  
  9) 플러그인 및 확장성
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code&lt;/strong&gt;: MCP, 명령, 훅 기반 코딩 확장성&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenClaw&lt;/strong&gt;: 플러그인 수명주기 관리, 마켓플레이스 패턴&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;실전 팁&lt;/strong&gt;: 단일 개발자 확장 → Claude Code, 플랫폼 빌더 확장 → OpenClaw&lt;/p&gt;

&lt;h3&gt;
  
  
  10) 운영 오버헤드
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code&lt;/strong&gt;: 소프트웨어 팀 온보딩 빠름&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenClaw&lt;/strong&gt;: 게이트웨이 정책, 채널 보안, 운영 성숙도 필요&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;실전 팁&lt;/strong&gt;: 빠른 코딩 전용 → Claude Code, 대규모 오케스트레이션 → OpenClaw&lt;/p&gt;

&lt;h2&gt;
  
  
  주요 섹션 3: 커뮤니티 사용 사례 (현장 신호)
&lt;/h2&gt;

&lt;p&gt;체크리스트보다 실제 커뮤니티 신호가 중요합니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  A. 로컬 머신 액세스 범위
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code: 로컬 실행 강점. 단, 지침 범위(디렉터리/작업 경계) 설계가 중요.&lt;/li&gt;
&lt;li&gt;넓은 권한보다 제한적 작업이 안전. 거버넌스 패턴 필수.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  B. 세션 제한 압력 및 작업 스케줄링
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code: 토큰 소모 많은 작업은 처리량 계획 필수.&lt;/li&gt;
&lt;li&gt;배치/비피크 스케줄링 등 운영 패턴이 실제 팀 정책에 포함됨.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  C. OpenClaw + Telegram 로컬 배포
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;OpenClaw: 원격 채널 기반 워크플로우에서 보안 강화 후 성공적 배포 사례.&lt;/li&gt;
&lt;li&gt;터미널 외 채널/보안 설계가 중요 도입 관문.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  D. 코딩 워커 포함 OpenClaw 오케스트레이션
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;OpenClaw: 다중 에이전트 파이프라인의 제어 평면 역할.&lt;/li&gt;
&lt;li&gt;Claude Code: 코딩 전문 에이전트로 파이프라인 내 활용.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  E. 채널 우선 자동화 실험
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;OpenClaw: 로봇 운영 등 채널 네이티브 자동화에서 강력한 실험 속도.&lt;/li&gt;
&lt;li&gt;범용 코딩 에이전트 범위를 넘어서는 활용.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  사회적 신호 요약
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code: 저장소/IDE 중심 엔지니어링에 최적.&lt;/li&gt;
&lt;li&gt;OpenClaw: 인터페이스/채널/에이전트 오케스트레이션에 최적.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  주요 섹션 4: 온보딩 비용 및 온보딩 시간
&lt;/h2&gt;

&lt;p&gt;단순 기능 비교가 아니라, 실제 도구 가격과 설정 부담도 평가해야 합니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  온보딩 비용 스냅샷 (2026년 3월 27일 기준)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th&gt;Claude Code&lt;/th&gt;
&lt;th&gt;OpenClaw&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;기본 제품 액세스&lt;/td&gt;
&lt;td&gt;Anthropic 플랜 포함(월 $20~$100) 또는 API 종량제&lt;/td&gt;
&lt;td&gt;MIT 오픈소스(플랫폼 라이선스 무료)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;직접 라이선스&lt;/td&gt;
&lt;td&gt;구독 플랜 필요&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;사용 비용&lt;/td&gt;
&lt;td&gt;Claude 제한·API 토큰&lt;/td&gt;
&lt;td&gt;모델 API 사용량+인프라&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;예산 계획&lt;/td&gt;
&lt;td&gt;좌석/토큰 예산&lt;/td&gt;
&lt;td&gt;인프라+공급자-토큰 예산&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  온보딩 시간 스냅샷
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;단계&lt;/th&gt;
&lt;th&gt;Claude Code&lt;/th&gt;
&lt;th&gt;OpenClaw&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;첫 설치&lt;/td&gt;
&lt;td&gt;빠름(Node+CLI 인증)&lt;/td&gt;
&lt;td&gt;빠름(설치+&lt;code&gt;openclaw onboard&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;첫 사용&lt;/td&gt;
&lt;td&gt;터미널/IDE 코딩 빠름&lt;/td&gt;
&lt;td&gt;대시보드 채팅 빠름, 채널 연결 추가 시간&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;프로덕션 거버넌스&lt;/td&gt;
&lt;td&gt;중간&lt;/td&gt;
&lt;td&gt;중간~높음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;최대 설정 위험&lt;/td&gt;
&lt;td&gt;정책·권한 드리프트&lt;/td&gt;
&lt;td&gt;게이트웨이/채널 보안 경계&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  실용적 해석
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Anthropic 예산 있다면 Claude Code가 예측 가능.&lt;/li&gt;
&lt;li&gt;OpenClaw는 소프트웨어 자체는 무료지만, 총 비용은 공급자/인프라/운영에 따라 달라짐.&lt;/li&gt;
&lt;li&gt;코딩 전용 워크플로우라면 Claude Code가 빠름.&lt;/li&gt;
&lt;li&gt;OpenClaw는 채널/보안 요구에 따라 온보딩 시간 증감.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  주요 섹션 5: Apidog가 적합한 위치 (API 팀에게는 필수적)
&lt;/h2&gt;

&lt;p&gt;Claude Code와 OpenClaw는 API 수명주기 거버넌스를 대체할 수 없습니다.&lt;/p&gt;

&lt;p&gt;이 둘은 코드 생성/자동화에 특화되어 있지만, API 설계 계약, 회귀 테스트, 목킹 환경, 프로덕션 문서화는 Apidog 같은 API 플랫폼이 필수적입니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  권장 아키텍처
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Claude Code 또는 OpenClaw로 서비스 구현/리팩토링&lt;/li&gt;
&lt;li&gt;API 정의/스키마는 Apidog에 관리&lt;/li&gt;
&lt;li&gt;Apidog에서 엔드포인트 회귀·검증 시나리오 실행&lt;/li&gt;
&lt;li&gt;Apidog로 API 문서 게시/관리&lt;/li&gt;
&lt;li&gt;Apidog 환경/목킹 기능으로 프론트엔드/QA 병렬 작업 지원&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  예시: 에이전트 + Apidog 검증 루프
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 코딩 에이전트로 service 코드 생성/개선&lt;/span&gt;
npm run dev

&lt;span class="c"&gt;# Apidog에서:&lt;/span&gt;
&lt;span class="c"&gt;# 1) OpenAPI/컬렉션 임포트&lt;/span&gt;
&lt;span class="c"&gt;# 2) 환경 및 인증 변수 설정&lt;/span&gt;
&lt;span class="c"&gt;# 3) 성공/실패 시나리오 어서션 작성&lt;/span&gt;
&lt;span class="c"&gt;# 4) 회귀 스위트로 저장&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  회귀 시나리오용 예시 페이로드
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="nl"&gt;"request"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="nl"&gt;"method"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"POST"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/v1/invoices"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="nl"&gt;"body"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"customerId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cus_1001"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"amount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1499&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"currency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"USD"&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="nl"&gt;"expect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;201&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="nl"&gt;"json"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"customerId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cus_1001"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"currency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"USD"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"amount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1499&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;실전 팁&lt;/strong&gt;: 에이전트+Apidog 조합이 단독 에이전트 루프보다 회귀 위험을 줄이고 품질을 보장합니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  주요 섹션 6: 팀 프로필별 의사결정 프레임워크
&lt;/h2&gt;

&lt;h3&gt;
  
  
  다음 경우 Claude Code를 먼저 선택
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;병목이 코드베이스 개발자 속도일 때&lt;/li&gt;
&lt;li&gt;터미널/IDE 중심 개발 팀&lt;/li&gt;
&lt;li&gt;코딩 UX/정책 hook이 중요한 팀&lt;/li&gt;
&lt;li&gt;광범위한 채널 에이전트 운영이 필요 없는 팀&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  다음 경우 OpenClaw를 먼저 선택
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;어시스턴트가 채팅 채널/운영 표면 전반에 걸쳐야 할 때&lt;/li&gt;
&lt;li&gt;다중 모델 공급자 유연성이 초기부터 필요할 때&lt;/li&gt;
&lt;li&gt;명확한 게이트웨이 운영/라우팅 제어 필요&lt;/li&gt;
&lt;li&gt;더 높은 운영 복잡성 감당 가능&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  다음 경우 둘 다 사용
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;OpenClaw로 오케스트레이션/제어, Claude Code로 코딩 전문가 역할 분담&lt;/li&gt;
&lt;li&gt;팀 내 거버넌스 경계 관리 역량 확보&lt;/li&gt;
&lt;li&gt;도구-역할 혼란 없이 명확한 역할 분리&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  다음 경우 항상 Apidog와 함께
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;API 계약 신뢰성, 회귀 안전성, 문서 품질이 필요한 경우&lt;/li&gt;
&lt;li&gt;백엔드/QA/프론트/문서 이해관계자들이 하나의 API 작업 공간 필요&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  주요 섹션 7: 30일 파일럿 계획 (권장)
&lt;/h2&gt;

&lt;p&gt;측정 없이 의견만으로 선택하지 마세요. 아래 절차로 검증하세요.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PR 주기, 유출 API 결함, 회귀 테스트 통과율, 정책 위반 사고 등 지표 선정&lt;/li&gt;
&lt;li&gt;대표 서비스 2개(예: 하나는 CRUD API, 하나는 통합 API) 선정&lt;/li&gt;
&lt;li&gt;각 후보 도구에서 동일한 작업 팩 실행&lt;/li&gt;
&lt;li&gt;두 도구 모두에서 Apidog로 API 검증 고정&lt;/li&gt;
&lt;li&gt;운영 비용 비교&lt;/li&gt;
&lt;li&gt;엔지니어링/보안 팀과 결과 검토&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;이렇게 하면 방어 가능하고 효과적인 도구 결정을 내릴 수 있습니다.&lt;/p&gt;

&lt;h2&gt;
  
  
  주요 섹션 8: 팀 유형별 구현 플레이북
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;도입에서 실제 배포로 전환할 때 아래 플레이북을 참고하세요.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  플레이북 A: 스타트업 API 팀 (5~12명)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;초반 60일은 코딩 에이전트 1개만 집중&lt;/li&gt;
&lt;li&gt;코드 리뷰/명령 안전 정책 표준화&lt;/li&gt;
&lt;li&gt;모든 API 계약/회귀 작업은 Apidog에 집중&lt;/li&gt;
&lt;li&gt;주간 리드타임/롤백/API 테스트 통과율 지표 관리&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;이유&lt;/strong&gt;: 자동화 이득과 품질 일관성, 프레임워크 확산 방지&lt;/p&gt;

&lt;h3&gt;
  
  
  플레이북 B: 중규모 다중 제품 팀
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;저장소 중심 팀: Claude Code, 채널 중심 운영팀: OpenClaw&lt;/li&gt;
&lt;li&gt;모든 제품은 공유 Apidog 작업공간 분류&lt;/li&gt;
&lt;li&gt;엔드포인트 변경시 Apidog 테스트 증거와 함께 변경 노트 게시 요구&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;이유&lt;/strong&gt;: 팀별 최적화 + Apidog 품질 관리 계층 확보&lt;/p&gt;

&lt;h3&gt;
  
  
  플레이북 C: 플랫폼/DevEx 팀
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;채널/시스템 전반 에이전트 오케스트레이션: OpenClaw&lt;/li&gt;
&lt;li&gt;코드베이스 작업/리팩토링: Claude Code 병행&lt;/li&gt;
&lt;li&gt;신뢰 경계/승인 규칙 명확화&lt;/li&gt;
&lt;li&gt;배포 전 Apidog로 API 동작 검사 강제&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;이유&lt;/strong&gt;: 오케스트레이션-코딩 분리, 자동화 범위 혼란 최소화&lt;/p&gt;

&lt;h2&gt;
  
  
  결론
&lt;/h2&gt;

&lt;p&gt;Claude Code와 OpenClaw는 각각 강점이 다릅니다.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code&lt;/strong&gt;: 순수 코딩 실행에 최적&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenClaw&lt;/strong&gt;: 오케스트레이션/채널 통합에 최적&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;커뮤니티 사용 사례&lt;/strong&gt;: 실제 현장에서 위 구분이 확인됨&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API 품질&lt;/strong&gt;: 둘 다 &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;과 함께 사용할 때 이상적&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;목표가 API 품질/속도라면&lt;/strong&gt; 코딩/오케스트레이션 계층은 팀에 맞게 선택, API 수명주기 관리는 항상 Apidog에서 표준화하세요.&lt;/p&gt;

&lt;h2&gt;
  
  
  자주 묻는 질문 (FAQ)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  이것이 정말 일대일 직접 비교인가요?
&lt;/h3&gt;

&lt;p&gt;아닙니다. 일부 기능은 겹치지만, Claude Code는 코딩 중심, OpenClaw는 오케스트레이션 중심입니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  OpenClaw가 Claude Code를 완전히 대체할 수 있나요?
&lt;/h3&gt;

&lt;p&gt;코딩 깊이에 따라 다릅니다. OpenClaw로 자동화는 가능하지만, 일상 코딩 루프에서는 Claude Code가 더 강력할 때가 많습니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  Claude Code가 채널 기반 워크플로우에서 OpenClaw를 대체할 수 있나요?
&lt;/h3&gt;

&lt;p&gt;채널 중심 운영이라면 OpenClaw가 더 자연스럽습니다. 채널 통합이 문서화된 주요 기능입니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  기술 비교에 커뮤니티 신호를 포함하는 이유는?
&lt;/h3&gt;

&lt;p&gt;공식 사례 이전에 실제 사용자의 현장 경험이 도구의 한계, 실패/성공 패턴을 더 빨리 보여주기 때문입니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  Apidog가 두 도구 중 하나와 겹치나요?
&lt;/h3&gt;

&lt;p&gt;Apidog는 둘 다 보완합니다. 코딩 에이전트와 경쟁하지 않고, API 수명주기·협업 품질을 책임집니다.&lt;/p&gt;

&lt;h3&gt;
  
  
  시작하는 가장 안전한 방법은?
&lt;/h3&gt;

&lt;p&gt;스코프를 좁혀서 시작하세요: 제한된 범위, 명확한 승인, 감사 가능한 테스트 흐름, 그리고 Apidog 기반 API 검증까지 적용하는 것이 안전합니다.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
