Vercel AI SDK์˜ ACP ์ฝ”๋”ฉ ์—์ด์ „ํŠธ ์–ด๋Œ‘ํ„ฐ, ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๊ธฐ

Vercel์˜ @ai-sdk/harness-acp๊ฐ€ ์ฝ”๋”ฉ ์—์ด์ „ํŠธ ๋Ÿฐํƒ€์ž„์„ HarnessAgent์— ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ์‹๋ถ€ํ„ฐ ์ ์šฉ ๋Œ€์ƒ, ์„ค์ • ์ ˆ์ฐจ, ๊ถŒํ•œยท์ƒŒ๋“œ๋ฐ•์Šค ์š”๊ตฌ์‚ฌํ•ญ, ACP version 1์˜ ํ•œ๊ณ„๊นŒ์ง€ ๊ณต์‹ ์˜ˆ์ œ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ์‹ค๋ฌด ๊ด€์ ์—์„œ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๊ฒŒ์‹œ์ผ

์ž‘์„ฑ์ž
Vercel AI SDK์˜ ACP ์ฝ”๋”ฉ ์—์ด์ „ํŠธ ์–ด๋Œ‘ํ„ฐ, ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๊ธฐ

2026๋…„ 8์›” 13์ผ, Vercel์€ @ai-sdk/harness-acp๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. Agent Client Protocol ํŒจํ‚ค์ง€๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ•˜๋„ค์Šค๋ผ๋ฉด AI SDK์˜ HarnessAgent์—์„œ ์ฝ”๋”ฉ ์—์ด์ „ํŠธ ํ•˜๋„ค์Šค๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ฃผ๋Š” ๋‹จ์ผ ํ”„๋กœํ† ์ฝœ ๊ณ„์ธต ์–ด๋Œ‘ํ„ฐ์ž…๋‹ˆ๋‹ค. ํ•ต์‹ฌ ์ด์ ์€ ์—์ด์ „ํŠธ๊ฐ€ ๋” ๋˜‘๋˜‘ํ•ด์ง„๋‹ค๋Š” ๋ฐ ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ๋Ÿฐํƒ€์ž„์„ ํ•˜๋‚˜์˜ ํ†ตํ•ฉ ์ง€์ ์—์„œ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

Vercel์ด ์‹ค์ œ๋กœ ๋‚ด๋†“์€ ๊ฒƒ

๋จผ์ € ํ”ํžˆ ๋’ค์„ž์ด๋Š” ๊ณ„์ธต๋ถ€ํ„ฐ ๊ตฌ๋ถ„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ชจ๋ธ์€ ๋‹ค์Œ ์‘๋‹ต์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋„ค์Šค๋Š” ์„ธ์…˜, ํˆด, ์Šน์ธ, ์ƒŒ๋“œ๋ฐ•์Šค, ์ง€์‹œ์‚ฌํ•ญ, ์ปจํ…์ŠคํŠธ ์••์ถ•, ์ž‘์—… ๋ฃจํ”„๋ฅผ ๊ด€๋ฆฌํ•ด ๊ทธ ๋ชจ๋ธ์„ ์‹ค์ œ ์ž‘์—…์ž๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ACP๋Š” Agent Client Protocol์˜ ์•ฝ์ž๋กœ, ํด๋ผ์ด์–ธํŠธ์™€ ํ•˜๋„ค์Šค๊ฐ€ ๊ณตํ†ต๋œ ๋ฐฉ์‹์œผ๋กœ ํ†ต์‹ ํ•˜๊ฒŒ ํ•ด ์ค๋‹ˆ๋‹ค.

Vercel์˜ HarnessAgent๋Š” ์ด๋ฏธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์—ฌ๋Ÿฌ ํ•˜๋„ค์Šค๋ฅผ ํ•˜๋‚˜์˜ API๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋น ์ ธ ์žˆ๋˜ ๊ฒƒ์€ ์—ฐ๊ฒฐ๋ถ€์˜€์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๋ฆด๋ฆฌ์Šค ์ „๊นŒ์ง€ Vercel์€ Claude Code, Codex, Pi, Deep Agents, OpenCode๋ฅผ ๋น„๋กฏํ•œ ๋Ÿฐํƒ€์ž„๋งˆ๋‹ค ๋ณ„๋„์˜ ์–ด๋Œ‘ํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ƒˆ ACP ํ•˜๋„ค์Šค ์–ด๋Œ‘ํ„ฐ๋Š” ํŠน์ • ๋Ÿฐํƒ€์ž„์ด ์•„๋‹ˆ๋ผ ํ”„๋กœํ† ์ฝœ์„ ๊ฐ์Œ‰๋‹ˆ๋‹ค. ํ•˜๋„ค์Šค์—์„œ ACP๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” NPM ํŒจํ‚ค์ง€์™€ ์‹คํ–‰ ํŒŒ์ผ, ์ธ์ฆ ๊ทœ์น™, ์ง€์‹œ์‚ฌํ•ญ ๋งคํ•‘, ๊ถŒํ•œ ๋งคํ•‘์„ createACP์— ๋„˜๊ธฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ฒ”์šฉ ์–ด๋Œ‘ํ„ฐ๊ฐ€ ๋ธŒ๋ฆฌ์ง€, ACP ํด๋ผ์ด์–ธํŠธ, ํˆด ๋ฆด๋ ˆ์ด, ์ด๋ฒคํŠธ, ์Šน์ธ, ์„ธ์…˜ ๋ผ์ดํ”„์‚ฌ์ดํด์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ์กฐ์˜ ํ•ต์‹ฌ์€ ์ด ์—ญํ•  ๋ถ„๋‹ด์ž…๋‹ˆ๋‹ค. ๊ณตํ†ต ๋ธŒ๋ฆฌ์ง€๋Š” Vercel์ด ๋งก๊ณ , ํ•˜๋„ค์Šค๋ณ„๋กœ ๋‹ฌ๋ผ์ง€๋Š” ์„ธ๋ถ€ ์‚ฌํ•ญ์€ ๋Ÿฐํƒ€์ž„ ํ”„๋กœํ•„์ด ๋งก์Šต๋‹ˆ๋‹ค.

์•ฑ์ด HarnessAgent์™€ ACP ๋ธŒ๋ฆฌ์ง€๋ฅผ ๊ฑฐ์ณ ์ƒŒ๋“œ๋ฐ•์Šค ๋‚ด๋ถ€์˜ ACP ๋Ÿฐํƒ€์ž„์— ์—ฐ๊ฒฐ๋˜๊ณ  ํ˜ธ์ŠคํŠธ ํˆด์€ MCP๋ฅผ ํ†ตํ•ด ๋ฆด๋ ˆ์ด๋˜๋Š” ์•„ํ‚คํ…์ฒ˜ ๋ชจ๋ธ
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ํ•˜๋„ค์Šค ๋Ÿฐํƒ€์ž„ ์‚ฌ์ด์—์„œ ACP ์–ด๋Œ‘ํ„ฐ๊ฐ€ ์ž๋ฆฌํ•˜๋Š” ์œ„์น˜

