๐Ÿฆž TypeScript๋ฅผ ๋ชจ๋ฅด๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ OpenClaw์— ๊ธฐ์—ฌํ•œ ์ด์•ผ๊ธฐ

BrokenFinger98ยท2026๋…„ 4์›” 7์ผ

OpenSource

๋ชฉ๋ก ๋ณด๊ธฐ
1/1
post-thumbnail

์ด๋ฏธ 5๊ฐœ์˜ Issue๊ฐ€ ๋“ฑ๋ก๋˜์–ด ์žˆ์—ˆ์ง€๋งŒ ์•„๋ฌด๋„ ํ•ด๊ฒฐํ•˜์ง€ ์•Š์•˜๋˜ ๋ฌธ์ œ. TypeScript๋ฅผ ๋ชจ๋ฅด์ง€๋งŒ Claude Code์™€ ํ•จ๊ป˜ ํ•ด๊ฒฐํ•˜๊ณ , ํ”„๋กœ์ ํŠธ ์ฐฝ์‹œ์ž๊ฐ€ ์ง์ ‘ ๋จธ์ง€ํ•ด์ค€ ๊ฒฝํ—˜์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿค” ์‹œ์ž‘: "์•„๋ฌด๋„ ์•ˆ ๊ณ ์น˜๋ฉด ๋‚ด๊ฐ€ ํ•ด๋ณผ๊นŒ?"

OpenClaw๋Š” GitHub 17k+ Stars์˜ ์˜คํ”ˆ์†Œ์Šค AI ์ฝ”๋”ฉ ์–ด์‹œ์Šคํ„ดํŠธ์ž…๋‹ˆ๋‹ค. ์ €๋Š” ์ด ๋„๊ตฌ๋ฅผ ๋กœ์ปฌ LLM(Ollama)๊ณผ ์—ฐ๋™ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

