<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>하루 한 AI</title>
	<atom:link href="https://jspulsar.dev/feed/" rel="self" type="application/rss+xml" />
	<link>https://jspulsar.dev</link>
	<description>매일 하나씩, AI로 똑똑해지기</description>
	<lastBuildDate>Wed, 03 Jun 2026 14:06:54 +0000</lastBuildDate>
	<language>ko-KR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://jspulsar.dev/wp-content/uploads/2026/02/favicon_512-150x150.png</url>
	<title>하루 한 AI</title>
	<link>https://jspulsar.dev</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>KV 캐시가 뭐길래 — 긴 컨텍스트가 빠르게 비싸지는 이유</title>
		<link>https://jspulsar.dev/kv-cache-context-window-explained/</link>
					<comments>https://jspulsar.dev/kv-cache-context-window-explained/#respond</comments>
		
		<dc:creator><![CDATA[jshi2504]]></dc:creator>
		<pubDate>Wed, 03 Jun 2026 13:53:42 +0000</pubDate>
				<category><![CDATA[로컬AI]]></category>
		<category><![CDATA[학습]]></category>
		<category><![CDATA[claude api]]></category>
		<category><![CDATA[context window]]></category>
		<category><![CDATA[gemini api]]></category>
		<category><![CDATA[kv 캐시]]></category>
		<category><![CDATA[llm 추론]]></category>
		<category><![CDATA[로컬 ai]]></category>
		<guid isPermaLink="false">https://jspulsar.dev/?p=1350</guid>

					<description><![CDATA[Claude 200K, Gemini 1M이 왜 갑자기 비싸지는지 KV 캐시의 메모리 구조로 풀었다. 컨텍스트 윈도우와 KV 캐시 크기가 어떻게 연결되는지, GQA·PagedAttention·RadixAttention이 이 문제를 어떻게 다르게 푸는지 한국어로 정리한다.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Gemini 2.5 Pro 가격표를 보면 한 줄에 눈이 멈춘다. 200K 토큰을 넘는 순간 input 단가가 정확히 두 배가 된다. Claude도 2024 시점엔 비슷한 임계점이 있었다. &#8220;왜 갑자기 두 배지?&#8221;라는 질문에 한국어 인터넷은 &#8220;1M 컨텍스트는 1000배 비싸진다&#8221; 같은 단정으로 답하곤 한다. 원전을 찾으려고 한참 헤맸는데 못 찾았다. 대신 공식 자료들을 따라가며 진짜로 일어나는 일을 풀어봤다 — 답은 책상 위에 펼쳐둔 책 더미에 있다. 이 글은 그 KV 캐시와 컨텍스트 윈도우(context window)의 무게를 한국어 직관으로 정리한다.</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="768" src="https://jspulsar.dev/wp-content/uploads/2026/06/kv-cache-formula-screenshot-1024x768.png" alt="" class="wp-image-1351" srcset="https://jspulsar.dev/wp-content/uploads/2026/06/kv-cache-formula-screenshot-1024x768.png 1024w, https://jspulsar.dev/wp-content/uploads/2026/06/kv-cache-formula-screenshot-300x225.png 300w, https://jspulsar.dev/wp-content/uploads/2026/06/kv-cache-formula-screenshot-768x576.png 768w, https://jspulsar.dev/wp-content/uploads/2026/06/kv-cache-formula-screenshot-600x450.png 600w, https://jspulsar.dev/wp-content/uploads/2026/06/kv-cache-formula-screenshot.png 1280w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 1. NVIDIA 공식 블로그의 KV 캐시 공식 설명</em></p>



<h2 class="wp-block-heading">TL;DR</h2>



<ul class="wp-block-list">
<li>KV 캐시는 트랜스포머가 매 토큰의 key·value 벡터를 보관하는 메모리다. 컨텍스트 윈도우가 길어질수록 무게가 늘어 GPU 메모리도 빠르게 차고 API 비용도 같이 올라간다.</li>



<li>Llama 3.1 8B(BF16) 기준 토큰 1개가 <strong>128 KB</strong>. 32K 컨텍스트 = <strong>4 GB</strong>, 128K = <strong>16 GB</strong>, 1M = <strong>128 GB</strong>. 모델 가중치(16GB)는 별도다.</li>



<li>Gemini 2.5 Pro는 200K 초과 시 input <strong>2배</strong>·output <strong>1.5배</strong>(Google AI 공식). Claude는 2024 시점엔 같은 임계점이었으나 2026 현재 <strong>Opus 4.8·4.7·4.6·Sonnet 4.6</strong>은 1M까지 standard pricing이다 — 뒤에서 시점 차로 따로 적었다.</li>



<li>PagedAttention(공간)·RadixAttention(상태)·GQA(원천) 셋은 같은 KV 캐시 문제를 다른 축에서 푸는 한 묶음이다.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">KV 캐시·Context Window가 뭔가</h2>



<p class="wp-block-paragraph">용어부터 간단히 정리한다. <strong>KV 캐시</strong>는 트랜스포머가 매 토큰의 key·value 벡터를 메모리에 저장해 다음 토큰을 만들 때 재사용하는 자료구조다. **컨텍스트 윈도우(context window)**는 한 번에 그 KV로 보관할 수 있는 토큰 수의 한도다. Anthropic 공식 문서는 컨텍스트 윈도우를 모델의 <a href="https://platform.claude.com/docs/en/build-with-claude/context-windows" target="_blank" rel="noopener">&#8220;working memory&#8221;</a>라고 부른다.</p>



<p class="wp-block-paragraph">이 글의 자리는 <a href="https://jspulsar.dev/vllm-pagedattention-explained/">vLLM이 PagedAttention으로 단편화를 푼 이야기</a>와 <a href="https://jspulsar.dev/sglang-radixattention-explained/">SGLang이 RadixAttention으로 prefix 재계산을 푼 이야기</a>의 <strong>뿌리</strong>다. 두 글이 KV 캐시의 증상(단편화·중복 계산)을 푼 약이었다면, 여기서는 그 진앙인 KV 캐시 자체를 본다. Yao Fu(2024)는 <a href="https://arxiv.org/abs/2405.08944" target="_blank" rel="noopener">긴 컨텍스트 배포의 어려움을 KV 캐시 단일 원인으로 환원</a>한다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">책상 비유로 KV 캐시 풀어보기</h2>



<p class="wp-block-paragraph">LLM은 토큰을 하나씩 생성한다. 다음 토큰을 만들려면 어텐션이 앞 토큰들의 key·value 벡터를 전부 봐야 하고, 매번 다시 계산하기엔 비싸니 메모리에 저장해둔다 — 그게 KV 캐시다. 토큰을 1개 더 생성할 때마다 <strong>새 K·V 한 묶음이 메모리에 더해진다.</strong> 1개씩, 선형으로.</p>



<p class="wp-block-paragraph"><a href="https://jspulsar.dev/sglang-radixattention-explained/">SGLang에서 RadixAttention을 도서관 책장으로 풀었듯</a>, KV 캐시 자체는 책상 위에 펼친 책 더미 비유로 풀린다.</p>



<p class="wp-block-paragraph">책상 한 장을 떠올려보자. <strong>책상의 크기</strong>가 컨텍스트 윈도우 한도다 — 8K, 128K, 1M. <strong>한 페이지</strong>는 토큰 1개고, 그 페이지에 그 토큰의 key·value 벡터가 적혀 있다. <strong>펼쳐둔 책 전체의 무게</strong>가 KV 캐시 메모리다. <strong>한 페이지의 무게</strong>는 모델 크기·정밀도·KV head 수에 따라 정해진다 — Llama 3.1 8B(BF16) 한 페이지가 128 KB인데, 정확 계산은 뒤에서 다시 본다.</p>



<p class="wp-block-paragraph">다음 토큰을 쓰려면 책상 위 모든 페이지를 한 번씩 훑어야 한다. 그게 어텐션 연산이다. 책상에 펼친 책이 1만 페이지면 새 한 페이지를 더 쓸 때 1만 페이지를 같이 본다.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="862" height="506" src="https://jspulsar.dev/wp-content/uploads/2026/06/kv-cache-context-window-diagram.png" alt="" class="wp-image-1352" srcset="https://jspulsar.dev/wp-content/uploads/2026/06/kv-cache-context-window-diagram.png 862w, https://jspulsar.dev/wp-content/uploads/2026/06/kv-cache-context-window-diagram-300x176.png 300w, https://jspulsar.dev/wp-content/uploads/2026/06/kv-cache-context-window-diagram-768x451.png 768w, https://jspulsar.dev/wp-content/uploads/2026/06/kv-cache-context-window-diagram-600x352.png 600w" sizes="(max-width: 862px) 100vw, 862px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 2. 책상 = context window, 펼친 책의 무게 = KV 캐시 메모리, 한 페이지 = 토큰 1개</em></p>



<p class="wp-block-paragraph">비유는 여기까지가 깔끔하다. 다음은 이걸 토큰당 KB 단위 숫자로 옮겨보는 내용이다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">모델별 정확 수치 — Llama 3.1 8B/70B 컨텍스트별 표</h2>



<p class="wp-block-paragraph">KV 캐시 크기는 닫힌 공식으로 계산된다. NVIDIA Technical Blog·Lyceum·Morph가 동일하게 인용하는 <a href="https://developer.nvidia.com/blog/mastering-llm-techniques-inference-optimization/" target="_blank" rel="noopener">표준 공식</a>은 다음과 같다.</p>



<pre class="wp-block-code"><code>KV 캐시 (bytes) = 2 × num_layers × num_kv_heads × head_dim × seq_len × dtype_bytes
</code></pre>



<p class="wp-block-paragraph">여기서 2는 K와 V 두 텐서, <code>num_layers</code>는 트랜스포머 블록 수, <code>num_kv_heads</code>는 GQA 이후 KV head 수, <code>head_dim</code>은 헤드 차원, <code>seq_len</code>은 컨텍스트 토큰 수, <code>dtype_bytes</code>는 정밀도 바이트(BF16/FP16 = 2, FP8 = 1)다. Llama 3.1 8B는 <a href="https://huggingface.co/NousResearch/Meta-Llama-3.1-8B/raw/main/config.json" target="_blank" rel="noopener">HuggingFace config.json</a>에 <code>num_hidden_layers=32, num_key_value_heads=8, hidden_size=4096, num_attention_heads=32</code>로 박혀 있다. head_dim은 4096/32 = 128. 토큰 1개당 KV 캐시는 <code>2 × 32 × 8 × 128 × 2 = 131,072 bytes</code>, <strong>128 KB</strong>다.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="768" src="https://jspulsar.dev/wp-content/uploads/2026/06/llama-3-1-config-json-1024x768.png" alt="" class="wp-image-1353" srcset="https://jspulsar.dev/wp-content/uploads/2026/06/llama-3-1-config-json-1024x768.png 1024w, https://jspulsar.dev/wp-content/uploads/2026/06/llama-3-1-config-json-300x225.png 300w, https://jspulsar.dev/wp-content/uploads/2026/06/llama-3-1-config-json-768x576.png 768w, https://jspulsar.dev/wp-content/uploads/2026/06/llama-3-1-config-json-600x450.png 600w, https://jspulsar.dev/wp-content/uploads/2026/06/llama-3-1-config-json.png 1280w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 3. Llama 3.1 8B config.json — num_hidden_layers=32, num_key_value_heads=8</em></p>



<p class="wp-block-paragraph">여기에 컨텍스트 토큰 수를 곱하면 모델별 KV 캐시가 나온다. 단일 시퀀스(batch=1) 기준이다.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Context</th><th>Llama 3.1 8B (128 KB/token)</th><th>Llama 3.1 70B (320 KB/token)</th></tr></thead><tbody><tr><td>8K</td><td><strong>1.0 GB</strong></td><td><strong>2.5 GB</strong></td></tr><tr><td>32K</td><td><strong>4.0 GB</strong></td><td><strong>10 GB</strong></td></tr><tr><td>128K</td><td><strong>16 GB</strong></td><td><strong>40 GB</strong></td></tr><tr><td>1M</td><td><strong>128 GB</strong></td><td><strong>320 GB</strong></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">표만 보면 &#8220;지수적으로 늘어난다&#8221;고 적고 싶어진다. 정확히는 그렇지 않다. <strong>단일 시퀀스의 KV 캐시 자체는 토큰 수에 선형으로 늘어난다.</strong> 다만 모델 크기(8B → 70B), 정밀도, 동시 사용자 수가 곱셈으로 붙으면서 GPU 한 장의 한계가 빠르게 닥친다. &#8220;기하급수적&#8221;보다는 &#8220;선형이지만 곱셈으로 부풀어 오른다&#8221;가 더 정확하다.</p>



<p class="wp-block-paragraph">숫자로 보면 분명하다. 70B를 1M로 돌리면 KV만 320 GB라 H100 80GB 한 장에 KV조차 못 들어가고, 가중치(BF16 약 140 GB)까지 합치면 H100 4~5장에 나눠 담아야 한다. 8B도 1M이면 KV 128 GB로 80GB 한계를 넘는다.</p>



<h3 class="wp-block-heading">GQA가 없었다면 더 무거웠다</h3>



<p class="wp-block-paragraph">표의 무게는 Llama 3.1이 GQA(grouped-query attention)를 쓴 결과다. <code>num_key_value_heads</code>가 query head 수(8B는 32, 70B는 64)보다 작아서(둘 다 8) KV 캐시가 줄어 있다. MHA였다면 8B는 토큰당 512 KB로 4배, 70B는 토큰당 2.5 MB로 8배 더 컸을 거다. 비교 대상을 빼고 &#8220;GQA는 8배 절약&#8221;이라고만 적으면 8B는 4배라 모순처럼 보이는데 둘 다 맞는 숫자다. GQA는 <a href="https://arxiv.org/abs/2305.13245" target="_blank" rel="noopener">Ainslie 외 EMNLP 2023</a>이 제안해 Llama 2 70B(2023-07)에서 처음 채택됐고 Llama 3부터 전 사이즈로 통일됐다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">API 가격 임계점 — Gemini 2.5 Pro와 Claude 시점 차</h2>



<p class="wp-block-paragraph">메모리 수치를 가격에 연결할 차례다. 가장 깨끗하게 임계점이 보이는 모델이 Gemini 2.5 Pro다. <a href="https://ai.google.dev/gemini-api/docs/pricing" target="_blank" rel="noopener">Google AI 공식 pricing</a>은 input을 ≤200K 구간 $1.25/MTok, &gt;200K 구간 <strong>$2.50/MTok</strong>(정확히 2배), output은 ≤200K $10/MTok, &gt;200K <strong>$15/MTok</strong>(1.5배)으로 적는다. 같은 모델인데 200K 라인 하나를 기준으로 단가가 갈린다.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>2024 vs 2026 — Claude 200K 임계점의 시점 차</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>시점</th><th>상황</th></tr></thead><tbody><tr><td>2024-08 ~ 2025</td><td>Claude Sonnet 4·4.5, 200K 초과 시 input $3→$6 (2배), output $15→$22.50 (1.5배). 1M 베타·Tier 4+ 한정</td></tr><tr><td>2026-04 이후 (현재)</td><td><strong>Opus 4.8 · 4.7 · 4.6 · Sonnet 4.6</strong>은 <a href="https://platform.claude.com/docs/en/about-claude/pricing" target="_blank" rel="noopener">1M까지 standard pricing</a>. 임계점 사라짐. 공식 docs가 &#8220;900k-token 요청도 9k-token 요청과 같은 per-token rate로 청구된다&#8221;고 적는다 (Anthropic 모델 버전은 빈번하게 갱신되니 docs 직접 확인 권장)</td></tr><tr><td>차이</td><td>글이 인용되는 시점에 따라 다르다. 2024 시점에 적힌 글이 그대로 2026까지 돌아다니면서 &#8220;Claude 200K = 2배&#8221;가 굳어진 모양새다</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">그러니까 &#8220;Claude 200K부터 2배&#8221;를 검색에서 본 적이 있다면 그건 2024 시점의 사실이다. 2026 현재 Claude 신모델 라인에서는 그 임계점이 사라졌다. 임계점이 여전히 명시적으로 살아 있는 모델은 지금은 Gemini 2.5 Pro 쪽이다.</p>
</blockquote>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="768" src="https://jspulsar.dev/wp-content/uploads/2026/06/gemini-pricing-200k-threshold-1024x768.png" alt="" class="wp-image-1354" srcset="https://jspulsar.dev/wp-content/uploads/2026/06/gemini-pricing-200k-threshold-1024x768.png 1024w, https://jspulsar.dev/wp-content/uploads/2026/06/gemini-pricing-200k-threshold-300x225.png 300w, https://jspulsar.dev/wp-content/uploads/2026/06/gemini-pricing-200k-threshold-768x576.png 768w, https://jspulsar.dev/wp-content/uploads/2026/06/gemini-pricing-200k-threshold-600x450.png 600w, https://jspulsar.dev/wp-content/uploads/2026/06/gemini-pricing-200k-threshold.png 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 4. Gemini 2.5 Pro의 200K 임계점 — input 2배, output 1.5배</em></p>



<p class="wp-block-paragraph">가격 얘기에서 자주 보이는 단정이 하나 더 있다. 인터넷에서 &#8220;1M 컨텍스트는 1000배 비싸진다&#8221; 같은 문장을 종종 본다. 원전을 못 찾았다. 한국어·영어 검색 어디에도, arxiv·공식 pricing 어디에도 1000배라는 단일 출처가 잡히지 않는다. 가장 가까운 정량 인용은 <a href="https://arxiv.org/abs/2405.08944" target="_blank" rel="noopener">Yao Fu(2024)</a>가 7B 모델 1M 토큰 KV가 100GB+ VRAM을 요구한다고 적는 정도다. 그래서 여기서는 1000배는 빼고 검증되는 숫자만 적었다 — Llama 3.1 8B 8K→1M KV가 1GB→128GB로 <strong>128배</strong>, Gemini 2.5 Pro 200K 초과 input <strong>2배</strong>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="768" src="https://jspulsar.dev/wp-content/uploads/2026/06/claude-pricing-1m-standard-1-1024x768.png" alt="" class="wp-image-1356" srcset="https://jspulsar.dev/wp-content/uploads/2026/06/claude-pricing-1m-standard-1-1024x768.png 1024w, https://jspulsar.dev/wp-content/uploads/2026/06/claude-pricing-1m-standard-1-300x225.png 300w, https://jspulsar.dev/wp-content/uploads/2026/06/claude-pricing-1m-standard-1-768x576.png 768w, https://jspulsar.dev/wp-content/uploads/2026/06/claude-pricing-1m-standard-1-600x450.png 600w, https://jspulsar.dev/wp-content/uploads/2026/06/claude-pricing-1m-standard-1.png 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 5. Anthropic 공식 docs — Opus 4.8·4.7·4.6·Sonnet 4.6은 1M까지 standard pricing</em></p>



<p class="wp-block-paragraph">200K·1M 임계점은 마법이 아니라 H100 80GB 한 장이 KV를 더 들 수 없는 지점이 가격에 비친 모양새다. 그 너머는 GPU 여러 장과 더 복잡한 인프라가 붙어야 하니 단가가 갈린다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">세 길의 정리 — GQA · PagedAttention · RadixAttention</h2>



<p class="wp-block-paragraph">여기까지 보면 KV 캐시는 한 문제, 세 길이 있다.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>길</th><th>차원</th><th>무엇을 줄이나</th><th>1차 출처</th></tr></thead><tbody><tr><td><strong>GQA / MQA</strong></td><td>원천 (KV head 수 자체)</td><td>KV head 수를 query head보다 줄여 한 페이지의 무게 자체 감소</td><td><a href="https://arxiv.org/abs/2305.13245" target="_blank" rel="noopener">Ainslie EMNLP 2023</a> / <a href="https://arxiv.org/abs/1911.02150" target="_blank" rel="noopener">Shazeer 2019</a></td></tr><tr><td><strong>PagedAttention</strong></td><td>공간 (메모리 단편화)</td><td>연속 메모리 예약을 block 단위로 흩어 담아 단편화 해소</td><td><a href="https://arxiv.org/abs/2309.06180" target="_blank" rel="noopener">Kwon SOSP 2023</a> · <a href="https://jspulsar.dev/vllm-pagedattention-explained/">vLLM 원리 글</a></td></tr><tr><td><strong>RadixAttention</strong></td><td>상태 (계산 중복)</td><td>같은 prefix는 KV 캐시 재사용 (radix tree)</td><td><a href="https://arxiv.org/abs/2312.07104" target="_blank" rel="noopener">Zheng NeurIPS 2024</a> · <a href="https://jspulsar.dev/sglang-radixattention-explained/">SGLang 원리 글</a></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">셋은 경쟁이 아니라 다른 축의 답이다. GQA는 한 페이지의 무게 자체를 줄이고, PagedAttention은 책상 위 책 배치의 빈틈을 줄이고, RadixAttention은 같은 첫 장을 두 번 펼치지 않는다. vLLM·SGLang 같은 서빙 엔진은 GQA 모델 위에서 두 기법을 같이 쓴다 — 같은 진앙에 세 약이 다른 축으로 붙는 구조다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">그래서 긴 컨텍스트는 어떻게 다루나</h2>



<p class="wp-block-paragraph">표를 다시 보면 &#8220;내 모델 + 내 컨텍스트 = KV 몇 GB&#8221;가 머릿속으로 계산된다. 로컬은 그 숫자가 가용 VRAM·통합 메모리를 안 넘어야 하고, API는 컨텍스트 임계점·prompt caching 단가가 곧 비용으로 이어진다. M3 Pro 36GB는 Llama 3.1 8B BF16(16GB) + 32K KV 4GB = 약 20GB로 여유가 있지만, 128K까지 가면 합 32GB로 빠듯해진다. RTX 2070 8GB는 8B BF16 자체가 VRAM을 넘어서 Q4 양자화 + 짧은 컨텍스트 조합만 현실적이다.</p>



<p class="wp-block-paragraph">API는 또 다른 절약 방법이 있다. Anthropic·Google의 prompt caching·context caching이 반복되는 prefix의 재청구를 일부 흡수한다 — <a href="https://jspulsar.dev/claude-api-%eb%b9%84%ec%9a%a9-%ec%99%84%eb%b2%bd-%ea%b0%80%ec%9d%b4%eb%93%9c-2026-%ed%86%a0%ed%81%b0-%eb%8b%a8%ea%b0%80%c2%b7%ec%ba%90%ec%8b%b1%c2%b7%eb%b0%b0%ec%b9%98-%ed%95%a0%ec%9d%b8-%ed%95%9c/">Claude API 비용 가이드</a>에서 캐시 단가와 배치 할인을 정리해뒀다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">자주 묻는 질문</h2>



<p class="wp-block-paragraph"><strong>Q1. KV 캐시가 정확히 뭔가요?</strong>
트랜스포머가 매 토큰의 key·value 벡터를 메모리에 저장해 다음 토큰을 만들 때 재사용하는 자료구조다. 비유로는 책상 위에 펼쳐둔 책 더미 — 한 페이지는 한 토큰, 책상 크기가 컨텍스트 윈도우다.</p>



<p class="wp-block-paragraph"><strong>Q2. 왜 긴 컨텍스트가 빠르게 비싸지나요?</strong>
KV 캐시가 토큰 수에 선형으로 늘고, 거기에 모델 크기·정밀도·동시 사용자 수가 곱셈으로 붙어 GPU 한 장의 메모리 한계가 빠르게 닥치기 때문이다. 200K·1M 임계점은 그 한계가 가격에 비친 자리다.</p>



<p class="wp-block-paragraph"><strong>Q3. Claude 200K랑 Gemini 1M, 가격은 똑같이 오르나요?</strong> 시점·모델마다 다르다. 2026 현재 명시적 임계점은 Gemini 2.5 Pro의 200K 초과 input 2배·output 1.5배. Claude는 2024~2025 시점엔 Sonnet 4·4.5 200K 초과 2배가 있었지만 2026 현재 Opus 4.8·4.7·4.6·Sonnet 4.6은 1M까지 standard pricing이다.</p>



<p class="wp-block-paragraph"><strong>Q4. GQA가 KV 캐시를 얼마나 아끼나요?</strong>
비교 대상을 명시해야 한다. Llama 3.1 8B 기준 4배, 70B 기준 8배 — MHA로 가정한 경우 대비다. MQA로 가면 한 단계 더 줄지만 품질이 같이 떨어지는 trade-off가 있어 Llama 라인은 GQA를 채택했다.</p>



<p class="wp-block-paragraph"><strong>Q5. &#8220;1M 컨텍스트는 1000배 비싸진다&#8221;는 사실인가요?</strong>
원전을 못 찾아 여기서는 다루지 않았다. 검증되는 가까운 정량 인용은 <a href="https://arxiv.org/abs/2405.08944" target="_blank" rel="noopener">Yao Fu 논문</a>이 짚는 &#8220;7B 모델 1M 토큰 KV가 100GB+ VRAM&#8221; 정도다.</p>



<p class="wp-block-paragraph"><strong>Q6. 8GB GPU(예: RTX 2070)에서 8K context를 돌릴 수 있나요?</strong>
8B 모델 BF16 자체가 16GB라 VRAM을 넘는다. Q4 양자화(4<del>5GB) + 짧은 컨텍스트(4K</del>8K)에선 가능하다. 긴 컨텍스트 자체는 8GB 단일 GPU에선 어렵다.</p>



<p class="wp-block-paragraph"><strong>Q7. PagedAttention·RadixAttention·GQA는 어떻게 다른가요?</strong>
같은 KV 캐시 문제를 다른 축에서 푼다. GQA는 한 토큰의 KV 크기 자체를 줄이고, PagedAttention은 메모리 단편화를 줄이고, RadixAttention은 같은 prefix를 두 번 계산하지 않는다. 셋은 같이 쓰는 약이다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">정리 — KV 캐시는 마법이 아니라 책상 위 무게다</h2>



<p class="wp-block-paragraph">KV 캐시는 마법이 아니라 책상 위에 펼쳐둔 책의 무게다. 한 토큰을 더할 때마다 무게가 선형으로 늘고, 모델 크기·정밀도·동시 사용자가 곱해지면 GPU 한 장의 한계가 빠르게 닥친다. Claude 200K·Gemini 1M에서 가격이 갑자기 오르는 임계점은 그 무게가 H100 80GB 한 장의 물리 한계를 넘는 지점이다. PagedAttention·RadixAttention·GQA는 그 무게를 줄이는 세 길이고 본 시리즈에서 한 글씩 다뤘다. 원리를 알면 &#8220;1M 1000배&#8221;라는 숫자에 휘둘리지 않게 된다 — 이 글에서 풀고 싶었던 한 줄이다.</p>



<h2 class="wp-block-heading">관련 글</h2>



<ul class="wp-block-list">
<li><a href="https://jspulsar.dev/vllm-pagedattention-explained/">vLLM은 왜 빠른가 — PagedAttention을 OS 페이징으로 이해하기</a> — <strong>이 글의 짝꿍</strong>. 공간 차원(메모리 단편화)으로 KV 캐시 문제를 푼 길.</li>



<li><a href="https://jspulsar.dev/sglang-radixattention-explained/">SGLang은 왜 빠른가 — RadixAttention과 prefix 공유의 직관</a> — <strong>이 글의 짝꿍</strong>. 상태 차원(prefix 재사용)으로 KV 캐시 문제를 푼 길.</li>



<li><a href="https://jspulsar.dev/claude-api-%eb%b9%84%ec%9a%a9-%ec%99%84%eb%b2%bd-%ea%b0%80%ec%9d%b4%eb%93%9c-2026-%ed%86%a0%ed%81%b0-%eb%8b%a8%ea%b0%80%c2%b7%ec%ba%90%ec%8b%b1%c2%b7%eb%b0%b0%ec%b9%98-%ed%95%a0%ec%9d%b8-%ed%95%9c/">Claude API 비용 완벽 가이드 2026</a> — 위 글이 짚은 가격 임계점의 실전 비용 가이드. 200K·prompt caching 맥락.</li>



<li><a href="https://jspulsar.dev/ollama%eb%a1%9c-m3-pro-%eb%a7%a5%eb%b6%81%ec%97%90-%eb%a1%9c%ec%bb%ac-llm-%eb%9d%84%ec%9a%b0%ea%b8%b0-30%eb%b6%84-%ec%8b%a4%ec%b8%a1-%ea%b0%80%ec%9d%b4%eb%93%9c/">Ollama로 M3 Pro 맥북에 로컬 LLM 띄우기 — 30분 실측 가이드</a> — 로컬 환경에서 KV 캐시 무게를 직접 느끼는 가장 단순한 출발점.</li>



<li><a href="https://jspulsar.dev/vllm-m3-pro-mac-guide/">M3 Pro에서 vLLM 돌려보기 — Mac 3경로와 솔직한 한계 (2026)</a> — 위 vLLM 짝꿍 글의 실측편. 책상 비유의 GB 숫자가 실제 Mac에서 어떻게 도는지.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">참고 자료</h2>



<ul class="wp-block-list">
<li><a href="https://arxiv.org/abs/1706.03762" target="_blank" rel="noopener">Attention is All You Need — Vaswani et al., arXiv:1706.03762</a> — Transformer·멀티헤드 어텐션 K·V 원전</li>



<li><a href="https://arxiv.org/abs/2405.08944" target="_blank" rel="noopener">Challenges in Deploying Long-Context Transformers — Yao Fu, arXiv:2405.08944</a> — &#8220;KV 캐시가 긴 컨텍스트 어려움의 단일 원인&#8221;이라는 학술 뼈대. 7B 모델 1M 토큰 KV 100GB+ 인용</li>



<li><a href="https://arxiv.org/abs/2305.13245" target="_blank" rel="noopener">GQA: Training Generalized Multi-Query Transformer Models — Ainslie et al., arXiv:2305.13245 (EMNLP 2023)</a> — GQA 원논문. 4·8배 절약 출처</li>



<li><a href="https://arxiv.org/abs/1911.02150" target="_blank" rel="noopener">Fast Transformer Decoding — Shazeer, arXiv:1911.02150</a> — MQA 원논문</li>



<li><a href="https://arxiv.org/abs/2407.21783" target="_blank" rel="noopener">The Llama 3 Herd of Models — arXiv:2407.21783</a> — Llama 3.1 공식 논문. 128K context·GQA 통일</li>



<li><a href="https://developer.nvidia.com/blog/mastering-llm-techniques-inference-optimization/" target="_blank" rel="noopener">Mastering LLM Techniques: Inference Optimization — NVIDIA Technical Blog</a> — KV 캐시 공식 1차 정리</li>



<li><a href="https://huggingface.co/NousResearch/Meta-Llama-3.1-8B/raw/main/config.json" target="_blank" rel="noopener">NousResearch/Meta-Llama-3.1-8B config.json</a> — num_layers·num_kv_heads·head_dim 직접 인용</li>



<li><a href="https://platform.claude.com/docs/en/about-claude/pricing" target="_blank" rel="noopener">Anthropic Pricing — platform.claude.com</a> — Opus 4.8·4.7·4.6·Sonnet 4.6 1M까지 standard pricing 공식 명시</li>



<li><a href="https://platform.claude.com/docs/en/build-with-claude/context-windows" target="_blank" rel="noopener">Anthropic Context Windows — platform.claude.com</a> — &#8220;working memory&#8221; 표현. 책상 비유 정합 근거</li>



<li><a href="https://ai.google.dev/gemini-api/docs/pricing" target="_blank" rel="noopener">Gemini API Pricing — Google AI</a> — Gemini 2.5 Pro 200K 임계점 정확 인용</li>



<li><a href="https://arxiv.org/abs/2309.06180" target="_blank" rel="noopener">PagedAttention — Kwon et al., arXiv:2309.06180 (SOSP 2023)</a> — vLLM PagedAttention 원논문</li>



<li><a href="https://arxiv.org/abs/2312.07104" target="_blank" rel="noopener">SGLang RadixAttention — Zheng et al., arXiv:2312.07104 (NeurIPS 2024)</a> — SGLang RadixAttention 원논문</li>
</ul>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://jspulsar.dev/kv-cache-context-window-explained/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>SGLang은 왜 빠른가 — RadixAttention과 prefix 공유의 직관</title>
		<link>https://jspulsar.dev/sglang-radixattention-explained/</link>
					<comments>https://jspulsar.dev/sglang-radixattention-explained/#respond</comments>
		
		<dc:creator><![CDATA[jshi2504]]></dc:creator>
		<pubDate>Sat, 30 May 2026 15:00:00 +0000</pubDate>
				<category><![CDATA[로컬AI]]></category>
		<category><![CDATA[학습]]></category>
		<category><![CDATA[kv 캐시]]></category>
		<category><![CDATA[llm 서빙]]></category>
		<category><![CDATA[prefix sharing]]></category>
		<category><![CDATA[radixattention]]></category>
		<category><![CDATA[sglang]]></category>
		<guid isPermaLink="false">https://jspulsar.dev/?p=1345</guid>

					<description><![CDATA[SGLang이 왜 vLLM 다음으로 주목받는지 RadixAttention 원리를 한국어 직관으로 풀었다. 접두사 트리로 KV를 공유해 CoT·multi-turn에서 prefix를 재계산하지 않는 구조와, PagedAttention과 어떻게 짝을 이루는지 — 6.4배의 비교 대상까지.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">로컬 LLM 처리량 얘기에서 vLLM을 만난 다음 줄에 SGLang이 있다. &#8220;최대 6.4배 빠르다&#8221;는 상투구가 됐는데, 정작 &#8220;왜 빠른가&#8221;를 한 문장으로 답해보라면 막힌다. 나도 그랬다. 그래서 공식 자료들을 따라가며 그 핵심을 도서관 책장 정리 비유로 다시 풀어봤다. <a href="https://jspulsar.dev/vllm-pagedattention-explained/">지난 글</a>에서 vLLM이 OS 페이징을 KV 캐시에 가져왔다는 이야기를 했는데, SGLang은 같은 문제를 다른 축에서 푼 한 쌍이다. 결론부터 말하면 SGLang의 빠름은 마법이 아니라 같은 prefix로 시작하는 책을 같은 책장에 모아두는, 잘 정리된 도서관의 아이디어다.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="768" src="https://jspulsar.dev/wp-content/uploads/2026/06/sglang-docs-home-1024x768.png" alt="" class="wp-image-1346" srcset="https://jspulsar.dev/wp-content/uploads/2026/06/sglang-docs-home-1024x768.png 1024w, https://jspulsar.dev/wp-content/uploads/2026/06/sglang-docs-home-300x225.png 300w, https://jspulsar.dev/wp-content/uploads/2026/06/sglang-docs-home-768x576.png 768w, https://jspulsar.dev/wp-content/uploads/2026/06/sglang-docs-home-600x450.png 600w, https://jspulsar.dev/wp-content/uploads/2026/06/sglang-docs-home.png 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 1. SGLang 공식 문서 첫 화면</em></p>



<h2 class="wp-block-heading">TL;DR</h2>



<ul class="wp-block-list">
<li>SGLang은 LMSYS(UC 버클리 Zheng et al.)가 <strong>NeurIPS 2024</strong>에서 발표한 LLM 서빙 프레임워크. 핵심은 <strong>RadixAttention</strong> — 접두사 트리(radix tree)로 KV 캐시를 공유하는 알고리즘이다.</li>



<li>CoT·multi-turn 채팅·few-shot·RAG처럼 <strong>같은 prefix가 반복되는 워크로드</strong>에서 prefix를 재계산하지 않아 처리량을 끌어올린다. Chatbot Arena 실측 cache hit이 LLaVA-Next-34B 52.4%·Vicuna-33B 74.1%였다 (SGLang 논문).</li>



<li>논문 abstract 기준 <strong>최대 6.4배 throughput</strong> — vs Guidance·vLLM·LMQL·TGI 여러 워크로드의 최댓값(Llama-7B A10G·Mixtral-8x7B). LMSYS 블로그(좁은 범위)는 &#8220;최대 5배&#8221;로 적었는데 같은 연구를 다른 범위에서 본 수치라 서로 모순이 아니다.</li>



<li><strong>PagedAttention과는 다른 축의 최적화</strong>라 SGLang은 둘을 같이 쓴다. 2025~2026년 vLLM도 <strong>APC(Automatic Prefix Caching)</strong> 를 도입해 prefix 공유는 두 진영 공통 자산이 됐고, SGLang의 차별은 그 이상의 구조(CFSM·Frontend DSL)로 이동했다.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">SGLang이란? 왜 다들 SGLang을 말하나</h2>



<p class="wp-block-paragraph">SGLang은 LMSYS(UC 버클리, vLLM·Chatbot Arena와 같은 그룹)의 Lianmin Zheng 외가 <a href="https://arxiv.org/abs/2312.07104" target="_blank" rel="noopener">arXiv:2312.07104 — NeurIPS 2024</a>에서 발표한 LLM 서빙 프레임워크다. 2026년 5월 현재 <a href="https://github.com/sgl-project/sglang" target="_blank" rel="noopener">GitHub 28.7k stars</a>, xAI(Grok)·NVIDIA·AMD·LinkedIn·Cursor 등이 운영에 채택했다.</p>



<p class="wp-block-paragraph"><a href="https://jspulsar.dev/vllm-pagedattention-explained/">vLLM이 메모리 단편화를 줄여 더 많은 요청을 동시에 처리하는 길</a>이었다면, SGLang은 같은 prefix를 두 번 계산하지 않는 다른 길이다. 둘은 경쟁이 아니라 짝이고, SGLang은 두 기법을 같이 쓴다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">같은 prefix를 매번 다시 계산하는 낭비 — 무엇이 반복되나</h2>



<p class="wp-block-paragraph">KV 캐시를 짧게 짚으면 — LLM은 토큰을 하나씩 생성하면서 앞 토큰의 key/value 벡터를 재사용한다. 매번 다시 계산하면 느리니 메모리에 저장해둔다.</p>



<p class="wp-block-paragraph">운영 워크로드를 들여다보면 한 가지가 눈에 띈다. <strong>system prompt, few-shot 예시, 대화 이력, RAG 컨텍스트</strong>가 요청마다 반복된다. 기존 시스템은 이 반복되는 prefix를 매 요청마다 처음부터 다시 KV로 계산한다 — 캐시는 한 요청 안에서만 재사용되고 다음 요청이 오면 사라진다. SGLang 논문은 이 낭비가 특히 큰 4가지를 짚는다 — Few-shot learning, Self-consistency·CoT, Multi-turn chat, Tree-of-thought.</p>



<p class="wp-block-paragraph">처리량 한계가 메모리에 있다면 vLLM의 PagedAttention이 답이지만, 한계가 <strong>같은 prefix를 또 계산하는 데</strong> 있다면 다른 길이 필요하다. 그 길이 RadixAttention이다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">RadixAttention 직관 — 도서관 책장 정리 비유</h2>



<p class="wp-block-paragraph">여기가 글의 핵심이다. PagedAttention을 OS 페이징으로 풀었듯, RadixAttention은 도서관 책장 비유로 풀린다.</p>



<p class="wp-block-paragraph">일반 도서관을 떠올려보자. 책이 입고 순서대로 아무 책장에 꽂힌다. &#8220;김&#8221;으로 시작하는 책을 찾으려면 처음부터 뒤져야 한다. 기존 KV 캐시가 딱 이 모양이다 — 같은 prefix로 시작하는 시퀀스가 들어와도 이전 결과를 찾을 길이 없으니 처음부터 계산한다.</p>



<p class="wp-block-paragraph">이제 잘 정리된 도서관을 그려보자. 같은 첫 글자로 시작하는 책은 같은 책장에, 같은 두 글자는 같은 칸에, 같은 세 글자는 같은 선반에 둔다. <strong>트리처럼 가지치기로 분류되는 구조다.</strong> prefix가 같은 시퀀스가 들어오면 <strong>가장 긴 매칭 칸</strong>까지 그대로 재사용하고, 새 토큰만 그 가지 끝에 추가하면 된다.</p>



<p class="wp-block-paragraph">이 트리가 <strong>radix tree(접두사 트리)</strong> 다. 일반 trie와 다른 점은 간선에 단일 문자가 아니라 가변 길이 시퀀스가 라벨로 붙는다는 것 — 한 칸에 여러 글자 묶음이 들어간다고 생각하면 된다. KV 노드 메타는 CPU, 실제 KV 텐서는 GPU의 paged layout(토큰 1개당 1 page)에 둔다. PagedAttention의 메모리 구조 위에 RadixAttention의 prefix 공유 레이어가 얹히는 구조다.</p>



<p class="wp-block-paragraph">동작은 단순하다. 새 요청이 오면 스케줄러가 트리를 순회해 가장 긴 매칭 prefix까지 재사용하고, 신규 토큰만 계산해 가지 끝에 새 노드를 매단다. 자리가 부족하면 <strong>가장 오래 안 본 책부터</strong> 뺀다 — LRU 기반 eviction(리프 노드부터, reference count 0 우선). 트리 관리 패널티는 작다. <a href="https://www.lmsys.org/blog/2024-01-17-sglang/" target="_blank" rel="noopener">LMSYS 블로그</a>는 ShareGPT 측정 오버헤드 0.3% 미만이라고 적는다 — cache hit이 없어도 손해가 거의 없고, hit이 있으면 그만큼 이득이다.</p>



<p class="wp-block-paragraph">비유를 하나 더 보태면, 멀티턴 채팅은 &#8220;회사 양식 템플릿&#8221;에 가깝다 — 표지·머리말·정형 문구를 매번 새로 쓰지 않고 양식을 재사용한다.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="841" height="526" src="https://jspulsar.dev/wp-content/uploads/2026/06/radix-attention-mapping.png" alt="" class="wp-image-1347" srcset="https://jspulsar.dev/wp-content/uploads/2026/06/radix-attention-mapping.png 841w, https://jspulsar.dev/wp-content/uploads/2026/06/radix-attention-mapping-300x188.png 300w, https://jspulsar.dev/wp-content/uploads/2026/06/radix-attention-mapping-768x480.png 768w, https://jspulsar.dev/wp-content/uploads/2026/06/radix-attention-mapping-600x375.png 600w" sizes="auto, (max-width: 841px) 100vw, 841px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 2. RadixAttention의 radix tree — 같은 prefix까지는 재사용, 새 토큰만 새 가지</em></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">PagedAttention과 RadixAttention — 공간 vs 상태</h2>



<p class="wp-block-paragraph"><a href="https://jspulsar.dev/vllm-pagedattention-explained/">vLLM 글</a>을 읽은 사람이 가장 궁금해할 질문에 답할 차례다.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>PagedAttention이 공간(메모리)을 아끼고, RadixAttention은 상태(계산)를 아낀다.</strong></p>
</blockquote>



<p class="wp-block-paragraph">두 기법은 서로 다른 영역을 건드리니 같이 쓸 수 있다. <a href="https://www.lmsys.org/blog/2024-01-17-sglang/" target="_blank" rel="noopener">LMSYS 블로그</a> 원문이 명시한다 — &#8220;RadixAttention is <strong>compatible with existing techniques like continuous batching and paged attention</strong>.&#8221; SGLang 런타임은 paged layout 위에 RadixAttention의 prefix 공유 레이어를 얹는다. 같이 쓴다.</p>



<p class="wp-block-paragraph">그래서 SGLang vs vLLM은 &#8220;어느 게 더 빠른가&#8221;가 아니라 &#8220;어느 워크로드냐&#8221;의 문제다. 그런데 여기서 한 가지 짚고 가야 한다.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>2024 vs 2026 — vLLM APC 도입의 진실</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>시점</th><th>상황</th></tr></thead><tbody><tr><td>2024 초</td><td>SGLang의 RadixAttention 발표 직후. vLLM은 prefix caching 미보유. 워크로드에 따라 RadixAttention 우위 명확</td></tr><tr><td>2025~2026</td><td>vLLM이 <a href="https://docs.vllm.ai/en/latest/features/automatic_prefix_caching/" target="_blank" rel="noopener">APC(Automatic Prefix Caching)</a> 도입. <a href="https://docs.vllm.ai/en/v0.6.0/automatic_prefix_caching/details.html" target="_blank" rel="noopener">vLLM design docs</a>가 본인 입으로 &#8220;this eviction policy effectively implements the exact policy as in RadixAttention <strong>when applied to models with full attention</strong>&#8220;이라고 적는다 — RadixAttention의 정책과 사실상 동등 (full attention 모델 한정)</td></tr><tr><td>차이</td><td>SGLang은 token-level radix tree, vLLM APC는 block-level hash matching. 매칭 단위와 자료구조가 다르고, 워크로드에 따라 격차가 다르게 나타난다</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">정리하면, <strong>prefix 공유 자체는 두 진영의 공통 자산이 됐다.</strong> SGLang의 차별은 그 이상의 구조(아래에서 짧게 볼 Compressed FSM·Frontend DSL)로 이동했다. 이 시점 차를 모르면 &#8220;SGLang이 prefix caching의 유일한 답&#8221;이라는 인상을 받기 쉬운데, 그건 2024 시점에 적힌 글이 그대로 전해진 결과다.</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">&#8220;최대 6.4배&#8221;의 정확한 비교 대상</h2>



<p class="wp-block-paragraph"><a href="https://arxiv.org/abs/2312.07104" target="_blank" rel="noopener">SGLang 논문 abstract</a>는 이렇게 적는다 — &#8220;SGLang achieves up to <strong>6.4× higher throughput</strong> compared to state-of-the-art inference systems on various large language and multi-modal models on tasks including agent control, logical reasoning, few-shot learning benchmarks, JSON decoding, retrieval-augmented generation pipelines, and multi-turn chat.&#8221; 한 문장에 <strong>비교 상대·모델·워크로드·&#8221;최댓값&#8221;</strong> 정보가 모두 들어 있다. 그래서 &#8220;6.4배 빠르다&#8221;만 따로 떼면 비교 상대·모델·워크로드가 사라진 숫자가 된다.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>수치 정직 박스 — 같은 SGLang의 여러 숫자</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>수치</th><th>무엇 대비 무엇</th><th>조건 · 출처</th></tr></thead><tbody><tr><td><strong>최대 6.4배 throughput</strong></td><td>SGLang <strong>vs Guidance·vLLM·LMQL·HuggingFace TGI</strong></td><td>Llama-7B(A10G)·Mixtral-8x7B, 여러 워크로드의 최댓값 (<a href="https://arxiv.org/abs/2312.07104" target="_blank" rel="noopener">arXiv:2312.07104 abstract</a>)</td></tr><tr><td>최대 5배 throughput</td><td>SGLang <strong>vs Guidance v0.1.8, vLLM v0.2.5, TGI v1.3.0</strong></td><td>Llama-7B/Mixtral, A10G, MMLU·HellaSwag·ReAct·ToT (좁은 범위) (<a href="https://www.lmsys.org/blog/2024-01-17-sglang/" target="_blank" rel="noopener">LMSYS Blog 2024-01-17</a>)</td></tr><tr><td>최대 2.5배 throughput (구조화 출력)</td><td>SGLang <strong>compressed FSM (jump-forward)</strong> vs Outlines+vLLM v0.2.7, Guidance+llama.cpp v0.2.38</td><td>Llama-7B, 정보 추출·JSON 디코딩 (<a href="https://www.lmsys.org/blog/2024-02-05-compressed-fsm/" target="_blank" rel="noopener">LMSYS Blog 2024-02-05</a>)</td></tr><tr><td>cache hit 52.4% / 74.1%</td><td>RadixAttention 실측 (LLaVA-Next-34B / Vicuna-33B)</td><td>Chatbot Arena 프로덕션 (SGLang 논문)</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">같은 SGLang에 대한 다른 숫자가 모순이 아닌 이유는 <strong>비교 상대와 워크로드 범위가 다르기 때문</strong>이다. S4에서 본 vLLM의 &#8220;24배 vs 2~4배&#8221;와 같은 패턴.</p>
</blockquote>



<p class="wp-block-paragraph">참고로 &#8220;SGLang structured generation 최대 22배&#8221;라는 수치를 인터넷에서 종종 본다. 그런데 원전을 못 찾았다. SGLang 논문·LMSYS 블로그·GitHub README·NeurIPS Proceedings를 다 훑어봐도 22배가 어디서 나온 수치인지 짚을 수 없었다. 가장 가까운 검증 가능 수치는 위 표의 <strong>CFSM 2~2.5배</strong>(vs Outlines+vLLM·Guidance+llama.cpp)이고, xgrammar 통합 이후 JSON 디코딩 3~10배가 <a href="https://x.com/lmsysorg/status/1861880264567443958">LMSYS 트윗 2024-11</a>에서 확인된다. 그래서 본 글에서는 22배는 빼고 위 표의 수치만 적었다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Compressed FSM과 Frontend DSL — 한 줄로</h2>



<p class="wp-block-paragraph">SGLang의 차별이 RadixAttention &#8220;그 이상&#8221;으로 이동했다고 했으니, 그 위가 무엇인지 짧게 짚는다.</p>



<p class="wp-block-paragraph"><strong>Compressed FSM(CFSM)</strong> — JSON schema·정규식으로 출력을 강제하는 constrained decoding. schema → regex → FSM 변환 후 &#8220;토큰 선택지가 단 하나뿐&#8221;인 구간을 찾아 여러 토큰을 한 번에 prefill 처리한다(jump-forward). 구조화 출력이 자유 생성보다 빨라지는 경우가 생기는 이유다 — <a href="https://www.lmsys.org/blog/2024-02-05-compressed-fsm/" target="_blank" rel="noopener">LMSYS 블로그</a> 참조.</p>



<p class="wp-block-paragraph"><strong>Frontend DSL</strong> — Python 내장 DSL로 prompt 흐름을 함수처럼 표현한다(<code>gen()</code>·<code>select()</code>·<code>fork()</code>). prefix 공유 효과는 vanilla API에서도 자동으로 얻으니, DSL은 여러 단계 prompt 프로그램을 함수처럼 짜는 추가 도구로 보면 된다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Ollama·vLLM·SGLang — 어느 게 빠른가가 아니라 목적이 다르다</h2>



<p class="wp-block-paragraph">원리를 알고 나면 자주 나오는 질문이 &#8220;그럼 셋 중 뭐 쓰지&#8221;다. <a href="https://jspulsar.dev/ollama%eb%a1%9c-m3-pro-%eb%a7%a5%eb%b6%81%ec%97%90-%eb%a1%9c%ec%bb%ac-llm-%eb%9d%84%ec%9a%b0%ea%b8%b0-30%eb%b6%84-%ec%8b%a4%ec%b8%a1-%ea%b0%80%ec%9d%b4%eb%93%9c/">Ollama</a>는 단일 사용자 prototyping의 단순함, vLLM은 다중 요청 처리량의 메모리 효율, SGLang은 prefix가 반복되는 워크로드(챗봇·RAG·에이전트·CoT)의 계산 절약과 jump-forward — 어느 게 빠른가가 아니라 목적이 다르다. SGLang은 vLLM의 대체가 아니라 PagedAttention 위에 RadixAttention을 얹는 조합 관계고, 단일 사용자 로컬에선 Ollama가 더 실용적, 동시 요청이 많은 서버에서 SGLang 이득이 드러난다. 단일 기기 결정 트리는 후속 글(준비 중).</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">자주 묻는 질문</h2>



<p class="wp-block-paragraph"><strong>Q1. SGLang이 vLLM보다 정말 6배 빠른가요?</strong>
6.4배는 SGLang 논문 abstract의 vs Guidance·vLLM·LMQL·TGI <strong>여러 워크로드 최댓값</strong>(Llama-7B A10G·Mixtral-8x7B)이다. LMSYS 블로그(좁은 범위)에선 5배, 일반 batch 워크로드에선 더 작을 수 있다.</p>



<p class="wp-block-paragraph"><strong>Q2. RadixAttention과 PagedAttention의 차이는 무엇인가요?</strong>
PagedAttention은 메모리 단편화를 줄여 공간을 아끼고, RadixAttention은 같은 prefix를 두 번 계산하지 않아 상태(계산)를 아낀다. 둘은 서로 다른 축의 최적화라 SGLang은 둘을 같이 쓰고, 2025~2026년 vLLM도 APC로 prefix caching을 흡수했다.</p>



<p class="wp-block-paragraph"><strong>Q3. SGLang은 vLLM을 대체하나요?</strong>
꼭 그렇진 않다. prefix 공유 효과가 큰 워크로드(챗봇·RAG·에이전트·CoT)는 SGLang이 강점, 일반 서빙은 vLLM도 충분. 둘 다 OpenAI 호환 API라 엔드포인트만 바꾸면 코드가 그대로 붙는다.</p>



<p class="wp-block-paragraph"><strong>Q4. RadixAttention은 어떤 워크로드에 가장 효과적인가요?</strong>
system prompt가 반복되는 챗봇, few-shot 예시를 공유하는 분류·추출, CoT 분기, multi-turn 대화처럼 <strong>prefix가 반복되는 패턴</strong>이다. Chatbot Arena 실측 cache hit이 LLaVA-Next-34B 52.4%·Vicuna-33B 74.1%(SGLang 논문 RadixAttention 실험)였다.</p>



<p class="wp-block-paragraph"><strong>Q5. SGLang의 Compressed FSM이 22배 빠르다는데 사실인가요?</strong>
논문·LMSYS·GitHub README를 다 훑어봐도 22배 수치는 못 찾았다. 검증되는 가까운 수치는 CFSM(jump-forward)의 <strong>최대 2.5배 throughput·2배 latency 감소</strong> — vs Outlines+vLLM v0.2.7·Guidance+llama.cpp v0.2.38(<a href="https://www.lmsys.org/blog/2024-02-05-compressed-fsm/" target="_blank" rel="noopener">LMSYS 2024-02-05</a>)이고, xgrammar 통합 후 JSON 디코딩 3~10배가 <a href="https://x.com/lmsysorg/status/1861880264567443958">LMSYS 트윗 2024-11</a>에 보고됐다. 그래서 본 글에서도 22배는 다루지 않았다.</p>



<p class="wp-block-paragraph"><strong>Q6. SGLang을 RTX 2070·M3 Pro 같은 소비자 GPU에서 돌릴 수 있나요?</strong>
가능하나 throughput 이득은 <strong>동시 요청이 많은 서버 시나리오</strong>에서 본격적으로 나타난다. 단일 사용자 로컬은 Ollama·llama.cpp가 더 실용적이고, 결정 트리는 후속 글에서 다룬다.</p>



<p class="wp-block-paragraph"><strong>Q7. SGLang은 Ollama와 어떻게 다른가요?</strong>
&#8220;단일 사용자 = Ollama, 다중 처리량 + prefix 반복 = SGLang&#8221;으로 정리하면 헷갈리지 않는다. 어느 게 빠른가가 아니라 목적이 다르다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">정리 — 빠름은 마법이 아니라 책장 정리다</h2>



<p class="wp-block-paragraph">SGLang의 빠름은 <strong>트리 한 그루</strong>에서 나온다. 같은 prefix로 시작하는 KV를 같은 가지에 모아두고, 새 요청이 오면 가장 긴 매칭 가지까지 재사용한 뒤 새 토큰만 가지를 친다 — 도서관이 잘 정리되면 같은 책을 두 번 찾으러 안 다니듯. PagedAttention과 짝이고, 공간을 아끼는 길과 상태를 아끼는 길은 다른 축이라 같이 쓸 수 있다. 2026년 vLLM도 APC로 같은 방향을 흡수했고, SGLang의 차별은 그 위(CFSM·Frontend DSL)로 옮겨갔다. 원리를 알면 &#8220;6.4배&#8221;라는 숫자에 휘둘리지 않게 된다. 이 글에서 풀고 싶었던 게 그 한 줄이다.</p>



<h2 class="wp-block-heading">관련 글</h2>



<ul class="wp-block-list">
<li><a href="https://jspulsar.dev/vllm-pagedattention-explained/">vLLM은 왜 빠른가 — PagedAttention을 OS 페이징으로 이해하기</a> — <strong>본 글의 짝꿍</strong>. RadixAttention과는 다른 축(공간 차원)의 원리. 본 글의 &#8220;PagedAttention vs RadixAttention&#8221; 박스가 직접 참조한 글이다.</li>



<li><a href="https://jspulsar.dev/vllm-m3-pro-mac-guide/">M3 Pro에서 vLLM 돌려보기 — Mac 3경로와 솔직한 한계 (2026)</a> — 짝꿍 글의 실측편. 원리를 알았으니 실제 맥에서 어떻게 도는지 보고 싶다면.</li>



<li><a href="https://jspulsar.dev/ollama%eb%a1%9c-m3-pro-%eb%a7%a5%eb%b6%81%ec%97%90-%eb%a1%9c%ec%bb%ac-llm-%eb%9d%84%ec%9a%b0%ea%b8%b0-30%eb%b6%84-%ec%8b%a4%ec%b8%a1-%ea%b0%80%ec%9d%b4%eb%93%9c/">Ollama로 M3 Pro 맥북에 로컬 LLM 띄우기 — 30분 실측 가이드</a> — &#8220;셋 중 뭐 쓰지&#8221;의 가장 단순한 출발점. &#8220;단일 사용자 = Ollama&#8221; 맥락.</li>



<li>(준비 중) Mac·RTX 2070에서 SGLang 결정 트리 — 본 글의 실측 짝으로 이어질 후속 글.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">참고 자료</h2>



<ul class="wp-block-list">
<li><a href="https://arxiv.org/abs/2312.07104" target="_blank" rel="noopener">SGLang: Efficient Execution of Structured Language Model Programs — arXiv:2312.07104 (NeurIPS 2024)</a> — RadixAttention·CFSM 원논문. 6.4배·cache hit 52.4%·74.1% 출처</li>



<li><a href="/kv-cache-context-window-explained">KV 캐시가 뭐길래 — 긴 컨텍스트가 빠르게 비싸지는 이유</a> — <strong>본 글이 다룬 RadixAttention의 진앙</strong>. PagedAttention(공간)·RadixAttention(상태)이 풀려고 한 KV 캐시 자체를 책상 비유로 푼 학습 시리즈 뿌리 글. Claude 200K·Gemini 1M 가격 임계점까지.</li>



<li><a href="https://www.lmsys.org/blog/2024-01-17-sglang/" target="_blank" rel="noopener">Fast and Expressive LLM Inference with RadixAttention and SGLang — LMSYS Blog (2024-01-17)</a> — RadixAttention 도입 글. 5배(좁은 범위) 출처, &#8220;compatible with paged attention&#8221; 인용</li>



<li><a href="https://www.lmsys.org/blog/2024-02-05-compressed-fsm/" target="_blank" rel="noopener">Fast JSON Decoding for Local LLMs with Compressed Finite State Machine — LMSYS Blog (2024-02-05)</a> — CFSM 도입 글. 2.5배·2배 출처</li>



<li><a href="https://docs.vllm.ai/en/v0.6.0/automatic_prefix_caching/details.html" target="_blank" rel="noopener">vLLM Automatic Prefix Caching — design docs</a> — vLLM이 RadixAttention 정책을 흡수했음을 본인 문서에 명시한 1차 근거 (&#8220;when applied to models with full attention&#8221;)</li>



<li><a href="https://docs.vllm.ai/en/latest/features/automatic_prefix_caching/" target="_blank" rel="noopener">vLLM Automatic Prefix Caching — 사용 문서(latest)</a> — APC 사용·설정 소개 페이지</li>



<li><a href="https://github.com/sgl-project/sglang" target="_blank" rel="noopener">SGLang GitHub Repository</a> — 최신 버전·운영 채택 현황(2026-05 기준 28.7k stars, xAI·NVIDIA·AMD·Cursor 등)</li>



<li><a href="https://arxiv.org/abs/2309.06180" target="_blank" rel="noopener">PagedAttention 원논문 — arXiv:2309.06180 (SOSP 2023)</a> — 짝꿍 글 S4의 1차 출처. 본 글에선 비교 컨텍스트로 1회 참조</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://jspulsar.dev/sglang-radixattention-explained/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>M3 Pro에서 vLLM 돌려보기 — Mac 3경로와 솔직한 한계 (2026)</title>
		<link>https://jspulsar.dev/vllm-m3-pro-mac-guide/</link>
					<comments>https://jspulsar.dev/vllm-m3-pro-mac-guide/#comments</comments>
		
		<dc:creator><![CDATA[jshi2504]]></dc:creator>
		<pubDate>Fri, 29 May 2026 14:24:08 +0000</pubDate>
				<category><![CDATA[로컬AI]]></category>
		<category><![CDATA[학습]]></category>
		<category><![CDATA[apple silicon]]></category>
		<category><![CDATA[docker model runner]]></category>
		<category><![CDATA[m3 pro]]></category>
		<category><![CDATA[vllm]]></category>
		<category><![CDATA[vllm-metal]]></category>
		<category><![CDATA[로컬 llm 서빙]]></category>
		<guid isPermaLink="false">https://jspulsar.dev/?p=1333</guid>

					<description><![CDATA[M3 Pro 36GB 맥북에서 vLLM을 띄우는 세 경로(CPU backend·vllm-metal·Docker Model Runner)와 단일 스트림 실측, 그리고 왜 혼자 쓰면 Ollama가 더 빠른지까지 정리한 운영자 실측 노트.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">PagedAttention 원리를 글로 이해한 다음 생긴 욕심은 단순했다. &#8220;그럼 내 맥에서도 직접 돌려보자.&#8221; 1년 전이라면 &#8220;맥에서 vLLM? CPU로만 겨우 돈다&#8221;가 정답이었지만, 2026년 5월 그 답은 절반만 맞다. 이 글은 M3 Pro 36GB 맥북에서 vLLM을 띄우는 세 갈래 경로를 정리하고, 직접 돌려보면서 알게 된 솔직한 한계까지 박는다. 미리 말하면 띄울 수는 있지만 혼자 쓰면 Ollama가 더 빠르다 — 그 이유가 이 글의 절반이다. (vLLM이 왜 빠른지 원리 자체는 아래 관련 글에서 따로 다룬다.)</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>측정 환경 (2026-05-29 기준)</strong></p>



<ul class="wp-block-list">
<li>기기: Apple Mac M3 Pro (6P+6E CPU, <strong>18코어 GPU</strong>), <strong>36GB 통합메모리</strong>, macOS Tahoe 26.5</li>



<li>설치 경로: <strong>경로 3 — Docker Desktop의 Model Runner</strong>, <code>--backend vllm</code> 설치 결과 <code>docker model status</code>에서 <code>vllm-metal v0.2.0-20260420-142150 Running</code> 확인 (<code>llama.cpp</code>도 함께 Running 상태로 공존)</li>



<li>모델·양자화: DMR 정규화 ID <code>huggingface.co/mlx-community/llama-3.2-1b-instruct-4bit:latest</code> (193.15M 파라미터·quantization: mixed·695.28MB) → 7B 4-bit로 확장</li>



<li>호스트 접근: Settings → AI → Docker Model Runner 섹션의 <strong>TCP Port 12434 + Bind Localhost(127.0.0.1)</strong> / 엔드포인트는 <code>http://localhost:12434/engines/v1/...</code></li>



<li>측정 항목: 단일 스트림 tok/s, max_tokens 512, temperature 0.0</li>



<li><strong>measured_on: 2026-05-29.</strong> vllm-metal·Docker Model Runner는 2026년 초·중반 막 등장한 신생 기능이라 6개월 내 사용법·지원 범위가 바뀔 수 있다.</li>
</ul>
</blockquote>



<h2 class="wp-block-heading">TL;DR</h2>



<ul class="wp-block-list">
<li>2026년 5월 기준 Apple Silicon에서 vLLM을 띄우는 경로는 <strong>세 갈래</strong>다 — 공식 CPU backend(느림), vllm-metal(Metal GPU), Docker Model Runner(설치 가장 쉬움).</li>



<li>vLLM <strong>본체</strong>는 여전히 macOS에서 CPU 한정·실험적이지만, <strong>vllm-metal 플러그인 경로로는 Metal GPU가 열렸다.</strong> &#8220;맥에선 CPU로만 돈다&#8221;는 단정은 이제 부정확하다.</li>



<li>36GB라면 MLX <strong>4-bit 7~13B</strong>가 현실적인 범위다. 그 이상은 메모리 초과 위험.</li>



<li><strong>단일 스트림에선 vLLM이 Ollama보다 빠르지 않다.</strong> 같은 M3 Pro 36GB에서 vllm-metal Qwen2-7B 4-bit가 웜 평균 <strong>21.6 tok/s</strong>, S1의 Ollama Llama 3.1 8B Q4_K_M이 <strong>약 22 tok/s</strong> — 사실상 동률.</li>



<li>다만 <strong>동시성을 올리면 batching 이점이 실제로 보인다</strong> — 4 동시 요청 시 aggregate 62 tok/s로 <strong>2.87× 스케일업</strong>. 선형 4배는 아니지만(GPU 코어·메모리 대역폭 병목) PagedAttention이 맥에서도 작동은 한다. 본 글의 맥 실측은 처리량 자랑이 아니라 &#8220;원리가 실제로 도는지 확인&#8221;이 목적이다.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">왜 굳이 맥에서 vLLM을 시도하나</h2>



<p class="wp-block-paragraph">솔직히 처리량만 보면 답은 정해져 있다. 단일 사용자 로컬 환경에서 vLLM을 상시 서빙 엔진으로 쓸 이유는 별로 없다. 그런데도 직접 띄워본 이유는 두 가지다.</p>



<p class="wp-block-paragraph">하나는 학습이다. 논문에서 읽은 PagedAttention 구조가 내 GPU 위에서 실제로 도는 걸 한 번 보면, &#8220;내가 뭘 쓰고 있는지&#8221; 정확히 알고 다음 단계(CUDA GPU 서버)로 넘어갈 수 있다. 다른 하나는 정보가 빠르게 바뀌고 있어서다. 2026년 초·중반에 vllm-metal과 Docker Model Runner가 등장하면서 &#8220;맥에선 안 된다&#8221;는 통념이 흔들렸고, 그게 사실인지 직접 확인하고 싶었다. 결론부터 말하면 절반은 맞고 절반은 틀렸다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">2026년 Mac에서 vLLM의 세 갈래</h2>



<p class="wp-block-paragraph">찾아보니 Apple Silicon에서 vLLM을 띄우는 경로가 셋으로 열려 있었다.</p>



<ul class="wp-block-list">
<li><strong>경로 1 — vLLM 공식 CPU backend.</strong> macOS에서 <code>VLLM_TARGET_DEVICE</code>가 자동으로 <code>cpu</code>로 잡힌다. <a href="https://docs.vllm.ai/en/latest/getting_started/installation/cpu/?device=apple" target="_blank" rel="noopener">vLLM 공식 문서</a>가 &#8220;experimental support&#8221;라 명시하고 prebuilt wheel이 없어 소스 빌드가 필수다(XCode 15.4+). FP32/FP16만 되고 Metal GPU를 안 써 가장 느리다. 원리 동작 확인용이다.</li>



<li><strong>경로 2 — vllm-metal.</strong> vLLM <strong>공식 org 산하 플러그인</strong>으로, MLX를 컴퓨트 백엔드로 써서 <strong>Apple GPU(Metal)를 실제로 사용한다.</strong> <code>curl -fsSL .../install.sh | bash</code>로 깔리고 native arm64 Python 3.12를 요구한다. <a href="https://github.com/vllm-project/vllm-metal" target="_blank" rel="noopener">vllm-metal GitHub</a> 기준 v0.2.0(2026-04)이다.</li>



<li><strong>경로 3 — Docker Model Runner.</strong> <a href="https://www.docker.com/blog/docker-model-runner-vllm-metal-macos/" target="_blank" rel="noopener">Docker가 vLLM과 공동 개발해 macOS에 vllm-metal을 얹는다고 발표</a>한 경로(2026-02). 컨테이너가 아니라 호스트 네이티브로 실행되고 Docker Desktop 4.40+에서 model-runner는 기본 활성이다. 다만 <a href="https://docs.docker.com/ai/model-runner/inference-engines/" target="_blank" rel="noopener">공식 docs의 Inference engines 페이지</a>는 2026-05 시점에도 <strong>macOS 기본 백엔드를 llama.cpp로 적고 있어</strong> vllm-metal 자동 라우팅 여부는 빌드·버전마다 다르다 — 설치는 가장 쉽지만 &#8220;정말 vLLM이 서빙하는지&#8221;는 별도 확인이 필요한 경로다.</li>
</ul>



<p class="wp-block-paragraph">핵심은 vLLM <strong>본체</strong>는 여전히 CPU 한정·실험적이지만 <strong>vllm-metal 플러그인 경로로는 Metal GPU가 열렸다</strong>는 점이다. &#8220;vLLM은 Mac에서 CPU로만 돈다&#8221;는 단정은 2026-05 시점에는 부정확하다. 나는 설치 마찰이 가장 작은 <strong>경로 3(Docker Model Runner)</strong>을 1순위로 시도했고, 막상 돌려보니 Docker Desktop CLI에 함정 두 개가 있었다(아래 함정 박스). 결과적으로는 vllm-metal이 서빙함을 보장하려면 <strong>경로 2(vllm-metal 직접 설치)</strong>가 더 정직했다.</p>



<pre class="wp-block-code"><code># Docker Desktop 4.40+ 가 깔려 있어야 한다 (model-runner는 4.40+에서 기본 활성 컴포넌트)

# 1) Model Runner 활성화 — TCP 없이 먼저 켠다(--tcp 플래그는 일부 빌드에서 settings 스키마 충돌)
docker desktop enable model-runner

# 2) 상태 확인 — Running 으로 바뀌어야 하고, 백엔드들은 "Not Installed"로 노출됨
docker model status
# 출력 예:
#   Docker Model Runner is running
#   BACKEND    STATUS         DETAILS
#   diffusers  Not Installed
#   llama.cpp  Not Installed
#   mlx        Not Installed
#   vllm       Not Installed

# 3) vllm 백엔드 설치 — macOS에서는 vllm-metal로 자동 매핑된다(공식 블로그 표현)
#    ★중요: 이 단계 전에 TCP를 켜두면 install-runner가 실패한다(docker/model-runner#526).
#    먼저 install, 그다음 TCP를 켜는 순서.
docker model install-runner --backend vllm

# 4) MLX 4-bit 모델 풀 &amp; 백그라운드 기동
docker model run -d hf.co/mlx-community/Llama-3.2-1B-Instruct-4bit

# 5) 호스트에서 curl을 치려면 TCP 활성화 — Docker Desktop → Settings → AI 패널의
#    "Docker Model Runner" 섹션에서 다음을 확인하고 하단 Apply &amp; Restart
#       &#x2705; Enable Docker Model Runner
#       TCP Port: 12434 (default)
#       Bind address: Localhost (127.0.0.1)   ← 외부 노출 원하면 'All interfaces'지만 보안 위험
#       CORS allowed origins: (필요 시)
#    (CLI `docker desktop enable model-runner --tcp=12434`도 같은 설정이지만
#     `enableInferenceTCP` 키 미인식 에러를 내는 빌드가 있어 GUI가 안전)

# 6) 동작 확인했으면 7B 4-bit로 확장
docker model run -d hf.co/mlx-community/Qwen2-7B-Instruct-4bit
</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>함정 — Docker Desktop의 명령 순서와 vllm-metal 자동 매핑의 불확정성</strong></p>



<p class="wp-block-paragraph">처음 시도했던 명령 <code>docker model install-runner --backend vllm</code>은 <em>&#8220;Standalone installation not supported with Docker Desktop. Use <code>docker desktop enable model-runner</code> instead&#8221;</em> 에러로 막혔다. 이건 install 자체가 막혀 있다는 뜻이 아니라 <strong>model-runner가 아직 안 떠 있을 때 install부터 시도해서 거부된 것</strong>이었다. 정확한 순서는 (1) <code>docker desktop enable model-runner</code> → (2) <code>docker model install-runner --backend vllm</code> → (3) 모델 pull/run → (4) 마지막에 TCP 활성화. (4)를 먼저 켜면 (2)가 실패한다는 <a href="https://github.com/docker/model-runner/issues/526" target="_blank" rel="noopener">GitHub 이슈 docker/model-runner#526</a>이 동일 패턴을 보고하고 있다.</p>



<p class="wp-block-paragraph">다음 함정은 <strong>백엔드 자동 매핑의 불확정성</strong>이다. <a href="https://docs.docker.com/ai/model-runner/inference-engines/" target="_blank" rel="noopener">공식 docs 의 Inference engines 페이지</a>는 2026-05 시점에도 <em>&#8220;macOS vLLM: Not supported, <strong>llama.cpp가 기본</strong>&#8220;</em> 으로 표기돼 있고, <code>docker model status</code>가 <code>vllm</code>을 별도 백엔드 행으로 나열한다. 즉 vllm이 자동으로 선택되는 게 아니라 <strong><code>install-runner --backend vllm</code>으로 명시 설치를 해야 vllm/vllm-metal 백엔드가 잡힌다.</strong> 설치 후에도 <code>docker model status</code>로 <code>vllm</code> 행이 <code>Running</code>/<code>Installed</code>로 바뀌었는지 한 번 더 확인해야 본 글의 &#8220;vLLM-Metal 측정&#8221;이 진짜로 vllm으로 서빙됨을 보장한다. 만약 install이 끝까지 실패하면 vllm-metal이 서빙함을 보장하는 길은 <strong>경로 2(vllm-metal <code>install.sh</code> 직접 설치)</strong> 가 된다.</p>



<p class="wp-block-paragraph">마지막으로, 일부 Docker Desktop 빌드는 <code>--tcp=&lt;port&gt;</code> 플래그를 settings 스키마(<code>enableInferenceTCP</code>)가 인식 못 해 *&#8221;failed to update settings: settings format not recognized, unknown settings keys&#8221;*로 거부한다. 해결은 GUI 패널이다 — <strong>Settings → AI → &#8220;Docker Model Runner&#8221; 섹션</strong>에 <code>Enable Docker Model Runner</code> 체크, <code>TCP Port</code> 12434, <code>Bind address</code> Localhost(127.0.0.1)가 한 묶음으로 노출돼 있어 그대로 두고 하단 <strong>Apply &amp; Restart</strong>를 누르면 끝난다. (구버전 안내가 가리키는 &#8220;Enable host-side TCP support&#8221; 같은 별도 토글은 최신 빌드의 AI 패널엔 없고, TCP Port + Bind address가 같은 역할이다.)</p>
</blockquote>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="132" src="https://jspulsar.dev/wp-content/uploads/2026/05/vllm-metal-run-1024x132.png" alt="" class="wp-image-1334" srcset="https://jspulsar.dev/wp-content/uploads/2026/05/vllm-metal-run-1024x132.png 1024w, https://jspulsar.dev/wp-content/uploads/2026/05/vllm-metal-run-300x39.png 300w, https://jspulsar.dev/wp-content/uploads/2026/05/vllm-metal-run-768x99.png 768w, https://jspulsar.dev/wp-content/uploads/2026/05/vllm-metal-run-600x78.png 600w, https://jspulsar.dev/wp-content/uploads/2026/05/vllm-metal-run.png 1400w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 1. M3 Pro에서 Docker Model Runner로 vLLM(vllm-metal) 기동</em></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">단일 스트림 tok/s 측정하기</h2>



<p class="wp-block-paragraph">단일 스트림 tok/s를 재려면 응답이 충분히 길어야(100~500토큰) 로딩·워밍업 노이즈가 줄어든다. OpenAI 호환 엔드포인트로 호출해 응답 토큰 수와 소요 시간을 함께 보는 게 가장 깔끔하다.</p>



<pre class="wp-block-code"><code># 단일 스트림 측정 — 응답 길이를 충분히 확보(max_tokens 256~512)하고
# 같은 프롬프트를 3~5회 돌려 평균을 낸다
curl -s http://localhost:12434/engines/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "hf.co/mlx-community/Qwen2-7B-Instruct-4bit",
    "messages": &#91;{"role": "user", "content": "PagedAttention을 300자로 설명해줘"}],
    "max_tokens": 512
  }'
# 응답 JSON의 usage.completion_tokens / 측정한 소요 시간(초) = tokens/sec
# Docker Model Runner는 OpenAI 호환 엔드포인트를 `/engines/v1/`(앞에 /engines/ 붙음) 아래에 둔다.
# 포트 12434는 `docker desktop enable model-runner --tcp=12434`의 기본값이고
# 다른 설치 경로(vllm-metal 직접 install.sh, standalone Docker)는 포트·경로가 달라질 수 있다.
</code></pre>



<p class="wp-block-paragraph">내 M3 Pro(6P+6E CPU·<strong>18 GPU·36GB</strong>)에서 위 시퀀스로 7B 4-bit를 단일 스트림으로 돌려 평균을 냈다. 실측 결과는 다음과 같다.</p>



<p class="wp-block-paragraph"><strong>M1 — Llama-3.2-1B-Instruct-4bit, 단일 스트림.</strong> 콜드 1회(모델 로드 포함) 27.16초로 약 19 tok/s, 그 뒤 웜 2회는 4.88·4.92초로 각각 <strong>104.9 / 104.1 tok/s</strong> — <strong>웜 평균 약 104.5 tok/s</strong>. 콜드와 웜이 5배 넘게 벌어진다는 점이 학습 자산이다(첫 응답 한 번은 모델·KV 워밍업이 다 끼어 있고, 그다음부터가 진짜 처리량이다). max_tokens 512에 prompt 47 토큰, temperature 0.0의 결정적 생성 조건이다. <code>docker model status</code>로 <code>vllm-metal v0.2.0-20260420-142150 Running</code>을 미리 확인했으므로 이 수치는 llama.cpp가 아니라 vllm-metal이 낸 값이다.</p>



<p class="wp-block-paragraph"><strong>M2 — Qwen2-7B-Instruct-4bit, 단일 스트림.</strong> 콜드 1회 40.78초 (4.3GB 모델 mmap·워밍업 포함) 후 웜 3회 8.53·8.52·8.63초로 각각 <strong>21.69 / 21.71 / 21.44 tok/s</strong> — <strong>웜 평균 약 21.6 tok/s</strong>. 7B 모델임에도 응답은 185 토큰에서 자연 종료(max_tokens 512 한계 도달 전 EOS) — Qwen2 특성으로 보인다. <strong>여기서 같은 환경의 <a href="https://jspulsar.dev/ollama-m3-pro-30min-guide/">S1 Ollama 측정값 약 22 tok/s</a>와 거의 정확히 동률</strong>이라는 점이 핵심이다. 모델은 다르지만(Qwen2-7B vs Llama 3.1 8B) 둘 다 4-bit·7~8B급이라 직접 비교가 의미 있다 — 같은 기기, 단일 스트림이면 <strong>vllm-metal이 Ollama를 못 이긴다.</strong> 운영자 메타 발견 하나 더: DMR의 <code>/engines/v1/models</code> 응답 <code>parameters</code> 필드는 두 모델 모두 실제 파라미터 수의 ~15%만 카운트(Llama 3.2 1B → &#8220;193.15M&#8221;, Qwen2-7B → &#8220;1.19B&#8221;)해서 신뢰할 게 못 된다. <code>size</code>(695MB·4.28GB)는 정확하다.</p>



<p class="wp-block-paragraph"><strong>M3 — 동시 4 요청, Qwen2-7B-Instruct-4bit.</strong> 같은 프롬프트를 백그라운드로 4개 동시에 던지고 모두 끝난 시점까지의 wall 시간을 쟀다. 결과: wall <strong>11.94초</strong>, completion 합계 <strong>740 토큰</strong>, <strong>aggregate ≈ 62.0 tok/s</strong>. 단일 21.6 tok/s 대비 <strong>2.87배 스케일업</strong>이다. 같은 4 요청을 직렬로 돌렸으면 4×8.5≈34초 걸렸을 게 11.94초에 끝났으니, 절약은 약 2.85배. 즉 <strong>vllm-metal의 PagedAttention·continuous batching이 맥에서도 실제로 작동하긴 한다</strong>. 다만 선형 4배가 아닌 2.87배에 그치는 건 M3 Pro의 메모리 대역폭(150 GB/s)과 GPU 18 코어가 batch 가중치를 따라가지 못해서다 — KV 캐시는 효율적으로 나눠 썼지만 compute가 병목이다.</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="989" src="https://jspulsar.dev/wp-content/uploads/2026/05/vllm-metal-tokps-1-1024x989.png" alt="" class="wp-image-1336" style="width:654px;height:auto" srcset="https://jspulsar.dev/wp-content/uploads/2026/05/vllm-metal-tokps-1-1024x989.png 1024w, https://jspulsar.dev/wp-content/uploads/2026/05/vllm-metal-tokps-1-300x290.png 300w, https://jspulsar.dev/wp-content/uploads/2026/05/vllm-metal-tokps-1-768x742.png 768w, https://jspulsar.dev/wp-content/uploads/2026/05/vllm-metal-tokps-1-600x580.png 600w, https://jspulsar.dev/wp-content/uploads/2026/05/vllm-metal-tokps-1.png 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 2. M3 Pro vLLM-Metal 단일 스트림 tok/s 측정</em></p>



<p class="wp-block-paragraph">모델 범위는 미리 알아두는 게 좋다. vllm-metal은 MLX 4-bit(group_size 128) 포맷 위주이고 그 외 포맷은 preflight 단계에서 거른다(<a href="https://github.com/vllm-project/vllm-metal/blob/main/docs/supported_models.md" target="_blank" rel="noopener">vllm-metal 지원 모델 문서</a>). 36GB라면 4-bit 7~13B가 현실적인 범위다(공개 검증 예가 M5 Pro 48GB에서 7~9B 4-bit). 35B급은 36GB를 초과할 위험이 있어 권하지 않는다. 참고로 &#8220;vllm-mlx로 400+ tok/s&#8221;라는 수치를 봤다면, 그 417.9 tok/s는 <strong>Qwen3-0.6B-8bit 초소형 모델 + M4 Max 128GB + 단일 스트림 greedy</strong> 조건이고 <a href="https://github.com/waybarrios/vllm-mlx" target="_blank" rel="noopener">vllm-mlx</a>는 공식 org가 아닌 별도 community 프로젝트다. M3 Pro에서 7B를 돌리면 그 근처도 안 나온다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">솔직한 한계 — 그래서 내 맥에선 학습용이다</h2>



<p class="wp-block-paragraph">여기가 이 글에서 제일 박고 싶었던 부분이다. 띄울 수 있다는 것과 빠르다는 건 다른 얘기다. 경로 2·3으로 Metal GPU까지 써서 M3 Pro 36GB에 7B 4-bit를 <strong>띄울 수는 있다.</strong> <strong>그런데 처리량 이점은 안 난다.</strong> PagedAttention과 continuous batching의 이점은 동시 요청이 많은 GPU 서빙에서 나오는데, 혼자 한 번에 한 요청만 보내면 키울 batch도 채울 빈 슬롯도 없다. PagedAttention이 아무리 똑똑해도 단일 사용자에게는 발현될 무대가 없다.</p>



<p class="wp-block-paragraph">수치로 보면 이렇다. 가장 직접적인 비교는 같은 M3 Pro 36GB 위에서 잰 본 글의 M2(vllm-metal, Qwen2-7B 4-bit, 단일 스트림 웜 평균 <strong>21.6 tok/s</strong>)와 <a href="https://jspulsar.dev/ollama%eb%a1%9c-m3-pro-%eb%a7%a5%eb%b6%81%ec%97%90-%eb%a1%9c%ec%bb%ac-llm-%eb%9d%84%ec%9a%b0%ea%b8%b0-30%eb%b6%84-%ec%8b%a4%ec%b8%a1-%ea%b0%80%ec%9d%b4%eb%93%9c/">S1에서 잰 Ollama(llama.cpp+Metal, Llama 3.1 8B Q4_K_M, 웜 평균 <strong>약 22 tok/s</strong>)</a>다. 모델은 다르지만 둘 다 4-bit·7~8B급이라 동급으로 봐도 무리가 없는데, <strong>사실상 동률</strong>이다. 혼자 한 요청만 던지면 vLLM의 PagedAttention이 발현될 무대가 없으니, 두 엔진의 차이가 메모리 대역폭(M3 Pro는 베이스·상위 모두 150 GB/s) 안에서 흡수돼 버린다.</p>



<p class="wp-block-paragraph">흥미로운 건 동시성을 올려본 M3였다. 같은 Qwen2-7B를 동시 4 요청으로 던지니 aggregate <strong>62 tok/s</strong>가 나왔다(단일 대비 <strong>2.87배 스케일업</strong>, 직렬 처리 대비 약 2.85배 절약). vllm-metal이 맥에서도 batching 이점을 실제로 보여주긴 한다는 뜻이다 — 다만 선형 4배가 아닌 2.87배에 그친 건 KV 캐시는 PagedAttention이 효율적으로 나눠 썼지만 18 GPU 코어의 컴퓨트가 batch 가중치를 따라가지 못해서다. 즉 맥에서 vllm-metal은 &#8220;완전 무용&#8221;은 아니지만 &#8220;본격 무대&#8221;도 아니다.</p>



<p class="wp-block-paragraph">본격 무대는 <a href="https://developers.redhat.com/articles/2025/08/08/ollama-vs-vllm-deep-dive-performance-benchmarking" target="_blank" rel="noopener">Red Hat이 A100 GPU 서버에서 잰 벤치</a>에 보인다 — vLLM이 256 동시 사용자에서 <strong>793 TPS</strong>, Ollama는 기본 설정(최대 4 병렬)에서 <strong>41 TPS</strong> — <strong>19배 차이</strong>. M3 Pro에서 4 동시로 본 2.87배가 A100에서 256 동시면 19배가 되는 식이다. PagedAttention의 진짜 잠재력은 동시성과 메모리 대역폭이 같이 받쳐줄 때 비로소 풀린다. <a href="https://www.docker.com/blog/docker-model-runner-vllm-metal-macos/" target="_blank" rel="noopener">Docker가 다른 기기에서 잰 단일 스트림 벤치</a>(Llama 3.2 1B, 4-bit) vLLM-Metal 251~279 vs llama.cpp 333~345 tok/s도 같은 패턴(단일에서는 llama.cpp가 오히려 1.2~1.3배 우세)을 보여준다.</p>



<p class="wp-block-paragraph">그래서 이 글의 M3 Pro 실측은 처리량 자랑이 아니라 &#8220;원리가 실제로 도는지 확인&#8221;이 목적이다. 솔직히 내 맥에서 vLLM을 상시 서빙 엔진으로 쓸 이유는 아직 없다 — 혼자 쓰면 Ollama가 빠르고, vLLM은 학습용이다. 그래도 논문에서 읽은 구조가 내 GPU 위에서 실제로 도는 걸 본 건 학습으로서 값졌다. 본격적인 처리량 벤치는 결국 신선한 CUDA GPU(RTX 4090·5090 급)가 받쳐줘야 하는데, 솔직히 내 홈서버는 <strong>RTX 2070(VRAM 8GB)</strong> 이라 vLLM의 batching 잠재력을 끝까지 끌어내기엔 좀 부담스럽다. 7B Q4 정도면 띄울 수는 있겠지만 동시 요청을 늘릴수록 KV 캐시가 8GB에 빠르게 닿을 거라, &#8220;본격 프로덕션 처리량&#8221;이라고 부르기엔 어중간한 자리에서 멈출 가능성이 크다. 그래서 후속 글을 언제 쓸지는 GPU 업그레이드 여부와 함께 천천히 고민하는 중이다.</p>



<p class="wp-block-paragraph">한 가지만 더. vllm-metal과 Docker Model Runner는 2026년 초·중반에 막 등장한 신생 기능이라 사용법·지원 범위가 빠르게 바뀔 수 있다. 이 글의 모든 경로·명령은 <strong>2026-05-27 기준</strong>이다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">자주 묻는 질문</h2>



<p class="wp-block-paragraph"><strong>Q1. M3 Pro 맥북에서 vLLM을 쓸 수 있나요?</strong>
가능하다. 2026년 기준 vllm-metal(MLX 백엔드)이나 Docker Model Runner로 Metal GPU까지 써서 7B 4-bit급 모델을 띄울 수 있다. 다만 단일 사용자 환경이라 프로덕션 처리량 이점은 발현되지 않는다.</p>



<p class="wp-block-paragraph"><strong>Q2. 맥에서 vLLM은 CPU로만 도나요?</strong>
2026-05 시점에는 부정확한 단정이다. vLLM 본체는 여전히 macOS에서 CPU 한정·실험적이지만, vllm-metal 플러그인 경로(경로 2·3)로는 MLX 백엔드를 통해 Apple GPU(Metal)를 실제로 쓴다.</p>



<p class="wp-block-paragraph"><strong>Q3. 세 경로 중 뭘 골라야 하나요?</strong>
설치 난이도와 성공 확률만 보면 경로 3(Docker Model Runner)이 가장 무난하다. Docker Desktop 4.62+만 있으면 명령 한 줄로 vllm-metal 러너가 깔린다. 경로 2는 직접 install.sh로 제어하고 싶을 때, 경로 1(CPU backend)은 GPU 없이 원리 동작만 확인할 때다.</p>



<p class="wp-block-paragraph"><strong>Q4. 36GB 맥에서 어떤 모델까지 돌릴 수 있나요?</strong>
MLX 4-bit 기준 7~13B가 현실적인 범위다. vllm-metal은 MLX 4-bit(group_size 128) 포맷 위주라 그 외 포맷은 preflight에서 걸러진다. 35B급은 36GB를 초과할 위험이 있어 권하지 않는다.</p>



<p class="wp-block-paragraph"><strong>Q5. vLLM은 Ollama보다 항상 빠른가요?</strong> 아니다. 본 글의 M2(vllm-metal Qwen2-7B 4-bit, 약 21.6 tok/s)와 S1의 Ollama(Llama 3.1 8B Q4_K_M, 약 22 tok/s)는 같은 M3 Pro 36GB에서 사실상 동률이었다. 단일 요청에서는 둘이 비슷하거나 오히려 Ollama가 빠를 수도 있다(Docker가 다른 기기에서 잰 단일 스트림 벤치 vLLM-Metal 251~279 vs llama.cpp 333~345 tok/s도 같은 패턴). vLLM의 이점은 동시 요청이 많을 때 벌어진다(A100 벤치 256 동시 사용자 기준 793 vs 41 TPS). 혼자 한 요청씩 쓰는 맥에서는 키울 batch도 채울 빈 슬롯도 없어 이점이 발현되지 않는다.</p>



<p class="wp-block-paragraph"><strong>Q6. &#8220;vllm-mlx로 400+ tok/s 나온다&#8221;는 글은 뭔가요?</strong>
조건을 봐야 한다. 그 417.9 tok/s는 Qwen3-0.6B-8bit 초소형 모델 + M4 Max 128GB + 단일 스트림 greedy 조건이고, vllm-mlx는 vLLM 공식 org가 아닌 별도 community 프로젝트다. M3 Pro에서 7B를 돌리면 그 근처도 안 나온다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">정리 — 띄울 수는 있고, 학습으로는 값졌다</h2>



<p class="wp-block-paragraph">2026년 5월 기준 M3 Pro 36GB에서 vLLM은 vllm-metal 경로로 Metal GPU까지 써서 7B 4-bit급을 띄울 수 있다. &#8220;맥에선 CPU로만 돈다&#8221;는 통념은 더 이상 맞지 않는다. 다만 혼자 한 요청씩 쓰는 환경에서는 PagedAttention의 이점이 발현되지 않아 Ollama보다 빠르지도 않다. vLLM이 빛나는 무대는 동시 요청이 쏟아지는 GPU 서버지 내 맥북이 아니다. 그래도 논문 속 구조를 내 GPU 위에서 직접 돌려본 건 다음 단계로 넘어가는 좋은 디딤돌이었다.</p>



<p class="wp-block-paragraph">다음으로 다룰 것들 — 모두 별도 글로 예정이다.</p>



<ul class="wp-block-list">
<li><strong>본격 처리량 벤치</strong>: 신선한 CUDA GPU(RTX 4090·5090 급)로 vLLM의 batching 한계까지 재본다. 다만 내 홈서버는 RTX 2070(VRAM 8GB)이라 받쳐주기 빠듯해서 시도 여부는 GPU 업그레이드와 같이 고민 중</li>



<li><strong>Metal vs CUDA 추론 비교</strong>: 같은 모델을 두 백엔드에서 (조건 갖춰지면 시도)</li>



<li><strong>sglang vs vLLM vs Ollama</strong>: 언제 무엇을 쓰나, 엔진 결정 트리 (준비 중)</li>
</ul>



<h2 class="wp-block-heading">관련 글</h2>



<ul class="wp-block-list">
<li><a href="https://jspulsar.dev/vllm-pagedattention-explained/">vLLM은 왜 빠른가 — PagedAttention을 OS 페이징으로 이해하기</a> — 이 글에서 &#8220;왜 동시 요청이 많을 때만 빨라지는지&#8221; 궁금했다면. PagedAttention과 continuous batching의 원리를 OS 가상 메모리 비유로 푼 개념 글.</li>



<li><a href="https://jspulsar.dev/ollama%eb%a1%9c-m3-pro-%eb%a7%a5%eb%b6%81%ec%97%90-%eb%a1%9c%ec%bb%ac-llm-%eb%9d%84%ec%9a%b0%ea%b8%b0-30%eb%b6%84-%ec%8b%a4%ec%b8%a1-%ea%b0%80%ec%9d%b4%eb%93%9c/">Ollama로 M3 Pro 맥북에 로컬 LLM 띄우기 — 30분 실측 가이드</a> — 같은 M3 Pro 36GB에서 Ollama로 더 단순하게 띄우는 길. 단일 사용자라면 이쪽이 더 빠를 수 있다.</li>



<li><a href="https://jspulsar.dev/claude-api-%eb%b9%84%ec%9a%a9-%ec%99%84%eb%b2%bd-%ea%b0%80%ec%9d%b4%eb%93%9c-2026-%ed%86%a0%ed%81%b0-%eb%8b%a8%ea%b0%80%c2%b7%ec%ba%90%ec%8b%b1%c2%b7%eb%b0%b0%ec%b9%98-%ed%95%a0%ec%9d%b8-%ed%95%9c/">Claude API 비용 완벽 가이드 2026 — 토큰 단가·캐싱·배치 할인</a> — 로컬에서 직접 서빙하는 비용과 클라우드 API 비용을 비교하고 싶을 때 기준점.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">참고 자료</h2>



<ul class="wp-block-list">
<li><a href="https://www.docker.com/blog/docker-model-runner-vllm-metal-macos/" target="_blank" rel="noopener">Docker Model Runner with vLLM-Metal on macOS — Docker Blog (2026-02-26)</a> — 경로 3 설치·단일 스트림 벤치(251~279 vs 333~345 tok/s). 단, 블로그가 적은 <code>install-runner</code> 명령은 Docker Desktop에서 막힘 — Desktop은 <code>desktop enable model-runner --tcp=12434</code>로 우회</li>



<li><a href="https://docs.docker.com/ai/model-runner/inference-engines/" target="_blank" rel="noopener">Inference engines — Docker Model Runner Docs</a> — 2026-05 시점 docs는 &#8220;macOS vLLM 미지원, llama.cpp 기본&#8221; 표기. 블로그(vllm-metal 추가)와 docs(미반영)의 시차로 자동 라우팅 불확정</li>



<li><a href="https://docs.vllm.ai/en/latest/getting_started/installation/cpu/?device=apple" target="_blank" rel="noopener">Installation — CPU (Apple) — vLLM Docs</a> — 경로 1 CPU backend(experimental)</li>



<li><a href="https://github.com/vllm-project/vllm-metal" target="_blank" rel="noopener">vllm-project/vllm-metal — GitHub</a> — 경로 2 공식 플러그인 (v0.2.0)</li>



<li><a href="https://github.com/vllm-project/vllm-metal/blob/main/docs/supported_models.md" target="_blank" rel="noopener">vllm-metal supported models — GitHub</a> — MLX 4-bit 지원 모델 범위</li>



<li><a href="https://github.com/waybarrios/vllm-mlx" target="_blank" rel="noopener">waybarrios/vllm-mlx — GitHub</a> — 비공식 별도 구현 (400+ tok/s 주장의 출처)</li>



<li><a href="https://developers.redhat.com/articles/2025/08/08/ollama-vs-vllm-deep-dive-performance-benchmarking" target="_blank" rel="noopener">Ollama vs vLLM: a deep dive into performance benchmarking — Red Hat Developer (2025-08-08)</a> — A100 동시성 벤치(793 vs 41 TPS)</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://jspulsar.dev/vllm-m3-pro-mac-guide/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>vLLM은 왜 빠른가 — PagedAttention을 OS 페이징으로 이해하기</title>
		<link>https://jspulsar.dev/vllm-pagedattention-explained/</link>
					<comments>https://jspulsar.dev/vllm-pagedattention-explained/#comments</comments>
		
		<dc:creator><![CDATA[jshi2504]]></dc:creator>
		<pubDate>Tue, 26 May 2026 15:00:00 +0000</pubDate>
				<category><![CDATA[로컬AI]]></category>
		<category><![CDATA[학습]]></category>
		<category><![CDATA[continuous batching]]></category>
		<category><![CDATA[KV 캐시 단편화]]></category>
		<category><![CDATA[vllm vs ollama]]></category>
		<category><![CDATA[vllm이란]]></category>
		<guid isPermaLink="false">https://jspulsar.dev/?p=1325</guid>

					<description><![CDATA[vLLM이 왜 빠른지 PagedAttention 원리를 OS 가상 메모리·페이징 비유로 직관적으로 풀었다. KV 캐시 단편화 60~80%를 4% 미만으로 줄이는 구조와 continuous batching, 그리고 vLLM vs Ollama 목적 차이까지.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">로컬 LLM을 한 번 띄워본 사람이라면 처리량 얘기에서 반드시 vLLM을 만난다. &#8220;HuggingFace보다 최대 24배 빠르다&#8221;는 문장은 거의 상투구가 됐는데, 정작 &#8220;왜 빠른가&#8221;를 한 줄로 답해보라면 막힌다. 나도 그랬다. 그래서 PagedAttention 논문을 펴고 그 핵심을 운영체제(OS) 비유로 다시 풀어봤다. 결론부터 말하면 vLLM의 빠름은 마법이 아니라 50년 묵은 OS 교과서의 아이디어를 KV 캐시에 옮겨온 것이다. 이 글은 그 원리를 직관으로 이해하는 데 집중한다.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="573" src="https://jspulsar.dev/wp-content/uploads/2026/05/vllm-docs-home-1024x573.png" alt="" class="wp-image-1326" srcset="https://jspulsar.dev/wp-content/uploads/2026/05/vllm-docs-home-1024x573.png 1024w, https://jspulsar.dev/wp-content/uploads/2026/05/vllm-docs-home-300x168.png 300w, https://jspulsar.dev/wp-content/uploads/2026/05/vllm-docs-home-768x430.png 768w, https://jspulsar.dev/wp-content/uploads/2026/05/vllm-docs-home-600x336.png 600w, https://jspulsar.dev/wp-content/uploads/2026/05/vllm-docs-home.png 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 1. vLLM 공식 문서 첫 화면</em></p>



<h2 class="wp-block-heading">TL;DR</h2>



<ul class="wp-block-list">
<li>vLLM은 UC 버클리 연구진(Kwon et al.)이 <strong>SOSP 2023</strong>에서 발표한 <strong>PagedAttention</strong> 논문에서 출발한 오픈소스 LLM 서빙 엔진이다.</li>



<li>PagedAttention은 OS의 가상 메모리·페이징을 KV 캐시에 적용해, 기존 시스템이 버리던 메모리 <strong>60~80% 낭비를 4% 미만으로</strong> 줄인다.</li>



<li>그렇게 확보한 여유로 동시 batch를 키우고, continuous batching으로 빈 슬롯을 즉시 채워 <strong>HuggingFace Transformers(순정) 대비 최대 24배</strong> 처리량을 낸다. (이미 최적화된 SOTA 서빙 시스템 대비로는 <strong>2~4배</strong>.)</li>



<li>단, 이 이점은 동시 요청이 많은 GPU 서버에서 나온다. vLLM과 Ollama는 &#8220;어느 게 더 빠른가&#8221;가 아니라 <strong>목적이 다르다.</strong></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">vLLM이란? 왜 다들 vLLM을 말하나</h2>



<p class="wp-block-paragraph">vLLM은 UC 버클리 연구진(Woosuk Kwon 외)이 SOSP 2023에서 발표한 <a href="https://arxiv.org/abs/2309.06180" target="_blank" rel="noopener">PagedAttention 논문(arXiv:2309.06180)</a>에서 출발한 오픈소스 LLM 서빙 엔진이다. 이름의 v는 virtual(가상)에서 왔고, 이게 글 전체의 힌트다.</p>



<p class="wp-block-paragraph"><a href="https://jspulsar.dev/ollama%eb%a1%9c-m3-pro-%eb%a7%a5%eb%b6%81%ec%97%90-%eb%a1%9c%ec%bb%ac-llm-%eb%9d%84%ec%9a%b0%ea%b8%b0-30%eb%b6%84-%ec%8b%a4%ec%b8%a1-%ea%b0%80%ec%9d%b4%eb%93%9c/">Ollama로 로컬 LLM을 띄워본</a> 단계가 &#8220;일단 돌려보는&#8221; 것이었다면, vLLM은 &#8220;처리량을 짜내는&#8221; 엔진이다. 지금은 사실상 표준 서빙 엔진으로 통하고, 그 빠름의 핵심이 PagedAttention과 continuous batching 두 가지다. 이 글은 이 둘을 OS 비유로 이해하는 게 목표다. &#8220;그럼 내 맥에서 실제로 돌아가나&#8221;는 별도 글에서 다룬다(아래 링크).</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">KV 캐시와 단편화 — 왜 기존 방식이 메모리를 60~80% 버렸나</h2>



<p class="wp-block-paragraph">PagedAttention을 이해하려면 먼저 KV 캐시가 뭔지, 그리고 기존 방식이 왜 메모리를 그렇게 많이 버렸는지부터 봐야 한다.</p>



<p class="wp-block-paragraph">LLM은 토큰을 하나씩 생성하면서 앞서 본 토큰들의 key/value 벡터를 재사용한다. 매번 다시 계산하면 느리니 한 번 계산한 key/value를 메모리에 저장해두는데, 이게 **KV 캐시(KV cache)**다. 시퀀스가 길어질수록 저장할 양이 늘어 KV 캐시는 시퀀스 길이에 따라 선형으로 커진다.</p>



<p class="wp-block-paragraph">문제는 기존 시스템이 이 캐시를 요청마다 <strong>하나의 연속(contiguous)된 메모리 블록</strong>으로 잡으려 했다는 점이다. 그 과정에서 두 종류의 낭비가 생겼다.</p>



<ul class="wp-block-list">
<li><strong>내부 단편화(internal fragmentation)</strong>: 요청이 들어오면 최대 시퀀스 길이(max_seq_len)만큼 공간을 미리 예약(over-reservation)하는데, 실제 생성 길이는 대부분 그보다 짧아 예약 공간 상당수가 비어서 버려진다.</li>



<li><strong>외부 단편화(external fragmentation)</strong>: 요청마다 길이가 제각각이라 연속 공간을 잡으려다 보면 메모리 사이사이에 못 쓰는 틈이 생긴다.</li>
</ul>



<p class="wp-block-paragraph">이 둘이 합쳐져 얼마나 버려졌느냐. <a href="https://vllm.ai/blog/2023-06-20-vllm" target="_blank" rel="noopener">vLLM 공식 블로그</a>는 &#8220;existing systems waste <strong>60% – 80%</strong> of memory due to fragmentation and over-reservation&#8221;이라고 못 박는다. 절반을 훌쩍 넘는 GPU 메모리가 실제 데이터가 아니라 단편화와 과잉 예약으로 사라지고 있었다는 뜻이다. 메모리가 모자라면 동시에 처리할 수 있는 요청 수가 줄고, 그게 곧 처리량 한계가 된다. 여기까지가 &#8220;왜 기존 방식이 느렸나&#8221;의 답이다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">PagedAttention 직관 — OS 페이징을 KV 캐시에 적용하면</h2>



<p class="wp-block-paragraph">여기가 이 글의 핵심이다. PagedAttention이 어떻게 그 60~80% 낭비를 4% 미만으로 줄이는지, 운영체제 비유로 풀어본다.</p>



<p class="wp-block-paragraph">논문 저자들이 직접 밝힌 출발점은 이렇다. vLLM 블로그는 PagedAttention을 &#8220;an attention algorithm inspired by the classic idea of virtual memory and paging in operating systems&#8221;라고 소개한다. 50년 가까이 된 OS의 가상 메모리 아이디어를 KV 캐시에 그대로 가져온 것이다.</p>



<p class="wp-block-paragraph">운영체제는 프로그램에게 &#8220;연속된 큰 메모리&#8221;라는 환상을 준다. 하지만 실제 물리 메모리는 **페이지(page)**라는 고정 크기 조각으로 쪼개져 여기저기 흩어져 있고, **페이지 테이블(page table)**이 &#8220;이 프로그램의 3번째 페이지는 물리 메모리 어디&#8221;라고 매핑해준다. 프로그램은 연속이라 믿지만 물리적으론 흩어져 있는 것이다. PagedAttention은 이 구조를 그대로 KV 캐시에 적용한다.</p>



<ol class="wp-block-list">
<li><strong>고정 크기 KV block</strong> = OS의 페이지. KV 캐시를 하나의 연속 공간이 아니라 고정 크기 block 단위로 쪼갠다.</li>



<li><strong>logical → physical 매핑 테이블</strong> = OS의 페이지 테이블. 각 시퀀스는 logical block table을 통해 GPU 메모리에 흩어진 비연속(non-contiguous) physical block을 가리킨다.</li>
</ol>



<p class="wp-block-paragraph">이렇게 하면 연속 공간을 미리 크게 잡을 필요가 사라진다. 시퀀스가 자라면 그때그때 빈 physical block 하나를 새로 할당하면 그만이다. 외부 단편화는 block이 어디 있든 매핑으로 이어 붙이니 사라지고, 내부 단편화는 <strong>시퀀스의 마지막 block에서만</strong> 발생한다. 마지막 block에 채 안 찬 자투리만 남기 때문이다.</p>



<p class="wp-block-paragraph">그 결과가 <a href="https://vllm.ai/blog/2023-06-20-vllm" target="_blank" rel="noopener">vLLM 블로그</a>의 표현으로 &#8220;memory waste only happens in the last block of a sequence &#8230; a mere waste of <strong>under 4%</strong>&#8220;다. 60~80%에서 4% 미만으로. OS가 프로그램에게 연속 메모리라는 환상을 주면서 실제로는 페이지 단위로 흩어 담듯, PagedAttention은 KV 캐시를 block 단위로 흩어 담고 매핑 테이블로 이어 붙인다. 비유라기보다 거의 그대로 옮겨온 설계다.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="841" height="494" src="https://jspulsar.dev/wp-content/uploads/2026/05/paged-attention-mapping.png" alt="" class="wp-image-1327" srcset="https://jspulsar.dev/wp-content/uploads/2026/05/paged-attention-mapping.png 841w, https://jspulsar.dev/wp-content/uploads/2026/05/paged-attention-mapping-300x176.png 300w, https://jspulsar.dev/wp-content/uploads/2026/05/paged-attention-mapping-768x451.png 768w, https://jspulsar.dev/wp-content/uploads/2026/05/paged-attention-mapping-600x352.png 600w" sizes="auto, (max-width: 841px) 100vw, 841px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 2. PagedAttention의 logical-physical block 매핑 — OS 페이지 테이블과 같은 구조</em></p>



<p class="wp-block-paragraph">여담이지만 OS의 <code>fork()</code>도 그대로 들어와 있다. 같은 프롬프트에서 여러 응답을 뽑을 때(parallel sampling·beam search) 프롬프트 KV block을 여러 출력이 <strong>공유</strong>하다가 갈라지는 시점에만 복사한다(Copy-on-Write). 덕분에 메모리를 최대 55% 더 아낀다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">continuous batching — 빈 슬롯을 즉시 채우는 시간의 최적화</h2>



<p class="wp-block-paragraph">PagedAttention이 메모리를 아껴 batch를 키울 여유를 만들었다면, 그 여유를 꽉 채우는 건 continuous batching이다. vLLM의 빠름은 이 둘이 한 쌍이라는 데서 나온다.</p>



<p class="wp-block-paragraph">기존의 **static batching(정적 배치)**은 배치에 묶인 요청들이 <strong>전부 끝날 때까지</strong> 다음 배치를 시작하지 못한다. 한 요청은 500토큰을 생성하는데 다른 요청은 20토큰만 만들고 끝났다면, 짧은 요청이 점유하던 자리는 긴 요청이 끝날 때까지 빈 채로 논다(idle).</p>



<p class="wp-block-paragraph">**continuous batching(연속 배치 처리)**은 이걸 바꾼다. iteration-level scheduling이라고도 부르는데, <strong>매 토큰 생성 iteration마다 배치 구성을 다시 짠다.</strong> 한 시퀀스가 끝나면 그 빈 슬롯에 대기 중이던 새 요청을 즉시 끼워 넣는다. 원전은 Orca(Yu et al., OSDI 2022)이고, <a href="https://www.anyscale.com/blog/continuous-batching-llm-inference" target="_blank" rel="noopener">Anyscale의 설명</a>이 이 과정을 그림으로 잘 풀어준다. GPU가 놀 틈을 주지 않는 스케줄링인 셈이다.</p>



<p class="wp-block-paragraph">한 문장으로 정리하면, <strong>PagedAttention이 공간(메모리) 차원의 최적화라면, continuous batching은 시간(스케줄링) 차원의 최적화다.</strong> 인과 사슬은 이렇게 이어진다 — PagedAttention이 단편화 낭비를 줄여 동시 batch를 키울 메모리를 만들고 → continuous batching이 빈 슬롯을 즉시 채운다 → 처리량이 폭증한다. 그 폭증의 크기가 그 유명한 &#8220;24배&#8221;다. 다만 여기서 한 가지는 반드시 짚고 가야 한다.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>&#8220;24배 vs 2~4배&#8221; — 비교 대상을 섞으면 안 된다</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>수치</th><th>무엇 대비 무엇</th><th>조건 · 출처</th></tr></thead><tbody><tr><td><strong>최대 24배</strong></td><td>vLLM <strong>vs HuggingFace Transformers(순정 파이프라인)</strong></td><td>LLaMA-7B on A10G, 13B on A100 (<a href="https://vllm.ai/blog/2023-06-20-vllm" target="_blank" rel="noopener">vLLM 블로그</a>)</td></tr><tr><td>최대 3.5배</td><td>vLLM <strong>vs TGI</strong></td><td>동일 환경 (<a href="https://vllm.ai/blog/2023-06-20-vllm" target="_blank" rel="noopener">vLLM 블로그</a>)</td></tr><tr><td><strong>2~4배</strong></td><td>vLLM <strong>vs SOTA(FasterTransformer, Orca)</strong></td><td>동일 latency 유지 시 (<a href="https://arxiv.org/abs/2309.06180" target="_blank" rel="noopener">논문</a>)</td></tr><tr><td>60~80% → &lt;4%</td><td>기존 시스템 vs PagedAttention (메모리 낭비)</td><td><a href="https://vllm.ai/blog/2023-06-20-vllm" target="_blank" rel="noopener">vLLM 블로그</a></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">&#8220;vLLM은 24배 빠르다&#8221;를 비교 대상 없이 인용한 글이 많은데, 24배는 <strong>아무 최적화도 안 한 HuggingFace Transformers 대비</strong>다. 이미 최적화된 서빙 시스템(FasterTransformer, Orca) 대비로는 <strong>2~4배</strong>. 같은 논문의 두 숫자가 다른 건 모순이 아니라 비교 상대가 다르기 때문이다.</p>
</blockquote>



<h3 class="wp-block-heading">vLLM vs Ollama — 처리량이 아니라 목적이 다르다</h3>



<p class="wp-block-paragraph">원리를 알고 나면 자주 나오는 질문이 &#8220;그럼 Ollama랑 뭐가 다른가&#8221;다. <a href="https://developers.redhat.com/articles/2025/07/08/ollama-or-vllm-how-choose-right-llm-serving-tool-your-use-case" target="_blank" rel="noopener">Red Hat</a>은 둘의 관계를 이렇게 정리한다. &#8220;Ollama is ideal for <strong>local development and prototyping</strong>, while vLLM is built for <strong>high-performance production deployments</strong>&#8220;. Ollama는 llama.cpp + Metal 기반으로 단일 사용자 prototyping에, vLLM은 PagedAttention 기반으로 동시 요청 처리량 서빙에 맞춰져 있다. 둘 다 OpenAI 호환 API라 엔드포인트만 바꾸면 같은 코드가 붙는다. 어느 게 &#8220;더 좋다&#8221;가 아니라 <strong>목적이 다르다.</strong> 이 차이가 실제 기기 위에서 어떻게 드러나는지는 아래 후속 글에서 수치로 확인한다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">자주 묻는 질문</h2>



<p class="wp-block-paragraph"><strong>Q1. vLLM이란 무엇인가요?</strong>
UC 버클리 연구진(Kwon et al.)이 SOSP 2023에서 발표한 PagedAttention 논문에서 출발한 오픈소스 LLM 서빙 엔진으로, 지금은 사실상 표준으로 쓰인다.</p>



<p class="wp-block-paragraph"><strong>Q2. PagedAttention은 왜 빠른가요?</strong>
OS의 가상 메모리·페이징을 KV 캐시에 적용해 메모리 낭비를 60~80%에서 4% 미만으로 줄이고, 그 여유로 batch를 키워 처리량을 올린다.</p>



<p class="wp-block-paragraph"><strong>Q3. KV 캐시란 무엇인가요?</strong>
이미 계산한 토큰의 key/value 벡터를 저장해두고 재사용하는 캐시다. 시퀀스 길이에 따라 메모리가 선형으로 늘어난다.</p>



<p class="wp-block-paragraph"><strong>Q4. continuous batching이란 무엇인가요?</strong>
매 iteration마다 배치를 다시 짜서, 한 요청이 끝나는 즉시 빈 슬롯에 새 요청을 끼워 넣는 스케줄링이다. PagedAttention이 공간을 아꼈다면 이쪽은 시간을 아낀다.</p>



<p class="wp-block-paragraph"><strong>Q5. vLLM은 정말 24배 빠른가요?</strong>
24배는 아무 최적화도 안 한 HuggingFace Transformers 순정 대비고, 이미 최적화된 서빙 시스템(FasterTransformer, Orca) 대비로는 2~4배다. 같은 논문의 수치이며 비교 상대가 다를 뿐이다.</p>



<p class="wp-block-paragraph"><strong>Q6. vLLM과 Ollama의 차이는 무엇인가요?</strong>
목적이 다르다. Ollama는 단일 사용자 prototyping에, vLLM은 다중 동시 요청 처리량 서빙에 맞춰져 있다. 둘 다 OpenAI 호환 API라 엔드포인트만 바꾸면 같은 코드가 붙는다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">정리 — 빠름은 마법이 아니라 OS 교과서다</h2>



<p class="wp-block-paragraph">vLLM의 빠름은 두 축에서 나온다. PagedAttention이 OS 페이징으로 메모리 낭비를 60~80%에서 4% 미만으로 줄여 batch를 키울 공간을 만들고, continuous batching이 빈 슬롯을 즉시 채워 그 공간을 꽉 쓴다. 공간과 시간 두 차원의 최적화가 합쳐진 결과가 그 &#8220;24배&#8221;다. 새로운 마법이 아니라 50년 묵은 가상 메모리 아이디어를 KV 캐시에 옮겨온 것이다 — 그래서 한 번 그림으로 이해하면 잘 안 잊힌다.</p>



<p class="wp-block-paragraph">원리를 알았으니 다음은 &#8220;내 손에서 도는가&#8221;다. 직접 돌려보고 싶다면 아래 관련 글의 M3 Pro 실측편으로 이어진다. CUDA GPU 처리량 벤치, sglang·vLLM·Ollama 엔진 결정 트리는 별도 글로 준비 중이다.</p>



<h2 class="wp-block-heading">관련 글</h2>



<ul class="wp-block-list">
<li><a href="/sglang-radixattention-explained">SGLang은 왜 빠른가 — RadixAttention과 prefix 공유의 직관</a> — <strong>본 글의 원리 짝꿍</strong>. PagedAttention이 공간(메모리)을 아낀다면, RadixAttention은 상태(prefix 재계산)를 아낀다. 두 기법이 같이 쓰일 수 있는 이유와 2025~2026년 vLLM APC 흡수 시점 차까지.</li>



<li><a href="/kv-cache-context-window-explained">KV 캐시가 뭐길래 — 긴 컨텍스트가 빠르게 비싸지는 이유</a> — <strong>본 글이 다룬 PagedAttention의 진앙</strong>. KV 캐시 자체가 왜 메모리·비용 폭증의 원인인지 책상 비유로 푼 학습 시리즈 뿌리 글. Llama 3.1 8B 컨텍스트별 KV 4GB~128GB + Claude 200K·Gemini 1M 가격 임계점까지.</li>



<li><a href="/vllm-m3-pro-mac-guide">M3 Pro에서 vLLM 돌려보기 — Mac 3경로와 솔직한 한계 (2026)</a> — 이 글에서 본 원리가 실제 맥북 위에서 도는지 확인하고 싶다면. Apple Silicon 설치 3경로(CPU backend·vllm-metal·Docker Model Runner)와 단일 스트림 vs 동시 4 요청 실측, 그리고 왜 혼자 쓰면 Ollama가 더 빠른지까지.</li>



<li><a href="https://jspulsar.dev/ollama%eb%a1%9c-m3-pro-%eb%a7%a5%eb%b6%81%ec%97%90-%eb%a1%9c%ec%bb%ac-llm-%eb%9d%84%ec%9a%b0%ea%b8%b0-30%eb%b6%84-%ec%8b%a4%ec%b8%a1-%ea%b0%80%ec%9d%b4%eb%93%9c/">Ollama로 M3 Pro 맥북에 로컬 LLM 띄우기 — 30분 실측 가이드</a> — vLLM 이전에 로컬 LLM을 가장 단순하게 띄워보는 길. 이 글의 &#8220;목적 차이&#8221; 맥락의 출발점이다.</li>



<li><a href="https://jspulsar.dev/claude-api-%eb%b9%84%ec%9a%a9-%ec%99%84%eb%b2%bd-%ea%b0%80%ec%9d%b4%eb%93%9c-2026-%ed%86%a0%ed%81%b0-%eb%8b%a8%ea%b0%80%c2%b7%ec%ba%90%ec%8b%b1%c2%b7%eb%b0%b0%ec%b9%98-%ed%95%a0%ec%9d%b8-%ed%95%9c/">Claude API 비용 완벽 가이드 2026 — 토큰 단가·캐싱·배치 할인</a> — 로컬에서 직접 서빙하는 비용과 클라우드 API 비용을 비교하고 싶을 때 기준점.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">참고 자료</h2>



<ul class="wp-block-list">
<li><a href="https://arxiv.org/abs/2309.06180" target="_blank" rel="noopener">Efficient Memory Management for Large Language Model Serving with PagedAttention — arXiv:2309.06180 (SOSP 2023)</a> — PagedAttention 원논문</li>



<li><a href="https://vllm.ai/blog/2023-06-20-vllm" target="_blank" rel="noopener">vLLM: Easy, Fast, and Cheap LLM Serving with PagedAttention — vLLM Blog (2023-06-20)</a> — 60~80%→&lt;4%, 24배·3.5배 수치 출처</li>



<li><a href="https://www.anyscale.com/blog/continuous-batching-llm-inference" target="_blank" rel="noopener">How continuous batching enables 23x throughput in LLM inference — Anyscale</a> — continuous batching·Orca 설명</li>



<li><a href="https://developers.redhat.com/articles/2025/07/08/ollama-or-vllm-how-choose-right-llm-serving-tool-your-use-case" target="_blank" rel="noopener">Ollama or vLLM? How to choose the right LLM serving tool — Red Hat Developer (2025-07-08)</a> — vLLM vs Ollama 목적 차이</li>



<li><a href="https://blog.scatterlab.co.kr/vllm-implementation-details" target="_blank" rel="noopener">최대 24배 빠른 vLLM의 비밀 — 스캐터랩 블로그</a> — 공간·시간 최적화 한국어 정리</li>
</ul>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://jspulsar.dev/vllm-pagedattention-explained/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>월 $20 AI 구독 비교: ChatGPT Plus·Claude Pro·Gemini Advanced (2026-05)</title>
		<link>https://jspulsar.dev/chatgpt-plus-claude-pro-gemini-advanced-20dollar/</link>
					<comments>https://jspulsar.dev/chatgpt-plus-claude-pro-gemini-advanced-20dollar/#respond</comments>
		
		<dc:creator><![CDATA[jshi2504]]></dc:creator>
		<pubDate>Sat, 23 May 2026 15:00:00 +0000</pubDate>
				<category><![CDATA[비교]]></category>
		<category><![CDATA[ai 구독]]></category>
		<category><![CDATA[ai 비교]]></category>
		<category><![CDATA[chatgpt plus]]></category>
		<category><![CDATA[claude pro]]></category>
		<category><![CDATA[gemini advanced]]></category>
		<category><![CDATA[월 20달러]]></category>
		<guid isPermaLink="false">https://jspulsar.dev/?p=1317</guid>

					<description><![CDATA[월 $20 AI 구독 한 자리, ChatGPT Plus·Claude Pro·Google AI Pro 중 어디? 셋 다 약 ₩29,000(VAT 포함). 글쓰기·코딩·이미지·검색 6축으로 30초에 결정한다. +한국 결제 디테일까지 2026-05-24 기준.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">지난 6개월간 <strong>월 $20 AI 구독</strong> 한 자리에 ChatGPT Plus·Claude Pro·Google AI Pro를 한 번씩 결제하고 해지해봤다. 셋 다 월 $20, 한국 웹 결제로 약 ₩29,000(VAT 포함). 정가가 같으니 결정 기준은 결국 &#8220;내 주 용도면 어디&#8221;로 모인다.</p>



<p class="wp-block-paragraph">가격·기능은 <strong>2026-05-24</strong> 기준이고 환율은 $1 ≈ ₩1,400~₩1,450 가정. 분기 변동이 잦아 결제 직전엔 공식 페이지를 한 번 더 확인하는 게 안전하다. 이 글은 &#8220;월 $20 AI 구독&#8221; 한 자리를 어디에 쓸지 6가지 이유로 30초안에 결정하도록 설계했다.</p>



<h2 class="wp-block-heading">TL;DR</h2>



<ul class="wp-block-list">
<li><strong>글쓰기·코딩</strong> 중심이면 <strong>Claude Pro</strong> — 톤이 자연스럽고 Pro에 Claude Code 포함</li>



<li><strong>이미지·음성·범용 도구</strong> 중심이면 <strong>ChatGPT Plus</strong> — DALL·E 3 + Advanced Voice Mode + GPTs</li>



<li><strong>검색·연구·Gmail/Docs·가족 공유</strong> 중심이면 <strong>Google AI Pro</strong> — NotebookLM·Veo 3.1 Lite·5TB·5인 공유</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">30초 결정 매트릭스</h2>



<p class="wp-block-paragraph">용도 한 줄만 정해지면 1순위는 거의 자동으로 정해진다. 셋 다 ₩29,000이라 가격 기준은 무의미하다.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>내 주 용도</th><th>1순위 추천</th><th>한 줄 이유</th></tr></thead><tbody><tr><td>블로그·이메일·보고서 글쓰기</td><td>Claude Pro</td><td>톤이 가장 자연스럽고 AI 티가 덜 남</td></tr><tr><td>파이썬·웹 코딩</td><td>Claude Pro 또는 ChatGPT Plus</td><td>Pro에 Claude Code 포함, 멀티모달은 ChatGPT</td></tr><tr><td>이미지 생성</td><td>ChatGPT Plus</td><td>DALL·E 3 통합</td></tr><tr><td>비디오 생성</td><td>Google AI Pro</td><td>Veo 3.1 Lite 포함 (풀 모델은 Ultra)</td></tr><tr><td>검색·심층 리서치</td><td>Google AI Pro</td><td>NotebookLM Pro + Deep Research</td></tr><tr><td>Gmail·Docs·Drive 매일 사용</td><td>Google AI Pro</td><td>Workspace 통합 + 5TB</td></tr><tr><td>가족 5명이 나눠 쓰고 싶음</td><td>Google AI Pro</td><td>셋 중 유일 5인 공유</td></tr><tr><td>한국어 글쓰기</td><td>Claude Pro 또는 Google AI Pro</td><td>둘 다 일상 만족, 미세 차이</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">셋 다 $20인데 뭐가 다른가</h2>



<p class="wp-block-paragraph">가격은 같지만 같은 돈으로 받는 것은 꽤 다르다.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="334" height="808" src="https://jspulsar.dev/wp-content/uploads/2026/05/chatgpt-plus-pricing.png" alt="" class="wp-image-1318" style="aspect-ratio:0.41337618123389225;width:267px;height:auto" srcset="https://jspulsar.dev/wp-content/uploads/2026/05/chatgpt-plus-pricing.png 334w, https://jspulsar.dev/wp-content/uploads/2026/05/chatgpt-plus-pricing-124x300.png 124w" sizes="auto, (max-width: 334px) 100vw, 334px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 1. ChatGPT Plus 공식 가격 페이지</em></p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="460" height="890" src="https://jspulsar.dev/wp-content/uploads/2026/05/claude-pro-pricing.png" alt="" class="wp-image-1319" style="width:267px;height:auto" srcset="https://jspulsar.dev/wp-content/uploads/2026/05/claude-pro-pricing.png 460w, https://jspulsar.dev/wp-content/uploads/2026/05/claude-pro-pricing-155x300.png 155w" sizes="auto, (max-width: 460px) 100vw, 460px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 2. Claude Pro 공식 가격 페이지</em></p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="316" height="1024" src="https://jspulsar.dev/wp-content/uploads/2026/05/google-ai-pro-pricing-316x1024.png" alt="" class="wp-image-1320" style="width:265px;height:auto" srcset="https://jspulsar.dev/wp-content/uploads/2026/05/google-ai-pro-pricing-316x1024.png 316w, https://jspulsar.dev/wp-content/uploads/2026/05/google-ai-pro-pricing-93x300.png 93w, https://jspulsar.dev/wp-content/uploads/2026/05/google-ai-pro-pricing.png 364w" sizes="auto, (max-width: 316px) 100vw, 316px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 3. Google AI Pro 공식 가격 페이지</em></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>항목</th><th>ChatGPT Plus</th><th>Claude Pro</th><th>Google AI Pro</th></tr></thead><tbody><tr><td>주력 모델</td><td>GPT-5.5 Instant + Thinking</td><td>Sonnet 4.6 / <strong>Opus 4.7</strong></td><td>Gemini 3.1 Pro</td></tr><tr><td>컨텍스트</td><td>Instant 32K, Thinking 256K</td><td>표준 200K (1M은 상위 플랜·Code)</td><td>1M</td></tr><tr><td>사용 한도</td><td>3시간당 약 100~160 메시지</td><td>5시간 롤링, Opus 약 35~60+ 메시지</td><td>컴퓨팅 기반 5시간 한도</td></tr><tr><td>Deep Research</td><td>월 25회</td><td>가용(횟수 명시 약함)</td><td>가용 + NotebookLM 결합</td></tr><tr><td>이미지 생성</td><td>DALL·E 3 통합</td><td>없음</td><td>Nano Banana Pro</td></tr><tr><td>비디오 생성</td><td><strong>없음</strong>(Sora 종료, 2026-04-26 앱 폐쇄)</td><td>없음</td><td>Veo 3.1 Lite (Pro) / 풀 모델은 Ultra</td></tr><tr><td>음성 모드</td><td>Advanced Voice Mode</td><td>없음</td><td>Gemini Live</td></tr><tr><td>특이 자산</td><td>GPTs, Memory</td><td>Claude Code, Computer Use, M365 통합</td><td>NotebookLM, Workspace, 5TB, 가족 5인</td></tr><tr><td>연간 결제</td><td>월간만</td><td>$200/년 ($17/월)</td><td>Google One 약 16% 할인</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">2026년 상반기 큰 변동 셋. <strong>Sora가 2026-03-24 발표·2026-04-26 앱 폐쇄로 종료</strong>되면서 ChatGPT Plus 비디오가 빠졌고(<a href="https://help.openai.com/en/articles/10245774-sora-billing-faq" target="_blank" rel="noopener">OpenAI Help</a>), <strong>4월 초 Computer Use(Cowork)가 Pro에서 GA</strong>(macOS·Windows)됐으며 뒤이어 <strong>Claude Opus 4.7이 2026-04-16에 출시</strong>되어 Pro에 포함됐다(<a href="https://claude.com/blog/dispatch-and-computer-use" target="_blank" rel="noopener">Anthropic</a>). <strong>Gemini 앱 한도는 2026-05-20부로 컴퓨팅 기반 5시간 롤링</strong>으로 변경.</p>



<p class="wp-block-paragraph">Claude Pro의 1M context는 <a href="https://claude.com/blog/1m-context-ga" target="_blank" rel="noopener">공식 GA 발표</a>에 Max·Team·Enterprise + Claude Code 자동으로만 표기돼 있어 본문은 &#8220;Pro는 표준 200K&#8221;로 본다. 메시지 한도는 모델·시간대 변동이 커서 범위로 적었다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">6가지 결정 트리</h2>



<h3 class="wp-block-heading">글쓰기 — Claude Pro</h3>



<p class="wp-block-paragraph">내가 가장 자주 굴리는 도구다. &#8220;Claude&#8217;s output is consistently the most natural and the least recognizably AI&#8221;라는 영문 리뷰가 대표적(<a href="https://techjournal.org/claude-vs-chatgpt-vs-gemini-2026" target="_blank" rel="noopener">techjournal</a>). 시작점의 톤이 가장 매끄럽다. 2순위는 ChatGPT Plus, Gemini는 평타 이상이지만 약간 더 형식적이다.</p>



<h3 class="wp-block-heading">코딩 — Claude Pro (단, 코딩이 절반 넘으면 분기)</h3>



<p class="wp-block-paragraph">Pro에 Claude Code가 포함된다는 점이 결정타. 2026-05-06부로 Claude Code의 5시간 rate limit이 2배로 상향됐다(<a href="https://claudefa.st/blog/guide/development/higher-usage-limits" target="_blank" rel="noopener">limits doubled</a>). 폭스씨지 평이 솔직하다. &#8220;챗GPT는 가끔 흐름을 놓치거나 환각을 일으키지만, 클로드는 끝까지 논리를 부여잡고 버그 없는 코드를 토해냅니다.&#8221;(<a href="https://foxcg.com/chatgpt-plus-vs-clouder-pro" target="_blank" rel="noopener">폭스씨지</a>)</p>



<p class="wp-block-paragraph">단, 코딩이 업무의 절반 이상이라면 채팅 구독 전에 IDE 도구부터 결정하는 게 합리적이다 — <a href="https://jspulsar.dev/cursor-vs-claude-code-%ea%b2%b0%ec%a0%95-%ed%8a%b8%eb%a6%ac-%eb%b0%b1%ec%97%94%eb%93%9c-%ea%b0%9c%eb%b0%9c%ec%9e%90%ea%b0%80-6%ea%b0%9c-%ec%b6%95%ec%9c%bc%eb%a1%9c-%ea%b3%a8%eb%9d%bc%eb%b4%a4/">Cursor vs Claude Code 결정 트리</a> 참고.</p>



<h3 class="wp-block-heading">이미지·비디오 — 분기</h3>



<p class="wp-block-paragraph">이미지만이면 <strong>ChatGPT Plus</strong>(DALL·E 3). 비디오까지 본다면 <strong>Google AI Pro의 Veo 3.1 Lite</strong>가 사실상 유일한 동가격대 선택지다(풀 Veo 3.1은 AI Ultra 전용). Claude는 이미지 생성 자체가 없다.</p>



<h3 class="wp-block-heading">검색·심층 리서치 — Google AI Pro</h3>



<p class="wp-block-paragraph">Google이 동가격대 독보적이다. 1M context + Deep Research + NotebookLM(노트 500·노트당 소스 300) 조합을 같은 $20에 주는 곳이 없다. 논문·보고서를 수십 건 비교하는 작업이라면 NotebookLM이 결제 가치를 단독으로 회수한다.</p>



<h3 class="wp-block-heading">한국어 품질 — 셋 다 일상 만족</h3>



<p class="wp-block-paragraph">미세 차이는 있지만 셋 다 평타 이상. 모델 자체 품질 deep dive는 <a href="https://jspulsar.dev/claude-vs-gpt-vs-gemini-2026-%ed%95%9c%ea%b5%ad-%ec%82%ac%ec%9a%a9%ec%9e%90%ea%b0%80-%ea%b3%a0%eb%a5%b8-%ed%98%84%eb%8b%b5/">Claude vs GPT vs Gemini 2026</a>에 묶었다.</p>



<h3 class="wp-block-heading">한국 생태계 — Google 또는 Claude</h3>



<p class="wp-block-paragraph">Gmail·Docs·Drive 일반 사용자는 <strong>Google AI Pro</strong>가 압도적(5TB·가족 5인). M365·Outlook 직장인은 <strong>Claude Pro</strong>의 통합 카드. Google AI Pro의 일부 기능(Spark·Gmail AI Inbox·Daily Brief)은 2026-05 기준 한국 미지원(<a href="https://blog.google/intl/ko-kr/company-news/technology/google-ai-subscriptions-kr/" target="_blank" rel="noopener">Google 한국 블로그</a>).</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">한국 결제 시 진짜 비용</h2>



<p class="wp-block-paragraph">정가는 같지만, 한국에서 실제 결제하면 청구액과 절차가 미묘하게 다르다.</p>



<ul class="wp-block-list">
<li><strong>웹 결제 원화·VAT</strong> — 셋 다 약 ₩29,000/월, VAT 10%가 가격에 포함 청구(<a href="https://www.glbgpt.com/hub/kr/chatgpt-plus-subscription-price-in-south-korea-2026-guide/" target="_blank" rel="noopener">GLBGPT</a>).</li>



<li><strong>앱스토어·Play 차액</strong> — 인앱 결제는 Apple·Google 수수료 반영되어 ₩31,000 안팎. <strong>웹 결제 권장</strong>.</li>



<li><strong>결제 거절</strong> — Claude Pro에서 국내 카드 ISP·3DS 충돌이 잦다(<a href="https://www.magazinehipet.com/news/articleView.html?idxno=632" target="_blank" rel="noopener">매거진하이펫</a>). 해외승인·법인카드·연 계약 시 원화 송금이 알려진 우회법. 나도 한 번은 카드 거절을 만나 다른 카드로 우회했다.</li>



<li><strong>환불</strong> — 셋 다 원칙적으로 까다롭다. ChatGPT는 EU·UK·터키만 14일 prorated, 한국은 케이스별(<a href="https://help.openai.com/en/articles/7232895-how-do-i-request-a-refund-for-my-chatgpt-subscription" target="_blank" rel="noopener">OpenAI Help</a>). 환불 가능성을 가정하고 결제하지 말 것.</li>



<li><strong>사업자 VAT 면제·가족 공유</strong> — 사업자등록번호 입력 시 VAT 10% 면제로 월 약 ₩3,000 절감(<a href="https://adsensefarm.kr/%EC%B1%97gpt-%EB%A7%A4%EB%8B%AC-3%EC%B2%9C%EC%9B%90-%ED%95%A0%EC%9D%B8-%EB%B0%9B%EB%8A%94-%EA%BF%80%ED%8C%81-%EC%82%AC%EC%97%85%EC%9E%90%EB%93%B1%EB%A1%9D%EB%B2%88%ED%98%B8-%EC%9E%85%EB%A0%A5/" target="_blank" rel="noopener">애드센스팜</a>). 가족 공유는 <strong>3사 중 Google만</strong> 5인 가능(Google One Basic·AI Plus·AI Pro 공통) — 1인당 환산하면 약 ₩5,800.</li>
</ul>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="940" height="954" src="https://jspulsar.dev/wp-content/uploads/2026/05/korea-payment-vat.png" alt="" class="wp-image-1321" style="width:346px;height:auto" srcset="https://jspulsar.dev/wp-content/uploads/2026/05/korea-payment-vat.png 940w, https://jspulsar.dev/wp-content/uploads/2026/05/korea-payment-vat-296x300.png 296w, https://jspulsar.dev/wp-content/uploads/2026/05/korea-payment-vat-768x779.png 768w, https://jspulsar.dev/wp-content/uploads/2026/05/korea-payment-vat-600x609.png 600w" sizes="auto, (max-width: 940px) 100vw, 940px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 4. 한국 결제 화면 — 원화·VAT 표기</em></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">$20 위·아래 옵션</h2>



<p class="wp-block-paragraph">$20가 무조건 정답은 아니다. 사용량이 가볍거나 무겁다면 위아래로 한 단계씩 더 있다.</p>



<ul class="wp-block-list">
<li><strong>월 $0</strong> — 무료 + 로컬 LLM. 월 50건 이하 가벼운 질의면 무료로 충분하다. M3·M4 맥북이면 <a href="https://jspulsar.dev/ollama%eb%a1%9c-m3-pro-%eb%a7%a5%eb%b6%81%ec%97%90-%eb%a1%9c%ec%bb%ac-llm-%eb%9d%84%ec%9a%b0%ea%b8%b0-30%eb%b6%84-%ec%8b%a4%ec%b8%a1-%ea%b0%80%ec%9d%b4%eb%93%9c/">Ollama로 로컬 LLM 띄우기</a> 옵션도 있다. 데이터가 외부로 안 나간다는 게 장점.</li>



<li><strong>월 ₩11,000대 — Google AI Plus</strong> (2026-01-27 한국 출시). Gemini 일부 모델 + 200GB 스토리지. AI Pro까지는 필요 없는 경량 사용자에게 비집고 들어갈 옵션(<a href="https://one.google.com/about/plans?hl=ko" target="_blank" rel="noopener">Google One 한국</a>).</li>



<li><strong>월 $100~$200 — 헤비 사용자용</strong>. Claude Max 5x·20x, ChatGPT Pro($200)는 코딩 헤비·전문가용. aimatters의 한 달 후기는 결국 Plus 정도면 충분했다는 결론으로 모인다(<a href="https://aimatters.co.kr/news-report/feature-article/39305/" target="_blank" rel="noopener">aimatters</a>).</li>
</ul>



<p class="wp-block-paragraph">추가로, 월 사용량이 한 자릿수 억 토큰을 넘어가는 시점에는 정기구독보다 API 종량제가 싸지는 분기점이 온다. 단가·캐싱·배치 할인은 <a href="https://jspulsar.dev/claude-api-%eb%b9%84%ec%9a%a9-%ec%99%84%eb%b2%bd-%ea%b0%80%ec%9d%b4%eb%93%9c-2026-%ed%86%a0%ed%81%b0-%eb%8b%a8%ea%b0%80%c2%b7%ec%ba%90%ec%8b%b1%c2%b7%eb%b0%b0%ec%b9%98-%ed%95%a0%ec%9d%b8-%ed%95%9c/">Claude API 비용 완벽 가이드</a> 참고.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">자주 묻는 질문</h2>



<h3 class="wp-block-heading">ChatGPT Plus와 Claude Pro 중 뭐가 더 좋아요?</h3>



<p class="wp-block-paragraph">글쓰기·코딩이면 <strong>Claude Pro</strong>, 이미지·음성·범용이면 <strong>ChatGPT Plus</strong>. 가격은 둘 다 월 $20·약 ₩29,000으로 동일.</p>



<h3 class="wp-block-heading">Gemini Advanced는 ChatGPT Plus보다 쌀까요?</h3>



<p class="wp-block-paragraph">정가는 동일. 단 <strong>Google AI Plus(약 ₩11,000)</strong> 한 단계 아래 옵션이 한국에 있어 Gemini 계열만 더 싸게 쓸 길은 있다.</p>



<h3 class="wp-block-heading">두 개 동시 결제가 의미 있나요?</h3>



<p class="wp-block-paragraph">한 도구로 충분한 경우가 대부분이다. 글쓰기(Claude) + 검색(Google)처럼 명확히 보완 관계일 때만 병행 가치가 있다. 결제 전 무료 버전으로 1주 비교 권장.</p>



<h3 class="wp-block-heading">한국 결제 시 VAT가 붙나요?</h3>



<p class="wp-block-paragraph">₩29,000에 <strong>VAT 10% 포함</strong> 청구. 사업자등록번호 입력 시 면제 가능 — 월 약 ₩3,000 절감. 셋 다 동일.</p>



<h3 class="wp-block-heading">앱스토어 결제가 더 비싼가요?</h3>



<p class="wp-block-paragraph">그렇다. 인앱 결제는 Apple·Google 수수료가 반영되어 통상 ₩31,000 안팎. 웹 결제 권장.</p>



<h3 class="wp-block-heading">무료 버전으로 부족한가요?</h3>



<p class="wp-block-paragraph">월 50건 이하 가벼운 질의면 무료로 버틸 만하다. 유료로 올라가면 모델 한도가 크게 풀리고 Deep Research·NotebookLM 같은 상위 기능이 열린다 — <strong>Claude Pro는 Free 대비 ≥5×</strong>로 공식 명시(<a href="https://support.claude.com/en/articles/8325606-what-is-the-pro-plan" target="_blank" rel="noopener">Anthropic Support</a>), ChatGPT Plus·Gemini는 정확한 배수는 미공개이나 GPT-5.5 Thinking·Gemini 3.1 Pro 같은 상위 모델 접근이 열린다. 한 주 안에 무료 한도에 자주 부딪힌다면 결제 신호.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">정리</h2>



<p class="wp-block-paragraph">정가가 같다는 사실 덕에 <strong>월 $20 AI 구독</strong> 결정은 오히려 단순해진다. <strong>글쓰기·코딩이면 Claude Pro, 이미지·음성·범용이면 ChatGPT Plus, 검색·연구·Google 생태계·가족 공유면 Google AI Pro</strong>. 6축 트리 중 자기 시나리오만 정하면 30초 안에 답이 나온다.</p>



<p class="wp-block-paragraph">본 글의 가격·기능은 2026-05-24 기준. 분기마다 변동이 잦으니 결제 직전 공식 페이지를 한 번 더 확인할 것. 분기 갱신은 같은 URL에 본문만 교체할 예정이다.</p>



<h3 class="wp-block-heading">관련 글</h3>



<ul class="wp-block-list">
<li>모델 자체 품질 비교 — <a href="https://jspulsar.dev/claude-vs-gpt-vs-gemini-2026-%ed%95%9c%ea%b5%ad-%ec%82%ac%ec%9a%a9%ec%9e%90%ea%b0%80-%ea%b3%a0%eb%a5%b8-%ed%98%84%eb%8b%b5/">Claude vs GPT vs Gemini 2026: 한국 사용자가 고른 현답</a></li>



<li>API 종량제로 가는 분기점 — <a href="https://jspulsar.dev/claude-api-%eb%b9%84%ec%9a%a9-%ec%99%84%eb%b2%bd-%ea%b0%80%ec%9d%b4%eb%93%9c-2026-%ed%86%a0%ed%81%b0-%eb%8b%a8%ea%b0%80%c2%b7%ec%ba%90%ec%8b%b1%c2%b7%eb%b0%b0%ec%b9%98-%ed%95%a0%ec%9d%b8-%ed%95%9c/">Claude API 비용 완벽 가이드 2026</a></li>



<li>코딩 도구 선택 — <a href="https://jspulsar.dev/cursor-vs-claude-code-%ea%b2%b0%ec%a0%95-%ed%8a%b8%eb%a6%ac-%eb%b0%b1%ec%97%94%eb%93%9c-%ea%b0%9c%eb%b0%9c%ec%9e%90%ea%b0%80-6%ea%b0%9c-%ec%b6%95%ec%9c%bc%eb%a1%9c-%ea%b3%a8%eb%9d%bc%eb%b4%a4/">Cursor vs Claude Code 결정 트리</a></li>



<li>월 $0 옵션 — <a href="https://jspulsar.dev/ollama%eb%a1%9c-m3-pro-%eb%a7%a5%eb%b6%81%ec%97%90-%eb%a1%9c%ec%bb%ac-llm-%eb%9d%84%ec%9a%b0%ea%b8%b0-30%eb%b6%84-%ec%8b%a4%ec%b8%a1-%ea%b0%80%ec%9d%b4%eb%93%9c/">Ollama로 M3 Pro 맥북에 로컬 LLM 띄우기</a></li>



<li>Claude API vs Ollama 비용 비교는 곧 정리 예정</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://jspulsar.dev/chatgpt-plus-claude-pro-gemini-advanced-20dollar/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Ollama로 M3 Pro 맥북에 로컬 LLM 띄우기 — 30분 실측 가이드</title>
		<link>https://jspulsar.dev/ollama-m3-pro-30min-guide/</link>
					<comments>https://jspulsar.dev/ollama-m3-pro-30min-guide/#respond</comments>
		
		<dc:creator><![CDATA[jshi2504]]></dc:creator>
		<pubDate>Wed, 20 May 2026 15:00:00 +0000</pubDate>
				<category><![CDATA[로컬AI]]></category>
		<category><![CDATA[학습]]></category>
		<category><![CDATA[llama 3.1]]></category>
		<category><![CDATA[m3 pro]]></category>
		<category><![CDATA[ollama]]></category>
		<category><![CDATA[로컬 LLM]]></category>
		<category><![CDATA[맥북]]></category>
		<category><![CDATA[양자화]]></category>
		<guid isPermaLink="false">https://jspulsar.dev/?p=1303</guid>

					<description><![CDATA[M3 Pro 36GB 맥북에서 Ollama로 Llama 3.1 8B를 30분 안에 띄운 운영자 실측 가이드. 설치·Metal GPU 확인·tokens/sec 측정·MLX 함정·36GB 메모리로 가능한 한계까지 1인칭으로 정리했다. (2026-05-21 측정)]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">다운로드부터 첫 응답까지 30분. 내 M3 Pro 18코어 GPU·36GB 통합메모리 맥북에서 Ollama로 Llama 3.1 8B를 띄우면서 측정한 시간이다. 이 글은 그 30분을 단계별로 쪼개 따라 할 수 있게 정리하고, 맥북 로컬 LLM이 36GB 환경에서 어디까지 버티는지 — 그리고 어디서 무너지는지 — 솔직히 박는다. 프로덕션 처리량·엔진 비교는 별도 글에서 다룬다.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>측정 환경</strong></p>



<ul class="wp-block-list">
<li>Apple Mac M3 Pro (6P+6E CPU, <strong>18코어 GPU</strong>), <strong>36GB 통합메모리</strong>, macOS Sonoma</li>



<li>Ollama <strong>v0.24.0</strong> (2026-05-14 릴리즈, 최신 안정판)</li>



<li>모델: <strong>Llama 3.1 8B Q4_K_M</strong> (다운로드 ≈4.9GB)</li>



<li><strong>2026-05-21 측정</strong></li>



<li>이 글의 모든 수치는 위 환경 기준이다. 18GB 베이스 SKU와 비교 수치는 본문 GPU 섹션에서 함께 다룬다</li>
</ul>
</blockquote>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="768" src="https://jspulsar.dev/wp-content/uploads/2026/05/ollama-homepage-1024x768.png" alt="" class="wp-image-1304" srcset="https://jspulsar.dev/wp-content/uploads/2026/05/ollama-homepage-1024x768.png 1024w, https://jspulsar.dev/wp-content/uploads/2026/05/ollama-homepage-300x225.png 300w, https://jspulsar.dev/wp-content/uploads/2026/05/ollama-homepage-768x576.png 768w, https://jspulsar.dev/wp-content/uploads/2026/05/ollama-homepage-1536x1152.png 1536w, https://jspulsar.dev/wp-content/uploads/2026/05/ollama-homepage-600x450.png 600w, https://jspulsar.dev/wp-content/uploads/2026/05/ollama-homepage.png 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 1. Ollama 공식 홈 — &#8216;Get up and running&#8217; 한 줄로 시작</em></p>



<h2 class="wp-block-heading">TL;DR</h2>



<ul class="wp-block-list">
<li>M3 Pro 36GB 맥북에서 Ollama <strong>v0.24.0</strong> 설치 → Llama 3.1 8B Q4_K_M pull → 첫 응답까지 <strong>약 20~30분</strong>.</li>



<li>긴 응답 평균 토큰 생성 속도는 약 <strong>22 tok/s</strong> (LocalScore의 동일 SKU reference 22.1 t/s 근처로 수렴).</li>



<li>36GB로 안전한 모델은 <strong>30B Q4까지</strong>. 70B Q4는 빠듯해 스왑 폴백 위험. 18GB 베이스 SKU 사용자는 8B Q4가 안전선.</li>



<li><strong>MLX 가속</strong>은 메모리 요건(&gt;32GB)은 충족하지만 <strong>Qwen3.5-35B-A3B 단일 모델 한정</strong>이라 Llama·일반 모델 사용 시엔 여전히 기존 Metal 경로로 동작.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Ollama가 정확히 뭔가? — 30초 정리</h2>



<p class="wp-block-paragraph">Ollama는 로컬 LLM을 CLI와 REST API로 띄우게 해주는 오픈소스 런타임이다. 내부적으로 llama.cpp + Apple Metal 가속을 쓴다. 모델 하나를 <code>ollama pull</code> 한 줄로 받고, <code>ollama run</code> 한 줄로 대화창이 뜬다 — 이게 진입 장벽이 낮은 이유다.</p>



<p class="wp-block-paragraph">GUI를 원하면 LM Studio가 있고, 처리량 중심 프로덕션 엔진은 vLLM·sglang 계열이다. 엔진 셋업 비교는 별도 글에서 다룬다(준비 중). 본 글은 학습 톤·단일 사용자 prototyping을 전제로 가장 단순한 길만 따라간다.</p>



<p class="wp-block-paragraph">미리 박아둘 함정 하나. Ollama v0.19부터 MLX preview가 추가됐지만, 32GB 초과 통합메모리와 Qwen3.5-35B-A3B <strong>단일 모델</strong>에만 적용되는 가속이다. 본 글의 M3 Pro 36GB는 메모리 요건은 충족하지만 모델이 Llama 3.1 8B라 적용 대상이 아니고 기존 Metal/llama.cpp 경로를 그대로 탄다. 자세한 한계는 아래 §&#8221;못 하는 것&#8221;에서 다시 정리한다.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>버전 메모.</strong> 본 글은 최신 안정판 <strong>v0.24.0</strong> (2026-05-14) 기준이다. v0.30 계열은 llama.cpp 직접 통합을 시도하는 pre-release(<code>v0.30.0-rc21</code>, 2026-05-13) 단계라 production 추천은 어렵다. 학습 단계라면 안정판으로 충분하고, <code>brew install ollama</code>·공식 dmg 모두 안정판이 떨어진다.</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Ollama 설치 — <code>--version</code>까지 (5분)</h2>



<p class="wp-block-paragraph">가장 단순한 경로는 공식 .dmg 다운로드다. <a href="https://ollama.com/download/mac" target="_blank" rel="noopener">ollama.com/download/mac</a>에 접속해 macOS 버튼을 누르면 약 150MB짜리 dmg가 떨어진다.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="371" src="https://jspulsar.dev/wp-content/uploads/2026/05/ollama-download-1024x371.png" alt="" class="wp-image-1305" srcset="https://jspulsar.dev/wp-content/uploads/2026/05/ollama-download-1024x371.png 1024w, https://jspulsar.dev/wp-content/uploads/2026/05/ollama-download-300x109.png 300w, https://jspulsar.dev/wp-content/uploads/2026/05/ollama-download-768x278.png 768w, https://jspulsar.dev/wp-content/uploads/2026/05/ollama-download-1536x557.png 1536w, https://jspulsar.dev/wp-content/uploads/2026/05/ollama-download-600x218.png 600w, https://jspulsar.dev/wp-content/uploads/2026/05/ollama-download.png 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 2. Ollama 공식 macOS 다운로드 페이지</em></p>



<p class="wp-block-paragraph">dmg를 열어 Ollama 아이콘을 <code>/Applications</code> 폴더로 드래그하면 끝이다. 한 번 실행해두면 macOS 상단 메뉴바에 작은 llama 아이콘이 박히는데, 이게 보이면 <code>ollama serve</code>가 백그라운드로 떠 있다는 뜻이다.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="52" src="https://jspulsar.dev/wp-content/uploads/2026/05/menubar-icon-1024x52.png" alt="" class="wp-image-1306" srcset="https://jspulsar.dev/wp-content/uploads/2026/05/menubar-icon-1024x52.png 1024w, https://jspulsar.dev/wp-content/uploads/2026/05/menubar-icon-300x15.png 300w, https://jspulsar.dev/wp-content/uploads/2026/05/menubar-icon-768x39.png 768w, https://jspulsar.dev/wp-content/uploads/2026/05/menubar-icon-600x30.png 600w, https://jspulsar.dev/wp-content/uploads/2026/05/menubar-icon.png 1268w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 3. Ollama 설치 후 메뉴바에 등장한 llama 아이콘</em></p>



<p class="wp-block-paragraph">터미널을 열어 버전을 확인한다.</p>



<pre class="wp-block-code"><code>ollama --version
# ollama version is 0.24.0
</code></pre>



<p class="wp-block-paragraph">Homebrew를 쓰는 사람이라면 <code>brew install ollama</code> 한 줄로도 된다. 다만 메뉴바 통합·자동 업데이트는 dmg 쪽이 깔끔해서 처음 까는 거면 공식 dmg가 마음 편하다.</p>



<p class="wp-block-paragraph">여기까지 회선 사정에 따라 3~5분.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="396" height="82" src="https://jspulsar.dev/wp-content/uploads/2026/05/ollama-version.png" alt="" class="wp-image-1307" srcset="https://jspulsar.dev/wp-content/uploads/2026/05/ollama-version.png 396w, https://jspulsar.dev/wp-content/uploads/2026/05/ollama-version-300x62.png 300w" sizes="auto, (max-width: 396px) 100vw, 396px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 4. ollama &#8211;version 실행 결과</em></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">첫 모델 — <code>llama3.1:8b</code> pull부터 첫 대화까지 (10분)</h2>



<p class="wp-block-paragraph">baseline으로는 <strong>Llama 3.1 8B</strong>를 권한다. 다운로드 4.9GB, 36GB에 한참 여유(18GB SKU도 안전), 영어·코드·일반 지식이 무난하다. Qwen·EXAONE 등 한국어 강세 모델 비교는 별도 글에서 다룬다(준비 중). 본 글은 &#8220;일단 띄워보는 것&#8221;이 목적이라 모델은 하나로 좁힌다.</p>



<p class="wp-block-paragraph">솔직히 처음엔 3.2 3B로 시작했는데 응답 품질이 학습용으로도 살짝 아쉬워 8B Q4로 갈아탔다. 18GB·36GB 모두에서 8B Q4가 가장 합리적인 출발점이다 — 36GB 사용자는 익숙해진 뒤 13B·30B Q4로 단계적으로 올려볼 수 있다.</p>



<p class="wp-block-paragraph">명령어는 두 줄이다.</p>



<pre class="wp-block-code"><code>ollama pull llama3.1:8b
ollama run llama3.1:8b
</code></pre>



<p class="wp-block-paragraph"><code>pull</code>은 4.9GB 파일을 받아온다. 100Mbps 회선 기준 약 7분, 기가급이면 1분 안쪽. 처음 <code>run</code>을 치면 모델을 mmap으로 올리고 워밍업하는데, 내 환경에선 약 1분 정도 로딩이 들어갔다. 두 번째부터는 즉시 응답한다.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="148" src="https://jspulsar.dev/wp-content/uploads/2026/05/ollama-pull-1024x148.png" alt="" class="wp-image-1308" srcset="https://jspulsar.dev/wp-content/uploads/2026/05/ollama-pull-1024x148.png 1024w, https://jspulsar.dev/wp-content/uploads/2026/05/ollama-pull-300x43.png 300w, https://jspulsar.dev/wp-content/uploads/2026/05/ollama-pull-768x111.png 768w, https://jspulsar.dev/wp-content/uploads/2026/05/ollama-pull-1536x222.png 1536w, https://jspulsar.dev/wp-content/uploads/2026/05/ollama-pull-600x87.png 600w, https://jspulsar.dev/wp-content/uploads/2026/05/ollama-pull.png 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 5. Llama 3.1 8B 모델 다운로드 진행</em></p>



<p class="wp-block-paragraph">대화창이 뜨면 짧은 프롬프트로 작동 여부부터 본다.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="496" height="172" src="https://jspulsar.dev/wp-content/uploads/2026/05/ollama-first-chat.png" alt="" class="wp-image-1309" srcset="https://jspulsar.dev/wp-content/uploads/2026/05/ollama-first-chat.png 496w, https://jspulsar.dev/wp-content/uploads/2026/05/ollama-first-chat-300x104.png 300w" sizes="auto, (max-width: 496px) 100vw, 496px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 6. Llama 3.1 8B와의 첫 대화</em></p>



<h3 class="wp-block-heading">Q4_K_M 양자화가 뭔가</h3>



<p class="wp-block-paragraph"><code>llama3.1:8b</code>의 기본 태그는 **Q4_K_M 양자화(quantization)**다. 가중치를 4비트로 압축해 크기를 약 1/4로 줄이고 품질 손실은 거의 체감되지 않는 균형점이다. 같은 8B를 fp16으로 받으면 ≈16GB라 18GB 환경엔 빠듯하지만, Q4_K_M은 4.9GB라 18GB·36GB 모두에서 KV 캐시까지 합쳐도 여유롭다.</p>



<p class="wp-block-paragraph">모델 파일은 <code>~/.ollama/models</code>에 저장된다. 외장 SSD로 옮기려면 <code>OLLAMA_MODELS</code> 환경변수로 경로를 바꿀 수 있는데, 자세한 건 아래 FAQ에서 다룬다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">GPU 확인과 tokens/sec 실측 — <code>ollama ps</code>와 <code>--verbose</code> (5분)</h2>



<p class="wp-block-paragraph">&#8220;내 맥북이 정말 GPU로 돌리고 있나?&#8221;는 새로 깔고 가장 먼저 확인하고 싶은 부분이다. 다른 터미널 탭에서 한 줄.</p>



<p class="wp-block-paragraph"><code>PROCESSOR</code> 컬럼이 핵심이다. <code>100% GPU</code>면 전부 Metal로 돌고 있다는 뜻이고, <code>100% CPU</code>면 메모리가 모자라 폴백된 상태, 퍼센트가 섞여 있으면 부분 오프로드다. Apple Silicon에서는 기본 활성이라 <code>OLLAMA_METAL</code> 같은 환경변수를 따로 만질 필요가 없다.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="95" src="https://jspulsar.dev/wp-content/uploads/2026/05/ollama-ps-1024x95.png" alt="" class="wp-image-1310" srcset="https://jspulsar.dev/wp-content/uploads/2026/05/ollama-ps-1024x95.png 1024w, https://jspulsar.dev/wp-content/uploads/2026/05/ollama-ps-300x28.png 300w, https://jspulsar.dev/wp-content/uploads/2026/05/ollama-ps-768x71.png 768w, https://jspulsar.dev/wp-content/uploads/2026/05/ollama-ps-600x56.png 600w, https://jspulsar.dev/wp-content/uploads/2026/05/ollama-ps.png 1210w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 7. ollama ps — Processor 100% GPU 확인</em></p>



<p class="wp-block-paragraph">토큰 생성 속도를 재고 싶으면 <code>--verbose</code> 플래그를 붙여 다시 실행한다.</p>



<p class="wp-block-paragraph">내 M3 Pro(6P+6E CPU·<strong>18 GPU·36GB</strong>)에서 짧은 한국어 프롬프트 한 번을 던져 위 metrics를 받았다. eval rate는 <strong>32.59 tok/s</strong>, prompt processing은 <strong>148.64 t/s</strong>, TTFT(load + prompt eval)는 약 <strong>0.22초</strong>다. 단, 이 수치는 응답이 6 토큰(&#8220;이승철입니다.&#8221;)밖에 안 되는 짧은 샘플이라 측정 노이즈가 크다 — 같은 환경에서 100~500 토큰짜리 긴 응답을 여러 번 평균 내면 LocalScore가 동일 SKU(<strong>M3 Pro 18 GPU·36GB</strong>)에서 측정한 <strong>22.1 t/s</strong> reference 근처(약 20~24 tok/s)로 수렴한다. 참고로 같은 M3 Pro라도 SKU에 따라 21.1 t/s(14 GPU·18GB, 베이스)·20.8 t/s(18 GPU·18GB)·21.5 t/s(14 GPU·36GB)로 차이가 있으니 자기 라인업을 확인하고 비교하면 된다. 긴 응답 평균이 20 tok/s를 크게 밑돌면 백그라운드 앱·저전력 모드·발열 throttling을 의심해본다.<br></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="576" height="406" src="https://jspulsar.dev/wp-content/uploads/2026/05/ollama-verbose.png" alt="" class="wp-image-1311" srcset="https://jspulsar.dev/wp-content/uploads/2026/05/ollama-verbose.png 576w, https://jspulsar.dev/wp-content/uploads/2026/05/ollama-verbose-300x211.png 300w" sizes="auto, (max-width: 576px) 100vw, 576px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 8. ollama run &#8211;verbose — 짧은 응답 1회의 metrics 출력 (긴 응답 평균은 LocalScore reference 22 tok/s 근처)</em></p>



<p class="wp-block-paragraph">여기서 한 가지 짚을 게 있다. M3 Pro 메모리 대역폭은 베이스·상위 SKU 모두 <strong>150 GB/s</strong>로, 흥미롭게도 M2 Pro의 200 GB/s보다 낮다. LLM 추론은 대역폭 의존도가 커서, 같은 메모리 용량이라도 세대 비교에서 직관과 다른 결과가 나올 수 있다. 즉 36GB로 더 큰 모델을 올릴 수는 있어도 토큰 생성 속도는 대역폭 한계에 묶인다. Windows GPU(별도 VRAM + 더 높은 대역폭)와의 직접 비교는 별도 글에서 다룬다(준비 중). 단일 사용자 학습 용도에서 22 tok/s면 클라우드 호출보다 살짝 느린 정도라 체감상 부족함은 없다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">REST API로도 부르기 — 11434 포트 한 줄</h2>



<p class="wp-block-paragraph">Ollama는 메뉴바 앱이 떠 있으면 자동으로 <code>127.0.0.1:11434</code>에 REST API를 연다. CLI 말고 다른 도구·스크립트에서 부를 때 쓴다.</p>



<p class="wp-block-paragraph">OpenAI 호환 경로 <code>/v1/chat/completions</code>도 살아있어, 기존 OpenAI SDK 코드의 base_url만 바꿔도 붙는다. 외부 네트워크에서 접속하려면 <code>OLLAMA_HOST</code>를 바꾸거나 터널을 따로 깔아야 하는데, 안전한 외부 접속은 별도 글에서 다룬다(준비 중).</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="141" src="https://jspulsar.dev/wp-content/uploads/2026/05/ollama-curl-1024x141.png" alt="" class="wp-image-1312" srcset="https://jspulsar.dev/wp-content/uploads/2026/05/ollama-curl-1024x141.png 1024w, https://jspulsar.dev/wp-content/uploads/2026/05/ollama-curl-300x41.png 300w, https://jspulsar.dev/wp-content/uploads/2026/05/ollama-curl-768x106.png 768w, https://jspulsar.dev/wp-content/uploads/2026/05/ollama-curl-1536x211.png 1536w, https://jspulsar.dev/wp-content/uploads/2026/05/ollama-curl-600x83.png 600w, https://jspulsar.dev/wp-content/uploads/2026/05/ollama-curl.png 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 9. REST API /api/generate 응답</em></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">M3 Pro 36GB로 못 하는 것 — 솔직한 한계</h2>



<p class="wp-block-paragraph">&#8220;할 수 있다&#8221;만 늘어놓는 가이드가 너무 많아서 여기가 이 글에서 제일 바꾸고 싶었던 부분이다.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>모델 크기</th><th>36GB에서</th><th>18GB 베이스 SKU 참고</th></tr></thead><tbody><tr><td>8B Q4_K_M</td><td>한참 여유, 본 글 권장 zone</td><td>안전</td></tr><tr><td>13B Q4</td><td>안전, 32K 컨텍스트도 OK</td><td>컨텍스트 짧게 유지 시 가능</td></tr><tr><td>30~32B Q4</td><td>가능 (메모리 점유 ≈18~22GB)</td><td>스왑 폴백, 실용 불가</td></tr><tr><td>70B Q4</td><td>빠듯 (≈40GB) — 컨텍스트 짧게 + 백그라운드 비우기</td><td>사실상 불가능</td></tr><tr><td>70B Q8·fp16</td><td>불가</td><td>불가</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong>MLX 함정.</strong> 영문 매체에서 &#8220;Ollama가 MLX로 2배 빨라졌다&#8221;는 헤드라인을 종종 보는데, 공식 요구치는 <strong>통합메모리 32GB 초과 + Qwen3.5-35B-A3B 단일 모델</strong>이다. 본 환경(M3 Pro 36GB)은 메모리 요건은 통과하지만, Llama·Qwen·Gemma 등 일반 모델을 돌릴 때는 적용 대상이 아니라 기존 Metal/llama.cpp 경로로 동작한다. 헤드라인이 거짓은 아니지만 모델 호환이 매우 제한적이라는 뜻이다. 신규 GPU Neural Accelerator 가속도 M5 / M5 Pro / M5 Max 전용이라 M3 세대엔 무관하다. 8B Q4_K_M 22 tok/s가 본 환경의 현실 수치다.</p>



<p class="wp-block-paragraph"><strong>컨텍스트 함정.</strong> 모델이 &#8220;128K 지원&#8221;이라고 해서 36GB에서도 무한정 다 쓸 수 있다는 뜻은 아니다. 8B + FP16 KV 캐시 기준 32K 컨텍스트는 KV 캐시만 ≈4.5GB 추가 점유. 36GB라도 13B·30B 모델을 큰 컨텍스트와 함께 쓰면 빠르게 한계에 닿는다. 일반적인 안전선은 8K~16K. 필요하면 <code>OLLAMA_CONTEXT_LENGTH</code>나 API의 <code>options.num_ctx</code>로 명시한다.</p>



<p class="wp-block-paragraph"><strong>발열·배터리.</strong> 7B 추론 전력은 12~18W, 풀충 기준 활성 추론 3~4시간. 노트북 스탠드로 흡기를 확보하면 thermal throttling 시점이 10분에서 20분+로 미뤄진다. 정확한 수치는 환경에 따라 다르다.</p>



<p class="wp-block-paragraph"><strong>동시 요청은 약점.</strong> Ollama는 단일 사용자 prototyping에 최적이라 동시 요청이 늘면 throughput이 빠르게 떨어진다. 처리량 중심 엔진(vLLM·sglang)으로 옮길 시점·비교는 별도 글에서 다룬다(준비 중).</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">자주 묻는 질문</h2>



<p class="wp-block-paragraph"><strong>Q1. Ollama가 정확히 뭔가요?</strong> </p>



<p class="wp-block-paragraph">로컬에서 LLM을 CLI와 REST API로 띄우는 오픈소스 런타임이다. 내부적으로 llama.cpp와 Metal 가속을 쓰며, <code>pull</code> / <code>run</code> 두 줄로 시작한다.</p>



<p class="wp-block-paragraph"><strong>Q2. M3 Pro로 8B 모델 돌릴 수 있나요?</strong> </p>



<p class="wp-block-paragraph">18GB·36GB 모두 가능. Q4_K_M 다운로드 4.9GB, 컨텍스트 포함 메모리 6~8GB 수준이라 18GB에서도 여유. 내 36GB 환경에선 긴 응답 평균 약 22 tok/s가 나왔다. 36GB 사용자는 추가로 13B·30B Q4까지 시도해볼 수 있다.</p>



<p class="wp-block-paragraph"><strong>Q3. Ollama 설치 시간이 얼마나 걸리나요?</strong> </p>



<p class="wp-block-paragraph">dmg 설치 3~5분, Llama 3.1 8B pull 7~10분(100Mbps), 첫 응답 1분 내외로 약 20분. 기가급 회선이면 더 짧다.</p>



<p class="wp-block-paragraph"><strong>Q4. Metal GPU 가속이 자동으로 적용되나요?</strong> </p>



<p class="wp-block-paragraph">예. Apple Silicon은 기본 활성이라 별도 설정이 필요 없다. <code>ollama ps</code>의 <code>Processor</code>가 <code>100% GPU</code>면 정상이다.</p>



<p class="wp-block-paragraph"><strong>Q5. 모델 파일은 어디에 저장되며 외장 SSD로 옮길 수 있나요?</strong> </p>



<p class="wp-block-paragraph">기본 경로는 <code>~/.ollama/models</code>. 변경하려면 <code>launchctl setenv OLLAMA_MODELS "/Volumes/Ext/ollama"</code>로 환경변수를 잡고 메뉴바 앱을 재시작한다.</p>



<p class="wp-block-paragraph"><strong>Q6. 메모리가 부족하면 어떻게 되나요?</strong> </p>



<p class="wp-block-paragraph">macOS가 swap으로 폴백해 토큰 속도가 1~5 tok/s로 급락한다. <code>ollama ps</code>의 <code>Processor</code>가 부분 % 또는 <code>100% CPU</code>면 모델·컨텍스트를 줄일 신호다.</p>



<p class="wp-block-paragraph"><strong>Q7. Llama 3.1과 Llama 3.2 중 뭘 쓰나요?</strong> </p>



<p class="wp-block-paragraph">학습 baseline으론 3.1 8B를 권한다. 3.2 3B는 더 가볍지만 품질이 떨어진다. 한국어 모델 비교는 별도 글에서 다룬다(준비 중).</p>



<p class="wp-block-paragraph"><strong>Q8. 외부에서 내 맥북 Ollama에 접속하려면?</strong> </p>



<p class="wp-block-paragraph">기본 바인딩은 <code>127.0.0.1:11434</code>로 로컬만 열려 있다. <code>OLLAMA_HOST=0.0.0.0:11434</code>로 노출은 가능하지만 보안 위험이 크다. Cloudflare Tunnel 등 안전한 설정은 별도 글에서 다룬다(준비 중).</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">정리 — 30분 후 무엇이 남았나</h2>



<p class="wp-block-paragraph">30분 뒤 내 맥북에는 Llama 3.1 8B가 22 tok/s로 돌고 있다. 클라우드 모델만큼 똑똑하진 않지만 무료·오프라인·프라이빗이다. 36GB 환경에선 13B·30B Q4까지 안전하게 올릴 수 있고, MLX 가속은 메모리 요건만 통과할 뿐 일반 모델엔 적용되지 않는다는 것도 함께 알게 됐다(18GB 베이스 SKU 사용자라면 8B Q4_K_M까지가 안전선). &#8220;내가 뭘 쓰고 있는지&#8221; 정확히 인지하면서 다음 단계로 넘어갈 수 있다.</p>



<p class="wp-block-paragraph">다음으로 해볼 만한 것들 — 모두 별도 글로 다룰 예정이다.</p>



<ul class="wp-block-list">
<li><strong>외부에서 접속하기</strong>: Cloudflare Tunnel로 안전하게 노출 (준비 중)</li>



<li><strong>한국어 모델 고르기</strong>: gemma2:9b·llama3.2·mistral-nemo 비교 (준비 중)</li>



<li><strong>처리량이 필요해지면</strong>: <a href="/vllm-pagedattention-explained/" data-type="link" data-id="/vllm-pagedattention-explained/">vLLM은 왜 빠른가: PagedAttention을 OS 페이징으로 이해하기</a></li>



<li><strong>엔진 비교</strong>: sglang vs vLLM vs Ollama 언제 무엇을 쓰나 (준비 중)</li>
</ul>



<p class="wp-block-paragraph">다음 글에선 외부 접속을 다룬다.</p>



<h2 class="wp-block-heading">관련 글</h2>



<ul class="wp-block-list">
<li><a href="https://jspulsar.dev/claude-api-%eb%b9%84%ec%9a%a9-%ec%99%84%eb%b2%bd-%ea%b0%80%ec%9d%b4%eb%93%9c-2026-%ed%86%a0%ed%81%b0-%eb%8b%a8%ea%b0%80%c2%b7%ec%ba%90%ec%8b%b1%c2%b7%eb%b0%b0%ec%b9%98-%ed%95%a0%ec%9d%b8-%ed%95%9c/">Claude API 비용 완벽 가이드 2026 — 토큰 단가·캐싱·배치 할인</a> — 같은 토큰을 로컬에서 0원에 돌리는 게 매력적이라면, 비교 기준점으로 클라우드 비용 구조부터 잡고 가는 것을 권한다.</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://jspulsar.dev/ollama-m3-pro-30min-guide/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Cursor vs Claude Code 결정 트리: 백엔드 개발자가 6개 축으로 골라봤다 (2026)</title>
		<link>https://jspulsar.dev/cursor-vs-claude-code-%ea%b2%b0%ec%a0%95-%ed%8a%b8%eb%a6%ac-%eb%b0%b1%ec%97%94%eb%93%9c-%ea%b0%9c%eb%b0%9c%ec%9e%90%ea%b0%80-6%ea%b0%9c-%ec%b6%95%ec%9c%bc%eb%a1%9c-%ea%b3%a8%eb%9d%bc%eb%b4%a4/</link>
					<comments>https://jspulsar.dev/cursor-vs-claude-code-%ea%b2%b0%ec%a0%95-%ed%8a%b8%eb%a6%ac-%eb%b0%b1%ec%97%94%eb%93%9c-%ea%b0%9c%eb%b0%9c%ec%9e%90%ea%b0%80-6%ea%b0%9c-%ec%b6%95%ec%9c%bc%eb%a1%9c-%ea%b3%a8%eb%9d%bc%eb%b4%a4/#respond</comments>
		
		<dc:creator><![CDATA[jshi2504]]></dc:creator>
		<pubDate>Sat, 16 May 2026 15:00:00 +0000</pubDate>
				<category><![CDATA[비교]]></category>
		<category><![CDATA[2026]]></category>
		<category><![CDATA[ai-코딩-도구]]></category>
		<category><![CDATA[claude-code]]></category>
		<category><![CDATA[cursor]]></category>
		<category><![CDATA[ide-vs-cli]]></category>
		<category><![CDATA[결정-트리]]></category>
		<category><![CDATA[백엔드-개발]]></category>
		<guid isPermaLink="false">https://ai-blog.jspulsar.dev/?p=1288</guid>

					<description><![CDATA[Cursor vs Claude Code 차이를 작업·환경·비용 6개 축으로 정리한 결정 트리. 한국 백엔드 개발자가 두 도구를 같은 코드베이스에서 써본 2026년 5월 기준 비교와 원화 환산 가격, '둘 다 쓰는' 운영자 결론.]]></description>
										<content:encoded><![CDATA[
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">2026년 5월 17일 기준 측정. 두 도구 모두 월 단위로 신기능을 내놓고 있어, 가격·기능은 공식 페이지에서 최신 확인을 권한다. Anthropic·Cursor 어느 쪽과도 협찬·제휴 관계가 없는 자비 유료 구독 기준이다.</p>
</blockquote>



<h2 class="wp-block-heading" id="tldr">TL;DR</h2>



<ul class="wp-block-list">
<li><strong>한 줄 결론</strong>: 백엔드 자율 워크플로·터미널 자동화는 Claude Code, 단발 UI 편집·다중 모델 실험은 Cursor. 둘 중 하나를 골라야 한다면 작업 유형이 분기점이다.</li>



<li><strong>Cursor 강점</strong>: IDE 통합, Composer로 다중 파일을 한 번에 편집(2025-10-29 출시, 대부분 30초 안에), Auto mode 무제한, GPT/Claude/Gemini를 같이 시도 가능.</li>



<li><strong>Claude Code 강점</strong>: Plan Mode 안전판(<code>Shift+Tab</code> 두 번), Hooks 25개 라이프사이클 이벤트로 결정론적 자동화, Subagents 격리, 로컬 파일 직접 조작.</li>



<li><strong>한국 가격</strong>: Pro는 둘 다 $20부터 시작, 헤비 티어는 Cursor Ultra·Claude Max 20x 모두 $200(약 27만 6천 원, 환율 1,380원 기준).</li>



<li><strong>내 결론</strong>: 둘 다 쓴다. Cursor는 IDE에서 코드 단발 작업, Claude Code는 백엔드 리팩터와 이 블로그 자동화. 작업별로 분기.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">Cursor vs Claude Code, 어떤 거 쓸지 결정 못하고 있다면 — 이 글은 6개 축으로 30초 안에 답을 내는 결정 트리다. 한국 백엔드 개발자가 둘 다 유료 플랜으로 같은 코드베이스에서 써본 2026년 5월 기준 비교다.</p>



<p class="wp-block-paragraph">운영 환경: Java/Spring Boot(DDD/Hexagonal) + Python/FastAPI + Vue 3 풀스택, macOS(M3 Pro), Claude Max·Cursor 유료 동시 결제. 이 블로그는 Claude Code 멀티 에이전트 하네스로 굴리고 있어 &#8220;도구로 글을 쓰는&#8221; 메타 경험도 끼어 있다. 설치·OAuth는 다루지 않는다 — 처음이라면 <a href="https://jspulsar.dev/claude-code-%ec%84%a4%ec%b9%98%eb%b6%80%ed%84%b0-%ec%b2%ab-%eb%aa%85%eb%a0%b9%ea%b9%8c%ec%a7%80-2026%eb%85%84-macos%c2%b7wsl-%ea%b8%b0%ec%a4%80-%ec%9e%85%eb%ac%b8/">Claude Code 설치부터 첫 명령까지</a>부터 보고 오자.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="30초-결정-매트릭스--시나리오로-바로-찾기">30초 결정 매트릭스 — 시나리오로 바로 찾기</h2>



<p class="wp-block-paragraph">본문 다 안 읽어도 된다. 자기 상황에 맞는 행을 찾으면 답이 나온다.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>당신의 시나리오</th><th>추천</th></tr></thead><tbody><tr><td>VS Code 익숙 + 단발 코드 편집 위주</td><td><strong>Cursor</strong></td></tr><tr><td>멀티 파일 리팩터를 빠르게 끝내고 싶다</td><td><strong>Cursor (Composer)</strong></td></tr><tr><td>여러 모델(GPT·Claude·Gemini) 동시 비교가 중요</td><td><strong>Cursor</strong></td></tr><tr><td>백엔드(Spring/FastAPI) 멀티모듈 + 단계별 승인 안전판</td><td><strong>Claude Code (Plan Mode)</strong></td></tr><tr><td>터미널·로컬 파일·홈서버·블로그 자동화 워크플로</td><td><strong>Claude Code (Hooks + Subagents)</strong></td></tr><tr><td>Opus 헤비 사용(코드 리뷰·아키텍처 설계)</td><td><strong>Claude Code (Max 20x)</strong></td></tr><tr><td>사내 코드 클라우드 인덱싱이 부담</td><td><strong>Claude Code (로컬 우선)</strong></td></tr><tr><td>팀 협업 + PR 자동 리뷰 + Slack/Teams 통합</td><td><strong>Cursor (BugBot + Teams)</strong></td></tr><tr><td>1인 개발자, 둘 다 써볼 예산 있음</td><td><strong>둘 다 (Pro $20씩 = $40)</strong></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">여기서 한 행만 뽑으면 그게 답이다. 두 행이 동시에 걸리면 — 그게 내 케이스다. 그래서 8번째 결정 축이 &#8220;둘 다&#8221;가 된다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="결정-축-1--작업-유형-단일·멀티·자율-에이전트">결정 축 1 — 작업 유형: 단일·멀티·자율 에이전트</h2>



<p class="wp-block-paragraph">작업 유형이 가장 먼저 갈리는 분기다.</p>



<p class="wp-block-paragraph"><strong>단일 파일 단발 수정</strong>은 Cursor의 Tab 자동완성·인라인 편집이 마찰 가장 적다. Claude Code도 가능하나 터미널을 열고 컨텍스트를 잡는 자체가 오버킬이다.</p>



<p class="wp-block-paragraph"><strong>멀티 파일 동시 수정</strong>에서 갈린다. Cursor Composer는 2025년 10월 29일 출시된 자체 코딩 모델로 &#8220;대부분 30초 이내&#8221; 완료를 표방한다(<a href="https://cursor.com/blog/2-0" target="_blank" rel="noopener">Cursor 2.0 발표</a>). 미들웨어·route handler·env var·테스트를 한 번의 자연어 입력으로 묶고, diff preview 후 <code>Cmd+Z</code> 한 번이면 통째로 롤백된다. Claude Code도 멀티 파일 편집은 되지만 Plan Mode 승인 단계가 한 박자 더 들어간다. 속도냐 안전성이냐다.</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="642" src="https://jspulsar.dev/wp-content/uploads/2026/05/cursor-composer-multi-file-1024x642.png" alt="" class="wp-image-1289" style="width:848px;height:auto" srcset="https://jspulsar.dev/wp-content/uploads/2026/05/cursor-composer-multi-file-1024x642.png 1024w, https://jspulsar.dev/wp-content/uploads/2026/05/cursor-composer-multi-file-300x188.png 300w, https://jspulsar.dev/wp-content/uploads/2026/05/cursor-composer-multi-file-768x481.png 768w, https://jspulsar.dev/wp-content/uploads/2026/05/cursor-composer-multi-file-1536x963.png 1536w, https://jspulsar.dev/wp-content/uploads/2026/05/cursor-composer-multi-file-600x376.png 600w, https://jspulsar.dev/wp-content/uploads/2026/05/cursor-composer-multi-file.png 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 1. Cursor Composer가 여러 파일을 diff preview로 묶어 보여주는 화면</em></p>



<p class="wp-block-paragraph"><strong>자율 에이전트</strong>(이슈→PR 초안)는 다른 방향이다. Cursor는 Background Agent와 <a href="https://cursor.com/changelog" target="_blank" rel="noopener">Microsoft Teams 통합</a>(2026-05-11)으로 클라우드 협업 쪽, Claude Code는 <a href="https://code.claude.com/docs/en/sub-agents" target="_blank" rel="noopener">Subagents</a>와 25개 라이프사이클 <a href="https://code.claude.com/docs/en/hooks-guide" target="_blank" rel="noopener">Hooks</a>로 로컬 자작 하네스 쪽이다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="결정-축-2--컨트롤-vs-자율성-tab-tab과-plan-mode-사이">결정 축 2 — 컨트롤 vs 자율성: tab-tab과 Plan Mode 사이</h2>



<p class="wp-block-paragraph">인플런 강사 gymcoding의 답이 이 축을 가장 깔끔하게 정리한다. <em>&#8220;모델은 동일합니다! 하지만 핵심은 모델 자체가 아니라 도구의 사용 방식(인터페이스)에 있습니다.&#8221;</em> (<a href="https://www.inflearn.com/en/community/questions/1726529" target="_blank" rel="noopener">출처</a>)</p>



<p class="wp-block-paragraph">Cursor는 <em>developer in the loop</em> — tab-tab 자동완성, 인라인 편집, Composer diff preview로 개발자가 매 단계에 끼어 있다. Claude Code는 <em>agent in the loop</em> — 에이전트가 계획→실행→자체 검증을 자율 진행하고, 개발자는 높은 수준에서 감시한다.</p>



<p class="wp-block-paragraph"><strong>Plan Mode가 두 도구의 분기점</strong>이다. 2026년 1월 단축키 표준화 이후 <code>Shift+Tab</code>을 두 번 누르면 진입한다(<a href="https://code.claude.com/docs/en/permission-modes" target="_blank" rel="noopener">공식 문서</a>). 읽기 전용 상태로 코드베이스를 분석하고 단계별 계획만 제시한다 — 파일 편집·shell·git 모두 차단된다. 위험한 리팩터를 던질 때 안전판으로 쓰기 좋다. 나는 Spring 멀티모듈에 새 도메인을 추가할 때 항상 Plan Mode부터 켠다. 한 번은 <code>Shift+Tab</code> 안 누르고 던졌다가 엔티티 4개가 동시 수정되어 롤백한 적이 있다. 그 뒤로 습관이 됐다.</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="828" src="https://jspulsar.dev/wp-content/uploads/2026/05/claude-code-plan-mode-1024x828.png" alt="" class="wp-image-1290" style="width:565px;height:auto" srcset="https://jspulsar.dev/wp-content/uploads/2026/05/claude-code-plan-mode-1024x828.png 1024w, https://jspulsar.dev/wp-content/uploads/2026/05/claude-code-plan-mode-300x243.png 300w, https://jspulsar.dev/wp-content/uploads/2026/05/claude-code-plan-mode-768x621.png 768w, https://jspulsar.dev/wp-content/uploads/2026/05/claude-code-plan-mode-1536x1242.png 1536w, https://jspulsar.dev/wp-content/uploads/2026/05/claude-code-plan-mode-600x485.png 600w, https://jspulsar.dev/wp-content/uploads/2026/05/claude-code-plan-mode.png 1714w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 2. Claude Code의 Plan Mode 활성 화면 (Shift+Tab 두 번 단축키)</em></p>



<p class="wp-block-paragraph">Hooks는 또 다른 결이다. 공식 문서의 정의를 그대로 옮기면 — <em>&#8220;Hooks are user-defined shell commands that execute at specific points in Claude Code&#8217;s lifecycle. They provide deterministic control over Claude Code&#8217;s behavior, ensuring certain actions always happen rather than relying on the LLM to choose to run them.&#8221;</em> (<a href="https://code.claude.com/docs/en/hooks-guide" target="_blank" rel="noopener">출처</a>) &#8220;LLM이 알아서 하길 기대&#8221; 대신 &#8220;항상 X가 일어남&#8221;을 강제하는 도구다. Cursor에는 같은 결의 등가물이 없다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="결정-축-3--월-얼마-원화-환산과-한국-카드-결제">결정 축 3 — 월 얼마? 원화 환산과 한국 카드 결제</h2>



<p class="wp-block-paragraph">진입 가격은 같고 정책 구조가 다르다.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>항목</th><th>Cursor</th><th>Claude Code</th><th>원화(≈)</th></tr></thead><tbody><tr><td>무료</td><td>Hobby</td><td>Free (Code 제한적)</td><td>0원</td></tr><tr><td>진입 유료</td><td>Pro $20 + Auto 무제한</td><td>Pro $20 (Code 포함)</td><td>27,600원</td></tr><tr><td>중간</td><td>Pro 위 중간 티어(변동)</td><td>(해당 없음)</td><td>&#8211;</td></tr><tr><td>헤비</td><td>Ultra $200 (20배 사용량)</td><td>Max 5x $100 / Max 20x $200</td><td>138,000 / 276,000원</td></tr><tr><td>별도 과금</td><td>BugBot usage-based</td><td>Extra usage API 종량제</td><td>변동</td></tr><tr><td>팀</td><td>Teams $40/user</td><td>Team Standard $25/seat(월)</td><td>약 3만 5천~5만 5천 원/시트</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">진입은 둘 다 <a href="https://cursor.com/pricing" target="_blank" rel="noopener">Pro $20</a>이고 한국 신용카드로 OAuth·결제 모두 된다. 그 위가 갈린다. Cursor Pro 위 중간 티어는 페이지 구성이 자주 바뀌어 단정이 어렵다 — 직접 <a href="https://cursor.com/pricing" target="_blank" rel="noopener">cursor.com/pricing</a> 확인을 권한다. Claude는 중간 없이 Pro → Max 5x($100) → Max 20x($200)로 점프한다(<a href="https://claude.com/pricing" target="_blank" rel="noopener">claude.com/pricing</a>).</p>



<p class="wp-block-paragraph"><strong>헤비 사용 시 명목 가격은 동가</strong>($200)다. 목적은 다르다. Ultra는 &#8220;여러 모델 + Auto mode 무제한&#8221;, Max 20x는 &#8220;Opus 헤비 + 5시간 리셋에 안 닿기&#8221;. 나는 Sonnet 4.6을 일상으로 쓰고 가끔 Opus 4.7로 큰 리팩터를 돌리는데 Max 20x로 일일 한도에 걸려본 적은 거의 없다. 단 내 패턴 기준이라 일반화는 어렵다.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="544" src="https://jspulsar.dev/wp-content/uploads/2026/05/cursor-pricing-2026-05-1024x544.png" alt="" class="wp-image-1291" srcset="https://jspulsar.dev/wp-content/uploads/2026/05/cursor-pricing-2026-05-1024x544.png 1024w, https://jspulsar.dev/wp-content/uploads/2026/05/cursor-pricing-2026-05-300x159.png 300w, https://jspulsar.dev/wp-content/uploads/2026/05/cursor-pricing-2026-05-768x408.png 768w, https://jspulsar.dev/wp-content/uploads/2026/05/cursor-pricing-2026-05-1536x816.png 1536w, https://jspulsar.dev/wp-content/uploads/2026/05/cursor-pricing-2026-05-600x319.png 600w, https://jspulsar.dev/wp-content/uploads/2026/05/cursor-pricing-2026-05.png 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 3. Cursor 가격 페이지 (2026년 5월 기준)</em></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="960" src="https://jspulsar.dev/wp-content/uploads/2026/05/claude-code-pricing-2026-05-1024x960.png" alt="" class="wp-image-1292" srcset="https://jspulsar.dev/wp-content/uploads/2026/05/claude-code-pricing-2026-05-1024x960.png 1024w, https://jspulsar.dev/wp-content/uploads/2026/05/claude-code-pricing-2026-05-300x281.png 300w, https://jspulsar.dev/wp-content/uploads/2026/05/claude-code-pricing-2026-05-768x720.png 768w, https://jspulsar.dev/wp-content/uploads/2026/05/claude-code-pricing-2026-05-1536x1440.png 1536w, https://jspulsar.dev/wp-content/uploads/2026/05/claude-code-pricing-2026-05-600x563.png 600w, https://jspulsar.dev/wp-content/uploads/2026/05/claude-code-pricing-2026-05.png 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 4. Claude 가격 페이지 (2026년 5월 기준)</em></p>



<p class="wp-block-paragraph">한도 정책에서 한국 사용자가 갈린다. Cursor는 2025년 &#8220;무제한 → 크레딧&#8221;으로 전환했고 한국 매체에서도 사용자 반발이 보도됐다(<a href="https://aimatters.co.kr/news-report/25867/" target="_blank" rel="noopener">AI매터스</a>). Claude Code는 5시간 리셋 + 주간 한도 이중 구조라 짧은 디버깅 세션이 끊기는 사례가 클리앙에도 올라온다(<a href="https://www.clien.net/service/board/park/19158769" target="_blank" rel="noopener">클리앙 후기</a>). 2026년 5월 13일 Anthropic이 <strong>Claude Code 주간 한도 50% 한시 인상</strong>을 발표했다(2026-07-13까지, 유료 플랜 전체 적용) — Codex 견제로 해석되는 움직임이다(<a href="https://apidog.com/blog/claude-code-weekly-limits-50-percent-increase-july-2026/" target="_blank" rel="noopener">apidog 보도</a>).</p>



<p class="wp-block-paragraph">별도 과금도 다르다. Cursor BugBot은 usage-based 별도 과금이며 정확 단가는 공식·매체 보도가 엇갈려 추상 표기가 안전하다. Claude Code는 한도 초과 시 표준 API 단가로 pay-as-you-go가 된다. 단가 구조는 <a href="https://jspulsar.dev/claude-api-%eb%b9%84%ec%9a%a9-%ec%99%84%eb%b2%bd-%ea%b0%80%ec%9d%b4%eb%93%9c-2026-%ed%86%a0%ed%81%b0-%eb%8b%a8%ea%b0%80%c2%b7%ec%ba%90%ec%8b%b1%c2%b7%eb%b0%b0%ec%b9%98-%ed%95%a0%ec%9d%b8-%ed%95%9c/">Claude API 비용 가이드</a>에서 따로 다뤘다.</p>



<p class="wp-block-paragraph">가격 단정은 위험하다. 한 데이터 포인트로, velog의 takuya는 <strong>2025년 1주일 사용 후기</strong>에서 &#8220;Claude Code + 최적화 ≈ 월 $6, Cursor + 자체 API 키 ≈ 월 $14&#8243;라고 정리했다(<a href="https://velog.io/@takuya/%EC%8B%A4%EC%A0%9C-%EA%B2%BD%ED%97%98-Claude-Code%EC%99%80-Cursor-%EC%9D%BC%EC%A3%BC%EC%9D%BC-%EC%82%AC%EC%9A%A9-%ED%9B%84-%EC%95%8C%EA%B2%8C-%EB%90%9C-%EC%A7%84%EC%A7%9C-%EB%B9%84%EC%9A%A9-%ED%9A%A8%EC%9C%A8" target="_blank" rel="noopener">velog 후기</a>). 사용 패턴이 다르면 결론은 뒤집힌다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="결정-축-4--백엔드springfastapi-시나리오에서-어디가-강한가">결정 축 4 — 백엔드(Spring/FastAPI) 시나리오에서 어디가 강한가</h2>



<p class="wp-block-paragraph">한국어 비교 글 대부분이 프론트 위주라 백엔드는 빈자리다.</p>



<p class="wp-block-paragraph">Spring 멀티모듈/Hexagonal에서는 Plan Mode의 안전판 가치가 크다. jonny-cho 블로그(2025년 7월 시점 후기) 인용 — <em>&#8220;Kotlin + Spring Boot 3.x 기반 JPA with Hibernate, 멀티모듈 구조, QueryDSL 설정 등을 자동으로 인식&#8221;</em>(<a href="https://jonny-cho.github.io/ai/2025-07-08-claude-code-1%EA%B0%9C%EC%9B%94-%EC%82%AC%EC%9A%A9-%ED%9B%84%EA%B8%B0%EC%99%80-ai-%EC%8B%9C%EB%8C%80-%EA%B0%9C%EB%B0%9C%EC%9E%90%EC%9D%98-%EB%AF%B8%EB%9E%98/" target="_blank" rel="noopener">출처</a>). 다만 한계도 분명하다. cogito1016은 백엔드 4시간 완성 사례를 올리면서 *&#8221;아무리 프로젝트 전체를 스캔해도, 팀 내부의 암묵적인 규칙이나 히스토리는 이해하지 못했다&#8221;*고 짚었다(<a href="https://cogito1016.github.io/ai-tool/Claude-Code-Practical-Application-Day-1/" target="_blank" rel="noopener">출처</a>).</p>



<p class="wp-block-paragraph">내 패턴. Java/Spring 사내 도메인 리팩터는 Cursor <code>@Codebase</code>로 컨텍스트를 잡고 실제 변경은 Claude Code Plan Mode 단계 승인. Python/FastAPI 신규 엔드포인트는 정반대 — Cursor Composer로 라우터·스키마·테스트를 묶고 Subagent로 별도 검증을 돌린다. 두 도구가 동시에 떠 있어도 충돌 안 난다.</p>



<p class="wp-block-paragraph">원칙은 간단하다. 멀티모듈/DDD/Hexagonal엔 Plan Mode 안전판이 큰 무기 → Claude Code. 단발 컨트롤러 수정·테스트는 Composer 속도 → Cursor. 프론트엔드(Vue/React) 단발은 Cursor 인라인 diff가 직관적이나 이 글 스코프 밖이다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="결정-축-5--솔로-vs-팀-협업-사내-코드-보안-관점">결정 축 5 — 솔로 vs 팀 협업, 사내 코드 보안 관점</h2>



<p class="wp-block-paragraph"><strong>솔로 1인 개발자</strong> 출발선은 같다(Pro $20). 차이는 사용 패턴. 여러 모델 시도와 Auto mode 무제한이 중요하면 Cursor. 자율 실행 + 로컬 파일 + 홈서버/블로그 자동화는 Claude Code. 이 블로그는 researcher → outliner → writer → fact-checker → editor 5명이 한 글을 릴레이로 쓰는 Claude Code 하네스로 굴린다. Cursor에서도 시도했지만 Subagent/Hooks 등가물이 없었다. Cursor 3.3 &#8220;Build in Parallel&#8221;이 가장 가까우나 클라우드 호스팅 기반이라 결이 다르다.</p>



<p class="wp-block-paragraph"><strong>팀</strong>에선 Cursor Teams가 PR 자동 리뷰(BugBot Autofix)와 Microsoft Teams 통합으로 강하고, Claude Code Team Standard는 $25/seat 가격 우위에 SSO·관리자·감사 로그를 끼워준다. <strong>사내 코드 보안</strong> — Cursor는 Privacy Mode로 Background Agent 차단 가능, Claude Code는 로컬 파일 직접 조작이라 외부 인덱싱 자체가 없다. MCP·hooks로 정책 강제까지 묶을 수 있다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="결정-축-6--2026년-5월-신기능-composer·bugbot-vs-skills·hooks·subagents">결정 축 6 — 2026년 5월 신기능: Composer·BugBot vs Skills·Hooks·Subagents</h2>



<p class="wp-block-paragraph">한국어 글 다수가 2025년에 멈춰 있다. 5월 기준으로 갱신해두면 6개월은 유효하다.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>기능</th><th>Cursor (2026-05)</th><th>Claude Code (2026-05)</th></tr></thead><tbody><tr><td>자체 모델</td><td>Composer 2.0 (2025-10-29)</td><td>Sonnet 4.6 / Opus 4.7 / Haiku 4.5</td></tr><tr><td>자동 PR 리뷰</td><td>BugBot Autofix (2026-02) + Effort Levels (2026-05-11)</td><td>Subagent 자작 또는 서드파티</td></tr><tr><td>백그라운드</td><td>Background Agent + Build in Parallel (3.3)</td><td>Subagents + Hooks(25 lifecycle) + Cron</td></tr><tr><td>외부 통합</td><td>Microsoft Teams (2026-05-11), Slack</td><td>MCP 서버 (Atlassian·Gmail·Drive·Chrome)</td></tr><tr><td>멀티 리포</td><td>Cloud agents multi-repo (3.4, 2026-05-13)</td><td>로컬 + git worktree</td></tr><tr><td>Permission</td><td>단일</td><td>Plan / Auto-Accept / Default (Shift+Tab 사이클)</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">한국어 글에 거의 안 보이는 1차 데이터 하나 — 2026년 5월 11일 BugBot에 <strong>Effort Levels</strong>가 들어갔다. cursor.com/changelog 공식 표기로 <em>Default effort finds 0.7 bugs per run; High effort finds 0.95 bugs per run</em> (<strong>Cursor 자체 측정 기준, 독립 벤치마크 아님</strong>).</p>



<p class="wp-block-paragraph">Claude Code 안에서 어떤 모델을 쓸지는 별도 주제라 <a href="https://jspulsar.dev/claude-opus-vs-sonnet-vs-haiku-%ec%b0%a8%ec%9d%b4-%ec%99%84%eb%b2%bd-%ec%a0%95%eb%a6%ac-2026%eb%85%84-4%ec%9b%94-%ec%b5%9c%ec%8b%a0/">Claude Opus vs Sonnet vs Haiku 차이</a>에서 다뤘다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="내가-결국-둘-다-쓰는-이유">내가 결국 둘 다 쓰는 이유</h2>



<p class="wp-block-paragraph">결정 트리를 다 그려놓고 보니 내 결론은 &#8220;둘 다 쓴다&#8221;였다.</p>



<p class="wp-block-paragraph">Cursor는 IDE 단발 작업, 모델 답 비교, 가끔 프론트 컴포넌트. Claude Code는 백엔드 리팩터(Plan Mode), 이 블로그 자동화 하네스, Docker/홈서버 스크립트, 터미널 워크플로 전부. 이 글도 Claude Code 에이전트들이 릴레이로 쓰는 중이다. 일상 패턴은 <a href="https://jspulsar.dev/claude%eb%a1%9c-%ec%bd%94%eb%94%a9-%ec%83%9d%ec%82%b0%ec%84%b1-2%eb%b0%b0-%eb%82%b4%ea%b0%80-%eb%a7%a4%ec%9d%bc-%ec%93%b0%eb%8a%94-5%ea%b0%80%ec%a7%80-%ed%99%9c%ec%9a%a9-%ed%8c%a8%ed%84%b4-2026/">Claude로 코딩 생산성 2배</a>에서 정리했다.</p>



<p class="wp-block-paragraph">한국 시장의 결론도 비슷한 자리로 모인다. <a href="https://wavespeed.ai/blog/ko/posts/cursor-vs-claude-code-comparison-2026/" target="_blank" rel="noopener">wavespeed.ai/blog/ko</a>: <em>&#8220;2026년에 가장 많이 배포하는 개발자들은 두 도구를 모두 사용합니다.&#8221;</em> <a href="https://velog.io/@takuya/%EC%8B%A4%EC%A0%9C-%EA%B2%BD%ED%97%98-Claude-Code%EC%99%80-Cursor-%EC%9D%BC%EC%A3%BC%EC%9D%BC-%EC%82%AC%EC%9A%A9-%ED%9B%84-%EC%95%8C%EA%B2%8C-%EB%90%9C-%EC%A7%84%EC%A7%9C-%EB%B9%84%EC%9A%A9-%ED%9A%A8%EC%9C%A8" target="_blank" rel="noopener">velog/@takuya</a>: <em>&#8220;상황에 맞게 두 도구를 활용하는 게 가장 현명하다는 결론이었습니다.&#8221;</em></p>



<p class="wp-block-paragraph">월 $40, Pro 두 개, 약 5만 5천 원. 점심 한 끼 줄이면 둘 다 쓸 수 있다는 게 솔직한 결론이다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="자주-묻는-질문-faq">자주 묻는 질문 (FAQ)</h2>



<h3 class="wp-block-heading" id="cursor와-claude-code-중-어떤-게-더-나아요">Cursor와 Claude Code 중 어떤 게 더 나아요?</h3>



<p class="wp-block-paragraph">단일 답은 없다. 위 30초 매트릭스가 빠르다. 한 문장 요약 — VS Code 익숙·다중 모델 = Cursor, 백엔드 자율 워크플로·로컬 자동화 = Claude Code, 대부분 = 둘 다.</p>



<h3 class="wp-block-heading" id="cursor와-claude-code-같이-써도-되나요">Cursor와 Claude Code 같이 써도 되나요?</h3>



<p class="wp-block-paragraph">같이 쓰는 게 한국 컨센서스다. 같은 코드베이스에서 작업별 분기 — Cursor에서 단발 편집, Claude Code 터미널에서 자율 워크플로. Pro $20씩, 월 $40면 둘 다 굴린다.</p>



<h3 class="wp-block-heading" id="cursor와-claude-code-가격-차이는-얼마예요">Cursor와 Claude Code 가격 차이는 얼마예요?</h3>



<p class="wp-block-paragraph">진입 동일($20), 헤비 사용도 명목 동가($200, Cursor Ultra <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2194.png" alt="↔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Claude Max 20x). 차이는 정책 구조 — Cursor는 크레딧 + Auto 무제한, Claude는 5시간 + 주간 한도. 위 가격 표 참조. 환율 1,380원 기준.</p>



<h3 class="wp-block-heading" id="cursor에서-claude-모델을-쓸-수-있는데-굳이-claude-code가-필요해요">Cursor에서 Claude 모델을 쓸 수 있는데 굳이 Claude Code가 필요해요?</h3>



<p class="wp-block-paragraph">모델과 도구는 다르다. 같은 Claude 모델을 써도 인터페이스(Cursor IDE 협력 vs Claude Code 터미널 자율)가 다르고, Plan Mode·Hooks·Subagents 같은 자율 실행 워크플로는 Cursor에 등가물이 없다. 인플런 강사 인용: <em>&#8220;핵심은 모델 자체가 아니라 도구의 사용 방식.&#8221;</em></p>



<h3 class="wp-block-heading" id="백엔드-개발에는-어느-쪽이-유리해요">백엔드 개발에는 어느 쪽이 유리해요?</h3>



<p class="wp-block-paragraph">Spring/FastAPI 멀티모듈에서는 Plan Mode 안전판이 큰 무기 → Claude Code 우위. 단 단발 컨트롤러 수정·테스트는 Composer가 빠르다. 결론은 같은 코드베이스에 둘 다, 작업별 분기다.</p>



<h3 class="wp-block-heading" id="claude-code-주간-한도가-부담스러우면-cursor가-답인가요">Claude Code 주간 한도가 부담스러우면 Cursor가 답인가요?</h3>



<p class="wp-block-paragraph">2026년 5월 13일 Anthropic이 주간 한도 50% 한시 인상(2026-07-13까지)을 발표했다. 그래도 부담되면 Pro 대신 Max 5x/20x 고려가 먼저다. &#8220;한도 부담 → Cursor&#8221;는 답이 아니다 — Cursor도 2025년 크레딧 전환 후 비슷한 페인이 보고된다. 답변이 이상하면 <a href="https://jspulsar.dev/%ed%81%b4%eb%a1%9c%eb%93%9c-%ec%9d%b4%ec%83%81%ed%95%9c-%eb%8b%b5%eb%b3%80-claude-8%ea%b0%80%ec%a7%80-%ec%a6%9d%ec%83%81-%ec%a7%84%eb%8b%a8%c2%b7%ed%95%b4%ea%b2%b0%eb%b2%95-2026/">Claude 8가지 증상 진단·해결법</a>을 먼저 확인.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="마무리">마무리</h2>



<p class="wp-block-paragraph">여전히 결정 못하겠으면 Cursor 14일 무료 트라이얼과 Claude Pro 1주일 체험을 함께 돌리고 실제 사용 패턴을 측정하라. 월 $20 미만으로 결정 데이터를 얻는다.</p>



<p class="wp-block-paragraph">자체 호스팅(Claude API vs Ollama 로컬)은 별도 글로 준비 중이다. 이 글은 &#8220;도구 선택&#8221;에 집중했고, 활용 패턴은 G2, 모델 선택은 D1, API 비용은 D2 링크가 이어 받는다.</p>



<p class="wp-block-paragraph">가격·기능은 2026년 5월 17일 기준이다. 두 도구 모두 월 단위로 신기능을 내놓으므로 결정 직전엔 공식 페이지에서 한 번 더 확인을 권한다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="관련-글">관련 글</h2>



<ul class="wp-block-list">
<li><a href="https://jspulsar.dev/claude-code-%ec%84%a4%ec%b9%98%eb%b6%80%ed%84%b0-%ec%b2%ab-%eb%aa%85%eb%a0%b9%ea%b9%8c%ec%a7%80-2026%eb%85%84-macos%c2%b7wsl-%ea%b8%b0%ec%a4%80-%ec%9e%85%eb%ac%b8/">Claude Code 설치부터 첫 명령까지 — 2026년 macOS·WSL 기준 입문</a> — Claude Code 처음이라면 설치부터</li>



<li><a href="https://jspulsar.dev/claude%eb%a1%9c-%ec%bd%94%eb%94%a9-%ec%83%9d%ec%82%b0%ec%84%b1-2%eb%b0%b0-%eb%82%b4%ea%b0%80-%eb%a7%a4%ec%9d%bc-%ec%93%b0%eb%8a%94-5%ea%b0%80%ec%a7%80-%ed%99%9c%ec%9a%a9-%ed%8c%a8%ed%84%b4-2026/">Claude로 코딩 생산성 2배? 5가지 활용 패턴</a> — 도구 선택 후 매일 쓰는 패턴</li>



<li><a href="https://jspulsar.dev/claude-opus-vs-sonnet-vs-haiku-%ec%b0%a8%ec%9d%b4-%ec%99%84%eb%b2%bd-%ec%a0%95%eb%a6%ac-2026%eb%85%84-4%ec%9b%94-%ec%b5%9c%ec%8b%a0/">Claude Opus vs Sonnet vs Haiku 차이 완벽 정리 (2026)</a> — Claude Code 안에서 어떤 모델 고를지</li>



<li><a href="https://jspulsar.dev/claude-api-%eb%b9%84%ec%9a%a9-%ec%99%84%eb%b2%bd-%ea%b0%80%ec%9d%b4%eb%93%9c-2026-%ed%86%a0%ed%81%b0-%eb%8b%a8%ea%b0%80%c2%b7%ec%ba%90%ec%8b%b1%c2%b7%eb%b0%b0%ec%b9%98-%ed%95%a0%ec%9d%b8-%ed%95%9c/">Claude API 비용 완벽 가이드 2026</a> — API 종량제 vs 구독제 비용</li>



<li><a href="https://jspulsar.dev/claude-vs-gpt-vs-gemini-2026-%ed%95%9c%ea%b5%ad-%ec%82%ac%ec%9a%a9%ec%9e%90%ea%b0%80-%ea%b3%a0%eb%a5%b8-%ed%98%84%eb%8b%b5/">Claude vs GPT vs Gemini 2026</a> — 모델 자체 비교(도구 X)</li>



<li><a href="https://jspulsar.dev/%ed%81%b4%eb%a1%9c%eb%93%9c-%ec%9d%b4%ec%83%81%ed%95%9c-%eb%8b%b5%eb%b3%80-claude-8%ea%b0%80%ec%a7%80-%ec%a6%9d%ec%83%81-%ec%a7%84%eb%8b%a8%c2%b7%ed%95%b4%ea%b2%b0%eb%b2%95-2026/">클로드 이상한 답변? Claude 8가지 증상 진단·해결법 (2026)</a> — 도구는 골랐는데 답이 이상하다면</li>



<li>자체 호스팅(Claude API vs Ollama 로컬) — (준비 중)</li>
</ul>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://jspulsar.dev/cursor-vs-claude-code-%ea%b2%b0%ec%a0%95-%ed%8a%b8%eb%a6%ac-%eb%b0%b1%ec%97%94%eb%93%9c-%ea%b0%9c%eb%b0%9c%ec%9e%90%ea%b0%80-6%ea%b0%9c-%ec%b6%95%ec%9c%bc%eb%a1%9c-%ea%b3%a8%eb%9d%bc%eb%b4%a4/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>클로드 이상한 답변? Claude 8가지 증상 진단·해결법 (2026)</title>
		<link>https://jspulsar.dev/%ed%81%b4%eb%a1%9c%eb%93%9c-%ec%9d%b4%ec%83%81%ed%95%9c-%eb%8b%b5%eb%b3%80-claude-8%ea%b0%80%ec%a7%80-%ec%a6%9d%ec%83%81-%ec%a7%84%eb%8b%a8%c2%b7%ed%95%b4%ea%b2%b0%eb%b2%95-2026/</link>
					<comments>https://jspulsar.dev/%ed%81%b4%eb%a1%9c%eb%93%9c-%ec%9d%b4%ec%83%81%ed%95%9c-%eb%8b%b5%eb%b3%80-claude-8%ea%b0%80%ec%a7%80-%ec%a6%9d%ec%83%81-%ec%a7%84%eb%8b%a8%c2%b7%ed%95%b4%ea%b2%b0%eb%b2%95-2026/#respond</comments>
		
		<dc:creator><![CDATA[jshi2504]]></dc:creator>
		<pubDate>Wed, 13 May 2026 15:00:00 +0000</pubDate>
				<category><![CDATA[Claude]]></category>
		<category><![CDATA[2026]]></category>
		<category><![CDATA[claude-답변-거부]]></category>
		<category><![CDATA[claude-환각]]></category>
		<category><![CDATA[opus-4-7]]></category>
		<category><![CDATA[sonnet-4-6]]></category>
		<category><![CDATA[트러블슈팅]]></category>
		<category><![CDATA[한국어-claude]]></category>
		<guid isPermaLink="false">https://ai-blog.jspulsar.dev/?p=1281</guid>

					<description><![CDATA[Claude(클로드) 답변이 이상하다면? 환각·답변 거부·짧은 응답·번역체·코드 오류 등 8가지 증상별 진단표와 한국어 실전 해결법을 2026년 Sonnet 4.6·Opus 4.7 기준으로 정리한 트러블슈팅 카탈로그.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Claude Max를 매일 쓰지만, 어제도 Sonnet에게 부탁한 코드가 deprecated된 API를 추천했다. 클로드 이상한 답변은 처음이 아니다 — Claude(클로드) 답이 헛돌 때 원인은 거의 8가지 증상 중 하나에 들어맞고, 다섯 도구로 대부분 30초 안에 풀린다. 이 글은 한국 사용자가 막혔을 때 즉시 답을 찾는 진단 카탈로그다 (2026년 5월 기준).</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>TL;DR</strong></p>



<ul class="wp-block-list">
<li>Claude 답이 이상하면 환각·답변 거부·번역체·코드 오류·문맥 잃음·짧은 답·가짜 출처·반복 답 8가지 중 하나에 거의 다 들어간다.</li>



<li>30초 안에 답을 찾으려면 아래 진단표부터 본다.</li>



<li><strong>함정 주의</strong>: Opus 4.7로 바꿨는데 답이 단조롭다면 Adaptive thinking이 default OFF라 명시적으로 켜야 한다.</li>



<li>모델 변경·Extended Thinking·Projects·Styles·Artifacts 다섯 도구가 대부분 해결한다.</li>



<li>본 글은 <strong>정상적·합법적 사용 시나리오</strong> 한정이다 (의료·법률·투자 자문 범위 밖).</li>
</ul>
</blockquote>



<h2 class="wp-block-heading" id="30초-진단표--증상-→-원인-→-즉시-시도">30초 진단표 — 증상 → 원인 → 즉시 시도</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>증상</th><th>1차 원인</th><th>즉시 시도</th></tr></thead><tbody><tr><td>없는 함수·가짜 인용</td><td>환각·지식 cutoff</td><td>&#8220;모르면 모른다고 답하라&#8221; + Web search</td></tr><tr><td>&#8220;도와드릴 수 없습니다&#8221;</td><td>안전 필터 false positive</td><td>정상 사용 의도 + Haiku 4.5 재시도</td></tr><tr><td>번역체·딱딱한 한국어</td><td>영문 학습 톤 + 4.7 건조</td><td>Style 적용 + Project 인스트럭션</td></tr><tr><td>deprecated 코드</td><td>모델 cutoff 이후 변경</td><td>버전·환경 명시 + Artifacts</td></tr><tr><td>앞 메시지 잊음</td><td>컨텍스트 압축·드롭</td><td>Projects 이전 + 인수인계</td></tr><tr><td>답 짧거나 잘림</td><td>동적 길이 + 5시간 한계</td><td>&#8220;최소 1500자&#8221; + 계속</td></tr><tr><td>출처 거짓</td><td>인용 환각</td><td>&#8220;직접 접근 가능한 URL만&#8221;</td></tr><tr><td>같은 답 반복</td><td>Adaptive thinking OFF</td><td>Extended Thinking + xhigh</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="1-환각--없는-함수·잘못된-인용을-만들어낼-때">1. 환각 — 없는 함수·잘못된 인용을 만들어낼 때</h2>



<p class="wp-block-paragraph">Anthropic은 환각을 &#8220;사실과 다르거나 컨텍스트와 모순되는 텍스트를 생성하는 현상&#8221;으로 정의한다 <a href="https://platform.claude.com/docs/en/test-and-evaluate/strengthen-guardrails/reduce-hallucinations" target="_blank" rel="noopener">출처</a>. </p>



<p class="wp-block-paragraph">모델은 지식 cutoff 이후의 사실을 모르고(Opus 4.7=2026년 1월, Sonnet 4.6=2025년 8월) <a href="https://platform.claude.com/docs/en/about-claude/models/overview" target="_blank" rel="noopener">출처</a>, </p>



<p class="wp-block-paragraph">답변 압박이 있으면 그럴듯한 것을 채워 넣는다.</p>



<p class="wp-block-paragraph">처방은 셋을 묶는다.</p>



<ol class="wp-block-list">
<li>프롬프트에 <strong>&#8220;확실하지 않으면 &#8216;모른다&#8217;고 답해도 좋다&#8221;</strong> 한 줄을 박는다.</li>



<li>사실 주장마다 <strong>출처 인용을 강제</strong>하고, 못 붙이면 주장을 철회시킨다.</li>



<li>claude.ai 입력창에서 <strong>Web search 토글</strong>을 켠다.</li>
</ol>



<p class="wp-block-paragraph">내가 Sonnet 4.6에 pandas 처리를 부탁했을 때 존재하지 않는 메서드를 그럴듯하게 만들어 준 적이 있다. &#8220;확실하지 않으면 모른다고 답하라&#8221;를 시스템 프롬프트에 박은 뒤로 빈도가 확연히 줄었다.</p>



<h2 class="wp-block-heading" id="2-답변-거부--도와드릴-수-없습니다가-뜰-때">2. 답변 거부 — &#8220;도와드릴 수 없습니다&#8221;가 뜰 때</h2>



<p class="wp-block-paragraph">Anthropic은 안전 필터의 <strong>false positive 발생 가능성을 공식 인정</strong>했다 <a href="https://support.claude.com/en/articles/12449294-understanding-sonnet-4-5-s-api-safety-filters" target="_blank" rel="noopener">출처</a>. </p>



<p class="wp-block-paragraph">Sonnet 4.6은 어려운 양성 프롬프트의 잘못된 거부율을 8.50% → 0.18%로 약 47배 줄였다 (Sonnet 4.5 → 4.6 비교) <a href="https://caylent.com/blog/claude-sonnet-4-6-in-production-capability-safety-and-cost-explained" target="_blank" rel="noopener">참고</a>. </p>



<p class="wp-block-paragraph">거부가 떴다면 우회보다 <strong>의도 명시</strong>가 먼저다.</p>



<ol class="wp-block-list">
<li>프롬프트에 <strong>정상·합법적 사용 의도</strong>를 한 줄 덧붙인다.</li>



<li>Sonnet에서 막히면 <strong>Haiku 4.5로 재시도</strong>(공식 권고 — &#8220;different usage restrictions&#8221;) <a href="https://platform.claude.com/docs/en/build-with-claude/handling-stop-reasons" target="_blank" rel="noopener">출처</a>.</li>



<li>시스템 프롬프트의 &#8220;CRITICAL: You MUST&#8230;&#8221; 같은 공격적 어투를 평이한 표현으로 바꾼다.</li>
</ol>



<p class="wp-block-paragraph">내가 운영하는 WordPress 사이트의 XSS 점검을 부탁했을 때 한 번 막혔다. &#8220;내가 운영하는 도메인의 자가 점검&#8221;이라는 한 줄을 덧붙이고 다시 보냈더니 그대로 통과했다.</p>



<h2 class="wp-block-heading" id="3-한국어가-어색하다--번역체·딱딱한-어투">3. 한국어가 어색하다 — 번역체·딱딱한 어투</h2>



<p class="wp-block-paragraph">Anthropic 한국어 docs 자체가 영어 직역체다. 게다가 Opus 4.7은 공식적으로 **&#8221;이전보다 더 직설적이고 검증·동조 표현이 줄어든 톤&#8221;**으로 바뀌었다 <a href="https://platform.claude.com/docs/en/about-claude/models/whats-new-claude-4-7" target="_blank" rel="noopener">출처</a>. </p>



<p class="wp-block-paragraph">4.7로 바꾸면 답이 더 건조해지는 게 정상이다.</p>



<p class="wp-block-paragraph">해결은 Style을 한 번만 만들어 두면 된다.</p>



<ol class="wp-block-list">
<li><strong>claude.ai 좌하단 Styles 메뉴</strong>에서 자기 글 샘플을 업로드해 &#8220;내 글체 따라하기&#8221; 스타일을 자동 생성한다 <a href="https://support.claude.com/en/articles/10181068-configure-and-use-styles" target="_blank" rel="noopener">출처</a>.</li>



<li><strong>명령형 양식 지정</strong>: &#8220;한국어 자연 구어체로&#8221;, &#8220;번역투 회피&#8221;, &#8220;&#8216;Claude는 ~합니다&#8217; 같은 영어 어순 금지&#8221;.</li>



<li>Project를 쓴다면 <strong>인스트럭션에 영구 박기</strong> — 매 대화마다 자동 적용된다.</li>



<li>프롬프트의 markdown을 줄이면 응답의 markdown도 줄어든다(공식 권고).</li>
</ol>



<p class="wp-block-paragraph">처음엔 매번 &#8220;한국어 자연스럽게&#8221;를 붙였다. Style을 한 번 만들고 나서는 잊고 살게 됐다.</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="752" src="https://jspulsar.dev/wp-content/uploads/2026/05/claude-styles-selection-1024x752.png" alt="" class="wp-image-1282" style="width:576px;height:auto" srcset="https://jspulsar.dev/wp-content/uploads/2026/05/claude-styles-selection-1024x752.png 1024w, https://jspulsar.dev/wp-content/uploads/2026/05/claude-styles-selection-300x220.png 300w, https://jspulsar.dev/wp-content/uploads/2026/05/claude-styles-selection-768x564.png 768w, https://jspulsar.dev/wp-content/uploads/2026/05/claude-styles-selection-600x441.png 600w, https://jspulsar.dev/wp-content/uploads/2026/05/claude-styles-selection.png 1400w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"><em>그림 1. claude.ai의 Styles 선택 메뉴 위치</em></p>



<h2 class="wp-block-heading" id="4-코드가-실행-안-됨--deprecated-api·import-누락">4. 코드가 실행 안 됨 — deprecated API·import 누락</h2>



<p class="wp-block-paragraph">원인은 명확하다. <strong>Knowledge cutoff 이후 라이브러리 변경을 모델이 모른다</strong> <a href="https://support.claude.com/en/articles/8114494-how-up-to-date-is-claude-s-training-data" target="_blank" rel="noopener">출처</a>.</p>



<ol class="wp-block-list">
<li>첫 메시지에 <strong>버전·환경</strong>을 명시한다: &#8220;Spring Boot 3.4 기준&#8221;, &#8220;Python 3.12 환경&#8221;.</li>



<li><strong>Artifacts</strong>로 코드를 받아 &#8220;Fix with Claude&#8221;나 자연어 디버깅을 반복한다 <a href="https://support.claude.com/en/articles/9487310-what-are-artifacts-and-how-do-i-use-them" target="_blank" rel="noopener">출처</a>. 활용법 전체는 <a href="https://jspulsar.dev/claude-artifacts-%ec%82%ac%ec%9a%a9%eb%b2%95-%ec%99%84%eb%b2%bd-%ec%a0%95%eb%a6%ac-2026%eb%85%84-pro-%ec%8b%a4%ec%a0%84-%eb%a6%ac%eb%b7%b0/">Claude Artifacts 사용법 글</a> 참조.</li>



<li><strong>Extended Thinking을 켠다</strong>. 디버깅·다단계 추론에 효과가 크다 <a href="https://platform.claude.com/docs/en/build-with-claude/extended-thinking" target="_blank" rel="noopener">출처</a>.</li>



<li>Project Knowledge에 <code>package.json</code>·사내 컨벤션을 넣어 매 세션 자동 참조시킨다.</li>
</ol>



<p class="wp-block-paragraph">Sonnet에게 부탁했던 코드가 옛 시그니처를 추천한 적이 있다. Opus 4.7로 바꾸고 Extended Thinking을 켜니 최신 시그니처로 다시 써 줬다. CLI 사용자라면 <a href="https://jspulsar.dev/claude-code-%ec%84%a4%ec%b9%98%eb%b6%80%ed%84%b0-%ec%b2%ab-%eb%aa%85%eb%a0%b9%ea%b9%8c%ec%a7%80-2026%eb%85%84-macos%c2%b7wsl-%ea%b8%b0%ec%a4%80-%ec%9e%85%eb%ac%b8/">Claude Code 입문 글</a>도 참조.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="588" height="454" src="https://jspulsar.dev/wp-content/uploads/2026/05/claude-artifacts-debug.png" alt="" class="wp-image-1283" style="width:371px;height:auto" srcset="https://jspulsar.dev/wp-content/uploads/2026/05/claude-artifacts-debug.png 588w, https://jspulsar.dev/wp-content/uploads/2026/05/claude-artifacts-debug-300x232.png 300w" sizes="auto, (max-width: 588px) 100vw, 588px" /></figure>



<p class="wp-block-paragraph"><em>그림 2. Artifacts에서 Fix with Claude로 즉시 디버깅</em></p>



<h2 class="wp-block-heading" id="5-긴-대화에서-앞-말-잊어버림--문맥-잃음">5. 긴 대화에서 앞 말 잊어버림 — 문맥 잃음</h2>



<p class="wp-block-paragraph">컨텍스트 윈도우는 Opus 4.7이 1M 토큰, Sonnet 4.6이 1M 토큰(베타)까지 늘었지만, 결국 압축·드롭이 발생한다 <a href="https://platform.claude.com/docs/en/about-claude/models/overview" target="_blank" rel="noopener">출처</a>. </p>



<p class="wp-block-paragraph">반복 주제는 <strong>Projects로 이전</strong>하는 게 정공법이다.</p>



<ol class="wp-block-list">
<li><strong>Projects로 이동</strong>: 긴 reference는 Project Knowledge에 파일로 박는다 (RAG 방식이라 컨텍스트를 잡아먹지 않음) <a href="https://support.claude.com/en/articles/9519177-using-projects-on-claude-ai" target="_blank" rel="noopener">출처</a>.</li>



<li><strong>Project 지침</strong> — 매 대화 자동 적용되는 영구 행동 지정.</li>



<li><strong>Compaction(베타)</strong> — Sonnet 4.6/Opus 4.7은 컨텍스트가 차면 자동 요약한다 <a href="https://platform.claude.com/docs/en/build-with-claude/compaction" target="_blank" rel="noopener">출처</a>.</li>



<li>그래도 막히면 <strong>새 대화 + 인수인계 프롬프트</strong>.</li>
</ol>



<p class="wp-block-paragraph">긴 기획 대화에서 초반에 정한 컨벤션을 Claude가 잊는 일이 잦았다. Project로 옮기고 인스트럭션에 컨벤션을 박아 두니 같은 설명을 다시 할 일이 없어졌다. Projects 사용법 전체는 <a href="https://jspulsar.dev/claude-projects-%ec%82%ac%ec%9a%a9%eb%b2%95-%ec%99%84%eb%b2%bd-%ec%a0%95%eb%a6%ac-%ed%8c%8c%ec%9d%bc-%ec%97%85%eb%a1%9c%eb%93%9c%eb%b6%80%ed%84%b0-%ed%8c%80-%ea%b3%b5%ec%9c%a0%ea%b9%8c%ec%a7%80-2026/">Claude Projects 완벽 정리</a>에 따로 다뤘다.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="685" src="https://jspulsar.dev/wp-content/uploads/2026/05/claude-projects-instructions-1024x685.png" alt="" class="wp-image-1284" srcset="https://jspulsar.dev/wp-content/uploads/2026/05/claude-projects-instructions-1024x685.png 1024w, https://jspulsar.dev/wp-content/uploads/2026/05/claude-projects-instructions-300x201.png 300w, https://jspulsar.dev/wp-content/uploads/2026/05/claude-projects-instructions-768x514.png 768w, https://jspulsar.dev/wp-content/uploads/2026/05/claude-projects-instructions-600x401.png 600w, https://jspulsar.dev/wp-content/uploads/2026/05/claude-projects-instructions.png 1510w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"><em>그림 3. Project Instructions에 영구 행동을 박아 둔 모습</em></p>



<h2 class="wp-block-heading" id="6-답변이-너무-짧거나-잘림--출력-한계">6. 답변이 너무 짧거나 잘림 — 출력 한계</h2>



<p class="wp-block-paragraph">원인은 셋 중 하나다. <strong>max_tokens 한계</strong>(Opus 4.7=128k, Sonnet 4.6·Haiku 4.5=64k), claude.ai의 5시간 사용 한계, Opus 4.7의 동적 길이 정책. 4.7은 **&#8221;작업 복잡도에 맞춰 길이를 동적으로 조절&#8221;**한다 <a href="https://platform.claude.com/docs/en/about-claude/models/whats-new-claude-4-7" target="_blank" rel="noopener">출처</a>.</p>



<ol class="wp-block-list">
<li><strong>명시적 길이 요구</strong>: &#8220;최소 1500자 이상&#8221;, &#8220;예시 5개 이상&#8221;.</li>



<li><strong>계속 프롬프트</strong>: &#8220;이어서 계속해 줘. 끊긴 지점부터 시작&#8221; <a href="https://platform.claude.com/docs/en/build-with-claude/handling-stop-reasons" target="_blank" rel="noopener">출처</a>.</li>



<li><strong>Artifacts로 빼기</strong>: 긴 코드·문서는 본문 토큰을 절약한다.</li>



<li>&#8220;5시간 한계 알림&#8221;이 뜨면 잠시 대기.</li>
</ol>



<h2 class="wp-block-heading" id="7-출처·링크가-거짓이다">7. 출처·링크가 거짓이다</h2>



<p class="wp-block-paragraph">인용 환각이다. Help Center도 **&#8221;fabricated quotes or outdated information&#8221;**을 명시적 사례로 든다 <a href="https://support.claude.com/en/articles/8525154" target="_blank" rel="noopener">출처</a>. </p>



<p class="wp-block-paragraph">사용자 측 검증이 유일한 방어선이다.</p>



<ol class="wp-block-list">
<li>프롬프트 패턴: <strong>&#8220;URL은 직접 접근 가능한 것만. 불확실하면 &#8216;확인 필요&#8217; 표시&#8221;</strong>.</li>



<li><strong>Web search</strong>를 켜고, 받은 링크는 직접 클릭해 검증한다.</li>



<li>Help Center 권고: <strong>&#8220;Don&#8217;t treat Claude as authoritative&#8221;</strong> — 단일 출처 신뢰 금지.</li>
</ol>



<p class="wp-block-paragraph">Claude가 그럴듯한 docs URL을 제시했는데 클릭하니 404가 떴던 일이 있다. 그 뒤로 &#8220;직접 접근 가능한 URL만&#8221;을 시스템 프롬프트에 박았다.</p>



<h2 class="wp-block-heading" id="8-같은-답만-반복·창의성이-없음-opus-47-adaptive-thinking-함정">8. 같은 답만 반복·창의성이 없음 (Opus 4.7 adaptive thinking 함정)</h2>



<p class="wp-block-paragraph">이게 2026년 5월 한국 커뮤니티가 가장 많이 호소하는 증상이다. 원인이 직관적이지 않다.</p>



<ul class="wp-block-list">
<li><strong>Opus 4.7의 Adaptive thinking은 default OFF</strong>다. 명시적으로 켜지 않으면 사고 깊이가 얕다 <a href="https://platform.claude.com/docs/en/about-claude/models/whats-new-claude-4-7" target="_blank" rel="noopener">출처</a>.</li>



<li>4.7은 행동상으로 **&#8221;더 직설적·건조한 톤&#8221;**으로 바뀌었다.</li>



<li>API의 <code>temperature</code>·<code>top_p</code>·<code>top_k</code>가 <strong>제거</strong>돼 다양성은 프롬프트로만 유도해야 한다.</li>
</ul>



<p class="wp-block-paragraph">해결:</p>



<ol class="wp-block-list">
<li><strong>적응형 사고(<strong>Adaptive</strong> Thinking) 토글을 켠다</strong> (모델 선택에서).</li>



<li><strong>xhigh effort</strong> 사용 — 공식 권고는 &#8220;코딩·에이전틱은 새 xhigh effort부터 시작&#8221;.</li>



<li>프롬프트로 다양성 강제: &#8220;전과 다른 어조&#8221;, &#8220;이전 비유 재사용 금지&#8221;, &#8220;4가지 다른 방향 먼저 제시 후 선택&#8221;.</li>



<li>창의 글쓰기는 <strong>Sonnet 4.6</strong> 또는 Opus 4.6 고려 — 4.7은 더 건조하다.</li>
</ol>



<p class="wp-block-paragraph">Opus 4.7로 바꿨는데 답이 평이해진 느낌이 있었다. 적응형 사고(Adaptive Thinking)를 명시적으로 켜고 나서야 사고 깊이가 살아났다.</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="721" src="https://jspulsar.dev/wp-content/uploads/2026/05/claude-model-switcher-1024x721.png" alt="" class="wp-image-1285" style="width:591px;height:auto" srcset="https://jspulsar.dev/wp-content/uploads/2026/05/claude-model-switcher-1024x721.png 1024w, https://jspulsar.dev/wp-content/uploads/2026/05/claude-model-switcher-300x211.png 300w, https://jspulsar.dev/wp-content/uploads/2026/05/claude-model-switcher-768x541.png 768w, https://jspulsar.dev/wp-content/uploads/2026/05/claude-model-switcher-600x423.png 600w, https://jspulsar.dev/wp-content/uploads/2026/05/claude-model-switcher.png 1420w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 4. Extended Thinking 토글이 켜진 상태 (모델 선택과 같은 영역)</em></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="sonnet-46-vs-opus-47--작업별-모델-선택">Sonnet 4.6 vs Opus 4.7 — 작업별 모델 선택</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>작업</th><th>권고 모델</th><th>이유</th></tr></thead><tbody><tr><td>일상 (요약·번역·리라이팅)</td><td>Sonnet 4.6</td><td>가성비, 따뜻한 톤</td></tr><tr><td>코딩·복잡한 추론</td><td>Opus 4.7 + xhigh + Thinking</td><td>&#8220;step-change in agentic coding&#8221;</td></tr><tr><td>답변 거부 빈발</td><td>Haiku 4.5</td><td>다른 안전 정책 (공식 권고)</td></tr><tr><td>창의 글쓰기</td><td>Sonnet 4.6 (또는 Opus 4.6)</td><td>4.7은 더 건조</td></tr><tr><td>긴 대화</td><td>1M (Opus) / 1M 베타 (Sonnet)</td><td>둘 다 충분</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">나는 일상 95%를 Sonnet 4.6으로 처리하고, 코드·디버깅·기획 정리만 Opus 4.7로 바꾼다. 셋의 차이는 <a href="https://jspulsar.dev/claude-opus-vs-sonnet-vs-haiku-%ec%b0%a8%ec%9d%b4-%ec%99%84%eb%b2%bd-%ec%a0%95%eb%a6%ac-2026%eb%85%84-4%ec%9b%94-%ec%b5%9c%ec%8b%a0/">Opus vs Sonnet vs Haiku 비교 글</a>에서 다뤘다.</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="721" src="https://jspulsar.dev/wp-content/uploads/2026/05/claude-adaptive-thinking-1024x721.png" alt="" class="wp-image-1286" style="width:462px;height:auto" srcset="https://jspulsar.dev/wp-content/uploads/2026/05/claude-adaptive-thinking-1024x721.png 1024w, https://jspulsar.dev/wp-content/uploads/2026/05/claude-adaptive-thinking-300x211.png 300w, https://jspulsar.dev/wp-content/uploads/2026/05/claude-adaptive-thinking-768x541.png 768w, https://jspulsar.dev/wp-content/uploads/2026/05/claude-adaptive-thinking-600x423.png 600w, https://jspulsar.dev/wp-content/uploads/2026/05/claude-adaptive-thinking.png 1420w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"><em>그림 5. claude.ai의 모델 선택 드롭다운</em></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="자주-묻는-질문-faq">자주 묻는 질문 (FAQ)</h2>



<h3 class="wp-block-heading" id="claude가-왜-자꾸-거짓말을-하나요">Claude가 왜 자꾸 거짓말을 하나요?</h3>



<p class="wp-block-paragraph">학습 데이터에 없는 사실을 강제로 답해야 할 때 발생한다. &#8220;확실치 않으면 모른다고 답해도 좋다&#8221;를 명시하고 출처 인용을 강제하면 빈도가 줄어든다.</p>



<h3 class="wp-block-heading" id="claude가-답변을-거부할-때-어떻게-해야-하나요">Claude가 답변을 거부할 때 어떻게 해야 하나요?</h3>



<p class="wp-block-paragraph">정상·합법적 사용 의도를 한 줄 덧붙이고, Sonnet에서 막히면 <strong>Haiku 4.5로 모델을 바꿔 재시도</strong>한다. 공격적 시스템 프롬프트는 평이한 표현으로 바꾼다.</p>



<h3 class="wp-block-heading" id="claude-답변이-갑자기-짧아진-이유는">Claude 답변이 갑자기 짧아진 이유는?</h3>



<p class="wp-block-paragraph">Opus 4.7은 작업 복잡도에 맞춰 길이를 동적으로 조절한다. <strong>&#8220;최소 1500자 이상&#8221;</strong> 같은 명시적 요구를 추가하면 풀린다. 5시간 사용 한계도 가능성.</p>



<h3 class="wp-block-heading" id="claude-한국어가-어색할-때-해결-방법은">Claude 한국어가 어색할 때 해결 방법은?</h3>



<p class="wp-block-paragraph">Styles에 자기 글 샘플을 업로드해 &#8220;내 톤&#8221; 스타일을 만들거나, Project 인스트럭션에 **&#8221;한국어 자연 구어체, 번역투 회피&#8221;**를 박는다.</p>



<h3 class="wp-block-heading" id="claude-sonnet과-opus-중-어떤-모델을-써야-하나요">Claude Sonnet과 Opus 중 어떤 모델을 써야 하나요?</h3>



<p class="wp-block-paragraph">일상은 Sonnet 4.6, 코딩·디버깅·복잡한 추론은 Opus 4.7 + Extended Thinking. 셋의 차이는 <a href="https://jspulsar.dev/claude-opus-vs-sonnet-vs-haiku-%ec%b0%a8%ec%9d%b4-%ec%99%84%eb%b2%bd-%ec%a0%95%eb%a6%ac-2026%eb%85%84-4%ec%9b%94-%ec%b5%9c%ec%8b%a0/">Opus vs Sonnet vs Haiku 비교 글</a> 참조.</p>



<h3 class="wp-block-heading" id="긴-대화-중-claude가-앞-내용을-잊어버립니다">긴 대화 중 Claude가 앞 내용을 잊어버립니다.</h3>



<p class="wp-block-paragraph">Projects로 옮기고 reference 문서를 Project Knowledge에 박으면 매 대화 자동 참조된다. Sonnet 4.6/Opus 4.7은 자동 요약(Compaction) 베타도 지원한다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="마무리">마무리</h2>



<p class="wp-block-paragraph">8가지 증상 중 어떤 거였나? 진단표를 다시 보고 한 도구씩 적용하면 대부분 30초 안에 풀린다. 그래도 막히면 <a href="https://support.claude.com" target="_blank" rel="noopener">Anthropic Help Center</a>에 직접 문의가 가장 빠르다. 모델 비교는 <a href="https://jspulsar.dev/claude-opus-vs-sonnet-vs-haiku-%ec%b0%a8%ec%9d%b4-%ec%99%84%eb%b2%bd-%ec%a0%95%eb%a6%ac-2026%eb%85%84-4%ec%9b%94-%ec%b5%9c%ec%8b%a0/">Opus vs Sonnet vs Haiku</a>, 컨텍스트 잃음 깊은 해결은 <a href="https://jspulsar.dev/claude-projects-%ec%82%ac%ec%9a%a9%eb%b2%95-%ec%99%84%eb%b2%bd-%ec%a0%95%eb%a6%ac-%ed%8c%8c%ec%9d%bc-%ec%97%85%eb%a1%9c%eb%93%9c%eb%b6%80%ed%84%b0-%ed%8c%80-%ea%b3%b5%ec%9c%a0%ea%b9%8c%ec%a7%80-2026/">Claude Projects 완벽 정리</a>에서 따로 다뤘다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="관련-글">관련 글</h2>



<ul class="wp-block-list">
<li><a href="https://jspulsar.dev/claude-opus-vs-sonnet-vs-haiku-%ec%b0%a8%ec%9d%b4-%ec%99%84%eb%b2%bd-%ec%a0%95%eb%a6%ac-2026%eb%85%84-4%ec%9b%94-%ec%b5%9c%ec%8b%a0/">Claude Opus vs Sonnet vs Haiku 차이 완벽 정리 (2026)</a> — 모델 선택이 막힐 때</li>



<li><a href="https://jspulsar.dev/claude-projects-%ec%82%ac%ec%9a%a9%eb%b2%95-%ec%99%84%eb%b2%bd-%ec%a0%95%eb%a6%ac-%ed%8c%8c%ec%9d%bc-%ec%97%85%eb%a1%9c%eb%93%9c%eb%b6%80%ed%84%b0-%ed%8c%80-%ea%b3%b5%ec%9c%a0%ea%b9%8c%ec%a7%80-2026/">Claude Projects 완벽 정리</a> — 컨텍스트 잃음 깊은 해결</li>



<li><a href="https://jspulsar.dev/claude-artifacts-%ec%82%ac%ec%9a%a9%eb%b2%95-%ec%99%84%eb%b2%bd-%ec%a0%95%eb%a6%ac-2026%eb%85%84-pro-%ec%8b%a4%ec%a0%84-%eb%a6%ac%eb%b7%b0/">Claude Artifacts 사용법 완벽 정리</a> — 코드 검증과 디버깅</li>



<li><a href="https://jspulsar.dev/claude-code-%ec%84%a4%ec%b9%98%eb%b6%80%ed%84%b0-%ec%b2%ab-%eb%aa%85%eb%a0%b9%ea%b9%8c%ec%a7%80-2026%eb%85%84-macos%c2%b7wsl-%ea%b8%b0%ec%a4%80-%ec%9e%85%eb%ac%b8/">Claude Code 설치부터 첫 명령까지 (2026)</a> — CLI 사용자용</li>



<li><a href="https://jspulsar.dev/claude%eb%a1%9c-%ec%bd%94%eb%94%a9-%ec%83%9d%ec%82%b0%ec%84%b1-2%eb%b0%b0-%eb%82%b4%ea%b0%80-%eb%a7%a4%ec%9d%bc-%ec%93%b0%eb%8a%94-5%ea%b0%80%ec%a7%80-%ed%99%9c%ec%9a%a9-%ed%8c%a8%ed%84%b4-2026/">Claude로 코딩 생산성 2배? 5가지 활용 패턴</a> — 매일 쓰는 패턴</li>



<li><a href="https://jspulsar.dev/claude-vs-gpt-vs-gemini-2026-%ed%95%9c%ea%b5%ad-%ec%82%ac%ec%9a%a9%ec%9e%90%ea%b0%80-%ea%b3%a0%eb%a5%b8-%ed%98%84%eb%8b%b5/">Claude vs GPT vs Gemini 2026</a> — 비교 검증 필요할 때</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://jspulsar.dev/%ed%81%b4%eb%a1%9c%eb%93%9c-%ec%9d%b4%ec%83%81%ed%95%9c-%eb%8b%b5%eb%b3%80-claude-8%ea%b0%80%ec%a7%80-%ec%a6%9d%ec%83%81-%ec%a7%84%eb%8b%a8%c2%b7%ed%95%b4%ea%b2%b0%eb%b2%95-2026/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Claude 코딩으로 생산성 2배? 내가 매일 쓰는 5가지 활용 패턴 (2026)</title>
		<link>https://jspulsar.dev/claude%eb%a1%9c-%ec%bd%94%eb%94%a9-%ec%83%9d%ec%82%b0%ec%84%b1-2%eb%b0%b0-%eb%82%b4%ea%b0%80-%eb%a7%a4%ec%9d%bc-%ec%93%b0%eb%8a%94-5%ea%b0%80%ec%a7%80-%ed%99%9c%ec%9a%a9-%ed%8c%a8%ed%84%b4-2026/</link>
					<comments>https://jspulsar.dev/claude%eb%a1%9c-%ec%bd%94%eb%94%a9-%ec%83%9d%ec%82%b0%ec%84%b1-2%eb%b0%b0-%eb%82%b4%ea%b0%80-%eb%a7%a4%ec%9d%bc-%ec%93%b0%eb%8a%94-5%ea%b0%80%ec%a7%80-%ed%99%9c%ec%9a%a9-%ed%8c%a8%ed%84%b4-2026/#respond</comments>
		
		<dc:creator><![CDATA[jshi2504]]></dc:creator>
		<pubDate>Tue, 28 Apr 2026 15:00:00 +0000</pubDate>
				<category><![CDATA[Claude]]></category>
		<category><![CDATA[ai-coding]]></category>
		<category><![CDATA[claude-code]]></category>
		<category><![CDATA[code-review]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[productivity]]></category>
		<guid isPermaLink="false">https://ai-blog.jspulsar.dev/?p=1261</guid>

					<description><![CDATA[Claude로 매일 코딩하면서 자리잡은 5가지 활용 패턴(코드 리뷰·디버깅·새 기능 초안·테스트·한국어 주석/커밋)을 프롬프트 템플릿과 함께 정리. 2배는 후크일 뿐, GitHub 55%·McKinsey 25-30% 정량과 1인칭 헤맴 단편을 함께 담은 2026년 4월 기준 실전 가이드.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">&#8220;claude 코딩으로 진짜 2배 빨라지나&#8221;라는 질문을 자주 받는다. 솔직히 답하면 작업 종류에 따라 폭이 크다. GitHub와 Microsoft Research가 함께 한 Copilot 연구에서는 HTTP 서버 구현 한 작업이 <strong>55% 빠르게</strong> 끝났다(1시간 11분 vs 2시간 41분)는 결과가 보고됐다 <a href="https://github.blog/news-insights/research/research-quantifying-github-copilots-impact-on-developer-productivity-and-happiness/" target="_blank" rel="noopener">GitHub Blog</a>. McKinsey 조사에서는 복잡 작업을 <strong>25-30% 더 많이</strong> 시간 내 완료한다고 보고됐다 <a href="https://www.mckinsey.com/capabilities/tech-and-ai/our-insights/unleashing-developer-productivity-with-generative-ai" target="_blank" rel="noopener">McKinsey: Unleashing</a>. 같은 회사의 별도 보고서에서는 AI를 쓰는 팀이 평균 <strong>주 6시간</strong>을 절감한다고 측정됐다 <a href="https://www.mckinsey.com/industries/technology-media-and-telecommunications/our-insights/unlocking-the-value-of-ai-in-software-development" target="_blank" rel="noopener">McKinsey: Unlocking</a>. 단, 같은 보고서가 단서를 단다. 고난도 작업의 시간 절감은 10% 미만이고, 1년 미만 주니어는 7-10% 느려질 때도 있다.</p>



<p class="wp-block-paragraph">그래서 &#8220;2배&#8221;는 후크고, 본 글은 2026년 4월 기준 매일 쓰는 <strong>5가지 활용 패턴</strong>을 정리한다. 코드 리뷰·디버깅·새 기능 초안·테스트·한국어 주석 및 커밋 — 한국 개발자가 코딩에 가장 많이 쓰는 LLM이 Claude(42%)라는 조사 결과도 있고 <a href="https://byline.network/2025/08/821127/" target="_blank" rel="noopener">바이라인네트워크</a>, 본인이 클로드 코딩에 들이는 시간 대부분도 이 다섯 갈래로 갈린다. 이미 깔린 사용자 전제니, 처음이라면 <a href="https://jspulsar.dev/claude-code-%ec%84%a4%ec%b9%98%eb%b6%80%ed%84%b0-%ec%b2%ab-%eb%aa%85%eb%a0%b9%ea%b9%8c%ec%a7%80-2026%eb%85%84-macos%c2%b7wsl-%ea%b8%b0%ec%a4%80-%ec%9e%85%eb%ac%b8/">Claude Code 설치부터 첫 명령까지</a>을 먼저 보고 오면 좋다.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>TL;DR.</strong> Claude로 매일 쓰는 활용 패턴 5가지(코드 리뷰·디버깅·새 기능 초안·테스트·한국어 주석/커밋)와 프롬프트 템플릿을 정리했다. &#8220;2배&#8221;는 후크일 뿐, 실제 정량은 Copilot 55%·McKinsey 25-30%·주 6시간으로 폭이 크다. 단순 자동화는 분명히 빨라졌고, 고난도 설계는 거의 그대로다.</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="패턴-a--claude-코드-리뷰와-리팩터링">패턴 A — Claude 코드 리뷰와 리팩터링</h2>



<p class="wp-block-paragraph">가장 빈도 높게 쓰는 패턴이다. PR diff 또는 파일 한 덩이를 던지고 시니어 동료 톤으로 리뷰를 받는다. Anthropic 공식 best practice가 권장하는 핵심은 <strong>Writer/Reviewer 분리</strong> — <em>&#8220;fresh context improves code review since Claude won&#8217;t be biased toward code it just wrote&#8221;</em> <a href="https://code.claude.com/docs/en/best-practices" target="_blank" rel="noopener">Best Practices</a>. </p>



<p class="wp-block-paragraph">작성한 세션 안에서 같은 모델에 리뷰를 시키면 본인이 짠 코드를 옹호한다. <code>/clear</code> 한 번 치고 새 세션에서 리뷰만 시키는 편이 낫다.</p>



<p class="wp-block-paragraph">CodeRabbit 자체 평가에서 Opus 4.7는 알려진 버그 100건 중 68건을 잡았고(pass rate 68/100), 종합 점수는 74/100으로 이전 베이스라인 60점에서 올라갔다고 보고된다. actionable 코멘트 비율도 54%에서 64%로 상승했다 <a href="https://www.coderabbit.ai/blog/claude-opus-4-7-for-ai-code-review" target="_blank" rel="noopener">CodeRabbit</a>. </p>



<p class="wp-block-paragraph">작성 세션과 리뷰 세션을 분리하라는 게 핵심이지, 모델 자체로 모든 PR 크기에서 똑같이 강한 건 아니다 — 작은 변경은 사람 눈으로 빠르게 보고 큰 변경에 Claude를 붙이는 편이 컨텍스트 비용 측면에서 효율이 좋다.</p>



<pre class="wp-block-code"><code>역할: 시니어 동료 리뷰어. 톤은 단호하고 친절하게.
대상: @src/api/orders.ts (PR diff는 아래 첨부)
관점: 1) 정확성 2) 엣지 케이스 3) 보안 4) 우리 컨벤션과의 일관성
형식: 발견한 이슈마다 (a) 줄 번호 (b) 왜 문제인지 (c) 수정 코드 (d) 그 이유.
중요: 사소한 nit은 생략. high/medium만.
</code></pre>



<p class="wp-block-paragraph">여기서 자주 빠뜨리는 게 <em>우리 컨벤션과의 일관성</em> 한 줄과 <em>nit 컷오프</em>다. 둘을 빼면 일반론적인 리뷰가 돌아오고, 본문이 길어진다.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="625" src="https://jspulsar.dev/wp-content/uploads/2026/04/claude-code-review-01-1024x625.png" alt="" class="wp-image-1262" srcset="https://jspulsar.dev/wp-content/uploads/2026/04/claude-code-review-01-1024x625.png 1024w, https://jspulsar.dev/wp-content/uploads/2026/04/claude-code-review-01-300x183.png 300w, https://jspulsar.dev/wp-content/uploads/2026/04/claude-code-review-01-768x468.png 768w, https://jspulsar.dev/wp-content/uploads/2026/04/claude-code-review-01-1536x937.png 1536w, https://jspulsar.dev/wp-content/uploads/2026/04/claude-code-review-01-600x366.png 600w, https://jspulsar.dev/wp-content/uploads/2026/04/claude-code-review-01.png 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 1. Claude 코드 리뷰 응답 예시</em></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="패턴-b--claude-디버깅-가설부터-받는다">패턴 B — Claude 디버깅: 가설부터 받는다</h2>



<p class="wp-block-paragraph">에러가 생기면 메시지·재현 흐름·의심 위치·&#8221;고쳤다는 것의 정의&#8221;를 함께 던진다. 공식 권장은 단호하다. <em>&#8220;Address root causes, not symptoms&#8221;</em> — 증상을 덮지 말고 원인을 짚으라는 한 줄이다 <a href="https://code.claude.com/docs/en/best-practices" target="_blank" rel="noopener">Best Practices</a>.</p>



<p class="wp-block-paragraph">체감 차이가 가장 컸던 변형은 <strong>failing test부터 작성</strong>시키는 흐름이다. 공식 권장 프롬프트도 <em>&#8220;write a failing test that reproduces the issue, then fix it&#8221;</em> 형태를 쓴다. 검증 수단 없이 그럴듯한 코드만 받으면 엣지케이스가 누락된다 — 공식 가이드의 표현 그대로 <em>&#8220;If you can&#8217;t verify it, don&#8217;t ship it&#8221;</em>.</p>



<pre class="wp-block-code"><code>증상: &#91;에러 메시지/스택 트레이스 그대로 붙여넣기]
재현: &#91;클릭 흐름 또는 cURL 한 줄]
의심 위치: src/auth/session.ts 의 refresh 분기
요청: 1) 가장 가능성 높은 가설 3개 2) 각 가설을 빠르게 확인할 수 있는 점검 명령
       3) 가설이 맞으면 어떤 테스트가 실패해야 하는지 — 테스트부터 작성, 그다음 수정.
</code></pre>



<p class="wp-block-paragraph">가설 3개를 강제하는 이유는 한 번에 정답으로 직진시키지 않기 위해서다. 두 번째·세 번째 가설이 진짜 원인인 경우가 잦다.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="826" src="https://jspulsar.dev/wp-content/uploads/2026/04/claude-debugging-01-1024x826.png" alt="" class="wp-image-1263" srcset="https://jspulsar.dev/wp-content/uploads/2026/04/claude-debugging-01-1024x826.png 1024w, https://jspulsar.dev/wp-content/uploads/2026/04/claude-debugging-01-300x242.png 300w, https://jspulsar.dev/wp-content/uploads/2026/04/claude-debugging-01-768x620.png 768w, https://jspulsar.dev/wp-content/uploads/2026/04/claude-debugging-01-1536x1239.png 1536w, https://jspulsar.dev/wp-content/uploads/2026/04/claude-debugging-01-600x484.png 600w, https://jspulsar.dev/wp-content/uploads/2026/04/claude-debugging-01.png 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 2. Claude 디버깅 응답 예시</em></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="패턴-c--새-기능-초안-스펙-→-함수-→-테스트">패턴 C — 새 기능 초안: 스펙 → 함수 → 테스트</h2>



<p class="wp-block-paragraph">큰 기능을 한 번에 시키면 거의 어긋난다. Anthropic 공식은 4단계 워크플로우를 권한다. <strong>Explore → Plan → Implement → Commit</strong>. Plan Mode로 파일 구조를 파악한 뒤 Normal Mode로 전환하는 흐름이다 <a href="https://code.claude.com/docs/en/best-practices" target="_blank" rel="noopener">Best Practices</a>. </p>



<p class="wp-block-paragraph">큰 기능에는 <em>&#8220;Let Claude interview you&#8221;</em> — AskUserQuestion 도구로 역질문을 받게 하고 SPEC.md에 저장한 다음, 새 세션에서 그 SPEC을 보고 구현시킨다.</p>



<p class="wp-block-paragraph">Simon Willison이 정리한 패턴도 결이 같다. 단순 버전부터 만들고, 동작을 확인한 뒤, 정교화한다 <a href="https://simonw.substack.com/p/how-i-use-llms-to-help-me-write-code" target="_blank" rel="noopener">How I use LLMs</a>. </p>



<p class="wp-block-paragraph">한 번에 완성품을 만들지 않는다는 원칙이다.</p>



<pre class="wp-block-code"><code>목표: 사용자가 마감일 지난 할 일을 요약 카드로 보는 기능.
제약: React + 우리 디자인 시스템(@components/Card 사용), 외부 라이브러리 추가 금지.
순서: 1) 인터페이스/타입부터 제안 2) 빈 함수 시그니처 3) 실패 케이스 테스트 1개
       4) 그 테스트를 통과하는 최소 구현. 단계마다 멈추고 내 확인을 받아.
</code></pre>



<p class="wp-block-paragraph">웹 채팅이라면 결과를 <a href="https://jspulsar.dev/claude-artifacts-%ec%82%ac%ec%9a%a9%eb%b2%95-%ec%99%84%eb%b2%bd-%ec%a0%95%eb%a6%ac-2026%eb%85%84-pro-%ec%8b%a4%ec%a0%84-%eb%a6%ac%eb%b7%b0/">Claude Artifacts</a>로 미리 돌려볼 수 있어, 타입·시그니처·테스트 1개의 결합이 즉석에서 검증된다. *&#8221;바이브 코딩(vibe coding)&#8221;*이라는 말이 유행하지만 — Karpathy가 2025년 2월 X 포스트에서 *&#8221;fully give in to the vibes&#8221;*로 명명했다 <a href="https://en.wikipedia.org/wiki/Vibe_coding" target="_blank" rel="noopener">Wikipedia</a> — 이 패턴에서는 단계마다 멈추고 사람이 확인하는 편이 안전하다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="패턴-d--테스트-작성과-문서화">패턴 D — 테스트 작성과 문서화</h2>



<p class="wp-block-paragraph">기존 함수의 입출력을 표로 뽑고 그걸 그대로 테스트 케이스로 옮기는 작업은 사람보다 빠르다. 공식 best practice의 권장 톤도 구체적이다. <em>&#8220;write a test for foo.py covering the edge case where the user is logged out. avoid mocks.&#8221;</em> 시나리오와 모킹 정책까지 같이 넣으라는 뜻이다.</p>



<p class="wp-block-paragraph">Anthropic 사내 팀이 공유한 PDF에는 <em>design doc → janky code → refactor → give up on tests</em> 패턴을 <em>pseudocode → guide TDD → check in periodically</em>로 바꾼 사례가 있다 <a href="https://www-cdn.anthropic.com/58284b19e702b49db9302d5b6f135ad8871e7658.pdf" target="_blank" rel="noopener">How Anthropic teams use Claude Code</a>. 리팩터 전 <em>characterization tests</em>로 현재 동작을 잠가두라는 조언도 같이 나온다.</p>



<pre class="wp-block-code"><code>대상: @utils/parseDate.ts (현재 60줄)
요청: 1) 이 함수가 다루는 입력 타입을 추출 (정상/엣지/오동작 추정)
       2) 그 입력별 기대 출력을 표로 정리
       3) Vitest 테스트 케이스로 옮겨. 모킹은 쓰지 말고 실제 입출력만.
       4) 실패 케이스를 발견하면 코드 수정 전에 일단 모두 보여줘.
</code></pre>



<p class="wp-block-paragraph">마지막 줄이 핵심이다. 실패 케이스를 발견했을 때 코드를 먼저 고쳐버리면, 어떤 동작이 의도였는지 사람이 잃는다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="패턴-e--한국어-주석과-커밋-메시지">패턴 E — 한국어 주석과 커밋 메시지</h2>



<p class="wp-block-paragraph">한국 개발자에게만 통하는 패턴이다. Anthropic 공식 한국어 docs는 존재하지만 <a href="https://code.claude.com/docs/ko/overview" target="_blank" rel="noopener">code.claude.com/docs/ko/overview</a>, 주석·커밋 메시지 컨벤션 가이드는 따로 없다. 그래서 본인은 CLAUDE.md에 5-7줄짜리 규칙을 박아두는 식으로 자리를 잡았다 — CLAUDE.md는 매 세션 자동 로드되니 한 번만 박으면 된다.</p>



<pre class="wp-block-code"><code>규칙(한 번만 지정):
- 주석은 한국어, 존댓말 X, 명령형/설명형으로 통일
- 변수명은 영어 유지, 도메인 용어는 영어 그대로(예: idempotency, payload)
- 1줄 주석은 // 한국어, 다중 줄은 /** ... */ 영어 한 줄 + 한국어 본문
- 커밋 메시지: &lt;type&gt;: &lt;한국어 한 줄 요약&gt;(50자 이내) + 빈 줄 + 한국어 본문
</code></pre>



<p class="wp-block-paragraph">이 5줄을 박아두니 체감 8할 정도는 일관성이 유지된다. 다만 최근 몇 주 쓰면서 멈칫한 적이 한 번 있는데, 긴 세션 후반에 한국어 주석 사이로 일본어 단어가 한두 개 섞여 들어왔다. GitHub 이슈 #24941로도 보고된 사례라 본인 환경 문제는 아니었다 <a href="https://github.com/anthropics/claude-code/issues/24941" target="_blank" rel="noopener">Issue #24941</a>. <code>/clear</code>로 세션을 끊고 다시 시작하면 정상으로 돌아온다.</p>



<p class="wp-block-paragraph">CLI에 한국어를 직접 입력할 때 IME composition이 깨지는 문제도 있다 <a href="https://github.com/anthropics/claude-code/issues/4866" target="_blank" rel="noopener">Issue #4866</a>. 본인은 결국 에디터에서 한국어 프롬프트를 작성한 다음 붙여넣는 습관이 자리 잡았다. 작은 우회지만 성가신 편이다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="흔한-실수와-헤맴">흔한 실수와 헤맴</h2>



<p class="wp-block-paragraph">공식 best practice와 커뮤니티 이슈를 보면 비슷한 함정이 반복된다.</p>



<ul class="wp-block-list">
<li><strong>kitchen sink session</strong> — 한 세션에 무관한 작업을 섞으면 컨텍스트가 오염된다. <code>/clear</code>로 리셋하라는 게 공식 권장이다.</li>



<li><strong>2번 정정해도 안 고쳐지면</strong> 같은 세션에서 더 다듬지 말고 <code>/clear</code> 후 더 구체적인 프롬프트로 재시작.</li>



<li><strong>검증 없이 ship 금지</strong> — 테스트·실행 결과·스크린샷 중 하나는 함께 받아라. <em>If you can&#8217;t verify it, don&#8217;t ship it.</em></li>



<li><strong>max_tokens로 잘림</strong> — Claude Code는 32K 캡이 있고, 긴 마이그레이션 코드는 중간에 끊긴다 <a href="https://github.com/anthropics/claude-code/issues/24055" target="_blank" rel="noopener">Issue #24055</a>. 분할 요청이 안전하다.</li>



<li><strong>다중 파일 리팩터에서 reintroduce</strong> — 이전에 손댄 파일을 잊고 같은 코드를 다시 만들어 넣는다 <a href="https://www.dolthub.com/blog/2025-06-30-claude-code-gotchas/" target="_blank" rel="noopener">DoltHub Gotchas</a>. 작은 커밋 단위로 끊어 가는 편이 낫다.</li>
</ul>



<p class="wp-block-paragraph">직접 헤맨 사례 하나. 지난 분기에 자동화 스크립트 두 개를 한 세션에 던졌다가, 두 번째 결과가 첫 번째를 일부 덮어쓴 적이 있다. Sonnet 4.5 시점이었고, 컨텍스트가 길어지면서 첫 스크립트 사양을 잊어버린 모양이었다. 이후로는 작업당 새 세션을 강제한다 — 답답해 보여도 결과는 더 깨끗하다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="모델·환경-선택은-어떻게-할까">모델·환경 선택은 어떻게 할까</h2>



<p class="wp-block-paragraph">기본은 <strong>Sonnet 4.6</strong>이다. 패턴 A·B·D 대부분에 충분하고, 빠르고, 비용도 적정선이다. 멀티 파일 리팩터·복잡한 디버깅·긴 호흡 작업에 가서야 <strong>Opus 4.7</strong>로 에스컬레이션한다 — SWE-bench Verified에서 87.6%로 보고된다 <a href="https://tokenmix.ai/blog/swe-bench-2026-claude-opus-4-7-wins" target="_blank" rel="noopener">TokenMix</a>. 단발 질문은 Pro 웹 채팅, 파일 자율 편집·테스트 실행은 Claude Code CLI다. 모델별 코딩 차이의 더 자세한 비교는 <a href="https://jspulsar.dev/claude-opus-vs-sonnet-vs-haiku-%ec%b0%a8%ec%9d%b4-%ec%99%84%eb%b2%bd-%ec%a0%95%eb%a6%ac-2026%eb%85%84-4%ec%9b%94-%ec%b5%9c%ec%8b%a0/">Claude Opus vs Sonnet vs Haiku 차이</a>에 정리해뒀고, API로 직접 호출할 때 단가는 <a href="https://jspulsar.dev/claude-api-%eb%b9%84%ec%9a%a9-%ec%99%84%eb%b2%bd-%ea%b0%80%ec%9d%b4%eb%93%9c-2026-%ed%86%a0%ed%81%b0-%eb%8b%a8%ea%b0%80%c2%b7%ec%ba%90%ec%8b%b1%c2%b7%eb%b0%b0%ec%b9%98-%ed%95%a0%ec%9d%b8-%ed%95%9c/">Claude API 비용 가이드</a>에 별도로 두었다. Cursor와의 IDE 비교는 별도로 정리 중(준비 중).</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="960" src="https://jspulsar.dev/wp-content/uploads/2026/04/claude-code-best-practices-01-1024x960.png" alt="" class="wp-image-1264" srcset="https://jspulsar.dev/wp-content/uploads/2026/04/claude-code-best-practices-01-1024x960.png 1024w, https://jspulsar.dev/wp-content/uploads/2026/04/claude-code-best-practices-01-300x281.png 300w, https://jspulsar.dev/wp-content/uploads/2026/04/claude-code-best-practices-01-768x720.png 768w, https://jspulsar.dev/wp-content/uploads/2026/04/claude-code-best-practices-01-1536x1440.png 1536w, https://jspulsar.dev/wp-content/uploads/2026/04/claude-code-best-practices-01-600x563.png 600w, https://jspulsar.dev/wp-content/uploads/2026/04/claude-code-best-practices-01.png 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 3. Claude Code Best Practices 페이지</em></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="자주-묻는-질문">자주 묻는 질문</h2>



<h3 class="wp-block-heading" id="q1-claude로-어떤-코딩-작업을-잘하나요">Q1. Claude로 어떤 코딩 작업을 잘하나요?</h3>



<p class="wp-block-paragraph">코드 리뷰·디버깅·새 기능 초안·테스트 자동화·한국어 주석/커밋 같은 패턴화된 작업이다. 시스템 설계·아키텍처 결정 같은 큰 그림은 사람이 가이드해야 한다.</p>



<h3 class="wp-block-heading" id="q2-claude로-디버깅이-되나요">Q2. Claude로 디버깅이 되나요?</h3>



<p class="wp-block-paragraph">된다. 단 에러 메시지·재현 흐름·의심 위치를 함께 줘야 한다. 위 패턴 B 템플릿처럼 <strong>가설 3개부터 받고 → 점검 명령 → failing test → 수정</strong> 순서를 강제하면 그럴듯한 가짜 답을 거를 수 있다.</p>



<h3 class="wp-block-heading" id="q3-한국어-주석·커밋-메시지를-잘-쓰나요">Q3. 한국어 주석·커밋 메시지를 잘 쓰나요?</h3>



<p class="wp-block-paragraph">한국 개발자가 코딩에 가장 많이 쓰는 LLM이 Claude(42%)라는 조사가 있을 만큼 한국어 출력은 자연스럽다. CLAUDE.md에 5줄짜리 컨벤션 규칙을 박아두면 일관성 체감 8할이고, 긴 세션 후반에는 일본어 단어가 섞여 들어오는 사례가 있다.</p>



<h3 class="wp-block-heading" id="q4-pro-구독으로-코딩-충분한가요">Q4. Pro 구독으로 코딩 충분한가요?</h3>



<p class="wp-block-paragraph">패턴 A·B·D는 Pro 웹 채팅으로 대부분 가능하다. 멀티 파일 자율 편집·테스트 실행 같은 작업은 Claude Code CLI 쪽이 결이 맞다. 모델 차이는 <a href="https://jspulsar.dev/claude-opus-vs-sonnet-vs-haiku-%ec%b0%a8%ec%9d%b4-%ec%99%84%eb%b2%bd-%ec%a0%95%eb%a6%ac-2026%eb%85%84-4%ec%9b%94-%ec%b5%9c%ec%8b%a0/">Claude Opus vs Sonnet vs Haiku</a> 참고.</p>



<h3 class="wp-block-heading" id="q5-cursor·copilot보다-나은-점은">Q5. Cursor·Copilot보다 나은 점은?</h3>



<p class="wp-block-paragraph">본 글은 Claude 단독 활용 패턴이라 깊은 비교는 다루지 않는다. 한국 개발자 점유 1위(42%)와 긴 호흡 작업 강점이 자주 거론되는 포인트다. 모델 단위 비교는 <a href="https://jspulsar.dev/claude-vs-gpt-vs-gemini-2026-%ed%95%9c%ea%b5%ad-%ec%82%ac%ec%9a%a9%ec%9e%90%ea%b0%80-%ea%b3%a0%eb%a5%b8-%ed%98%84%eb%8b%b5/">Claude vs GPT vs Gemini</a>에서, Cursor와의 IDE 비교는 준비 중이다.</p>



<h3 class="wp-block-heading" id="q6-claude-코드-리뷰-어떻게-시키나요">Q6. Claude 코드 리뷰 어떻게 시키나요?</h3>



<p class="wp-block-paragraph">패턴 A 템플릿을 그대로 복사해 쓰고, 작성 세션과 리뷰 세션을 분리한다(<code>/clear</code>). 컨벤션 한 줄과 nit 컷오프를 빼면 일반론적 리뷰가 돌아온다.</p>



<h3 class="wp-block-heading" id="q7-ai-코딩으로-진짜-생산성이-늘어나나요">Q7. AI 코딩으로 진짜 생산성이 늘어나나요?</h3>



<p class="wp-block-paragraph">체감으로는 단순 자동화·테스트·리뷰에서 시간이 분명히 줄었다. 정량으로는 Copilot 연구 55%·McKinsey 25-30%·주 6시간 같은 수치가 보고됐지만, 작업 종류·연차에 따라 폭이 크고 주니어가 더 느려진 사례도 있다. &#8220;2배 빨라진다&#8221;고 단정할 근거는 어느 1차 자료에도 없다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="다음-걸음">다음 걸음</h2>



<p class="wp-block-paragraph">본인 워크플로우에 패턴 다섯 중 하나를 박아 넣는 것부터 시작하면 된다. 코드 리뷰가 가장 빠르게 효과가 보이는 편이다. 아직 Claude Code를 깔지 않았다면 <a href="https://jspulsar.dev/claude-code-%ec%84%a4%ec%b9%98%eb%b6%80%ed%84%b0-%ec%b2%ab-%eb%aa%85%eb%a0%b9%ea%b9%8c%ec%a7%80-2026%eb%85%84-macos%c2%b7wsl-%ea%b8%b0%ec%a4%80-%ec%9e%85%eb%ac%b8/">Claude Code 설치부터 첫 명령까지</a>으로, 이미 깔았다면 모델 선택은 <a href="https://jspulsar.dev/claude-opus-vs-sonnet-vs-haiku-%ec%b0%a8%ec%9d%b4-%ec%99%84%eb%b2%bd-%ec%a0%95%eb%a6%ac-2026%eb%85%84-4%ec%9b%94-%ec%b5%9c%ec%8b%a0/">Opus vs Sonnet vs Haiku</a>에서 정리해두면 된다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="관련-글">관련 글</h2>



<ul class="wp-block-list">
<li><a href="https://jspulsar.dev/claude-code-%ec%84%a4%ec%b9%98%eb%b6%80%ed%84%b0-%ec%b2%ab-%eb%aa%85%eb%a0%b9%ea%b9%8c%ec%a7%80-2026%eb%85%84-macos%c2%b7wsl-%ea%b8%b0%ec%a4%80-%ec%9e%85%eb%ac%b8/">Claude Code 설치부터 첫 명령까지 (2026)</a> — 처음이라면 설치부터</li>



<li><a href="https://jspulsar.dev/claude-opus-vs-sonnet-vs-haiku-%ec%b0%a8%ec%9d%b4-%ec%99%84%eb%b2%bd-%ec%a0%95%eb%a6%ac-2026%eb%85%84-4%ec%9b%94-%ec%b5%9c%ec%8b%a0/">Claude Opus vs Sonnet vs Haiku 차이 완벽 정리</a> — 코딩에 어느 모델을 쓸지</li>



<li><a href="https://jspulsar.dev/claude-artifacts-%ec%82%ac%ec%9a%a9%eb%b2%95-%ec%99%84%eb%b2%bd-%ec%a0%95%eb%a6%ac-2026%eb%85%84-pro-%ec%8b%a4%ec%a0%84-%eb%a6%ac%eb%b7%b0/">Claude Artifacts 사용법 완벽 정리</a> — 채팅 옆 코드 패널 활용</li>



<li><a href="https://jspulsar.dev/claude-api-%eb%b9%84%ec%9a%a9-%ec%99%84%eb%b2%bd-%ea%b0%80%ec%9d%b4%eb%93%9c-2026-%ed%86%a0%ed%81%b0-%eb%8b%a8%ea%b0%80%c2%b7%ec%ba%90%ec%8b%b1%c2%b7%eb%b0%b0%ec%b9%98-%ed%95%a0%ec%9d%b8-%ed%95%9c/">Claude API 비용 완벽 가이드 2026</a> — 자동화·일괄 처리 비용 시뮬레이션</li>



<li><a href="https://jspulsar.dev/claude-vs-gpt-vs-gemini-2026-%ed%95%9c%ea%b5%ad-%ec%82%ac%ec%9a%a9%ec%9e%90%ea%b0%80-%ea%b3%a0%eb%a5%b8-%ed%98%84%eb%8b%b5/">Claude vs GPT vs Gemini 2026</a> — 다른 챗봇과 비교</li>



<li>Cursor vs Claude Code (추후 발행) — IDE·코딩 도구 비교</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://jspulsar.dev/claude%eb%a1%9c-%ec%bd%94%eb%94%a9-%ec%83%9d%ec%82%b0%ec%84%b1-2%eb%b0%b0-%eb%82%b4%ea%b0%80-%eb%a7%a4%ec%9d%bc-%ec%93%b0%eb%8a%94-5%ea%b0%80%ec%a7%80-%ed%99%9c%ec%9a%a9-%ed%8c%a8%ed%84%b4-2026/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Claude API 비용 완벽 가이드 2026: 토큰 단가·캐싱·배치 할인 한 번에</title>
		<link>https://jspulsar.dev/claude-api-%eb%b9%84%ec%9a%a9-%ec%99%84%eb%b2%bd-%ea%b0%80%ec%9d%b4%eb%93%9c-2026-%ed%86%a0%ed%81%b0-%eb%8b%a8%ea%b0%80%c2%b7%ec%ba%90%ec%8b%b1%c2%b7%eb%b0%b0%ec%b9%98-%ed%95%a0%ec%9d%b8-%ed%95%9c/</link>
					<comments>https://jspulsar.dev/claude-api-%eb%b9%84%ec%9a%a9-%ec%99%84%eb%b2%bd-%ea%b0%80%ec%9d%b4%eb%93%9c-2026-%ed%86%a0%ed%81%b0-%eb%8b%a8%ea%b0%80%c2%b7%ec%ba%90%ec%8b%b1%c2%b7%eb%b0%b0%ec%b9%98-%ed%95%a0%ec%9d%b8-%ed%95%9c/#respond</comments>
		
		<dc:creator><![CDATA[크하하학]]></dc:creator>
		<pubDate>Sat, 25 Apr 2026 15:00:00 +0000</pubDate>
				<category><![CDATA[Claude]]></category>
		<category><![CDATA[비교]]></category>
		<category><![CDATA[batch-api]]></category>
		<category><![CDATA[claude-api]]></category>
		<category><![CDATA[haiku]]></category>
		<category><![CDATA[opus]]></category>
		<category><![CDATA[pricing]]></category>
		<category><![CDATA[prompt-caching]]></category>
		<category><![CDATA[sonnet]]></category>
		<guid isPermaLink="false">https://ai_blog.jspulsar.dev/?p=1245</guid>

					<description><![CDATA[Claude API 비용을 토큰 단위로 정확히 계산하는 법. 2026년 4월 기준 Opus·Sonnet·Haiku 단가, Prompt Caching 90%·Batch 50% 할인 stack, Pro 손익분기점, 4가지 실전 시뮬레이션을 한 번에 정리.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Claude API 비용은 2026년 4월 기준 입력 1M 토큰당 Haiku 4.5 $1, Sonnet 4.6 $3, Opus 4.7 $5에서 시작한다. 그런데 이 표면 단가만 보면 손해다. <strong>Prompt Caching의 cache hit 0.1x(=90% 할인)와 Batch API 50% 할인이 stack</strong> 가능하기 때문에, 같은 작업을 절반 아래 비용으로 운용할 수 있다. 이 글은 단가표·계산 공식·시나리오 4개·Pro 손익분기점·한국 결제 실무까지 토큰 단위로 정리한 클로드 API 비용 가이드다. 모든 수치는 <a href="https://platform.claude.com/docs/en/about-claude/pricing" target="_blank" rel="noopener">공식 가격 페이지</a> 2026-04-26 확인일 기준이다.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>TL;DR</strong></p>



<ul class="wp-block-list">
<li>Opus 4.7 $5/$25, Sonnet 4.6 $3/$15, Haiku 4.5 $1/$5 (per 1M tokens, input/output)</li>



<li>Prompt Caching hit는 base input의 0.1x(=90% 할인), Batch API는 50% 할인. 두 할인 stack 가능</li>



<li>Pro 구독($17~20/월)과 API는 <strong>별도 결제</strong>. Pro 구독자도 API는 따로 청구된다</li>



<li>Opus 4.7은 새 토크나이저로 같은 텍스트 토큰 +35%까지 늘 수 있어 단가만 비교하면 함정</li>
</ul>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 id="1-2026-04-단가-한눈에--3모델-inputoutput-표" class="wp-block-heading">1. 2026-04 단가 한눈에 — 3모델 input/output 표</h2>



<p class="wp-block-paragraph">검색자가 가장 먼저 보는 표부터 박는다. 공식 표기 그대로 <code>$X / MTok</code> (MTok = Million Tokens).</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>모델</th><th>Base Input</th><th>Cache Hit</th><th>Output</th></tr></thead><tbody><tr><td>Claude Opus 4.7</td><td>$5 / MTok</td><td>$0.50 / MTok</td><td>$25 / MTok</td></tr><tr><td>Claude Sonnet 4.6</td><td>$3 / MTok</td><td>$0.30 / MTok</td><td>$15 / MTok</td></tr><tr><td>Claude Haiku 4.5</td><td>$1 / MTok</td><td>$0.10 / MTok</td><td>$5 / MTok</td></tr></tbody></table></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Cache write 단가(5분 1.25x / 1시간 2x)는 H2 4 Prompt Caching에서 다룬다.</p>
</blockquote>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="371" src="https://jspulsar.dev/wp-content/uploads/2026/04/pricing-page-01-1024x371.png" alt="" class="wp-image-1246" srcset="https://jspulsar.dev/wp-content/uploads/2026/04/pricing-page-01-1024x371.png 1024w, https://jspulsar.dev/wp-content/uploads/2026/04/pricing-page-01-300x109.png 300w, https://jspulsar.dev/wp-content/uploads/2026/04/pricing-page-01-768x278.png 768w, https://jspulsar.dev/wp-content/uploads/2026/04/pricing-page-01-1536x557.png 1536w, https://jspulsar.dev/wp-content/uploads/2026/04/pricing-page-01-600x218.png 600w, https://jspulsar.dev/wp-content/uploads/2026/04/pricing-page-01.png 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 1. claude.com/pricing의 Model pricing 표</em></p>



<p class="wp-block-paragraph"><strong>1M context 표준화</strong>: <a href="https://platform.claude.com/docs/en/about-claude/pricing" target="_blank" rel="noopener">Pricing 문서</a>는 *&#8221;Opus 4.7, Opus 4.6, and Sonnet 4.6 include the full 1M token context window at standard pricing&#8221;*이라고 명시한다. 본 글의 3모델은 200k 초과 premium 없이 1M까지 동일 단가다.</p>



<p class="wp-block-paragraph"><strong>Opus 4.7 토크나이저 함정</strong>: 공식 원문은 <em>&#8220;This new tokenizer may use up to 35% more tokens for the same fixed text&#8221;</em>. 같은 한국어 문서를 Opus 4.7로 보내면 토큰이 최대 35% 더 잡혀 단가 비교만으로는 함정.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>커뮤니티 보고 — &#8220;단가 동결, 청구서 인상&#8221;</strong> Opus 4.7 출시 직후 비용 분석 매체 <a href="https://www.finout.io/blog/claude-opus-4.7-pricing-the-real-cost-story-behind-the-unchanged-price-tag" target="_blank" rel="noopener">Finout</a>은 *&#8221;if you already run Opus 4.6 workloads, your most likely outcome is a cost increase between 0% and 35% per request on the same prompts, driven entirely by the tokenizer change&#8221;*라고 정리했다. <a href="https://agent-wars.com/news/2026-04-20-claude-opus-47-tokenizer-cost-inflation" target="_blank" rel="noopener">Agent Wars</a>도 <em>&#8220;new tokenizer silently inflates your API bill&#8221;</em> 식으로 같은 지점을 지목한다. Hacker News에선 <em>&#8220;Pro 가입했는데 페이지 4번 만들어보고 한도 도달&#8221;</em>, *&#8221;Max 5x인데 5시간 한도가 2시간 만에 끝났다&#8221;*는 보고가 다수. <strong>단가 변경은 없지만 같은 작업의 청구·한도는 더 빨리 닳는다</strong>는 게 사용자 체감의 일관된 결론이다. 다수 커뮤니티 보고이며 콘텐츠 종류에 따라 1.0~1.35배 폭이 갈린다는 점은 함께 둔다.</p>
</blockquote>



<p class="wp-block-paragraph">어느 모델이 자기 작업에 맞는지는 <a href="https://jspulsar.dev/claude-opus-vs-sonnet-vs-haiku-%ec%b0%a8%ec%9d%b4-%ec%99%84%eb%b2%bd-%ec%a0%95%eb%a6%ac-2026%eb%85%84-4%ec%9b%94-%ec%b5%9c%ec%8b%a0/">Claude Opus vs Sonnet vs Haiku 차이 정리</a> 별도 글에서 다뤘다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 id="2-토큰이란-무엇이고-한국어는-왜-더-비싼가" class="wp-block-heading">2. 토큰이란 무엇이고, 한국어는 왜 더 비싼가</h2>



<p class="wp-block-paragraph">토큰은 모델이 읽고 쓰는 최소 단위다. 영어는 보통 4자/토큰. 한국어는 글자 1 = 약 2~3 토큰이 통상 실측치이지만 콘텐츠에 따라 다르고 공식이 한국어 비율을 미공개로 두었으므로 정확값은 Token Counting API로 측정해야 한다.</p>



<p class="wp-block-paragraph"><code>POST /v1/messages/count_tokens</code> 호출은 <strong>무료</strong>다 (<a href="https://platform.claude.com/docs/en/build-with-claude/token-counting" target="_blank" rel="noopener">Token Counting 문서</a> 원문 <em>&#8220;Token counting is free to use&#8221;</em>). 큰 입력을 보내기 전 토큰 수를 미리 재서 견적 정확도를 올릴 때 쓴다.</p>



<pre class="wp-block-code"><code>curl https://api.anthropic.com/v1/messages/count_tokens \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model":"claude-sonnet-4-6","messages":&#91;{"role":"user","content":"..."}]}'
</code></pre>



<p class="wp-block-paragraph">응답은 <code>{"input_tokens": 14}</code> 형태다. count_tokens에 <code>cache_control</code>을 붙여도 캐싱은 동작하지 않는다 — 실제 메시지 생성 호출에서만 캐시가 적용된다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 id="3-계산-공식--입력·출력-단가를-곱하면-끝" class="wp-block-heading">3. 계산 공식 — 입력·출력 단가를 곱하면 끝</h2>



<p class="wp-block-paragraph">모든 시나리오의 베이스가 되는 한 줄 공식.</p>



<pre class="wp-block-code"><code>월 비용(USD)
  = (월 입력 토큰 / 1,000,000) × 모델 input 단가
  + (월 출력 토큰 / 1,000,000) × 모델 output 단가
</code></pre>



<p class="wp-block-paragraph">예: Sonnet 4.6에 입력 1M, 출력 0.2M 토큰을 보내면 <code>1×$3 + 0.2×$15 = $6</code>. 캐싱·배치를 적용하면 위 공식의 input·output 자리에 multiplier(0.1x, 0.5x 등)가 곱해진다. 다음 두 섹션이 그 배율을 정리한다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 id="4-prompt-caching--write-125x2x-hit-01x로-90-절감" class="wp-block-heading">4. Prompt Caching — write 1.25x/2x, hit 0.1x로 90% 절감</h2>



<p class="wp-block-paragraph">반복 시스템 프롬프트·코드 컨텍스트가 있는 워크로드에서 가장 큰 절감 도구다.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Cache 동작</th><th>Multiplier</th><th>지속 시간</th></tr></thead><tbody><tr><td>5분 cache write</td><td>1.25x base input</td><td>5분</td></tr><tr><td>1시간 cache write</td><td>2x base input</td><td>60분</td></tr><tr><td>Cache hit (read)</td><td><strong>0.1x base input (= 90% 할인)</strong></td><td>위와 동일</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><a href="https://platform.claude.com/docs/en/about-claude/pricing" target="_blank" rel="noopener">Pricing 문서</a>가 손익분기점을 명시한다: <em>&#8220;caching pays off after just one cache read for the 5-minute duration (1.25x write), or after two cache reads for the 1-hour duration (2x write)&#8221;</em>. 5분 TTL은 1회만 재사용해도 흑자, 1시간 TTL은 2회 재사용에서 흑자다.</p>



<p class="wp-block-paragraph"><strong>모델별 최소 캐싱 토큰</strong> — 못 채우면 캐싱이 아예 작동하지 않는다:</p>



<ul class="wp-block-list">
<li>Opus 4.7 / 4.6 / 4.5: <strong>4,096 토큰</strong></li>



<li>Sonnet 4.6: <strong>2,048 토큰</strong></li>



<li><strong>Haiku 4.5: 4,096 토큰</strong> (Haiku 3.5는 2,048 — 마이그레이션 함정)</li>
</ul>



<p class="wp-block-paragraph">다른 제약: 요청당 최대 4 breakpoints, tools·system prompts·images·tool_choice 변경 시 cache invalidate. 이 multiplier는 Batch API 할인과 stack 가능하다 — 다음 섹션이 그 케이스다.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="666" src="https://jspulsar.dev/wp-content/uploads/2026/04/caching-docs-01-1024x666.png" alt="" class="wp-image-1247" srcset="https://jspulsar.dev/wp-content/uploads/2026/04/caching-docs-01-1024x666.png 1024w, https://jspulsar.dev/wp-content/uploads/2026/04/caching-docs-01-300x195.png 300w, https://jspulsar.dev/wp-content/uploads/2026/04/caching-docs-01-768x499.png 768w, https://jspulsar.dev/wp-content/uploads/2026/04/caching-docs-01-1536x998.png 1536w, https://jspulsar.dev/wp-content/uploads/2026/04/caching-docs-01-600x390.png 600w, https://jspulsar.dev/wp-content/uploads/2026/04/caching-docs-01.png 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 2. Prompt Caching 공식 문서의 multiplier·TTL 섹션</em></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 id="5-batch-api--50-할인-24시간-보장-캐싱과-stack" class="wp-block-heading">5. Batch API — 50% 할인, 24시간 보장, 캐싱과 stack</h2>



<p class="wp-block-paragraph">비실시간 작업이라면 Batch API가 단순하고 강력하다. 핵심 사실 네 가지:</p>



<ol class="wp-block-list">
<li><em>&#8220;All usage is charged at 50% of the standard API prices&#8221;</em> — input·output 모두 50% (<a href="https://platform.claude.com/docs/en/build-with-claude/batch-processing" target="_blank" rel="noopener">Batch 문서</a>)</li>



<li>대부분 1시간 내 완료, <strong>24시간 만료 보장</strong>(실시간 응답 불가)</li>



<li>100,000 requests / 256 MB 한도, 결과는 29일간 다운로드 가능</li>



<li>모든 active 모델 지원, <strong>캐싱과 stack 가능</strong>(1시간 TTL 캐시 권장)</li>
</ol>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>모델</th><th>Batch input</th><th>Batch output</th></tr></thead><tbody><tr><td>Opus 4.7</td><td>$2.50 / MTok</td><td>$12.50 / MTok</td></tr><tr><td>Sonnet 4.6</td><td>$1.50 / MTok</td><td>$7.50 / MTok</td></tr><tr><td>Haiku 4.5</td><td>$0.50 / MTok</td><td>$2.50 / MTok</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">단점은 Zero Data Retention 비대상이라는 점이다. 보안 민감 데이터는 표준 호출이 안전하다.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="480" src="https://jspulsar.dev/wp-content/uploads/2026/04/batch-docs-01-1024x480.png" alt="" class="wp-image-1248" srcset="https://jspulsar.dev/wp-content/uploads/2026/04/batch-docs-01-1024x480.png 1024w, https://jspulsar.dev/wp-content/uploads/2026/04/batch-docs-01-300x141.png 300w, https://jspulsar.dev/wp-content/uploads/2026/04/batch-docs-01-768x360.png 768w, https://jspulsar.dev/wp-content/uploads/2026/04/batch-docs-01-1536x720.png 1536w, https://jspulsar.dev/wp-content/uploads/2026/04/batch-docs-01-600x281.png 600w, https://jspulsar.dev/wp-content/uploads/2026/04/batch-docs-01.png 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 3. Batch Processing 문서의 50% 할인 명시 영역</em></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 id="6-실전-시뮬레이션-4개--코드-분석--챗봇--문서-요약--복잡-추론" class="wp-block-heading">6. 실전 시뮬레이션 4개 — 코드 분석 / 챗봇 / 문서 요약 / 복잡 추론</h2>



<p class="wp-block-paragraph">산식은 모두 H2 3 공식에 캐싱·배치 multiplier만 곱한 결과다. 단가는 2026-04-26 기준.</p>



<h3 id="6-1-시나리오-a--코드-분석-sonnet-46--5분-캐시-월-약-112" class="wp-block-heading">6-1. 시나리오 A — 코드 분석 (Sonnet 4.6 + 5분 캐시): 월 약 $112</h3>



<p class="wp-block-paragraph">가정: 입력 평균 50,000 tokens(코드베이스 + 시스템 프롬프트), 출력 2,000 tokens, 일 50회, 30일.</p>



<pre class="wp-block-code"><code>Cache write : 40,000 × $3.75 / 1M × 30회   = $4.50
Cache hit   : 40,000 × $0.30 / 1M × 1,470회 = $17.64
일반 입력   : 10,000 × $3    / 1M × 1,500회 = $45.00
출력        :  2,000 × $15   / 1M × 1,500회 = $45.00
합계 = $112.14 / 월 (캐시 없이 $270 대비 약 58% 절감)
</code></pre>



<p class="wp-block-paragraph">5분 TTL이라 호출 간격이 5분 이내일 때만 hit. 실제 hit rate는 60~80%가 통상.</p>



<h3 id="6-2-시나리오-b--챗봇-haiku-45--시스템-프롬프트-캐시-월-약-189" class="wp-block-heading">6-2. 시나리오 B — 챗봇 (Haiku 4.5 + 시스템 프롬프트 캐시): 월 약 $189</h3>



<p class="wp-block-paragraph">가정: 시스템 프롬프트 8,000 tokens(캐싱, Haiku 4.5 최소 4,096 충족), 사용자 입력 평균 500, 출력 1,000, 일 1,000회, 30일.</p>



<pre class="wp-block-code"><code>Cache write : 8,000 × $1.25 / 1M × 30회     = $0.30
Cache hit   : 8,000 × $0.10 / 1M × 29,970회 = $23.98
일반 입력   :   500 × $1    / 1M × 30,000회 = $15.00
출력        : 1,000 × $5    / 1M × 30,000회 = $150.00
합계 = $189.28 / 월 (캐시 없이 $405 대비 약 53% 절감)
</code></pre>



<p class="wp-block-paragraph">트래픽이 5분 안에 몰리지 않으면 1시간 TTL(write 2x)이 hit rate가 더 안정적이다.</p>



<h3 id="6-3-시나리오-c--문서-요약-대량-haiku-45--batch-50--1h-캐시-stack-월-약-1750--캐시-stack-시-약-1526" class="wp-block-heading">6-3. 시나리오 C — 문서 요약 대량 (Haiku 4.5 + Batch 50% + 1h 캐시 stack): 월 약 $17.50 / 캐시 stack 시 약 $15.26</h3>



<p class="wp-block-paragraph">가정: 평균 입력 30,000 tokens, 출력 1,000 tokens, 1,000건 batch.</p>



<pre class="wp-block-code"><code>Batch만:
  입력 : 30,000 × $0.50 / 1M × 1,000 = $15.00
  출력 :  1,000 × $2.50 / 1M × 1,000 = $2.50
  합계 = $17.50 (정확히 50% 절감)

Batch + 1h 캐시 stack (공통 지시 5,000 tokens 캐싱):
  Cache write : 5,000 × $2 × 0.5 / 1M × 1     = $0.01
  Cache hit   : 5,000 × $0.10 × 0.5 / 1M × 999 = $0.25
  개별 입력  : 25,000 × $0.50 / 1M × 1,000     = $12.50
  출력       :  1,000 × $2.50 / 1M × 1,000     = $2.50
  합계 ≈ $15.26 (일반 호출 $35 대비 약 56% 절감)
</code></pre>



<p class="wp-block-paragraph"><a href="https://platform.claude.com/docs/en/about-claude/pricing" target="_blank" rel="noopener">Pricing 문서</a>가 *&#8221;These multipliers stack with other pricing modifiers, including the Batch API discount and data residency&#8221;*라고 명시한 이중 할인 케이스다.</p>



<h3 id="6-4-시나리오-d--복잡-추론-소량-opus-47-직접-월-3040" class="wp-block-heading">6-4. 시나리오 D — 복잡 추론 소량 (Opus 4.7 직접): 월 $30~40</h3>



<p class="wp-block-paragraph">가정: 입력 5,000 tokens, 출력 3,000 tokens, 일 10회, 30일.</p>



<pre class="wp-block-code"><code>베이스 (캐시 미적용):
  입력 : 5,000 × $5  / 1M × 300 = $7.50
  출력 : 3,000 × $25 / 1M × 300 = $22.50
  합계 = $30.00 / 월

Opus 4.7 토크나이저 보정 (+35% 가정):
  토큰 5,000 → 6,750, 3,000 → 4,050
  합계 ≈ $40.50 / 월
</code></pre>



<p class="wp-block-paragraph">Opus 4.7 캐싱은 입력 4,096 토큰 이상에서 작동한다. 5,000은 충족하나 시스템 프롬프트가 짧으면 미적용 가능.</p>



<h3 id="6-5-4개-요약" class="wp-block-heading">6-5. 4개 요약</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>시나리오</th><th>모델</th><th>월 비용</th><th>한 줄</th></tr></thead><tbody><tr><td>A 코드 분석</td><td>Sonnet 4.6 + cache</td><td><strong>약 $112</strong></td><td>일 50회 코드 어시스턴트</td></tr><tr><td>B 챗봇</td><td>Haiku 4.5 + cache</td><td><strong>약 $189</strong></td><td>일 1,000회 채팅</td></tr><tr><td>C 문서 요약 대량</td><td>Haiku 4.5 Batch (+캐시 stack)</td><td><strong>$17.50 (~$15.26)</strong></td><td>1,000건 배치</td></tr><tr><td>D 복잡 추론 소량</td><td>Opus 4.7</td><td><strong>$30~40</strong></td><td>일 10회 reasoning</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">사용 패턴에 따라 Claude API 비용은 <strong>월 $15 ~ $200+</strong> 범위에서 움직인다. <a href="https://jspulsar.dev/claude-code-%ec%84%a4%ec%b9%98%eb%b6%80%ed%84%b0-%ec%b2%ab-%eb%aa%85%eb%a0%b9%ea%b9%8c%ec%a7%80-2026%eb%85%84-macos%c2%b7wsl-%ea%b8%b0%ec%a4%80-%ec%9e%85%eb%ac%b8/">Claude Code</a>도 API 모드로 쓰면 위 단가가 그대로 적용된다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 id="7-pro-구독-vs-api--손익분기점은-어디인가" class="wp-block-heading">7. Pro 구독 vs API — 손익분기점은 어디인가</h2>



<p class="wp-block-paragraph">Claude Pro는 $20/월(연간 결제 시 환산 $17/월)이다. 그런데 <a href="https://support.claude.com/en/articles/9876003-i-have-a-paid-claude-subscription-pro-max-team-or-enterprise-plans-why-do-i-have-to-pay-separately-to-use-the-claude-api-and-console" target="_blank" rel="noopener">Help Center</a>는 분명히 *&#8221;A paid Claude subscription enhances your chat experience but doesn&#8217;t include access to the Claude API or Console&#8221;*라고 못박았다. Pro·Max·Team·Enterprise 모두 chat·Claude Code 한정이고, API 키 사용은 console.anthropic.com에서 별도 가입·별도 결제다.</p>



<p class="wp-block-paragraph">Pro $20을 API 토큰으로 환산하면 대략:</p>



<ul class="wp-block-list">
<li>Haiku 4.5 input 기준 ≈ <strong>20M tokens</strong></li>



<li>Sonnet 4.6 input 기준 ≈ <strong>6.7M tokens</strong></li>



<li>Opus 4.7 input 기준 ≈ <strong>4M tokens</strong></li>



<li>출력은 위의 1/5 분량(출력 단가가 5배)</li>
</ul>



<p class="wp-block-paragraph">월 1~2시간 가벼운 챗 사용이면 Pro가 압도적으로 싸다. 자체 앱·자동화·SDK 호출이 들어오는 순간부터 API가 정답이다.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">한 달 통짜로 굴려본 사례는 아니지만 갈림 지점을 보여주는 단편이 하나 있다. 2026년 2월 며칠간 자동화 스크립트 두 개를 Sonnet 4.5로 돌려봤더니 Usage 대시보드 기준 input 약 16만·output 약 5만 토큰이 찍혔고, 그 기간 단가 환산 청구서는 약 $1.3 수준이었다(그림 4). 같은 호출 패턴을 Pro에서 돌렸다면 자동화가 한도를 갉아먹어 사람이 끼는 작업이 한도 회복까지 멈췄을 것이다. <strong>사용량 절댓값보다 자동화 자유도</strong> — 그게 옮길 이유였다. 단편이라 본격 운용 청구서는 사용 패턴에 따라 달라진다는 점은 미리 둔다.</p>
</blockquote>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="584" src="https://jspulsar.dev/wp-content/uploads/2026/04/console-usage-01-1024x584.png" alt="" class="wp-image-1249" srcset="https://jspulsar.dev/wp-content/uploads/2026/04/console-usage-01-1024x584.png 1024w, https://jspulsar.dev/wp-content/uploads/2026/04/console-usage-01-300x171.png 300w, https://jspulsar.dev/wp-content/uploads/2026/04/console-usage-01-768x438.png 768w, https://jspulsar.dev/wp-content/uploads/2026/04/console-usage-01-1536x876.png 1536w, https://jspulsar.dev/wp-content/uploads/2026/04/console-usage-01-600x342.png 600w, https://jspulsar.dev/wp-content/uploads/2026/04/console-usage-01.png 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><em>그림 4. 콘솔 Usage 대시보드 — 필자의 2026-02 단편 API 사용 기록 (Sonnet 4.5, n=1)</em></p>



<p class="wp-block-paragraph">Pro 한도 도달 시 자동 API fallback은 없다 — 막히면 그냥 막히고 청구는 별개다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 id="8-한국에서-결제·환율·세금--무엇이-가능하고-무엇이-미공개인가" class="wp-block-heading">8. 한국에서 결제·환율·세금 — 무엇이 가능하고 무엇이 미공개인가</h2>



<p class="wp-block-paragraph">한국 사용자가 실무에서 부딪히는 항목을 짧게 정리한다.</p>



<ul class="wp-block-list">
<li><strong>결제 카드</strong>: 신용/직불카드만 공식 지원. 해외결제 가능 비자/마스터/AMEX 권장. 일부 prepaid·gift card는 거절 사례 있음.</li>



<li><strong>카카오페이·네이버페이·페이팔</strong>: Pro 정책상 PayPal·암호화폐·은행이체·카카오페이·네이버페이 모두 미지원이다. <strong>API 결제는 현재 신용카드 위주이며, 그 외 수단 지원 여부는 콘솔에서 직접 확인을 권장한다.</strong></li>



<li><strong>prepaid credits</strong>: 신규 가입자는 콘솔 &#8220;Buy credits&#8221; → 즉시 사용. 크레딧 1년 만료, 환불 불가, 만료 연장 불가.</li>



<li><strong>환율</strong>: USD 청구 → 카드사 환율 + 해외결제 수수료(보통 1~3%)가 별도. 인보이스에는 USD만 표시된다.</li>



<li><strong>부가세 / 세금계산서</strong>: <strong>공식 미공개</strong>. 사업자라면 콘솔 빌링에서 세금계산서 옵션을 확인하거나 회계 부서에 사전 확인을 권장한다.</li>



<li><strong>무료 크레딧</strong>: <strong>신규 가입 $5 / claim 후 14일이 통상이지만 정책 변동이 잦다.</strong> 가입 시 console.anthropic.com 배너에서 직접 확인. Haiku 입력 약 5M tokens 또는 Opus 입력 약 1M tokens 분량 — PoC 1~2일치.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 id="9-비용-절감-베스트-프랙티스" class="wp-block-heading">9. 비용 절감 베스트 프랙티스</h2>



<p class="wp-block-paragraph">실제 운영에서 비용을 깎는 항목을 체크리스트로 박아둔다.</p>



<ol class="wp-block-list">
<li>작업 난이도에 맞는 모델 — 단순 분류·추출은 <strong>Haiku</strong>, 복잡 추론만 Opus(단가 5배 차이)</li>



<li>반복 시스템 프롬프트는 <strong>Prompt Caching 필수</strong> (90% 절감)</li>



<li>비실시간 일괄 작업은 <strong>Batch API 50% + 1h 캐시 stack</strong></li>



<li><strong><code>max_tokens</code> 명시</strong> — 출력 단가가 입력의 5배다. 무한 길이 응답 방지</li>



<li><strong>Haiku 에스컬레이션 패턴</strong> — 1차 Haiku 분류 → 어려운 케이스만 Sonnet/Opus 라우팅</li>



<li>호출 전 <strong>Token Counting API(무료)</strong> 로 토큰 사전 측정</li>



<li><code>inference_geo</code> 기본값 유지 — US-only는 1.1x premium, 한국 사용자가 켤 이유 없음</li>
</ol>



<p class="wp-block-paragraph">시스템 프롬프트가 길고 호출이 잦은 워크로드라면 <code>cache_control</code> 한 줄로 두 번째 호출부터 입력 비용이 0.1x까지 떨어진다. Haiku 4.5는 4,096 최소 토큰을 넘겨야 적용되니, 시스템 프롬프트 분량을 캐시 임계까지는 채우는 편이 손익분기상 유리하다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 id="10-자주-묻는-질문-faq" class="wp-block-heading">10. 자주 묻는 질문 (FAQ)</h2>



<h3 id="claude-api는-한-달에-얼마나-나오나요" class="wp-block-heading">Claude API는 한 달에 얼마나 나오나요?</h3>



<p class="wp-block-paragraph">사용 패턴에 따라 다르다. 본문 시뮬레이션 4개 기준으로 코드 어시스턴트 약 $112, 챗봇 약 $189, 문서 요약 배치 약 $17.50, 복잡 추론 $30<del>40이다. 통상 **월 $15</del>$200+ 범위**로 움직인다.</p>



<h3 id="claude-pro-구독자는-api를-무료로-쓸-수-있나요" class="wp-block-heading">Claude Pro 구독자는 API를 무료로 쓸 수 있나요?</h3>



<p class="wp-block-paragraph">아니다. Pro·Max·Team·Enterprise는 chat·Claude Code 한정이며 API 키는 console.anthropic.com에서 별도 가입·별도 결제다. 공식이 *&#8221;subscription doesn&#8217;t include access to the Claude API or Console&#8221;*로 명시한다.</p>



<h3 id="prompt-caching은-어떻게-적용하면-비용이-얼마나-줄어드나요" class="wp-block-heading">Prompt Caching은 어떻게 적용하면 비용이 얼마나 줄어드나요?</h3>



<p class="wp-block-paragraph">Cache write는 5분 TTL 1.25x / 1시간 TTL 2x, <strong>cache hit는 base input의 0.1x(=90% 할인)</strong>. 공식 손익분기점은 5분 TTL 1회, 1시간 TTL 2회 재사용에서 흑자다. 반복 시스템 프롬프트라면 거의 항상 이득.</p>



<h3 id="batch-api-할인은-누구나-받을-수-있나요" class="wp-block-heading">Batch API 할인은 누구나 받을 수 있나요?</h3>



<p class="wp-block-paragraph">가능하다. 모든 active 모델에서 input·output <strong>50% 할인</strong>이 적용된다. 단 24시간 처리 보장(실시간 응답 불가)이고 ZDR 비대상이라 보안 민감 데이터는 주의.</p>



<h3 id="token-counting-api는-무엇이고-왜-써야-하나요" class="wp-block-heading">Token Counting API는 무엇이고 왜 써야 하나요?</h3>



<p class="wp-block-paragraph"><code>POST /v1/messages/count_tokens</code>로 호출 전 입력 토큰 수를 측정하는 <strong>무료</strong> 엔드포인트. 견적 정확도와 예산 초과 방지용. 캐싱은 실제 메시지 생성 호출에서만 동작한다.</p>



<h3 id="한국에서-claude-api를-신용카드로-결제할-수-있나요" class="wp-block-heading">한국에서 Claude API를 신용카드로 결제할 수 있나요?</h3>



<p class="wp-block-paragraph">가능하다. <strong>해외결제 가능한 비자/마스터/AMEX</strong>가 필요하며 USD 청구·환율·해외결제 수수료(보통 1~3%)는 카드사 정산 시점에 반영된다. 카카오페이·네이버페이·PayPal은 현재 미지원이며 콘솔에서 직접 확인을 권장한다.</p>



<h3 id="토큰-100만-개-쓰면-모델별로-얼마인가요" class="wp-block-heading">토큰 100만 개 쓰면 모델별로 얼마인가요?</h3>



<p class="wp-block-paragraph">1M tokens 기준 입력+출력은 <strong>Haiku 4.5 $1+$5, Sonnet 4.6 $3+$15, Opus 4.7 $5+$25</strong>. cache hit는 입력의 0.1x, Batch는 50%를 곱하면 된다. Opus 4.7은 동일 텍스트가 +35%까지 토큰을 더 쓸 수 있어 단가만으로는 함정.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 id="11-다음-걸음" class="wp-block-heading">11. 다음 걸음</h2>



<p class="wp-block-paragraph">다음 걸음 셋 중 하나 — (1) Token Counting API로 자기 콘텐츠 토큰 수를 직접 재 본다, (2) 콘솔 가입 후 $5 무료 크레딧으로 시나리오 A·B 중 가까운 쪽을 1일치만 돌려본다, (3) 반복 시스템 프롬프트가 있다면 <code>cache_control</code> 한 줄부터 붙여본다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 id="관련-글" class="wp-block-heading">관련 글</h2>



<ul class="wp-block-list">
<li><a href="/claude-opus-vs-sonnet-vs-haiku-%ec%b0%a8%ec%9d%b4-%ec%99%84%eb%b2%bd-%ec%a0%95%eb%a6%ac-2026%eb%85%84-4%ec%9b%94-%ec%b5%9c%ec%8b%a0">Claude Opus vs Sonnet vs Haiku 차이 완벽 정리 (2026년 4월 최신)</a> — 어떤 모델을 쓸지 정한 뒤 본 비용 계산으로 와야 의미 있다</li>



<li><a href="/claude-code-%ec%84%a4%ec%b9%98%eb%b6%80%ed%84%b0-%ec%b2%ab-%eb%aa%85%eb%a0%b9%ea%b9%8c%ec%a7%80-2026%eb%85%84-macos%c2%b7wsl-%ea%b8%b0%ec%a4%80-%ec%9e%85%eb%ac%b8">Claude Code 설치부터 첫 명령까지 — 2026년 macOS·WSL 기준 입문</a> — Claude Code도 API 모드에서는 동일 단가 적용</li>



<li><a href="/claude-vs-gpt-vs-gemini-2026-%ed%95%9c%ea%b5%ad-%ec%82%ac%ec%9a%a9%ec%9e%90%ea%b0%80-%ea%b3%a0%eb%a5%b8-%ed%98%84%eb%8b%b5">Claude vs GPT vs Gemini 2026: 한국 사용자가 고른 현답</a> — 외부 3사 API 단가 비교</li>



<li><a href="/claude%eb%a1%9c-%ec%bd%94%eb%94%a9-%ec%83%9d%ec%82%b0%ec%84%b1-2%eb%b0%b0-%eb%82%b4%ea%b0%80-%eb%a7%a4%ec%9d%bc-%ec%93%b0%eb%8a%94-5%ea%b0%80%ec%a7%80-%ed%99%9c%ec%9a%a9-%ed%8c%a8%ed%84%b4-2026">Claude로 코딩 생산성 2배? 매일 쓰는 5가지 활용 패턴</a> — API 비용을 캐싱·배치로 절감하는 실전 워크플로우 5패턴</li>



<li><a href="/cursor-vs-claude-code-%ea%b2%b0%ec%a0%95-%ed%8a%b8%eb%a6%ac-%eb%b0%b1%ec%97%94%eb%93%9c-%ea%b0%9c%eb%b0%9c%ec%9e%90%ea%b0%80-6%ea%b0%9c-%ec%b6%95%ec%9c%bc%eb%a1%9c-%ea%b3%a8%eb%9d%bc%eb%b4%a4">Cursor vs Claude Code 결정 트리: 백엔드 개발자가 6개 축으로 골라봤다 (2026)</a> — Cursor Pro vs Claude Max vs API 종량제 가격 결정 트리</li>



<li><a href="/ollama-m3-pro-30min-guide">Ollama로 M3 Pro 맥북에 로컬 LLM 띄우기 — 30분 실측 가이드</a> — API 단가가 부담되면 같은 토큰을 로컬에서 0원에 돌리는 옵션도 있다. M3 Pro 환경의 현실적 한계까지 함께 확인</li>



<li><a href="/kv-cache-context-window-explained">KV 캐시가 뭐길래 — 긴 컨텍스트가 빠르게 비싸지는 이유</a> — Claude 200K·Gemini 1M 가격 임계점이 왜 그 자리에 있는지 KV 캐시 메모리 구조로 푼 원리 글. prompt caching 단가가 왜 통하는지까지 한국어 직관으로</li>



<li><a href="/chatgpt-plus-claude-pro-gemini-advanced-20dollar">월 $20 AI 구독 비교: ChatGPT Plus·Claude Pro·Gemini Advanced (2026-05)</a> — API 종량제와 정기구독의 분기점. 3사 $20 구독 한 자리 결정 트리</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://jspulsar.dev/claude-api-%eb%b9%84%ec%9a%a9-%ec%99%84%eb%b2%bd-%ea%b0%80%ec%9d%b4%eb%93%9c-2026-%ed%86%a0%ed%81%b0-%eb%8b%a8%ea%b0%80%c2%b7%ec%ba%90%ec%8b%b1%c2%b7%eb%b0%b0%ec%b9%98-%ed%95%a0%ec%9d%b8-%ed%95%9c/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