ํ˜„์žฌ ์–ด๋Œ‘ํ„ฐ๊ฐ€ ์ง€์›ํ•˜๋Š” ๋ฒ„์ „์€ ACP version 1, ์˜ค์ง version 1๋ฟ์ž…๋‹ˆ๋‹ค. ํ”„๋กœํ† ์ฝœ ๊ฒฝ๊ณ„์—์„œ์˜ ํ˜ธํ™˜์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค๋Š” ๋œป์ด์ง€, ์—ฐ๊ฒฐํ•œ ๋’ค ๋ชจ๋“  ํ•˜๋„ค์Šค๊ฐ€ ๋˜‘๊ฐ™์ด ๋™์ž‘ํ•œ๋‹ค๋Š” ๋ณด์žฅ์€ ์•„๋‹™๋‹ˆ๋‹ค.

์ง์ ‘ ํ•˜๋„ค์Šค ์–ด๋Œ‘ํ„ฐACP ํ•˜๋„ค์Šค ์–ด๋Œ‘ํ„ฐ
์—ฐ๊ฒฐ ๋ฐฉ์‹ํ•˜๋‚˜์˜ ๋Ÿฐํƒ€์ž„์— ๋งž์ถฐ ์ œ์ž‘ACP ํ”„๋กœํ† ์ฝœ์— ๋งž์ถฐ ์ œ์ž‘
๊ฐ€์žฅ ์ ํ•ฉํ•œ ๊ฒฝ์šฐClaude Code๋‚˜ Codex์ฒ˜๋Ÿผ ์ง€์›๋˜๋Š” ํ•˜๋„ค์ŠคAI SDK ์ง์ ‘ ์–ด๋Œ‘ํ„ฐ๊ฐ€ ์—†๋Š” ACP ํ•˜๋„ค์Šค
๋Ÿฐํƒ€์ž„ ์ถฉ์‹ค๋„๋Ÿฐํƒ€์ž„ ๊ณ ์œ  ๋™์ž‘์„ ๋” ์„ธ๋ฐ€ํ•˜๊ฒŒ ๋…ธ์ถœ ๊ฐ€๋ŠฅACP์™€ ํ•ด๋‹น ๋Ÿฐํƒ€์ž„ ๊ตฌํ˜„์ด ๋…ธ์ถœํ•˜๋Š” ๋ฒ”์œ„๋กœ ์ œํ•œ
์ด์‹์„ฑ๋Ÿฐํƒ€์ž„๋งˆ๋‹ค ์ƒˆ ์–ด๋Œ‘ํ„ฐ ์ž‘์—… ํ•„์š”๋ธŒ๋ฆฌ์ง€๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ณ  ๋” ์ž‘์€ ๋Ÿฐํƒ€์ž„ ํ”„๋กœํ•„๋งŒ ์ž‘์„ฑ

Vercel์€ ์„ ํƒ ๊ธฐ์ค€๋„ ๋ถ„๋ช…ํžˆ ๋ฐํ˜”์Šต๋‹ˆ๋‹ค. Claude Code์™€ Codex์—๋Š” ๊ฐ๊ฐ @ai-sdk/harness-claude-code ๋˜๋Š” @ai-sdk/harness-codex๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ˜ธํ™˜ ํŒจํ‚ค์ง€๋Š” ์žˆ์ง€๋งŒ ์ง์ ‘ ์–ด๋Œ‘ํ„ฐ๊ฐ€ ์—†๋Š” ํ•˜๋„ค์Šค์—๋Š” @ai-sdk/harness-acp๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ฝ”๋”ฉ ์—์ด์ „ํŠธ ํ†ตํ•ฉ์—์„œ ์ค‘์š”ํ•œ ์ด์œ 

์ด๋ฒˆ์— ๋‹ฌ๋ผ์ง„ ํ•ต์‹ฌ์€ ํ†ตํ•ฉ ์ž‘์—…๋Ÿ‰์ž…๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž ํˆด ํŒ€์€ ์ด์ œ ๋‹ค๋ฅธ ACP ๋Ÿฐํƒ€์ž„์„ HarnessAgent ๋’ค์— ๋ถ™์ด๊ธฐ ์œ„ํ•ด ์„ธ์…˜ ์ฒ˜๋ฆฌ, ์ด๋ฒคํŠธ ๋ณ€ํ™˜, ์Šน์ธ ์—ฐ๊ฒฐ, ํ˜ธ์ŠคํŠธ ํˆด ๋ฆด๋ ˆ์ด, ๋ผ์ดํ”„์‚ฌ์ดํด ๋™์ž‘์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋Ÿฐํƒ€์ž„ ํ”„๋กœํ•„๋งŒ ์ž‘์„ฑํ•˜๋ฉด ๋‚˜๋จธ์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๊ฐ™์€ ํ•˜๋„ค์Šค API๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ œํ’ˆ ๊ณ„์ธต๋„ ๊ทธ๋Œ€๋กœ ์ง€ํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. HarnessAgent.generate()์™€ HarnessAgent.stream()์€ ๋ชจ๋‘ AI SDK ํ˜ธํ™˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ useChat์„ ์“ฐ๋Š” ํŒ€์ด๋ผ๋ฉด ๋’ค์—์„œ ์ผํ•˜๋Š” ์›Œ์ปค๋ฅผ ๋ฐ”๊พธ๋”๋ผ๋„ ๊ธฐ์กด ์ธํ„ฐํŽ˜์ด์Šค ํ๋ฆ„์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ ๋ฆด๋ฆฌ์Šค๊ฐ€ ํ•˜๋„ค์Šค๋ฅผ ๋” ๋น ๋ฅด๊ฑฐ๋‚˜ ์ €๋ ดํ•˜๊ฑฐ๋‚˜ ๊ฐ•๋ ฅํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ์ฃผ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ACP ๊ตฌํ˜„์„ ์„œ๋กœ ๋˜‘๊ฐ™๊ฒŒ ๋งŒ๋“ค์ง€๋„ ์•Š์œผ๋ฉฐ, ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ๋Œ€์ฒดํ•˜์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ACP ํ•˜๋„ค์Šค์—๋Š” ์—ฌ์ „ํžˆ ์ตœ์†Œ ํ•˜๋‚˜์˜ ํฌํŠธ๋ฅผ ๋…ธ์ถœํ•œ ๋„คํŠธ์›Œํฌ ์ƒŒ๋“œ๋ฐ•์Šค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Claude Code, Codex ๋˜๋Š” ๋‹ค๋ฅธ ์ฝ”๋”ฉ ์—์ด์ „ํŠธ๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ์—๊ฒŒ๋Š” ๋Œ€๋ถ€๋ถ„ ์˜ํ–ฅ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ๊ทธ๋Ÿฐ ์—์ด์ „ํŠธ ์ฃผ๋ณ€์— ์ œํ’ˆ์„ ๋งŒ๋“œ๋Š” ์‚ฌ๋žŒ์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ˆ„๊ฐ€ ๋‹น์žฅ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‚˜