Ollama ๋ชจ๋ธ์—์„œ tool calling์ด ์ „ํ˜€ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ ์ฝ๊ธฐ, ๋””๋ ‰ํ† ๋ฆฌ ํƒ์ƒ‰, ๋ช…๋ น์–ด ์‹คํ–‰ ๊ฐ™์€ ๋„๊ตฌ ํ˜ธ์ถœ์ด ๋ชจ๋‘ ๋ฌด์‹œ๋˜๊ฑฐ๋‚˜ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. GitHub Issue๋ฅผ ๊ฒ€์ƒ‰ํ•ด๋ณด๋‹ˆ, ์ด๋ฏธ ๊ด€๋ จ ์ด์Šˆ๊ฐ€ 5๊ฐœ๋‚˜ ๋“ฑ๋ก๋˜์–ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. (#5769, #4028, #8630 ๋“ฑ) ๋งŽ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ์žˆ์—ˆ์ง€๋งŒ, ์‹ค์ œ๋กœ PR์„ ์˜ฌ๋ฆฐ ์‚ฌ๋žŒ์€ ์•„๋ฌด๋„ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

"์ด์ฐธ์— ์ง์ ‘ ํ•ด๊ฒฐํ•ด๋ณด๋ฉด ์–ด๋–จ๊นŒ? ์˜คํ”ˆ์†Œ์Šค ์ปจํŠธ๋ฆฌ๋ทฐํ„ฐ๊ฐ€ ๋˜์–ด๋ณด๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ."

ํ•œ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” TypeScript๋ฅผ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ์ฃผ ์–ธ์–ด๋Š” Java/Kotlin์ด๊ณ , OpenClaw์˜ ์ฝ”๋“œ๋ฒ ์ด์Šค๋Š” ์ „๋ถ€ TypeScript์˜€์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์š”์ฆ˜ ์‹œ๋Œ€์—๋Š” AI ์ฝ”๋”ฉ ์–ด์‹œ์Šคํ„ดํŠธ๊ฐ€ ์žˆ์ง€ ์•Š์Šต๋‹ˆ๊นŒ. Claude Code๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์ถฉ๋ถ„ํžˆ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ๋ผ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ๊ฑด ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„ ํ•œ ์ค„ ์ง์ ‘ ํƒ€์ดํ•‘ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ฌธ์ œ๋ฅผ ์ •ํ™•ํžˆ ์ •์˜ํ•˜๊ณ , ๋ถ„์„ํ•˜๊ณ , ํ•ด๊ฒฐ ๋ฐฉํ–ฅ์„ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ๋ฏฟ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.


๐Ÿค– Claude Code์™€์˜ ํ˜‘์—…

์ด ํ”„๋กœ์ ํŠธ์˜ ์ „ ๊ณผ์ •์—์„œ Claude Code๋ฅผ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ํ•œ ๊ฒƒClaude Code๊ฐ€ ํ•œ ๊ฒƒ
๋ฌธ์ œ ๋ฐœ๊ฒฌ ๋ฐ ์ •์˜OpenClaw ์ฝ”๋“œ๋ฒ ์ด์Šค ๋ถ„์„
ํ•ด๊ฒฐ ๋ฐฉํ–ฅ ์„ค๊ณ„TypeScript ๊ตฌํ˜„ (760+ lines)
PR/Issue ์ž‘์„ฑ ์ „๋žต38๊ฐœ ์œ ๋‹› ํ…Œ์ŠคํŠธ ์ž‘์„ฑ
์ปค๋ฎค๋‹ˆํ‹ฐ ๋Œ“๊ธ€ ๋Œ€์‘ ๋ฐฉํ–ฅ ๊ฒฐ์ •CI ์˜ค๋ฅ˜ ์ˆ˜์ • (lint, format, type check)
๋กœ์ปฌ LLM ์ง์ ‘ ํ…Œ์ŠคํŠธ์ฝ”๋“œ ๋ฆฌ๋ทฐ ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜
์ตœ์ข… ํŒ๋‹จ๊ณผ ์˜์‚ฌ๊ฒฐ์ •์ถฉ๋Œ ํ•ด๊ฒฐ, ๋ฆฌํŒฉํ† ๋ง

TypeScript ๋ฌธ๋ฒ•์„ ๋ชฐ๋ผ๋„, "์ด ํ•จ์ˆ˜๊ฐ€ ์™œ ํ•„์š”ํ•œ์ง€", "์ด ํ…Œ์ŠคํŠธ๊ฐ€ ์–ด๋–ค ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ปค๋ฒ„ํ•˜๋Š”์ง€" ๋Š” ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. Claude Code์—๊ฒŒ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๋ถ„์„ํ•˜๊ฒŒ ํ•˜๊ณ , ๋ฌธ์ œ์˜ ๊ทผ๋ณธ ์›์ธ์„ ํŒŒ์•…ํ•˜๊ฒŒ ํ•˜๊ณ , ์„ค๊ณ„ ๋ฐฉํ–ฅ์„ ์ œ์‹œํ•˜๋ฉด ๊ตฌํ˜„์€ AI๊ฐ€ ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ตญ ๊ฐœ๋ฐœ์ž์˜ ์—ญํ• ์€ ์ฝ”๋“œ๋ฅผ ํƒ€์ดํ•‘ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์˜ฌ๋ฐ”๋ฅธ ์งˆ๋ฌธ์„ ๋˜์ง€๊ณ  ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋„๋Š” ๊ฒƒ์ด๋ผ๋Š” ๊ฑธ ์ฒด๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿงช ์›์ธ ๋ถ„์„: 3๊ฐ€์ง€ ๊ทผ๋ณธ ์›์ธ

๋ฌธ์ œ 1: OpenAI ํ˜ธํ™˜ ์—”๋“œํฌ์ธํŠธ์˜ ํ•œ๊ณ„

OpenClaw๋Š” Ollama ์—ฐ๋™ ์‹œ /v1/chat/completions (OpenAI ํ˜ธํ™˜ shim)์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์—”๋“œํฌ์ธํŠธ๋Š” ์ŠคํŠธ๋ฆฌ๋ฐ ์‹œ tool_calls ํ•„๋“œ๋ฅผ ์ž๋™์œผ๋กœ ๋ˆ„๋ฝ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ 2: Ollama์˜ ๋…ํŠนํ•œ ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐฉ์‹

Ollama๋Š” tool_calls๋ฅผ done:false์ธ ์ค‘๊ฐ„ ์ฒญํฌ์—์„œ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. OpenAI ํ˜•์‹์˜ ํŒŒ์„œ๋Š” ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ 3: Context Window ๊ธฐ๋ณธ๊ฐ’ (4096)

Ollama์˜ ๊ธฐ๋ณธ num_ctx๋Š” 4096 ํ† ํฐ์ž…๋‹ˆ๋‹ค. OpenClaw์˜ ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ + 23๊ฐœ ๋„๊ตฌ ์ •์˜๋ฅผ ํ•ฉ์น˜๋ฉด ์ด๋ฅผ ํ›จ์”ฌ ์ดˆ๊ณผํ•˜์—ฌ, ๋ชจ๋ธ์ด ๋„๊ตฌ ์Šคํ‚ค๋งˆ ์ž์ฒด๋ฅผ ๋ณผ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ› ๏ธ ํ•ด๊ฒฐ: Native /api/chat Provider ๊ตฌํ˜„

OpenAI ํ˜ธํ™˜ ๋ ˆ์ด์–ด๋ฅผ ์šฐํšŒํ•˜๊ณ , Ollama์˜ ๋„ค์ดํ‹ฐ๋ธŒ /api/chat ์—”๋“œํฌ์ธํŠธ์™€ ์ง์ ‘ ํ†ต์‹ ํ•˜๋Š” ์ „์šฉ ํ”„๋กœ๋ฐ”์ด๋”๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ๊ตฌํ˜„ ํฌ์ธํŠธ

๊ตฌํ˜„ ํ•ญ๋ชฉ์„ค๋ช…
NDJSON ์ŠคํŠธ๋ฆฌ๋ฐ ํŒŒ์„œ์ค„ ๋‹จ์œ„๋กœ JSON์„ ํŒŒ์‹ฑํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ์‘๋‹ต ์ฒ˜๋ฆฌ
๋ฉ”์‹œ์ง€ ํฌ๋งท ๋ณ€ํ™˜SDK โ†” Ollama ๋„ค์ดํ‹ฐ๋ธŒ ํ”„๋กœํ† ์ฝœ ๊ฐ„ ์–‘๋ฐฉํ–ฅ ๋ณ€ํ™˜
tool_calls ๋ˆ„์ ์ค‘๊ฐ„ ์ฒญํฌ(done:false)์—์„œ ์ „์†ก๋˜๋Š” tool_calls๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ˆ„์ 
num_ctx ์ž๋™ ์„ค์ •์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ + ๋„๊ตฌ ์ •์˜ ํฌ๊ธฐ์— ๋งž๊ฒŒ context window ์ž๋™ ํ™•์žฅ
์—๋Ÿฌ ํ•ธ๋“ค๋ง์—ฐ๊ฒฐ ์‹คํŒจ, ํŒŒ์‹ฑ ์˜ค๋ฅ˜, ํƒ€์ž„์•„์›ƒ ๋“ฑ ํฌ๊ด„์  ์ฒ˜๋ฆฌ

๋ณ€๊ฒฝ ํŒŒ์ผ ๊ตฌ์กฐ

src/agents/
โ”œโ”€โ”€ ollama-stream.ts           # ๐Ÿ†• ๋„ค์ดํ‹ฐ๋ธŒ Ollama ์ŠคํŠธ๋ฆฌ๋ฐ ํด๋ผ์ด์–ธํŠธ
โ”œโ”€โ”€ ollama-stream.test.ts      # ๐Ÿ†• 13๊ฐœ ์œ ๋‹› ํ…Œ์ŠคํŠธ
โ”œโ”€โ”€ models-config.providers.ts # โœ๏ธ "ollama" API ํƒ€์ž… ๋“ฑ๋ก
โ”œโ”€โ”€ models-config.providers.ollama.test.ts  # ๐Ÿ†• 23๊ฐœ ํ”„๋กœ๋ฐ”์ด๋” ์„ค์ • ํ…Œ์ŠคํŠธ
โ””โ”€โ”€ pi-embedded-runner/run/attempt.ts       # โœ๏ธ ollama์ผ ๋•Œ ๋„ค์ดํ‹ฐ๋ธŒ ์ŠคํŠธ๋ฆผ ์ฃผ์ž…

์ด ๋ณ€๊ฒฝ: +760 / -75 lines, 38๊ฐœ ์œ ๋‹› ํ…Œ์ŠคํŠธ


๐Ÿ“ PR ์ œ์ถœ๊ณผ ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฐ˜์‘

Issue & PR ๋“ฑ๋ก

  • Issue: #11828 โ€” Feature Request
  • PR: #11853 โ€” feat(ollama): add native /api/chat provider for streaming + tool calling

PR์„ ์˜ฌ๋ฆฐ ํ›„, ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์ž๋ฐœ์ ์œผ๋กœ ๋‹ค์–‘ํ•œ ๋ชจ๋ธ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

์ปค๋ฎค๋‹ˆํ‹ฐ ๊ฒ€์ฆ ๊ฒฐ๊ณผ

๋ชจ๋ธํฌ๊ธฐํ…Œ์Šคํ„ฐ๊ฒฐ๊ณผ
qwen3:32b32B@BrokenFinger98โœ… Tool calling ์ž‘๋™
GLM-4.7 Flash-@blastronautโœ… ์ž˜ ์ž‘๋™
devstral-small-2:24b24B@stintelโœ… "It makes Ollama usable"
Qwen3-4B (GGUF)4B@lym000000โœ… tool_name ์ˆ˜์ • ํ›„ ์ž‘๋™
qwen3:4b-instruct4B@gonesurfingโœ… ์ตœ์ดˆ ์†Œํ˜• ๋ชจ๋ธ ์„ฑ๊ณต
llama3.2:3b-instruct3B@gonesurfingโœ… 16k context์—์„œ ์ž‘๋™

์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฐ˜์‘

PR์„ ์˜ฌ๋ฆฌ๊ณ  ํ•˜๋ฃจ ๋งŒ์—, ๋Œ“๊ธ€์ด ์Ÿ์•„์ง€๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

"Thanks for this PR. It makes ollama usable. Tested with devstral-small-2:24b."
โ€” @stintel

"This is excellent work! For the first time, I was able to get a small model to use a tool. ...this is already 100 times further than I've gotten so far."
โ€” @gonesurfing

"been testing this out with GLM-4.7 Flash.. working nicely thank you."
โ€” @blastronaut

"Pulled and tested, confirmed that it works without the additional changes. Thanks!"
โ€” @lym000000 (์Šคํฌ๋ฆฐ์ƒท ์ฒจ๋ถ€)

@gonesurfing์€ ์ดํ›„์—๋„ ์ถ”๊ฐ€ ํ…Œ์ŠคํŠธ๋ฅผ ๊ณ„์† ์ง„ํ–‰ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค:

"ollama/llama3.2:3b-instruct-q4_K_M with 16k context continues to work well with write and exec tools."
"I still think this PR fixes the underlying inability of openclaw to use tools with local ollama models."
โ€” @gonesurfing

@lym000000์€ ํ•œ๋ฐœ ๋” ๋‚˜์•„๊ฐ€ ์ž์‹ ์˜ fork์—์„œ tool_name ํ•„๋“œ ๋ˆ„๋ฝ ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ณ  ์ง์ ‘ ์ˆ˜์ •๊นŒ์ง€ ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ํ”ผ๋“œ๋ฐฑ์„ ์ฆ‰์‹œ ๋ฐ˜์˜ํ•˜์—ฌ ์ปค๋ฐ‹ํ–ˆ๊ณ , ๋‹ค์‹œ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜คํ”ˆ์†Œ์Šค ํ˜‘์—…์˜ ์„ ์ˆœํ™˜์ด ๋ˆˆ์•ž์—์„œ ์ผ์–ด๋‚˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ฒ˜์Œ์—๋Š” ํ˜ผ์ž์„œ ์‹œ์ž‘ํ•œ PR์ด์—ˆ์ง€๋งŒ, 6์ผ ๋™์•ˆ 10๋ช…์˜ ์ฐธ์—ฌ์ž, 24๊ฐœ์˜ ๋Œ“๊ธ€, ๐Ÿ‘ 8๊ฐœ์˜ ๋ฆฌ์•ก์…˜์ด ๋ชจ์˜€์Šต๋‹ˆ๋‹ค.


๐ŸŽข ๋ฐ˜์ „: Issue๊ฐ€ ์ค‘๋ณต์œผ๋กœ ๋‹ซํžˆ๋‹ค

๋ชจ๋“  ๊ฒƒ์ด ์ˆœํƒ„ํ•œ ๊ฒƒ๋งŒ์€ ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค.

2์›” 13์ผ, ํ•œ maintainer๊ฐ€ Issue๋ฅผ ๊ธฐ์กด ์ด์Šˆ(#5769)์˜ ์ค‘๋ณต์œผ๋กœ ๋‹ซ์•˜์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด PR์€ ๋‹จ์ˆœํžˆ ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ•ด๊ฒฐ์ฑ…์„ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” ์ •์ค‘ํ•˜์ง€๋งŒ ๋ช…ํ™•ํ•˜๊ฒŒ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค:

"This PR is not a duplicate report โ€” it is a working solution. The referenced issue #5769 describes the problem; this PR solves it with a native API provider, tested across 6 model families by 5 independent testers."

์ปค๋ฎค๋‹ˆํ‹ฐ๋„ ์ง€์ง€ํ•ด์ฃผ์—ˆ๊ณ (๐Ÿ‘ ๋ฆฌ์•ก์…˜ + ์ค‘๋ณต ํด๋กœ์ฆˆ์— ๐Ÿ‘Ž 2๊ฐœ), ๊ฒฐ๊ตญ ๋‹ค์Œ ๋‚  ํ”„๋กœ์ ํŠธ ์ฐฝ์‹œ์ž์ธ steipete(Peter Steinberger)๊ฐ€ ์ง์ ‘ ๋ฆฌ๋ทฐํ•˜๊ณ  ์Šค์ฟผ์‹œ ๋จธ์ง€ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

"Merged via squash. Thanks @BrokenFinger98!"
โ€” @steipete (ํ”„๋กœ์ ํŠธ ์ฐฝ์‹œ์ž)

๋จธ์ง€ ์งํ›„, ํ…Œ์ŠคํŠธ์— ์ฐธ์—ฌํ•ด์ฃผ์—ˆ๋˜ ๋ถ„๋“ค์˜ ํ™•์ธ ๋Œ“๊ธ€์ด ์ด์–ด์กŒ์Šต๋‹ˆ๋‹ค:

"Thanks for merging this. Confirmed working."
โ€” @gonesurfing

"It works with my setup, yes"
โ€” @ShadowJonathan (์ฝ”๋“œ ๋ฆฌ๋ทฐ์–ด)

๋จธ์ง€ ํ›„์—๋Š” ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž๊ฐ€ ์„ค์ • ๋ฐฉ๋ฒ•์„ ๋ฌผ์–ด๋ณด๊ธฐ๋„ ํ–ˆ๊ณ , ๋‹จ๊ณ„๋ณ„ ๊ฐ€์ด๋“œ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ง€์›์„ ์ด์–ด๊ฐ”์Šต๋‹ˆ๋‹ค.


๐ŸŒŠ ๋จธ์ง€ ์ดํ›„: ๋‹ค์šด์ŠคํŠธ๋ฆผ ์ฑ„ํƒ

๋จธ์ง€ ํ›„ ์ˆ˜ ์‹œ๊ฐ„ ๋‚ด์— ์—ฌ๋Ÿฌ ๋‹ค์šด์ŠคํŠธ๋ฆผ ํ”„๋กœ์ ํŠธ์—์„œ ์ด ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ฑ„ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ๋งํฌ๋‚ด์šฉ
OpenLayerPR #3Ollama ๋„ค์ดํ‹ฐ๋ธŒ API ๋ฐ˜์˜
ZeeIssue #353Ollama ํ†ตํ•ฉ ๊ฐœ์„  ์š”์ฒญ
nickytonline forkPR #1๋ณ€๊ฒฝ์‚ฌํ•ญ ํฌํฌ ๋ฐ˜์˜

๐Ÿ“Š ๊ธฐ์—ฌ ์š”์•ฝ

ํ•ญ๋ชฉ์ˆ˜์น˜
ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจGitHub โญ 17,000+
๋ณ€๊ฒฝ ํŒŒ์ผ5๊ฐœ
์ปค๋ฐ‹13๊ฐœ (squash merged)
์œ ๋‹› ํ…Œ์ŠคํŠธ38๊ฐœ (์ŠคํŠธ๋ฆฌ๋ฐ 15 + ํ”„๋กœ๋ฐ”์ด๋” 23)
๊ฒ€์ฆ ๋ชจ๋ธ ํŒจ๋ฐ€๋ฆฌ6๊ฐœ
๋…๋ฆฝ ํ…Œ์Šคํ„ฐ5๋ช…
PR ์ฐธ์—ฌ์ž9๋ช…
๋‹ค์šด์ŠคํŠธ๋ฆผ ์ฑ„ํƒ3+ ํ”„๋กœ์ ํŠธ
ํ•ด๊ฒฐํ•œ ์ด์Šˆ3๊ฐœ (#11828, #4028, #8630)

๐Ÿ’ก ๋ฐฐ์šด ์ 

1. ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์ด ๋จธ์ง€๋ฅผ ๋งŒ๋“ ๋‹ค

๋Œ์ด์ผœ๋ณด๋ฉด, ์ด PR์ด ๋จธ์ง€๋œ ๊ฐ€์žฅ ํฐ ์ด์œ ๋Š” ์ฝ”๋“œ์˜ ํ’ˆ์งˆ๋งŒ์ด ์•„๋‹ˆ๋ผ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์ด์—ˆ์Šต๋‹ˆ๋‹ค.

PR์„ ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ๋จธ์ง€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ "์ด ๋ณ€๊ฒฝ์ด ์ •๋ง ํ•„์š”ํ•˜๋‹ค" ๋Š” ๊ณต๊ฐ๋Œ€๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ๊ณต์œ ํ•˜๊ณ , ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์ด๋“œ๋ฅผ ์ œ๊ณตํ•˜๊ณ , ํ”ผ๋“œ๋ฐฑ์— ๋น ๋ฅด๊ฒŒ ๋Œ€์‘ํ•œ ๊ฒƒ์ด 9๋ช…์˜ ์ฐธ์—ฌ์ž์™€ ๐Ÿ‘ 8๊ฐœ์˜ ๋ฆฌ์•ก์…˜์œผ๋กœ ์ด์–ด์กŒ๊ณ , ๊ฒฐ๊ตญ ๋จธ์ง€๋ผ๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

2. ๋ฌธ์ œ๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ์ ˆ๋ฐ˜์ด๋‹ค

์ฒ˜์Œ์—๋Š” "Ollama์—์„œ tool calling์ด ์•ˆ ๋œ๋‹ค"๋Š” ๋‹จ์ˆœํ•œ ์ฆ์ƒ์ด์—ˆ์ง€๋งŒ, ํŒŒ๊ณ  ๋“ค์–ด๊ฐ€๋ณด๋‹ˆ 3๊ฐ€์ง€ ๋…๋ฆฝ์ ์ธ ๊ทผ๋ณธ ์›์ธ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ฆ์ƒ์ด ์•„๋‹Œ ์›์ธ์„ ์ฐพ๋Š” ๊ฒƒ, ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์›์ธ์„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

5๊ฐœ์˜ Issue๊ฐ€ ์ด๋ฏธ ์กด์žฌํ–ˆ์ง€๋งŒ ์•„๋ฌด๋„ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•œ ์ด์œ ๋Š”, ๋ฌธ์ œ๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. "์•ˆ ๋œ๋‹ค"๋Š” ๋ณด๊ณ ๋Š” ๋งŽ์•˜์ง€๋งŒ, "์™œ ์•ˆ ๋˜๋Š”์ง€"๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ๋ถ„์„ํ•œ ์‚ฌ๋žŒ์€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

3. ๊ฑฐ์ ˆ๋‹นํ•ด๋„ ํฌ๊ธฐํ•˜์ง€ ์•Š๊ธฐ

Issue๊ฐ€ ์ค‘๋ณต์œผ๋กœ ๋‹ซํ˜”์„ ๋•Œ ์†”์งํžˆ ๋‹นํ™ฉํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‚ฌ์‹ค๊ณผ ๊ทผ๊ฑฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ •์ค‘ํ•˜๊ฒŒ ๋ฐ˜๋ฐ•ํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜คํ”ˆ์†Œ์Šค์—์„œ๋Š” ์ฝ”๋“œ์˜ ํ’ˆ์งˆ๊ณผ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์ง€์ง€๊ฐ€ ๊ฒฐ๊ตญ ๋งํ•ด์ค๋‹ˆ๋‹ค.

4. AI ์‹œ๋Œ€, ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ •๋ง ํ•„์š”ํ•œ ์—ญ๋Ÿ‰

์ด ๊ฒฝํ—˜์„ ํ†ตํ•ด ํ•œ ๊ฐ€์ง€ ํ™•์‹ ์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.

AI Agent ์‹œ๋Œ€์— ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์—ญ๋Ÿ‰์€ ์ฝ”๋”ฉ ๊ทธ ์ž์ฒด๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

์ €๋Š” TypeScript๋ฅผ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ 760์ค„์˜ TypeScript ์ฝ”๋“œ์™€ 38๊ฐœ์˜ ํ…Œ์ŠคํŠธ๋ฅผ ํฌํ•จํ•œ PR์„ 17k stars ํ”„๋กœ์ ํŠธ์— ๋จธ์ง€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค. Claude Code๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์—ˆ์ง€๋งŒ, AI๊ฐ€ ๋Œ€์‹ ํ•  ์ˆ˜ ์—†์—ˆ๋˜ ๊ฒƒ๋“ค์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค:

  • ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ณ  ์ •์˜ํ•˜๋Š” ๋ˆˆ โ€” 5๊ฐœ์˜ Issue๋ฅผ ์ฝ๊ณ , ๊ทผ๋ณธ ์›์ธ 3๊ฐ€์ง€๋ฅผ ๋„์ถœํ•œ ๊ฒƒ
  • ํ•ด๊ฒฐ ๋ฐฉํ–ฅ์„ ์„ค๊ณ„ํ•˜๋Š” ํŒ๋‹จ๋ ฅ โ€” OpenAI ํ˜ธํ™˜ ๋ ˆ์ด์–ด๋ฅผ ์šฐํšŒํ•˜๊ณ  ๋„ค์ดํ‹ฐ๋ธŒ API๋ฅผ ์ง์ ‘ ์“ฐ์ž๋Š” ๊ฒฐ์ •
  • ์‚ฌ๋žŒ๊ณผ ์†Œํ†ตํ•˜๋Š” ๋Šฅ๋ ฅ โ€” ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์„ค๋“ํ•˜๊ณ , ํ…Œ์ŠคํŠธ๋ฅผ ์œ ๋„ํ•˜๊ณ , ๊ฑฐ์ ˆ์— ๋Œ€์‘ํ•œ ๊ฒƒ
  • ๋๊นŒ์ง€ ๋ฐ€๊ณ  ๋‚˜๊ฐ€๋Š” ๋ˆ๊ธฐ โ€” Issue๊ฐ€ ๋‹ซํžˆ๊ณ , CI๊ฐ€ ๊นจ์ง€๊ณ , ์ถฉ๋Œ์ด ๋‚˜๋„ ํฌ๊ธฐํ•˜์ง€ ์•Š์€ ๊ฒƒ

์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋Šฅ๋ ฅ์€ AI๊ฐ€ ์ ์  ๋” ์ž˜ํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ "์ด ๋ฌธ์ œ๊ฐ€ ์™œ ๋ฐœ์ƒํ•˜๋Š”๊ฐ€", "์–ด๋–ค ๋ฐฉํ–ฅ์œผ๋กœ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š”๊ฐ€", "์ด ํ•ด๊ฒฐ์ฑ…์ด ์™œ ํ•„์š”ํ•œ์ง€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์„ ์–ด๋–ป๊ฒŒ ์„ค๋“ํ•  ๊ฒƒ์ธ๊ฐ€" โ€” ์ด๋Ÿฐ ์งˆ๋ฌธ์— ๋‹ตํ•˜๋Š” ๋Šฅ๋ ฅ์€ ์—ฌ์ „ํžˆ ๊ฐœ๋ฐœ์ž์˜ ๋ชซ์ž…๋‹ˆ๋‹ค.

AI๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋„๊ตฌ๋ฅผ ์–ด๋””์— ์“ธ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ฑด ์‚ฌ๋žŒ์ž…๋‹ˆ๋‹ค.


๐Ÿ”— ์ฐธ๊ณ  ๋งํฌ


TypeScript๋ฅผ ๋ชจ๋ฅด๋Š” Java/Kotlin ๊ฐœ๋ฐœ์ž๊ฐ€, Claude Code์™€ ํ•จ๊ป˜ GitHub 17k Stars ์˜คํ”ˆ์†Œ์Šค์— ๊ธฐ์—ฌํ•œ ์ด์•ผ๊ธฐ์˜€์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ๋ฅผ ์ง์ ‘ ํƒ€์ดํ•‘ํ•˜์ง€ ์•Š์•„๋„, ๋ฌธ์ œ๋ฅผ ์ •์˜ํ•˜๊ณ  ํ•ด๊ฒฐํ•˜๋Š” ๊ณผ์ • ์ž์ฒด๊ฐ€ ๊ฐœ๋ฐœ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ์— ๊ด€์‹ฌ ์žˆ๋Š” ๋ถ„๋“ค์—๊ฒŒ ์ด ๊ฒฝํ—˜์ด ๋„์›€์ด ๋˜๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.

profile
๋‚˜๋Š”์•ผ ๊ฐœ๋ฐœ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€