AI SDK ์ง€์›์„ ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ๊ฐœ๋ฐœ์ž ํˆด ์ฐฝ์—…์ž

ํšŒ์‚ฌ๊ฐ€ ์ฝ”๋”ฉ ํ•˜๋„ค์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์ด๋ฏธ ACP ํ˜ธํ™˜ NPM ํŒจํ‚ค์ง€๋ฅผ ๋ฐฐํฌํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด์ œ createACP ํ”„๋กœํ•„ ํ•˜๋‚˜๋ฅผ ์ •์˜ํ•ด AI SDK ์‚ฌ์šฉ์ž์—๊ฒŒ ํ•ด๋‹น ๋Ÿฐํƒ€์ž„์œผ๋กœ ๋“ค์–ด๊ฐ€๋Š” ๊ณต์‹ ์ง€์› ๊ฒฝ๋กœ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค์งˆ์ ์ธ ์ด์ ์€ ๋ฐฐํฌ ๊ฒฝ๋กœ๊ฐ€ ๋„“์–ด์ง„๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€๋ณ„ ์„ค์น˜, ์ธ์ฆ, ์ง€์‹œ์‚ฌํ•ญ, ๊ถŒํ•œ์€ ํ•ด๋‹น ํŒ€์ด ๊ด€๋ฆฌํ•˜๊ณ , ๊ทธ ์ฃผ๋ณ€์˜ ๊ณตํ†ต ์—ฐ๊ฒฐ ์ž‘์—…์€ Vercel ์–ด๋Œ‘ํ„ฐ๊ฐ€ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ๋Ÿฐํƒ€์ž„์„ ์ง€์›ํ•˜๋Š” ํ”Œ๋žซํผ ์—”์ง€๋‹ˆ์–ด

์ค‘๊ฐ„ ๊ทœ๋ชจ์˜ ์—”์ง€๋‹ˆ์–ด๋ง ํ”Œ๋žซํผ์ด๋ผ๋ฉด ์ €์žฅ์†Œ ์ˆ˜์ •์—๋Š” ํ•œ ์—์ด์ „ํŠธ, ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ž‘์—…์—๋Š” ๋‹ค๋ฅธ ์—์ด์ „ํŠธ, ์‚ฌ๋‚ด ์ „์šฉ ์ž๋™ํ™”์—๋Š” ๋‚ด๋ถ€ ํ•˜๋„ค์Šค๋ฅผ ์“ฐ๊ณ  ์‹ถ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”Œ๋žซํผ ์—”์ง€๋‹ˆ์–ด๋Š” ํ•˜๋‚˜์˜ ์„ธ์…˜ ๋ฐ ๊ฒฐ๊ณผ ๊ณ„์•ฝ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์ž‘์—…๋งˆ๋‹ค ๋‹ค๋ฅธ ํ•˜๋„ค์Šค ํ”„๋กœํ•„์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๊ณ  ๋™์ž‘ ์ฐจ์ด๊ฐ€ ์‚ฌ๋ผ์ง€๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ฐจ์ด๋ฅผ ์ด๋ฆ„์ด ๋ถ™์€ ํ”„๋กœํ•„ ์•ˆ์œผ๋กœ ์˜ฎ๊ฒจ, ๋ณ„๋„์˜ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ์Šคํƒ ์—ฌ๋Ÿฌ ๊ฐœ๋ณด๋‹ค ์‰ฝ๊ฒŒ ๊ฒ€ํ† ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

๊ธฐ์กด AI SDK ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์“ฐ๋Š” SaaS ํŒ€

์ œํ’ˆ ํŒ€์€ ์ฑ„ํŒ… ํ™”๋ฉด์„ ๋‹ค์‹œ ๋งŒ๋“ค์ง€ ์•Š๊ณ ๋„ ๊ธฐ์กด AI SDK ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋’ค์— ACP ๊ธฐ๋ฐ˜ ์ฝ”๋”ฉ ์›Œ์ปค๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ์ฒด์ ์ธ ๋ณ€๊ฒฝ์€ ์„œ๋ฒ„์—์„œ ์ด๋ค„์ง‘๋‹ˆ๋‹ค. ํ•˜๋„ค์Šค ํ”„๋กœํ•„์„ ๋งŒ๋“ค๊ณ  ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ์—ฐ๊ฒฐํ•ด ์„ธ์…˜์„ ์‹œ์ž‘ํ•œ ๋’ค, UI๊ฐ€ ์ด๋ฏธ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์œ ํ˜•์˜ ์ŠคํŠธ๋ฆฌ๋ฐ ๋˜๋Š” ์ƒ์„ฑ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ œํ’ˆ์— ํ†ตํ•ฉํ•˜๋Š” ๋‹จ๊ณ„๊ฐ€ ์•„๋‹ˆ๋ผ ์•„์ง ์—์ด์ „ํŠธ ์ž์ฒด๋ฅผ ๊ณ ๋ฅด๋Š” ์ค‘์ด๋ผ๋ฉด ์ฝ”๋”ฉ ์—์ด์ „ํŠธ ๋น„๊ต๋ถ€ํ„ฐ ํ™•์ธํ•˜๋Š” ํŽธ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด ์–ด๋Œ‘ํ„ฐ๋Š” ๊ทธ ์ œํ’ˆ ๊ฒฐ์ •์ด ๋๋‚œ ๋‹ค์Œ์— ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฝ๊ณ„๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๋ณด์•ˆ ์—”์ง€๋‹ˆ์–ด

๋ณด์•ˆ ์—”์ง€๋‹ˆ์–ด์—๊ฒŒ๋Š” ํ†ต์ œ ์ง€์ ์ด ๋ช…ํ™•ํ•ด์ง‘๋‹ˆ๋‹ค. ์ž๊ฒฉ ์ฆ๋ช…์„ ์ค‘๊ฐœํ•˜๋ฉด ์ƒŒ๋“œ๋ฐ•์Šค ์•ˆ์˜ ACP ํ”„๋กœ์„ธ์Šค์—๋Š” ์ž๋ฆฌํ‘œ์‹œ์ž๋งŒ ๋ณด์ด๊ณ , ์‹ค์ œ ๊ฐ’์€ ์™ธ๋ถ€๋กœ ๋‚˜๊ฐ€๋Š” ์š”์ฒญ์— ์ถ”๊ฐ€๋˜๋„๋ก ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ถŒํ•œ ๋ชจ๋“œ๋Š” ๋Ÿฐํƒ€์ž„์ด ์‹ค์ œ๋กœ ์ง€์›ํ•˜๋Š” ๋ชจ๋“œ์— ๋งž์ถฐ ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์„ ํƒ์ง€๋Š” null๋กœ ์ง€์ •ํ•ด ์ ‘๊ทผ ๋ฒ”์œ„๊ฐ€ ์กฐ์šฉํžˆ ๋„“์–ด์ง€๋Š” ๋Œ€์‹  ์‹คํŒจํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ ๊ฒฐ๊ณผ ์•ˆ์ „์ด ์ž๋™์œผ๋กœ ๋ณด์žฅ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์•ˆ์ „ ๊ทœ์น™์„ ์ฝ”๋“œ๋กœ ๋งŒ๋“ค๊ณ  ํ…Œ์ŠคํŠธํ•  ์œ„์น˜๊ฐ€ ๋ถ„๋ช…ํ•ด์ง‘๋‹ˆ๋‹ค.

๋„์ž… ์ ˆ์ฐจ

  1. ๋Ÿฐํƒ€์ž„์ด ์‹ค์ œ๋กœ ACP๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค

    ACP ํ˜ธํ™˜ ๊ตฌํ˜„์„ ์ œ๊ณตํ•˜๋Š” NPM ํŒจํ‚ค์ง€์™€ ์ด๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์•Œ๋ ค์ง„ ์‹คํ–‰ ํŒŒ์ผ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋„ค์Šค๊ฐ€ ACP๋ฅผ ์–ธ๊ธ‰ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€๋ผ๋Š” ๊ฒฝ๊ณ„๋ฅผ ์‹ค์ œ๋กœ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  2. ๋Ÿฐํƒ€์ž„ ํ”„๋กœํ•„์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค

    createACP์— ์•ˆ์ •์ ์ธ harnessId, ํŒจํ‚ค์ง€ ์†Œ์Šค, ์‹คํ–‰ ํŒŒ์ผ, ์ž๊ฒฉ ์ฆ๋ช…์ด ์•„๋‹Œ ํ™˜๊ฒฝ ๊ฐ’, ์ž๊ฒฉ ์ฆ๋ช… ์ค‘๊ฐœ, ์ง€์‹œ์‚ฌํ•ญ ๋งคํ•‘, ๋Ÿฐํƒ€์ž„์ด ์ง€์›ํ•˜๋Š” ๋ชจ๋“  ๊ถŒํ•œ ๋ชจ๋“œ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

  3. ๋„คํŠธ์›Œํฌ ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค

    ์ตœ์†Œ ํ•˜๋‚˜์˜ ํฌํŠธ๋ฅผ ๋…ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์„œ์— ๋‚˜์˜จ Vercel Sandbox ์˜ˆ์ œ๋Š” Node 24์™€ ํฌํŠธ 4000์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋ณ„๋„๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์–ด๋Œ‘ํ„ฐ๊ฐ€ ์ฒซ ๋ฒˆ์งธ ๋…ธ์ถœ ํฌํŠธ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  4. ๋ผ์ดํ”„์‚ฌ์ดํด๊ณผ ๊ฑฐ๋ถ€ ๋™์ž‘์„ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค

    ์„ธ์…˜์„ ๋งŒ๋“ค๊ณ  ์ž‘์—… ํ•˜๋‚˜๋ฅผ ์‹คํ–‰ํ•œ ๋’ค finally์—์„œ ์„ธ์…˜์„ ํ๊ธฐํ•ฉ๋‹ˆ๋‹ค. ํ†ตํ•ฉ ์ค€๋น„๊ฐ€ ๋๋‚ฌ๋‹ค๊ณ  ํŒ๋‹จํ•˜๊ธฐ ์ „์— ๊ฐ ๊ถŒํ•œ ๋ชจ๋“œ์™€ ํฌํŠธ ๋ˆ„๋ฝ, ์ž๊ฒฉ ์ฆ๋ช… ๋ˆ„๋ฝ, ๋ณ€๊ฒฝ๋œ ํ˜ธ์ŠคํŠธ ํˆด ๋ชฉ๋ก์„ ๋ชจ๋‘ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์„œ์— ๋‚˜์˜จ ์ „์ฒด ์˜ˆ์ œ

ํ•˜๋„ค์Šค์™€ ACP ์–ด๋Œ‘ํ„ฐ, Vercel Sandbox ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

Bash
pnpm add @ai-sdk/harness @ai-sdk/harness-acp @ai-sdk/sandbox-vercel

ํ•ต์‹ฌ์„ ๋น ๋œจ๋ฆฌ์ง€ ์•Š์œผ๋ฉด์„œ ๊ฐ€์žฅ ๊ฐ„๊ฒฐํ•œ ๋ฐ๋ชจ๋Š” Vercel์˜ ์ „์ฒด Codex ACP ํ”„๋กœํ•„์ž…๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€ ์„ค์น˜, ์ง์ ‘ ์ž๊ฒฉ ์ฆ๋ช…, AI Gateway ๊ตฌ์„ฑ, ์ง€์‹œ์‚ฌํ•ญ, ๊ถŒํ•œ์„ ํ•œ๊ณณ์—์„œ ๋ณด์—ฌ ์ฃผ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์—ฐ๊ฒฐ ๊ตฌ์กฐ๋ฅผ ๋ณด์—ฌ ์ฃผ๋Š” ์˜ˆ์ œ์ด์ง€, Codex์— ACP๋ฅผ ์„ ํƒํ•˜๋ผ๋Š” ๊ถŒ์žฅ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์‹ค์ œ Codex ํ†ตํ•ฉ์—๋Š” Vercel์ด ์ง์ ‘ Codex ์–ด๋Œ‘ํ„ฐ๋ฅผ ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜ ์ฝ”๋“œ๋Š” ํ˜„์žฌ ๋ฌธ์„œ์— ์‹ค๋ฆฐ ํ”„๋กœํ•„๊ณผ ํ˜ธ์ถœ ํ๋ฆ„์ž…๋‹ˆ๋‹ค. ์ง์ ‘ ์ธ์ฆ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด CODEX_API_KEY ๋˜๋Š” OPENAI_API_KEY๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. AI_GATEWAY_API_KEY๋‚˜ VERCEL_OIDC_TOKEN์„ ์ œ๊ณตํ•˜๋ฉด ๊ธฐ๋ณธ auth: 'auto' ๊ฒฝ๋กœ๊ฐ€ ๋Œ€์‹  AI Gateway๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

TypeScript
import { createACP, type ACPPermissionModeMapping } from '@ai-sdk/harness-acp';
import { createCredentialRequestTransformation } from '@ai-sdk/harness/utils';
import { secureJsonParse } from '@ai-sdk/provider-utils';

export const codexACPHarness = createACP({
  harnessId: 'acp-codex',
  // Define the runtime's built-in tool names and input schemas to expose
  // provider-executed calls as typed HarnessAgent tools.
  // builtinTools: { ... },
  source: {
    type: 'npm-simple',
    packageName: '@agentclientprotocol/codex-acp',
    packageVersion: '1.1.4',
  },
  executable: 'codex-acp',
  forwardEnv: ['CODEX_CONFIG'],
  credentialEnv: ['CODEX_API_KEY', 'OPENAI_API_KEY'],
  credentialBrokering: ({ env }) => {
    const credential = env.CODEX_API_KEY ?? env.OPENAI_API_KEY;
    if (!credential) return [];
    const config =
      env.CODEX_CONFIG == null
        ? undefined
        : (secureJsonParse(env.CODEX_CONFIG) as {
            model_provider?: string;
            model_providers?: Record<string, { base_url?: string }>;
          });
    const baseUrl =
      config?.model_providers?.[config.model_provider ?? '']?.base_url ??
      'https://api.openai.com/v1';
    return [
      createCredentialRequestTransformation({
        baseUrl,
        headers: { Authorization: `Bearer ${credential}` },
      }),
    ];
  },
  instructionMapping: {
    type: 'launch-env-json',
    variable: 'CODEX_CONFIG',
    path: ['developer_instructions'],
  },
  permissionModeMapping: {
    'allow-reads': null,
    'allow-edits': null,
    'allow-all': { type: 'session-mode', modeId: 'agent-full-access' },
  } as const satisfies ACPPermissionModeMapping,
  authentication: {
    methodId: 'api-key',
  },
  providerAuthentication: {
    gateway: {
      env: {
        CODEX_API_KEY: { $source: 'gateway-api-key' },
        CODEX_CONFIG: {
          model: 'openai/gpt-5.6-sol',
          model_provider: 'ai_gateway',
          model_providers: {
            ai_gateway: {
              name: 'AI Gateway',
              base_url: {
                $source: 'gateway-base-url',
                ensureSuffix: '/v1',
              },
              env_key: 'CODEX_API_KEY',
              wire_api: 'responses',
              supports_websockets: false,
              http_headers: {
                'User-Agent': { $source: 'client-app' },
                'x-client-app': { $source: 'client-app' },
              },
            },
          },
          model_supports_reasoning_summaries: true,
          preferred_auth_method: 'apikey',
        },
      },
    },
  },
});

ํ”ํžˆ ๋†“์น˜๋Š” ์ง€์ ์€ ๋Ÿฐํƒ€์ž„ ํ”„๋กœํ•„์„ ํŒจํ‚ค์ง€ ์ด๋ฆ„๊ณผ API ํ‚ค์˜ ์กฐํ•ฉ์œผ๋กœ๋งŒ ๋ณด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ถŒํ•œ ๋งคํ•‘, ์ง€์‹œ์‚ฌํ•ญ ๋งคํ•‘, ์ƒŒ๋“œ๋ฐ•์Šค ํฌํŠธ, ์ž๊ฒฉ ์ฆ๋ช… ๊ฒฝ๊ณ„, ์„ธ์…˜ ์ •๋ฆฌ๊นŒ์ง€ ๋ชจ๋‘ ํ†ตํ•ฉ์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค.

๋ƒ‰์ •ํ•˜๊ฒŒ ๋ด์•ผ ํ•  ์ 

ํ•˜๋„ค์Šค ํŒจํ‚ค์ง€๋Š” ์‹คํ—˜ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. ๋ฆด๋ฆฌ์Šค ์‚ฌ์ด์— ํ˜ธํ™˜์„ฑ์„ ๊นจ๋Š” ๋ณ€๊ฒฝ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ํ”„๋กœ๋•์…˜์—์„œ ์•„๋ฌด ๊ฒ€ํ†  ์—†์ด ๋ฒ„์ „์ด ์˜ฌ๋ผ๊ฐ€๊ฒŒ ๋‘˜ ๋งŒํ•œ ์˜์กด์„ฑ์€ ์•„๋‹™๋‹ˆ๋‹ค.

ํŒจํ‚ค์ง€ ๋ฒ„์ „ ๊ณ ์ • ๋ฐฉ์‹๋„ ๋ช…์‹œ์ ์œผ๋กœ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ˆœ ์†Œ์Šค ๋ฐฉ์‹์—์„œ๋Š” ์˜ˆ์ œ์ฒ˜๋Ÿผ @agentclientprotocol/codex-acp๋ฅผ ์ •ํ™•ํžˆ 1.1.4๋กœ ๊ณ ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„์ „์„ ์ƒ๋žตํ•˜๋ฉด ์ƒŒ๋“œ๋ฐ•์Šค๋Š” ํŒจํ‚ค์ง€์˜ latest ํƒœ๊ทธ๋ฅผ ์„ค์น˜ํ•˜๋ฉฐ, ๊ทธ ๋ฒ„์ „์€ ํ•˜๋„ค์Šค ์‹๋ณ„ ์ •๋ณด์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋นŒ๋“œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด package.json๊ณผ pnpm-lock.yaml์„ ๊ฐ–์ถ˜ ์ž ๊ธˆ ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Vercel์€ pnpm install --frozen-lockfile๋กœ ์ด๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

ACP version 1์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‹ค์งˆ์ ์ธ ๊ณต๋ฐฑ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ชจ๋ธ ๋‹จ๊ณ„์˜ ๊ฒฝ๊ณ„๋‚˜ ๋‹จ๊ณ„๋ณ„ ์‚ฌ์šฉ๋Ÿ‰์„ ๋…ธ์ถœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด๋Œ‘ํ„ฐ๊ฐ€ ๊ฒฝ๊ณ„๋ฅผ ์ถ”๋ก ํ•˜๋ฉฐ, ๋‹จ๊ณ„๋ณ„ ์‚ฌ์šฉ๋Ÿ‰์€ ์•Œ ์ˆ˜ ์—†๋Š” ์ƒํƒœ๋กœ ๋‚จ์Šต๋‹ˆ๋‹ค.
  • ์ด์‹ ๊ฐ€๋Šฅํ•œ ์ˆ˜๋™ ์ปจํ…์ŠคํŠธ ์••์ถ• API๋‚˜ ํ„ด ์ง„ํ–‰ ์ค‘ ๊ฐœ์ž… API๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • ํ•˜๋„ค์Šค์˜ ๋‚ด์žฅ ํˆด์„ ์ด์‹ ๊ฐ€๋Šฅํ•œ ๋ฐฉ์‹์œผ๋กœ ํ•„ํ„ฐ๋งํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ ํˆด ํ•„ํ„ฐ๋ง์€ ๊ณ„์† ์ž‘๋™ํ•˜์ง€๋งŒ, ACP ๋‚ด์žฅ ํˆด์„ ํ•„ํ„ฐ๋งํ•˜๋ ค ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • ํ˜ธ์ŠคํŠธ ํˆด ๋ชฉ๋ก์ด ๋ฐ”๋€Œ๋ฉด ACP ๊ตฌํ˜„์ด MCP ํˆด ๋ชฉ๋ก์„ ์ƒˆ๋กœ ๋ถˆ๋Ÿฌ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ž˜๋œ ๋ชฉ๋ก์„ ์“ฐ๋Š” ๊ตฌํ˜„์€ ๋ช…์‹œ์ ์œผ๋กœ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฆด๋ฆฌ์Šค๋ฅผ ์œ„ํ•ด ํ™•์ธํ•œ Vercel ํŽ˜์ด์ง€์—๋Š” @ai-sdk/harness-acp์˜ ๋ณ„๋„ ๊ฐ€๊ฒฉ์ด ๋ช…์‹œ๋ผ ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋‘๊ณ  โ€œ๋ฌด๋ฃŒ ์—์ด์ „ํŠธโ€๋ผ๊ณ  ํ•ด์„ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ด ์•„ํ‚คํ…์ฒ˜์—๋Š” ์—ฌ์ „ํžˆ ๋ชจ๋ธ ์ธ์ฆ ๊ฒฝ๋กœ์™€ ํ•„์ˆ˜ ๋„คํŠธ์›Œํฌ ์ƒŒ๋“œ๋ฐ•์Šค๊ฐ€ ํฌํ•จ๋˜๋ฏ€๋กœ, ๊ธฐ์กด ๋Ÿฐํƒ€์ž„ ๋น„์šฉ๊ณผ ํ†ต์ œ ๋ฐฉ์‹์€ ๊ทธ๋Œ€๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋” ๊ทผ๋ณธ์ ์ธ ํ•œ๊ณ„๋Š” ์ถฉ์‹ค๋„์ž…๋‹ˆ๋‹ค. ACP๋Š” ๊ณตํ†ต ์—ฐ๊ฒฐ ๋ฐฉ์‹์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ์ง์ ‘ ์–ด๋Œ‘ํ„ฐ๋Š” ํ•˜๋„ค์Šค ๊ณ ์œ  ๋™์ž‘์„ ๋” ์„ธ๋ฐ€ํ•˜๊ฒŒ ๋…ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ‘œ์ค€ํ™”๋Š” ํ†ตํ•ฉ ์ž‘์—…์„ ์ค„์—ฌ ์ค„ ๋ฟ, ๊ทธ ์•„๋ž˜์˜ ๋Ÿฐํƒ€์ž„๊นŒ์ง€ ์—†์•  ์ฃผ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ ๋ฌด์—‡์„ ํ•ด์•ผ ํ•˜๋‚˜

ํŒ๋‹จ ๊ธฐ์ค€์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

์ง์ ‘ AI SDK ์–ด๋Œ‘ํ„ฐ๊ฐ€ ์—†๋Š” ACP ํ˜ธํ™˜ ํ•˜๋„ค์Šค๋ฅผ ์šด์˜ํ•˜๊ฑฐ๋‚˜, ํ”Œ๋žซํผ ํŒ€์ด ์—ฌ๋Ÿฌ ACP ๋Ÿฐํƒ€์ž„์„ ํ•˜๋‚˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์•ฝ ๋’ค์— ๋ฐฐ์น˜ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์ด๋ฒˆ ์ฃผ์— ์›€์ง์ผ ๋งŒํ•ฉ๋‹ˆ๋‹ค. ์–‡์€ ํ”„๋กœํ•„์„ ๋งŒ๋“ค๊ณ  ํŒจํ‚ค์ง€ ๋ฒ„์ „์„ ๊ณ ์ •ํ•œ ๋’ค, ๋ชจ๋“  ๊ถŒํ•œ๊ณผ ์‹คํŒจ ๊ฒฝ๋กœ๋ฅผ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ๋•์…˜ ์ •์ฑ…์ƒ ์‹คํ—˜ ๋‹จ๊ณ„ ํŒจํ‚ค์ง€๋ฅผ ๋ฐ›์•„๋“ค์ผ ์ˆ˜ ์—†๊ฑฐ๋‚˜, ์ •ํ™•ํ•œ ๋‹จ๊ณ„๋ณ„ ์‚ฌ์šฉ๋Ÿ‰์ด ํ•„์š”ํ•˜๊ฑฐ๋‚˜, ์ˆ˜๋™ ์ปจํ…์ŠคํŠธ ์••์ถ•๊ณผ ํ„ด ์ง„ํ–‰ ์ค‘ ๊ฐœ์ž…์ด ํ•ต์‹ฌ ํ†ต์ œ ์ˆ˜๋‹จ์ด๋ผ๋ฉด ๊ธฐ๋‹ค๋ฆฌ๋Š” ํŽธ์ด ๋‚ซ์Šต๋‹ˆ๋‹ค.

Claude Code ๋˜๋Š” Codex๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ง์ ‘ ์–ด๋Œ‘ํ„ฐ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. Vercel์ด ๊ถŒ์žฅํ•˜๋Š” ๊ฒฝ๋กœ๊ฐ€ ์ด๋ฏธ ๋งˆ๋ จ๋ผ ์žˆ์œผ๋ฉฐ, ํ”„๋กœํ† ์ฝœ ๊ฒฝ๊ณ„๋ฅผ ๊ฑฐ์น˜๋ฉด์„œ ์ค„์–ด๋“œ๋Š” ๋™์ž‘๋„ ๋” ์ ์Šต๋‹ˆ๋‹ค.

๋ชจ๋ธ์„ ์ง์ ‘ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜, ์ตœ์ข… ์‚ฌ์šฉ์ž๋กœ์„œ ์ฝ”๋”ฉ ์—์ด์ „ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ์ž์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•ˆ์—์„œ ํ•˜๋„ค์Šค๋ฅผ ์‹คํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋ฉด ์ด๋ฒˆ ๋ณ€ํ™”์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํŒ€์˜ ์ œํ’ˆ ๊ฐœ๋ฐœ ๋ฐฉ์‹์„ ๋ฐ”๊พธ๋Š” ํˆด์„ ์‰ฌ์šด ๋ง๋กœ ๊ณ„์† ์‚ดํŽด๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด ๋‰ด์Šค๋ ˆํ„ฐ์— ๊ฐ€์ž…ํ•˜์„ธ์š”.

๊ฒŒ์‹œ์ผ
์นดํ…Œ๊ณ ๋ฆฌ
Explained
AI ์—์ด์ „ํŠธ ๋น„์šฉ, ๊ตฌ๋…๋ถ€ํ„ฐ ์ง์ ‘ ๊ฐœ๋ฐœ๊นŒ์ง€ ์›” ์˜ˆ์‚ฐ ๋น„๊ต

AI ์—์ด์ „ํŠธ ๋น„์šฉ, ๊ตฌ๋…๋ถ€ํ„ฐ ์ง์ ‘ ๊ฐœ๋ฐœ๊นŒ์ง€ ์›” ์˜ˆ์‚ฐ ๋น„๊ต

AI ์—์ด์ „ํŠธ ๋น„์šฉ์„ ๊ตฌ๋…ํ˜• ์„œ๋น„์Šค, ๋…ธ์ฝ”๋“œ ๋นŒ๋”, ์ง์ ‘ ๊ตฌ์ถ•ํ•œ API๋กœ ๋‚˜๋ˆ  ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ์›” 1,000๊ฑด์˜ ๊ณ ๊ฐ ์ง€์› ์ด๋ฉ”์ผ์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐ ๋ฐฉ์‹์˜ ์˜ˆ์‚ฐ์„ ๊ณ„์‚ฐํ•˜๊ณ , ํ† ํฐ๊ณผ ํˆด ํ˜ธ์ถœ, ์—ฐ๊ฐ„ ๊ฒฐ์ œ์˜ ์ฒซ ์ฒญ๊ตฌ์•ก, ์‚ฌ๋žŒ์˜ ๊ฒ€ํ†  ์‹œ๊ฐ„๊นŒ์ง€ ์‹ค์ œ ์šด์˜์— ๋“œ๋Š” ๋น„์šฉ์„ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค.2026๋…„ 10์›” 7์ผExplained
Grok Voice Transcribe 2.0 ์ „ํ™˜: ์Œ์„ฑ ํ…์ŠคํŠธ ๋ณ€ํ™˜ ๋น„์šฉ๊ณผ ๊ธฐ๋ณธ ๋ชจ๋ธ ์ ๊ฒ€๋ฒ•

Grok Voice Transcribe 2.0 ์ „ํ™˜: ์Œ์„ฑ ํ…์ŠคํŠธ ๋ณ€ํ™˜ ๋น„์šฉ๊ณผ ๊ธฐ๋ณธ ๋ชจ๋ธ ์ ๊ฒ€๋ฒ•

Grok Voice Transcribe 2.0์€ ๋ฐฐ์น˜ ์‹œ๊ฐ„๋‹น $0.10, ์ŠคํŠธ๋ฆฌ๋ฐ ์‹œ๊ฐ„๋‹น $0.20์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋ชจ๋ธ ๋ณ€๊ฒฝ์€ ๊ฐ™์€ API ํ˜ธ์ถœ์˜ ์Œ์„ฑ ํ…์ŠคํŠธ ๋ณ€ํ™˜ ๊ฒฐ๊ณผ์™€ ํ›„์† ์—…๋ฌด๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋ธ ๊ณ ์ •๊ณผ ์‹ค์ œ ์˜ค๋””์˜ค ๊ฒ€์ฆ ์ ˆ์ฐจ๋ฅผ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.2026๋…„ 9์›” 20์ผExplained
Cloudflare Browser Run ์‹คํŒจ, HAR ํŒŒ์ผ๋กœ ์žฌ์‹คํ–‰ ์ „์— ์ง„๋‹จํ•˜๊ธฐ

Cloudflare Browser Run ์‹คํŒจ, HAR ํŒŒ์ผ๋กœ ์žฌ์‹คํ–‰ ์ „์— ์ง„๋‹จํ•˜๊ธฐ

Cloudflare Browser Run์˜ ์ƒˆ Inspect ํŒจ๋„์—์„œ HAR ํŒŒ์ผ, ์ฝ˜์†” ๋กœ๊ทธ, ๋„คํŠธ์›Œํฌ ์š”์ฒญ, ์ตœ์ข… DOM์„ ํ™•์ธํ•ด ์‹คํŒจ ์›์ธ์„ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ก์„ ์–ธ์ œ ์ผœ์•ผ ํ•˜๋Š”์ง€, ์žฌ์‹คํ–‰ ์ „์— ๋ฌด์—‡์„ ์ ๊ฒ€ํ•ด์•ผ ํ•˜๋Š”์ง€, ๋น„์šฉ๊ณผ ๊ธฐ๋ก์˜ ํ•œ๊ณ„๊นŒ์ง€ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.2026๋…„ 9์›” 19์ผExplained
v0์—์„œ ์‚ฌ๋‚ด ๋””์ž์ธ ์‹œ์Šคํ…œ์„ ๊ทธ๋Œ€๋กœ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๋ฒ•

v0์—์„œ ์‚ฌ๋‚ด ๋””์ž์ธ ์‹œ์Šคํ…œ์„ ๊ทธ๋Œ€๋กœ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๋ฒ•

๋””์ž์ธ ์‹œ์Šคํ…œ์˜ ๋น„๊ณต๊ฐœ npm ํŒจํ‚ค์ง€๋ฅผ Vercel v0์— ์•ˆ์ „ํ•˜๊ฒŒ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. NPM_TOKEN๊ณผ NPM_RC์˜ ์ฐจ์ด, ์ตœ์†Œ ๊ถŒํ•œ ์„ค์ •, ์š”๊ธˆ, ํ•œ๊ณ„, ํ”„๋กœํ† ํƒ€์ž…์„ ์‹ค์ œ ์ €์žฅ์†Œ๋กœ ๋„˜๊ธธ ๋•Œ ํ™•์ธํ•  ํ•ญ๋ชฉ๊นŒ์ง€ ์‹ค๋ฌด ๊ธฐ์ค€์œผ๋กœ ํ•จ๊ป˜ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค.2026๋…„ 9์›” 19์ผExplained
Claude Code ๋น„์šฉ, ์ž๋™ ๋ชจ๋“œ ๋ถ„๋ฅ˜๊ธฐ ๊ณผ๊ธˆ์ด ์‚ฌ๋ผ์ง€๋Š” ์กฐ๊ฑด

Claude Code ๋น„์šฉ, ์ž๋™ ๋ชจ๋“œ ๋ถ„๋ฅ˜๊ธฐ ๊ณผ๊ธˆ์ด ์‚ฌ๋ผ์ง€๋Š” ์กฐ๊ฑด

Claude Code 2.1.278์€ ์„œ๋ฒ„๊ฐ€ ์ž๋™ ๋ชจ๋“œ ๊ฒ€์‚ฌ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ๋ณ„๋„ ๋ถ„๋ฅ˜๊ธฐ ์š”์ฒญ ๋น„์šฉ์„ ์—†์•ฑ๋‹ˆ๋‹ค. APIยทEnterpriseยท๊ฒŒ์ดํŠธ์›จ์ด ํ™˜๊ฒฝ์—์„œ /status๋กœ ์‹ค์ œ ๊ณผ๊ธˆ ๊ฒฝ๋กœ๋ฅผ ํ™•์ธํ•˜๊ณ , ๋น„์šฉ ์˜ˆ์ธก ์ „์— ์ ๊ฒ€ํ•ด์•ผ ํ•  ํ˜ธํ™˜ ์กฐ๊ฑด๊ณผ ํด๋ฐฑ ์‹ ํ˜ธ๋ฅผ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.2026๋…„ 9์›” 19์ผExplained
Vercel ๋ฐฐํฌ ํ•œ ๋ฒˆ์—๋งŒ Turbo๋ฅผ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๋น„์šฉ

Vercel ๋ฐฐํฌ ํ•œ ๋ฒˆ์—๋งŒ Turbo๋ฅผ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๋น„์šฉ

Vercel ๋ฐฐํฌ๋งˆ๋‹ค ํ”„๋กœ์ ํŠธ์˜ ๋นŒ๋“œ ๋จธ์‹  ์„ค์ •์„ ๋ฐ”๊ฟ€ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. Pro์™€ Enterprise์—์„œ ๊ธด๊ธ‰ํ•œ ๋ฐฐํฌ ํ•œ ๋ฒˆ์—๋งŒ Turbo๋ฅผ ์ ์šฉํ•˜๋Š” 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•๊ณผ ๋ถ„๋‹น ๋น„์šฉ์„ ์‚ดํŽด๋ณด๊ณ , Basic๊ณผ ๋น„๊ตํ•ด ์‹ค์ œ๋กœ ์•„๋‚€ ์‹œ๊ฐ„๊ณผ ์ถ”๊ฐ€ ๋น„์šฉ์„ ๊ฒ€์ฆํ•˜๋Š” ์ ˆ์ฐจ๊นŒ์ง€ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.2026๋…„ 9์›” 18์ผExplained
์›Œ๋“œ AI ์‹ค์ „ ๊ฐ€์ด๋“œ: ChatGPT๋กœ Word ๋ฌธ์„œ ์ž‘์„ฑ๋ถ€ํ„ฐ ์ˆ˜์ •๊นŒ์ง€

์›Œ๋“œ AI ์‹ค์ „ ๊ฐ€์ด๋“œ: ChatGPT๋กœ Word ๋ฌธ์„œ ์ž‘์„ฑ๋ถ€ํ„ฐ ์ˆ˜์ •๊นŒ์ง€

Word ์•ˆ์—์„œ ChatGPT๋กœ ์ดˆ์•ˆ์„ ๋งŒ๋“ค๊ณ  ์—ด๋ฆฐ ๋ฌธ์„œ๋ฅผ ์š”์•ฝยท์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์• ๋“œ์ธ ์„ค์น˜ ์กฐ๊ฑด, ๊ณต์œ  ์‚ฌ์šฉ๋Ÿ‰๊ณผ ํ† ํฐ ์š”์œจ, ๋ฐ์ดํ„ฐ ๊ฒฝ๊ณ„, ๊ฒ€ํ†  ์ ˆ์ฐจ๋ฅผ ํ™•์ธํ•˜๊ณ  ์•ฑ ์‚ฌ์ด ๋ณต์‚ฌยท๋ถ™์—ฌ๋„ฃ๊ธฐ๋ฅผ ์ค„์ด๋Š” ์›Œ๋“œ AI ์—…๋ฌด ํ๋ฆ„์„ ์•ˆ์ „ํ•˜๊ฒŒ ์‹œ์ž‘ํ•ด ๋ณด์„ธ์š”.2026๋…„ 9์›” 18์ผExplained
AI ์—์ด์ „ํŠธ ์šด์˜์ž๋ฅผ ์œ„ํ•œ Google Antigravity ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฐ€์ด๋“œ

AI ์—์ด์ „ํŠธ ์šด์˜์ž๋ฅผ ์œ„ํ•œ Google Antigravity ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฐ€์ด๋“œ

Google Antigravity์˜ 5์›” ์—์ด์ „ํŠธ๊ฐ€ 2026๋…„ 10์›” 5์ผ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. AI ์—์ด์ „ํŠธ ์ž‘์—…์˜ ์ถœ๋ ฅ ์ „์šฉยท๋กœ์ปฌ ํˆด ๊ฒฝ๋กœ๋ณ„ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฒ”์œ„์™€ ์ƒˆ ํŒŒ์ผ ํˆด ๊ณ„์•ฝ, ์•ˆ์ „ํ•œ ์–ด๋Œ‘ํ„ฐ ํ…Œ์ŠคํŠธ, ์˜ˆ์•ฝ ์ž‘์—… ์ ๊ฒ€ ์ˆœ์„œ๋ฅผ ์‹ค๋ฌด ๊ธฐ์ค€์œผ๋กœ ํ•œ๋ˆˆ์— ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.2026๋…„ 9์›” 18์ผExplained
๋‰ด์Šค๋ ˆํ„ฐ

๋งค์ฃผ ์ผ์š”์ผ, ํ•œ ํ†ต์˜ ํŽธ์ง€.๋œจ๊ฑฐ์šด ์˜๊ฒฌ์ด ์•„๋‹Œ, ๋Œ์•„๊ฐ€๋Š” ์‹œ์Šคํ…œ.

์ฃผ๊ฐ„ ๋ฐœํ–‰. ์ŠคํŒธ ์—†์Œ. ์–ธ์ œ๋“  ํ•ด์ง€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.