Skip to main content
PromptQuorumPromptQuorum
ํ™ˆ/๊ณ ๊ธ‰ ๋กœ์ปฌ LLM/CI/CD์—์„œ ๋กœ์ปฌ LLM ํ™œ์šฉ: ํด๋ผ์šฐ๋“œ ์—†๋Š” ์ž๋™ ์ฝ”๋“œ ๋ฆฌ๋ทฐ
Coding Assistants

CI/CD์—์„œ ๋กœ์ปฌ LLM ํ™œ์šฉ: ํด๋ผ์šฐ๋“œ ์—†๋Š” ์ž๋™ ์ฝ”๋“œ ๋ฆฌ๋ทฐ

ยท15๋ถ„ ๋ถ„๋Ÿ‰ยทHans Kuepper ์ € ยท PromptQuorum ์ฐฝ๋ฆฝ์ž, ๋ฉ€ํ‹ฐ ๋ชจ๋ธ AI ๋””์ŠคํŒจ์น˜ ๋„๊ตฌ ยท PromptQuorum

์ž์ฒด ํ˜ธ์ŠคํŒ… ๋กœ์ปฌ LLM ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋Š” ์„ธ ๊ฐ€์ง€ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค: Ollama(๋˜๋Š” vLLM)๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ „์šฉ GPU ์„œ๋ฒ„, ์„œ๋ฒ„์˜ HTTP ์—”๋“œํฌ์ธํŠธ์— diff๋ฅผ POSTํ•˜๋Š” ๋งž์ถคํ˜• GitHub Action, ๊ทธ๋ฆฌ๊ณ  ๊ตฌ์กฐํ™”๋œ ํŒ์ •(์Šน์ธ / ๋Œ“๊ธ€ / ์ฐจ๋‹จ)์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฆฌ๋ทฐ ํ”„๋กฌํ”„ํŠธ. Qwen3-Coder 30B๋ฅผ ์‹คํ–‰ํ•˜๋Š” RTX 4090(24 GB)์€ 15~25๋ช…์˜ ๊ฐœ๋ฐœ์ž ํŒ€์„ ํŽธ์•ˆํ•˜๊ฒŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค; 48 GB ์นด๋“œ(L40S ๋˜๋Š” A6000 Ada)๋Š” ์•ฝ 50๋ช…๊นŒ์ง€ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค; 100๋ช… ์ด์ƒ์—๋Š” H100๊ธ‰ ํ•˜๋“œ์›จ์–ด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฝ์ œ์„ฑ์€ GitHub Advanced Security์˜ ์œ ๋ฃŒ ์ขŒ์„ 15~25๊ฐœ ์‚ฌ์ด($19/๊ฐœ๋ฐœ์ž/์›”)์—์„œ ์ž์ฒด ํ˜ธ์ŠคํŒ… ์ชฝ์œผ๋กœ ๊ธฐ์šธ์–ด์ง‘๋‹ˆ๋‹ค โ€” ์ •ํ™•ํ•œ ๊ต์ฐจ์ ์€ ๊ธฐ์กด ์šฉ๋Ÿ‰ ๋Œ€๋น„ ํ•˜๋“œ์›จ์–ด ๊ตฌ๋งค ๋น„์šฉ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ๋ณด์•ˆ ์ด์ ์€ ์‹ค์ œ์ž…๋‹ˆ๋‹ค: ์†Œ์Šค ์ฝ”๋“œ๋Š” ์ ˆ๋Œ€ ๋„คํŠธ์›Œํฌ ๋ฐ–์œผ๋กœ ๋‚˜๊ฐ€์ง€ ์•Š์œผ๋ฉฐ, ๊ฐ์‚ฌ ํ‘œ๋ฉด์€ ํ”„๋กœ์„ธ์Šค ํ•˜๋‚˜์™€ ๋กœ๊ทธ ํŒŒ์ผ ํ•˜๋‚˜์ด๊ณ , ํŒจํ‚ท ์บก์ฒ˜๋กœ ์ œ๋กœ ์ด๊ทธ๋ ˆ์Šค๋ฅผ ์ฆ๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์ฒด ํ˜ธ์ŠคํŒ… ๋กœ์ปฌ LLM์„ ํ™œ์šฉํ•œ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋Š” Qwen3-Coder ๋ชจ๋ธ์„ CI/CD ํŒŒ์ดํ”„๋ผ์ธ ๋’ค์— ๋ฐฐ์น˜ํ•˜์—ฌ, ์ฝ”๋“œ๋ฒ ์ด์Šค๊ฐ€ ๋„คํŠธ์›Œํฌ ๋ฐ–์œผ๋กœ ๋‚˜๊ฐ€์ง€ ์•Š์œผ๋ฉด์„œ๋„ ๋ชจ๋“  pull request๊ฐ€ ๋ฆฌ๋ทฐ ํŒจ์Šค๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์•„ํ‚คํ…์ฒ˜๋Š” ๋‹จ์ˆœํ•ฉ๋‹ˆ๋‹ค โ€” Ollama๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ „์šฉ GPU ์„œ๋ฒ„, ํ•ด๋‹น ์„œ๋ฒ„์˜ HTTP API๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋งž์ถคํ˜• GitHub Action, ๊ทธ๋ฆฌ๊ณ  ์˜คํƒ๋ฅ ์— ๋งž์ถฐ ์กฐ์ •๋œ ๋ฆฌ๋ทฐ ํ”„๋กฌํ”„ํŠธ โ€” ๊ทธ๋ฆฌ๊ณ  ๊ฒฝ์ œ์„ฑ์€ GitHub ์œ ๋ฃŒ ์ขŒ์„ 15~25๊ฐœ ์‚ฌ์ด์˜ ์–ด๋А ์‹œ์ ์—์„œ ์ž์ฒด ํ˜ธ์ŠคํŒ… ์ชฝ์œผ๋กœ ๊ธฐ์šธ์–ด์ง‘๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ๋Š” ์•„ํ‚คํ…์ฒ˜, ์‹ค์ œ๋กœ ๋™์ž‘ํ•˜๋Š” GitHub Actions ์›Œํฌํ”Œ๋กœ, ํŒ€ ๊ทœ๋ชจ๋ณ„ ํ•˜๋“œ์›จ์–ด ์‚ฌ์ด์ง•, ๋ณด์•ˆ ๋ชจ๋ธ, ๊ทธ๋ฆฌ๊ณ  ํŒ€์ด ๋‘ ๋ฒˆ์งธ ๋‹ฌ์— ๋งž๋‹ฅ๋œจ๋ฆฌ๋Š” ์šด์˜์ƒ์˜ ํ•จ์ •๋“ค์„ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์š”์ 

  • ์•„ํ‚คํ…์ฒ˜๋Š” ์„ธ ๊ฐ€์ง€ ๊ตฌ์„ฑ ์š”์†Œ์ž…๋‹ˆ๋‹ค: Ollama(๋˜๋Š” vLLM)๋ฅผ ์‹คํ–‰ํ•˜๋Š” GPU ์„œ๋ฒ„ โ†’ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ CI ๋Ÿฌ๋„ˆ โ†’ PR diff๋ฅผ POSTํ•˜๊ณ  ๊ตฌ์กฐํ™”๋œ ํŒ์ •์„ ํŒŒ์‹ฑํ•˜๋Š” ๋งž์ถคํ˜• action. GitHub Actions, GitLab CI, Buildkite, Jenkins์—์„œ ๋™์ผํ•œ ํ˜•ํƒœ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
  • 2026๋…„ 5์›” ๊ธฐ๋ณธ ์Šคํƒ: Ollama + Qwen3-Coder 30B (Apache 2.0) + ๊ฒฝ๋Ÿ‰ ๋งž์ถคํ˜• GitHub Action. ์ด ์ธํ”„๋ผ: GPU ์„œ๋ฒ„ ํ•œ ๋Œ€, ๋Ÿฌ๋„ˆ ํ•œ ๊ฐœ.
  • ํ•˜๋“œ์›จ์–ด ์‚ฌ์ด์ง•: RTX 4090 (24 GB, ~$2,000) - 15~25๋ช… ๊ฐœ๋ฐœ์ž ์ฒ˜๋ฆฌ; L40S ๋˜๋Š” A6000 Ada (48 GB, ~$7,000~8,000) - 50๋ช…๊นŒ์ง€; H100 (80 GB, $25,000+) ๋˜๋Š” ๋ฉ€ํ‹ฐ GPU - 100๋ช… ์ด์ƒ.
  • ๊ฒฝ์ œ์„ฑ์€ ์ž์ฒด ํ˜ธ์ŠคํŒ… ์˜์—ญ์œผ๋กœ ๊ธฐ์›๋‹ˆ๋‹ค โ€” GitHub Advanced Security ์œ ๋ฃŒ ์ขŒ์„ ์•ฝ 15~25๊ฐœ($19/๊ฐœ๋ฐœ์ž/์›”) ์‹œ์ ์—์„œ. RTX 4090 ๋นŒ๋“œ๋Š” ํ•ด๋‹น ํŒ€ ๊ทœ๋ชจ์—์„œ 5~10๊ฐœ์›” ๋‚ด ํšŒ์ˆ˜๋ฉ๋‹ˆ๋‹ค.
  • ๋ณด์•ˆ ์ด์ ์€ ์‹ค์ œ์ด๋ฉฐ ๋งˆ์ผ€ํŒ… ์šฉ์–ด๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์†Œ์Šค ์ฝ”๋“œ๋Š” ์ ˆ๋Œ€ ๋„คํŠธ์›Œํฌ ๋ฐ–์œผ๋กœ ๋‚˜๊ฐ€์ง€ ์•Š์œผ๋ฉฐ, ์•„์›ƒ๋ฐ”์šด๋“œ ์ด๊ทธ๋ ˆ์Šค๋Š” tcpdump๋กœ ์ œ๋กœ์ž„์„ ์ฆ๋ช…ํ•  ์ˆ˜ ์žˆ๊ณ , ๊ฐ์‚ฌ ํ‘œ๋ฉด ์ „์ฒด๋Š” Ollama ํ”„๋กœ์„ธ์Šค ํ•˜๋‚˜์™€ ๋กœ๊ทธ ํŒŒ์ผ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.
  • ์˜คํƒ์€ ์šด์˜ ๋น„์šฉ์ž…๋‹ˆ๋‹ค. ์ฒซ ๋‹ฌ์— ์กฐ์ • ์‚ฌ์ดํด์„ ๊ณ„ํšํ•˜์‹ญ์‹œ์˜ค: ํ”„๋กฌํ”„ํŠธ ๋ฐ˜๋ณต, ์‹ฌ๊ฐ๋„ ์ž„๊ณ„๊ฐ’, ๊ทธ๋ฆฌ๊ณ  ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ํ”„๋กฌํ”„ํŠธ๊ฐ€ ๊ฐœ์„ ๋  ์ˆ˜ ์žˆ๋„๋ก ๋ฆฌ๋ทฐ์–ด ํ”ผ๋“œ๋ฐฑ ์ˆ˜์ง‘ ๊ฒฝ๋กœ.
  • ์ง€์—ฐ ์‹œ๊ฐ„์€ ํ—ˆ์šฉ ๋ฒ”์œ„ ๋‚ด์ž…๋‹ˆ๋‹ค. 24 GB GPU์—์„œ Qwen3-Coder 30B๋Š” 200์ค„ diff๋ฅผ 30์ดˆ ์ด๋‚ด์— ๋ฆฌ๋ทฐํ•ฉ๋‹ˆ๋‹ค. PR ์ž‘์„ฑ์ž์˜ ๋Œ€๊ธฐ ์‹œ๊ฐ„์€ ๋ฆฌ๋ทฐ๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ CI ์ž‘์—…์ด ์ง€๋ฐฐํ•ฉ๋‹ˆ๋‹ค.
  • ์ธ๊ฐ„ ๋ฆฌ๋ทฐ๋ฅผ ์™„์ „ํžˆ ๋Œ€์ฒดํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๋กœ์ปฌ LLM์€ ์ดˆ๊ธฐ ๋ถ„๋ฅ˜ ๊ฒŒ์ดํŠธ์ž…๋‹ˆ๋‹ค โ€” ๋ช…๋ฐฑํ•œ ๋ฌธ์ œ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ , ์œ„ํ—˜ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ‘œ์‹œํ•˜๋ฉฐ, LLM์ด ์•„์ง ์‹ค์ˆ˜ํ•˜๋Š” ํŒ๋‹จ์„ ์œ„ํ•ด ์ธ๊ฐ„์„ ํ•ด๋ฐฉ์‹œํ‚ต๋‹ˆ๋‹ค.

๋น ๋ฅธ ์‚ฌ์‹ค

  • ๊ถŒ์žฅ ๋ชจ๋ธ: Q4_K_M์˜ Qwen3-Coder 30B (~17 GB VRAM, Apache 2.0).
  • ๊ถŒ์žฅ ๋Ÿฐํƒ€์ž„: ์„ค์ • ๋‹จ์ˆœ์„ฑ์„ ์œ„ํ•œ Ollama; ๋™์ผ GPU์—์„œ ๋” ๋†’์€ ๋™์‹œ์„ฑ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ vLLM.
  • ์ง„์ง€ํ•œ ํŒ€์„ ์œ„ํ•œ ์ตœ์†Œ GPU: RTX 4090 (24 GB). ๋” ์ž‘์€ ์นด๋“œ๋Š” 7B ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉฐ ๋ฆฌ๋ทฐ ํ’ˆ์งˆ์ด ํ˜„์ €ํžˆ ๋‚ฎ์•„์ง‘๋‹ˆ๋‹ค.
  • 24 GB ๋‹จ์ผ GPU์˜ ๋™์‹œ์„ฑ: Qwen3-Coder 30B์—์„œ ํŽธ์•ˆํ•˜๊ฒŒ 1~3๊ฐœ์˜ ๋™์‹œ ๋ฆฌ๋ทฐ; ๊ทธ ์ดํ›„๋ถ€ํ„ฐ๋Š” ๋Œ€๊ธฐ์—ด.
  • ์ง€์—ฐ ์‹œ๊ฐ„ ๋ชฉํ‘œ: 200์ค„ diff์— 30์ดˆ ๋ฏธ๋งŒ. ๊ทธ ์ด์ƒ์ด ๋˜๋ฉด PR ์ž‘์„ฑ์ž ํ–‰๋™์ด ๋ณ€ํ™”ํ•˜๊ณ  ๋ฆฌ๋ทฐ๊ฐ€ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.
  • ๊ฐ์‚ฌ ํƒœ์„ธ: GPU ์„œ๋ฒ„์˜ ์•„์›ƒ๋ฐ”์šด๋“œ ์ œ๋กœ ์ด๊ทธ๋ ˆ์Šค๋Š” ์ฆ๋ช… ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‘œ๋ฉด ์ „์ฒด๋Š” ollama serve + ๋‹จ์ผ ๋กœ๊ทธ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.
  • GitHub Advanced Security ($19/๊ฐœ๋ฐœ์ž/์›”) ๋Œ€๋น„ ๊ต์ฐจ์ : ์œ ๋ฃŒ ์ขŒ์„ 15~25๊ฐœ๊ฐ€ 5~10๊ฐœ์›” ๋‚ด RTX 4090 ๋นŒ๋“œ๋ฅผ ์ปค๋ฒ„ํ•ฉ๋‹ˆ๋‹ค.
  • GitLab CI์™€ ๋™๋“ฑ์„ฑ: ์•„ํ‚คํ…์ฒ˜ ๋™์ผ, ๋™์ผํ•œ HTTP ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” CI ์ž‘์—…์œผ๋กœ GitHub Action๋งŒ ๊ต์ฒด.

CI ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ์œ„ํ•œ ์„ธ ๊ฐ€์ง€ ์‹ค์ œ ์˜ต์…˜: ์•„ํ‚คํ…์ฒ˜ ๋น„๊ต

2026๋…„ 5์›” ๊ธฐ์ค€์œผ๋กœ ์‹ค์งˆ์ ์œผ๋กœ ๋ชจ๋“  PR ๋ฆฌ๋ทฐ ์„ค์ •์„ ๋‹ค๋ฃจ๋Š” ์„ธ ๊ฐ€์ง€ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์ฒด ํ˜ธ์ŠคํŒ… ๋กœ์ปฌ LLM์€ ๊ทธ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค โ€” ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๋„คํŠธ์›Œํฌ ๋ฐ–์œผ๋กœ ๋‚˜๊ฐˆ ์ˆ˜ ์—†๊ฑฐ๋‚˜ ์ขŒ์„ ๊ฒฝ์ œ์„ฑ์ด ๊ณ ์ • ์ธํ”„๋ผ๋ฅผ ์„ ํ˜ธํ•  ๋•Œ์˜ ์˜ฌ๋ฐ”๋ฅธ ์„ ํƒ.

๐Ÿ“ ํ•œ ๋ฌธ์žฅ์œผ๋กœ

์ž์ฒด ํ˜ธ์ŠคํŒ… ๋กœ์ปฌ LLM ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋Š” ์œ ๋ฃŒ ์ขŒ์„ 15~25๊ฐœ์—์„œ GitHub Advanced Security๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ํšŒ์ˆ˜๋˜๋ฉฐ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋„คํŠธ์›Œํฌ ๋‚ด์— ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค โ€” ํ”„๋ผ์ด๋ฒ„์‹œ ์••๋ฐ•์ด๋‚˜ ์ขŒ์„ ์ˆ˜ ์ œ์•ฝ์ด ์žˆ๋Š” ํŒ€์„ ์œ„ํ•œ ์˜ฌ๋ฐ”๋ฅธ ์•„ํ‚คํ…์ฒ˜์ž…๋‹ˆ๋‹ค.

๐Ÿ’ฌ ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด

CI์—์„œ AI ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ์œ„ํ•œ ์„ธ ๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. GitHub Advanced Security๋Š” ๊ฐ€์žฅ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์‰ฝ๊ณ  ๊ทœ๋ชจ์—์„œ๋Š” ๊ฐ€์žฅ ๋น„์Œ‰๋‹ˆ๋‹ค. ํด๋ผ์šฐ๋“œ LLM API(OpenAI, Anthropic)๋Š” ์‹œ์ž‘ํ•˜๊ธฐ์— ์ €๋ ดํ•˜๊ณ  ๊ฐ diff๋ฅผ ์„œ๋“œํŒŒํ‹ฐ์— ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ์ž์ฒด ํ˜ธ์ŠคํŒ… ๋กœ์ปฌ LLM์€ ์„ค์ • ๋น„์šฉ์ด ๊ฐ€์žฅ ๋†’์œผ๋ฉฐ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์™ธ๋ถ€ ๊ฒฝ๊ณ„ ๋‚ด์— ์œ ์ง€ํ•˜๋Š” ์œ ์ผํ•œ ์˜ต์…˜์ž…๋‹ˆ๋‹ค โ€” ๊ทธ๋ฆฌ๊ณ  ์œ ๋ฃŒ ์ขŒ์„ ์•ฝ 15~25๊ฐœ์—์„œ 1๋…„ ๋™์•ˆ ์„ธ ๊ฐ€์ง€ ์ค‘ ๊ฐ€์žฅ ๊ฒฝ์ œ์ ์ด ๋ฉ๋‹ˆ๋‹ค.

์•„ํ‚คํ…์ฒ˜์„ค์ • ๋ณต์žก์„ฑ๋น„์šฉ (๊ฐœ๋ฐœ์ž 10๋ช…)๋น„์šฉ (๊ฐœ๋ฐœ์ž 50๋ช…)PR ์ง€์—ฐ ์‹œ๊ฐ„์ ํ•ฉํ•œ ๊ฒฝ์šฐ
GitHub Advanced Security๋‚ฎ์Œ (ํ† ๊ธ€ ํ•˜๋‚˜)$190/์›”$950/์›”1๋ถ„ ๋ฏธ๋งŒ (๊ด€๋ฆฌํ˜•)ํ”„๋ผ์ด๋ฒ„์‹œ ์ œ์•ฝ ์—†์ด ์œ ๋ฃŒ ์ขŒ์„ ~15๊ฐœ ๋ฏธ๋งŒ์ธ ํŒ€
ํด๋ผ์šฐ๋“œ LLM API (OpenAI / Anthropic)๋‚ฎ์Œ~์ค‘๊ฐ„ (API ํ‚ค + action)~$50~200/์›” (์‚ฌ์šฉ๋Ÿ‰)~$300~1,200/์›” (์‚ฌ์šฉ๋Ÿ‰)์ˆ˜์ดˆ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์„œ๋“œํŒŒํ‹ฐ API์— ์ „์†กํ•˜๋Š” ๊ฒƒ์ด ๊ดœ์ฐฎ์€ ํŒ€
์ „์šฉ GPU์˜ ๋กœ์ปฌ LLM์ค‘๊ฐ„~๋†’์Œ (GPU ์„œ๋ฒ„ + ๋Ÿฌ๋„ˆ + action)~$2,000 ํ•˜๋“œ์›จ์–ด (์ผํšŒ์„ฑ)~$7,000+ ํ•˜๋“œ์›จ์–ด (์ผํšŒ์„ฑ)10~30์ดˆ (๋‹จ์ผ GPU)ํ”„๋ผ์ด๋ฒ„์‹œ ์š”๊ฑด, ์œ ๋ฃŒ ์ขŒ์„ 15๊ฐœ ์ด์ƒ, EU ์ปดํ”Œ๋ผ์ด์–ธ์Šค ํ™˜๊ฒฝ์˜ ํŒ€
๊ณต์œ  ์ธํ”„๋ผ์˜ ๋กœ์ปฌ LLM (๊ธฐ์กด GPU)์ค‘๊ฐ„ (๋Ÿฌ๋„ˆ + action๋งŒ)$0 ํ•œ๊ณ„ ๋น„์šฉ (๊ธฐ์กด ์šฉ๋Ÿ‰)$0 ํ•œ๊ณ„ ๋น„์šฉ (๊ธฐ์กด ์šฉ๋Ÿ‰)๊ฐ€๋ณ€ (๊ฒฝํ•ฉ์— ๋”ฐ๋ผ)ML ๋˜๋Š” ๋ถ„์„์šฉ GPU ์ธํ”„๋ผ๋ฅผ ์ด๋ฏธ ์šด์˜ํ•˜๋Š” ํŒ€

์‹ค์ œ๋กœ ๋™์ž‘ํ•˜๋Š” GitHub Actions ์›Œํฌํ”Œ๋กœ

์ตœ์†Œ ์‹คํ–‰ ๊ฐ€๋Šฅ ์›Œํฌํ”Œ๋กœ๋Š” ์•ฝ 50์ค„์˜ YAML์ž…๋‹ˆ๋‹ค. ์ด ํ…œํ”Œ๋ฆฟ์€ PR์ด ์—ด๋ฆฌ๊ฑฐ๋‚˜ ๋™๊ธฐํ™”๋  ๋•Œ ์‹คํ–‰๋˜์–ด diff๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , Ollama๋ฅผ ํ˜ธ์ถœํ•˜๋ฉฐ, ๋‹ค์‹œ ๋Œ“๊ธ€์„ ๊ฒŒ์‹œํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ์—์„œ๋Š” ์บ์‹ฑ, ์‹ฌ๊ฐ๋„ ์ž„๊ณ„๊ฐ’, ๊ทธ๋ฆฌ๊ณ  "์ฐจ๋‹จ" ํŒ์ • ์‹œ PR์„ ๋ง‰๋Š” ์˜ต์…˜์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

  • ๋Ÿฌ๋„ˆ๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด OLLAMA_HOST์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค โ€” ๋™์ผํ•œ VPC์˜ ์ž์ฒด ํ˜ธ์ŠคํŒ…์ด๊ฑฐ๋‚˜, GPU ์„œ๋ฒ„๊ฐ€ ๋‹ค๋ฅธ ๊ณณ์— ์žˆ๋Š” ๊ฒฝ์šฐ Tailscale / WireGuard๋ฅผ ํ†ตํ•ด.
  • ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ๋Š” action์ด ํŒ์ •์— ๋”ฐ๋ผ ๊น”๋”ํ•˜๊ฒŒ ๋ถ„๊ธฐํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์กฐํ™”๋œ JSON ์‘๋‹ต์„ ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค. format: "json"๊ณผ ํ”„๋กฌํ”„ํŠธ์˜ ์—„๊ฒฉํ•œ ์Šคํ‚ค๋งˆ ์—†์ด๋Š” ์ž์œ  ํ˜•์‹ ์ถœ๋ ฅ ํŒŒ์‹ฑ์— ์šด์˜ ์‹œ๊ฐ„์˜ 30%๋ฅผ ์†Œ๋น„ํ•˜๊ฒŒ ๋˜๊ณ  ์˜ค๋ฅ˜ ๋ชจ๋“œ๊ฐ€ ๋ฏธ๋ฌ˜ํ•ด์ง‘๋‹ˆ๋‹ค.
  • fetch-depth: 0์œผ๋กœ ์ฒดํฌ์•„์›ƒํ•˜๋Š” ๊ฒƒ์€ ๋ฒ ์ด์Šค ๋ธŒ๋žœ์น˜ ๋Œ€๋น„ ์‹ค์ œ diff๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค โ€” ์–•์€ ์ฒดํฌ์•„์›ƒ์€ ์ž˜๋ชป๋œ diff๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • PR๋‹น ์ˆ˜์ •๋œ ์ฝ”๋“œ ์ค„์ด ~50K ์ด์ƒ์ธ ์ €์žฅ์†Œ์˜ ๊ฒฝ์šฐ ์ „์†ก ์ „์— diff๋ฅผ ์ž˜๋ผ๋‚ด๊ฑฐ๋‚˜ ๋ถ„ํ• ํ•˜์‹ญ์‹œ์˜ค. Qwen3-Coder 30B์˜ 256K ์ปจํ…์ŠคํŠธ๋Š” ๋„ˆ๊ทธ๋Ÿฝ์ง€๋งŒ, ์‹ค์ œ ์ž‘์—… ์ปจํ…์ŠคํŠธ๋Š” 64K~128K์— ๋” ๊ฐ€๊น์Šต๋‹ˆ๋‹ค (2026๋…„ ์ตœ๊ณ ์˜ ๋กœ์ปฌ ์ฝ”๋”ฉ ๋ชจ๋ธ ์ฐธ์กฐ).
  • ํ”„๋กฌํ”„ํŠธ ์„ค๊ณ„์˜ ์‹ฌ์ธต ๋‚ด์šฉ โ€” ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ ๋Œ€ ์‚ฌ์šฉ์ž ํ”„๋กฌํ”„ํŠธ, ์˜ˆ์‹œ, ๊ตฌ์กฐํ™”๋œ ์ถœ๋ ฅ โ€” ์€ ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ ๋Œ€ ์‚ฌ์šฉ์ž ํ”„๋กฌํ”„ํŠธ: ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.
yaml
# .github/workflows/local-llm-review.yml
name: Local LLM Code Review

on:
  pull_request:
    types: [opened, synchronize]

jobs:
  review:
    runs-on: self-hosted   # OLLAMA_HOST์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋Ÿฌ๋„ˆ
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Generate diff
        id: diff
        run: |
          git diff origin/${{ github.base_ref }}...HEAD > /tmp/pr.diff
          echo "size=$(wc -c < /tmp/pr.diff)" >> "$GITHUB_OUTPUT"

      - name: Call local LLM for review
        id: review
        env:
          OLLAMA_HOST: ${{ secrets.OLLAMA_HOST }}   # ์˜ˆ: http://gpu-server.internal:11434
        run: |
          DIFF=$(jq -Rs . < /tmp/pr.diff)
          curl -sS "$OLLAMA_HOST/api/chat"             -H 'Content-Type: application/json'             -d "{
              "model": "qwen3-coder:30b",
              "stream": false,
              "format": "json",
              "messages": [
                {"role": "system", "content": "You are a senior code reviewer. Return JSON: {verdict: 'approve'|'comment'|'block', summary: string, comments: [{path, line, severity, message}]}"},
                {"role": "user", "content": $DIFF}
              ]
            }" > /tmp/review.json
          echo "verdict=$(jq -r '.message.content | fromjson | .verdict' < /tmp/review.json)" >> "$GITHUB_OUTPUT"

      - name: Post review comment
        uses: actions/github-script@v7
        with:
          script: |
            const fs = require('fs');
            const review = JSON.parse(JSON.parse(fs.readFileSync('/tmp/review.json')).message.content);
            const body = `### Local LLM Review: \`${review.verdict}\`

${review.summary}`;
            await github.rest.issues.createComment({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: context.issue.number,
              body
            });

      - name: Block on critical verdict
        if: steps.review.outputs.verdict == 'block'
        run: exit 1

๐Ÿ“ŒNote: ์ด ์›Œํฌํ”Œ๋กœ๋Š” ์˜๋„์ ์œผ๋กœ ์ตœ์†Œํ•œ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ์—๋Š” ๋‹ค์Œ์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค: ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ํŒŒ์ผ์˜ ์žฌ๋ฆฌ๋ทฐ๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ธฐ ์œ„ํ•œ ํŒŒ์ผ ํ•ด์‹œ + diff ํ•ด์‹œ ์บ์‹œ, ์‹ฌ๊ฐ๋„ ์ž„๊ณ„๊ฐ’(์˜ค์ง severity >= "high"์—์„œ๋งŒ ์ฐจ๋‹จ), ๋‹จ์ผ ์š”์•ฝ ๋Œ“๊ธ€ ๋Œ€์‹  ์ธ๋ผ์ธ ๋Œ“๊ธ€ ๊ฒŒ์‹œ, ์–ธ์–ด๋ณ„ ํ”„๋กฌํ”„ํŠธ ๋ณ€ํ˜•, ๊ทธ๋ฆฌ๊ณ  ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ํ”„๋กฌํ”„ํŠธ๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•œ ๋ฆฌ๋ทฐ์–ด ํ”ผ๋“œ๋ฐฑ ์ˆ˜์ง‘.

ํŒ€ ๊ทœ๋ชจ๋ณ„ ํ•˜๋“œ์›จ์–ด ์‚ฌ์ด์ง•

RTX 4090 (24 GB)์€ ๊ฐœ๋ฐœ์ž 15~25๋ช…์˜ ํŒ€์„ ํŽธ์•ˆํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ GPU์˜ ๋ณ‘๋ชฉ์€ ๋ฆฌ๋ทฐ๋‹น ์ฒ˜๋ฆฌ๋Ÿ‰์ด ์•„๋‹ˆ๋ผ PR ์ง‘์ค‘ ์‹œ๊ฐ„(์›”์š”์ผ ์•„์นจ, ์Šคํ”„๋ฆฐํŠธ ์ข…๋ฃŒ)์˜ ๋™์‹œ์„ฑ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ์‚ฌ์ด์ง• ๊ทœ์น™์€ Q4_K_M์˜ Qwen3-Coder 30B์™€ 50~500์ค„์˜ ์ผ๋ฐ˜์ ์ธ PR diff๋ฅผ ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

ํŒ€ ๊ทœ๋ชจGPUVRAM๋™์‹œ ๋ฆฌ๋ทฐ์˜ˆ์ƒ ๊ฐ€๊ฒฉ (2026๋…„ 5์›”)
๊ฐœ๋ฐœ์ž ~5๋ช…RTX 4070 / 4070 Ti12~16 GB1๊ฐœ (Qwen3-Coder 7B๋งŒ ๊ฐ€๋Šฅ)$600~900
๊ฐœ๋ฐœ์ž 15~25๋ช…RTX 4090 / 509024~32 GB1~3๊ฐœ (Qwen3-Coder 30B)$2,000~2,500
๊ฐœ๋ฐœ์ž 25~50๋ช…L40S / A6000 Ada48 GB3~6๊ฐœ$7,000~8,500
๊ฐœ๋ฐœ์ž 50~100๋ช…2ร— RTX 4090 ๋˜๋Š” 1ร— H10048 GB / 80 GB6~10๊ฐœ$5,000 (2ร— 4090) ๋˜๋Š” $25,000+ (H100)
๊ฐœ๋ฐœ์ž 100๋ช… ์ด์ƒ๋ฉ€ํ‹ฐ GPU H100 ๋˜๋Š” H200160 GB ์ด์ƒvLLM์œผ๋กœ 10๊ฐœ ์ด์ƒ$50,000 ์ด์ƒ

๐Ÿ’กTip: ๊ฐœ๋ฐœ์ž 50๋ช… ์ž„๊ณ„๊ฐ’์„ ์ดˆ๊ณผํ•˜๋Š” ํŒ€์€ Ollama์—์„œ vLLM์œผ๋กœ ์ „ํ™˜ํ•˜์‹ญ์‹œ์˜ค. Ollama๋Š” ์‚ฌ์šฉ ํŽธ์˜์„ฑ์„ ์šฐ์„ ์‹œํ•˜๊ณ , vLLM์€ ๊ณต์œ  GPU์—์„œ์˜ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ์šฐ์„ ์‹œํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ Qwen3-Coder 30B ๋ชจ๋ธ์ด ์–‘์ชฝ ๋ชจ๋‘์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค โ€” ์ถ”๋ก  ์„œ๋ฒ„๋งŒ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

๋นŒ๋“œ ๋ฐ ๋‹ค๋ฅธ ์›Œํฌ๋กœ๋“œ ๊ฐ„ GPU ๊ณต์œ 

์ฝ”๋“œ ๋ฆฌ๋ทฐ ์ „์šฉ GPU๊ฐ€ ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ์•„ํ‚คํ…์ฒ˜์ด์ง€๋งŒ ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ์•„๋‹™๋‹ˆ๋‹ค. ML ์ถ”๋ก ์ด๋‚˜ ํ•™์Šต์„ ์œ„ํ•œ GPU ์ธํ”„๋ผ๋ฅผ ์ด๋ฏธ ์šด์˜ํ•˜๋Š” ํŒ€์€ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ฒฝํ•ฉ์œผ๋กœ ์ธํ•ด ๋ฆฌ๋ทฐ ์ง€์—ฐ ์‹œ๊ฐ„์ด ๊ธ‰์ฆํ•˜๋Š” ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฆฌ๋ทฐ ์ „์šฉ ์ „์šฉ GPU: ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ๋ชจ๋ธ. ์ง€์—ฐ ์‹œ๊ฐ„์ด ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ณ , ์šฉ๋Ÿ‰ ๊ณ„ํš์ด ์ง๊ด€์ ์ด๋ฉฐ, ์˜ค๋ฅ˜ ๋ชจ๋“œ๊ฐ€ ๊ฒฉ๋ฆฌ๋ฉ๋‹ˆ๋‹ค. GPU ์ธํ”„๋ผ๋ฅผ ์•„์ง ์šด์˜ํ•˜์ง€ ์•Š๋Š” ํŒ€์— ๋Œ€ํ•œ ๊ถŒ์žฅ ์‚ฌํ•ญ.
  • ML ์ถ”๋ก ๊ณผ ๊ณต์œ ํ•˜๋Š” GPU: ์ถ”๋ก  ์›Œํฌ๋กœ๋“œ๊ฐ€ ์•ˆ์ •์ ์ธ ์—”๋ฒจ๋กœํ”„๋ฅผ ๊ฐ€์ง„ ๊ฒฝ์šฐ(์˜ˆ: 4~6 GB์— ๋งž๋Š” ์†Œ๊ทœ๋ชจ ์ž„๋ฒ ๋”ฉ ์„œ๋น„์Šค) ์‹คํ˜„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ๋ทฐ ๋ชจ๋ธ์ด ๋‚˜๋จธ์ง€ VRAM์„ ์ฐจ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด ํŒจํ„ด์—์„œ ์Šค์ผ€์ค„๋ง ์ถฉ๋Œ์€ ๋“œ๋ญ…๋‹ˆ๋‹ค.
  • ML ํ•™์Šต๊ณผ ๊ณต์œ ํ•˜๋Š” GPU: ๊ฐ•๋ ฅํ•˜๊ฒŒ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•™์Šต ์ž‘์—…์€ VRAM์„ ํ•œ๊ณ„๊นŒ์ง€ ๋ฐ€์–ด๋ถ™์—ฌ ๋ฆฌ๋ทฐ ๋ชจ๋ธ์„ ๊ตถ๊ธฐ๊ณ , ๊ฐœ๋ฐœ์ž์˜ ์‹œ์Šคํ…œ ์‹ ๋ขฐ๋ฅผ ์นจ์‹ํ•˜๋Š” 30~120์ดˆ์˜ ๋ฆฌ๋ทฐ ์ง€์—ฐ ์‹œ๊ฐ„์„ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค.
  • ํŽ˜์ด์ง€๋“œ ์–ดํ…์…˜์„ ๊ฐ–์ถ˜ vLLM: ๋†’์€ ๋™์‹œ์„ฑ์œผ๋กœ LLM์„ ์„œ๋น™ํ•˜๊ธฐ ์œ„ํ•ด ํŠน๋ณ„ํžˆ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Ollama ํ•˜์—์„œ 1~3๊ฐœ์˜ ๋™์‹œ ๋ฆฌ๋ทฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋™์ผํ•œ RTX 4090์ด vLLM ํ•˜์—์„œ 4~8๊ฐœ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋” ๋ณต์žกํ•œ ์„ค์ •์ด ํŠธ๋ ˆ์ด๋“œ์˜คํ”„์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž 25๋ช… ์ด์ƒ๋ถ€ํ„ฐ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • H100์˜ ๋ฉ€ํ‹ฐ ํ…Œ๋„ŒํŠธ: ๊ฐœ๋ฐœ์ž 100๋ช… ์ด์ƒ ๊ทœ๋ชจ์—์„œ๋Š” H100์„ MIG ์Šฌ๋ผ์ด์Šค๋กœ ํŒŒํ‹ฐ์…”๋‹ํ•˜๊ฑฐ๋‚˜ ํ…Œ๋„ŒํŠธ๋ณ„ ํ• ๋‹น๋Ÿ‰์œผ๋กœ vLLM์„ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค. ์ด๋Š” ํ”Œ๋žซํผ ์—”์ง€๋‹ˆ์–ด๋ง ์˜์—ญ์ž…๋‹ˆ๋‹ค; ์ฆ‰ํฅ์ ์œผ๋กœ ๊ตฌ์„ฑํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

GitHub Advanced Security ๋Œ€๋น„ ๋น„์šฉ ๋น„๊ต

๊ฒฝ์ œ์„ฑ์€ ์œ ๋ฃŒ ์ขŒ์„ ์•ฝ 15~25๊ฐœ์—์„œ ์ž์ฒด ํ˜ธ์ŠคํŒ… ์ชฝ์œผ๋กœ ๊ธฐ์šธ์–ด์ง‘๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ 1๋…„ ์ƒ๊ฐ ๋น„๊ต์ž…๋‹ˆ๋‹ค; ๊ธฐ๊ฐ„์ด ๊ธธ์ˆ˜๋ก ์ž์ฒด ํ˜ธ์ŠคํŒ…์ด ๋” ์œ ๋ฆฌํ•ด์ง‘๋‹ˆ๋‹ค.

  • GitHub Advanced Security (Code Security): ์ •๊ฐ€ $19/๊ฐœ๋ฐœ์ž/์›” (GitHub ๊ฐ€๊ฒฉ ํŽ˜์ด์ง€์—์„œ ํ™•์ธ; ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ณ ๊ฐ์—๊ฒŒ๋Š” ๋ณผ๋ฅจ ํ• ์ธ์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค).
  • ํด๋ผ์šฐ๋“œ LLM API (์˜ˆ: OpenAI, Anthropic): ์ผ๋ฐ˜์ ์ธ PR ๋ณผ๋ฅจ์—์„œ ํ™œ์„ฑ ๊ฐœ๋ฐœ์ž๋‹น ๋Œ€๋žต $50~200/์›”; ์ฝ”๋“œ๋ฒ ์ด์Šค ํฌ๊ธฐ์™€ ๋ฆฌ๋ทฐ ํ”„๋กฌํ”„ํŠธ ์„ค๊ณ„์— ๋”ฐ๋ผ ํฌ๊ฒŒ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.
  • ์ž์ฒด ํ˜ธ์ŠคํŒ… ๋กœ์ปฌ LLM, RTX 4090 ๋นŒ๋“œ: ํ•˜๋“œ์›จ์–ด ์ผํšŒ์„ฑ ์•ฝ $2,500 (GPU + ๊ธฐ๋ณธ ์„œ๋ฒ„ ์„€์‹œ). ์ „๋ ฅ: ์œ ํœด ์‹œ ~50W, ๋ถ€ํ•˜ ์‹œ ~350W โ€” ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ์œผ๋กœ ์ „๊ธฐ์š”๊ธˆ ์›” ์•ฝ $20~30. ์ขŒ์„ ์ˆ˜์ˆ˜๋ฃŒ ์—†์Œ.
  • ๊ฐœ๋ฐœ์ž 10๋ช… ๊ต์ฐจ์ : GHAS $190/์›” ๋Œ€ ์ž์ฒด ํ˜ธ์ŠคํŒ… ์šด์˜๋น„ $25/์›” + $2,500 ์ž๋ณธ ์ง€์ถœ. ์ž๋ณธ ์ง€์ถœ์€ ์•ฝ 14๊ฐœ์›”์— ์ƒ๊ฐ๋ฉ๋‹ˆ๋‹ค.
  • ๊ฐœ๋ฐœ์ž 25๋ช… ๊ต์ฐจ์ : GHAS $475/์›” ๋Œ€ ์ž์ฒด ํ˜ธ์ŠคํŒ… ์šด์˜๋น„ $25/์›” + $2,500 ์ž๋ณธ ์ง€์ถœ. ์ž๋ณธ ์ง€์ถœ์€ ์•ฝ 5~6๊ฐœ์›”์— ์ƒ๊ฐ๋ฉ๋‹ˆ๋‹ค.
  • ๊ฐœ๋ฐœ์ž 50๋ช… ๊ต์ฐจ์ : GHAS $950/์›” ๋Œ€ ์ž์ฒด ํ˜ธ์ŠคํŒ… ์šด์˜๋น„ $40/์›” + $7,500 ์ž๋ณธ ์ง€์ถœ (48 GB GPU). ์ž๋ณธ ์ง€์ถœ์€ ์•ฝ 8๊ฐœ์›”์— ์ƒ๊ฐ๋ฉ๋‹ˆ๋‹ค.
  • ์ž๋ณธ ์ง€์ถœ ์ˆ˜์น˜๊ฐ€ ๊ณ„์‚ฐ์„ ์ง€๋ฐฐํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ์œ„ํ•ด ํŠน๋ณ„ํžˆ GPU๋ฅผ ๊ตฌ๋งคํ•œ๋‹ค๋ฉด ์ƒ๊ฐ์ด ์‹ค์ œ๋กœ ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด GPU ์šฉ๋Ÿ‰์ด ์žˆ๋‹ค๋ฉด ํ•œ๊ณ„ ๋น„์šฉ์€ 0์— ๋” ๊ฐ€๊น๊ณ  ์ž์ฒด ํ˜ธ์ŠคํŒ…์ด ์ฆ‰์‹œ ์ด๊น๋‹ˆ๋‹ค.

๐Ÿ“ŒNote: ์ด ์ˆ˜์น˜๋“ค์€ ์ •๊ฐ€ ๋น„๊ต์ž…๋‹ˆ๋‹ค. ๋Œ€๊ธฐ์—…์„ ์œ„ํ•œ ํ˜‘์ƒ๋œ GHAS ๊ฐ€๊ฒฉ์€ ๊ต์ฐจ์ ์„ ์ด๋™์‹œํ‚ค๊ณ , ๊ธฐ์กด GPU ์šฉ๋Ÿ‰์€ ๊ทธ๊ฒƒ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋“œ์›จ์–ด ๊ตฌ๋งค์— ํ—Œ์‹ ํ•˜๊ธฐ ์ „์— ์‹ค์ œ ๋น„์šฉ์œผ๋กœ ๊ณ„์‚ฐ์„ ๋‹ค์‹œ ํ•˜์‹ญ์‹œ์˜ค.

๋ณด์•ˆ ๋ชจ๋ธ ๋ฐ ๊ฐ์‚ฌ ํƒœ์„ธ

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

  • ๋ชจ๋ธ์€ action์ด ์ „์†กํ•˜๋Š” diff๋งŒ ๋ด…๋‹ˆ๋‹ค. ํ…”๋ ˆ๋ฉ”ํŠธ๋ฆฌ ์—†์Œ, ์ˆจ๊ฒจ์ง„ ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ ์—†์Œ. GPU ์„œ๋ฒ„์˜ ์•„์›ƒ๋ฐ”์šด๋“œ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ tcpdump ๋˜๋Š” nft monitor๋กœ ํ™•์ธ ๊ฐ€๋Šฅ โ€” ์ •์ƒ ์šด์˜ ์ƒํƒœ์—์„œ๋Š” ๋‚ด๋ถ€๊ฐ€ ์•„๋‹Œ ํ˜ธ์ŠคํŠธ๋กœ ํ–ฅํ•˜๋Š” ์•„์›ƒ๋ฐ”์šด๋“œ ํŒจํ‚ท์ด ์ œ๋กœ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ „์ฒด ๊ฐ์‚ฌ ํ‘œ๋ฉด์€ ํ”„๋กœ์„ธ์Šค ํ•˜๋‚˜์™€ ๋กœ๊ทธ ํŒŒ์ผ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ollama serve๊ฐ€ ์ „์ฒด LLM ์Šคํƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์˜ ๋กœ๊ทธ(์š”์ฒญ ๋ณธ๋ฌธ, ์ง€์—ฐ ์‹œ๊ฐ„, ๋ชจ๋ธ ๋กœ๋“œ ์ด๋ฒคํŠธ)๊ฐ€ ๊ฐ์‚ฌ ๊ธฐ๋ก์ž…๋‹ˆ๋‹ค. ์ฟผ๋ฆฌํ•  SaaS ๋Œ€์‹œ๋ณด๋“œ ์—†์Œ, ์ฝ์„ ์„œ๋“œํŒŒํ‹ฐ ๋ณด์กด ์ •์ฑ… ์—†์Œ.
  • ๋„คํŠธ์›Œํฌ ๊ฒฉ๋ฆฌ๋Š” ์ง๊ด€์ ์ž…๋‹ˆ๋‹ค. ollama serve๋ฅผ ์‚ฌ์„ค ์ธํ„ฐํŽ˜์ด์Šค์— ๋ฐ”์ธ๋”ฉํ•˜๊ณ , mTLS ๋˜๋Š” ๊ณต์œ  ์‹œํฌ๋ฆฟ ์ธ์ฆ์ด ์žˆ๋Š” ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋ฅผ ์•ž์— ๋ฐฐ์น˜ํ•˜๋ฉฐ, GPU ์„œ๋ฒ„์˜ ๋„คํŠธ์›Œํฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ CI ๋Ÿฌ๋„ˆ ์„œ๋ธŒ๋„ท ์™ธ์˜ ์•„์›ƒ๋ฐ”์šด๋“œ ํŠธ๋ž˜ํ”ฝ์„ ๊ฑฐ๋ถ€ํ•˜์‹ญ์‹œ์˜ค. LLM๋ณ„ ๋งˆ๋ฒ• ์—†๋Š” ํ‘œ์ค€ ์ œ๋กœ ํŠธ๋Ÿฌ์ŠคํŠธ ํŒจํ„ด.
  • ๋ชจ๋ธ ๊ฐ€์ค‘์น˜๋Š” ์ œ๊ณต์ž๊ฐ€ ์„œ๋ช…ํ•œ ์ •์  ์•„ํ‹ฐํŒฉํŠธ์ž…๋‹ˆ๋‹ค. Ollama๋กœ ํ•œ ๋ฒˆ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ , ๋‹ค์ด์ œ์ŠคํŠธ๋ฅผ ๊ณ ์ •ํ•˜๋ฉด ๋ชจ๋ธ์€ ์šด์˜์ž ์กฐ์น˜ ์—†์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์—…์ŠคํŠธ๋ฆผ ๋ชจ๋ธ์ด ์ž๋™์œผ๋กœ ๊ต์ฒด๋  ์ˆ˜ ์žˆ๋Š” SaaS API๋ณด๋‹ค ๋” ๊ฐ•๋ ฅํ•œ ๊ณต๊ธ‰๋ง ์Šคํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค.
  • ์ปดํ”Œ๋ผ์ด์–ธ์Šค ํƒœ์„ธ: ๋ฐ์ดํ„ฐ ์ œ๋กœ ์ด๊ทธ๋ ˆ์Šค๋Š” SOC 2, ISO 27001, GDPR, EU AI Act ์ œํ•œ์  ์œ„ํ—˜ ๋ถ„๋ฅ˜์— ๋Œ€ํ•ด ๋ฌธ์„œํ™”ํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ์ž์ฒด ํ˜ธ์ŠคํŒ… ์ปดํ”Œ๋ผ์ด์–ธ์Šค์˜ ๊ฐ€์žฅ ์–ด๋ ค์šด ๋ถ€๋ถ„์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ถ”๋ก  ์„œ๋ฒ„ ์ž์ฒด๋ฅผ ๋ฌธ์„œํ™”ํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ, Ollama์™€ vLLM ๋ชจ๋‘ ์ž˜ ๋ฌธ์„œํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋ธ์€ ์—ฌ์ „ํžˆ ์ฝ”๋“œ๋ฅผ ๋ด…๋‹ˆ๋‹ค. ์ž์ฒด ํ˜ธ์ŠคํŒ…์€ ์„œ๋“œํŒŒํ‹ฐ๋กœ๋ถ€ํ„ฐ ํ”„๋ผ์ด๋น—ํ•˜๋‹ค๋Š” ์˜๋ฏธ์ด์ง€, ๋ชจ๋ธ๋กœ๋ถ€ํ„ฐ ํ”„๋ผ์ด๋น—ํ•˜๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋‚ด๋ถ€์ž ์œ„ํ˜‘ ์‹œ๋‚˜๋ฆฌ์˜ค(GPU ์„œ๋ฒ„ ์ ‘๊ทผ ๊ถŒํ•œ์ด ์žˆ๋Š” ์—”์ง€๋‹ˆ์–ด๊ฐ€ ์ด์ „ PR diff๊ฐ€ ํฌํ•จ๋œ ๋กœ๊ทธ๋ฅผ ์ฝ๋Š” ๊ฒƒ)๋Š” ์—ฌ์ „ํžˆ ๋ฒ”์œ„ ๋‚ด์— ์žˆ์Šต๋‹ˆ๋‹ค; ๋กœ๊ทธ๋ฅผ ์ˆœํ™˜ํ•˜๊ณ  ๊ทธ์— ๋”ฐ๋ผ ์ ‘๊ทผ์„ ์ œํ•œํ•˜์‹ญ์‹œ์˜ค.

์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ์œ„ํ•œ ํ”„๋กฌํ”„ํŠธ ์„ค๊ณ„

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

  • ๊ตฌ์กฐํ™”๋œ ์ถœ๋ ฅ์€ ํ˜‘์ƒ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์—„๊ฒฉํ•œ ์Šคํ‚ค๋งˆ(verdict, summary, comments[])๋กœ JSON์„ ๊ฐ•์ œํ•˜์‹ญ์‹œ์˜ค. ์—†์ด๋Š” action์ด ์ž์œ  ํ˜•์‹ ์ถœ๋ ฅ ํŒŒ์‹ฑ์— ์ฝ”๋“œ์˜ 30%๋ฅผ ์†Œ๋น„ํ•˜๊ณ  ์˜ค๋ฅ˜ ๋ชจ๋“œ๊ฐ€ ๋ฏธ๋ฌ˜ํ•ด์ง‘๋‹ˆ๋‹ค.
  • ๋ชจ๋ธ์˜ ๊ตฌ์กฐํ™”๋œ ์ถœ๋ ฅ ์ปดํ”Œ๋ผ์ด์–ธ์Šค์— ๋Œ€ํ•œ ์ „์ฒด ๊ฐ€์ด๋“œ๋Š” ๊ตฌ์กฐํ™”๋œ ์ถœ๋ ฅ ๋ฐ JSON ๋ชจ๋“œ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.
  • ์‹ฌ๊ฐ๋„ ์ž„๊ณ„๊ฐ’์€ action์ด ์•„๋‹Œ ํ”„๋กฌํ”„ํŠธ์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ์—๊ฒŒ critical, high, medium, low๊ฐ€ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€ ์•Œ๋ ค์ฃผ๊ณ , ๋ช…์‹œ์ ์œผ๋กœ ์š”์ฒญ๋ฐ›์ง€ ์•Š๋Š” ํ•œ ๋‚ฎ์€ ์‹ฌ๊ฐ๋„ ๊ฒฐ๊ณผ๋ฅผ ํ•„ํ„ฐ๋งํ•˜๋„๋ก ํ•˜์‹ญ์‹œ์˜ค. ์ด๊ฒƒ์€ ์ž์œ  ํ˜•์‹ ์‹ฌ๊ฐ๋„ ํ•„๋“œ์— ๋Œ€ํ•œ ์‚ฌํ›„ ํ•„ํ„ฐ๋ง๋ณด๋‹ค ํ›จ์”ฌ ๋” ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กฌํ”„ํŠธ๋ฅผ ์˜ˆ์‹œ๋กœ ๊ณ ์ •ํ•˜์‹ญ์‹œ์˜ค. ์‹ค์ œ diff์™€ ์ด์ƒ์ ์ธ ๋ฆฌ๋ทฐ JSON์ด ์žˆ๋Š” 1~2์ƒท ํ”„๋กฌํ”„ํŠธ๋Š” ๋™์ผํ•œ ๋ชจ๋ธ๊ณผ ๋™์ผํ•œ diff ํฌ๊ธฐ์— ๋Œ€ํ•ด ์ œ๋กœ์ƒท์„ ๋Œ€ํญ ๋Šฅ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • "๋ฆฌ๋ทฐ"์™€ "๋Œ“๊ธ€" ์˜๋„๋ฅผ ๊ตฌ๋ถ„ํ•˜์‹ญ์‹œ์˜ค. ๋ฆฌ๋ทฐ์–ด ๋Œ“๊ธ€("์ด๊ฒƒ์„ ํ—ฌํผ๋กœ ์ถ”์ถœํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค")๊ณผ ์ฐจ๋‹จ์ž("์ด๊ฒƒ์€ SQL ์ธ์ ์…˜์„ ๋„์ž…ํ•ฉ๋‹ˆ๋‹ค")๋Š” CI์—์„œ ๋‹ค๋ฅธ ์กฐ์น˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์กฐํ™”๋œ ์ถœ๋ ฅ์— ๋ ˆ์ด๋ธ”์„ ๋ถ™์ด๊ณ  action์ด ์ฐจ๋‹จ์ž์—์„œ๋งŒ ์ฐจ๋‹จํ•˜๋„๋ก ํ•˜์‹ญ์‹œ์˜ค.
  • ์–ธ์–ด๋ณ„ ํ”„๋กฌํ”„ํŠธ ๋ณ€ํ˜•์€ ์ผ์ • ๊ทœ๋ชจ๋ถ€ํ„ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๊ตญ์–ด ์ฝ”๋“œ๋ฒ ์ด์Šค๋Š” ๊ด€๋ จ ์–ธ์–ด ๊ด€์šฉ๊ตฌ(ํŒŒ์ด์จ๋‹‰ ๋Œ€ ๊ด€์šฉ์  Rust)๋ฅผ ์ฐธ์กฐํ•˜๋Š” ํ”„๋กฌํ”„ํŠธ์—์„œ ์ด์ต์„ ์–ป์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž ~25๋ช… ๋ฏธ๋งŒ์—์„œ๋Š” ์„ ํƒ ์‚ฌํ•ญ์ด๋ฉฐ, ๊ทธ ์ด์ƒ์—์„œ๋Š” ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กฌํ”„ํŠธ ์—”์ง€๋‹ˆ์–ด๋ง ๊ธฐ์ดˆ ์‹ฌ์ธต ๋‚ด์šฉ โ€” ์‹œ์Šคํ…œ ๋Œ€ ์‚ฌ์šฉ์ž ํ”„๋กฌํ”„ํŠธ, ๊ตฌ์กฐํ™”๋œ ์ถœ๋ ฅ, ํ“จ์ƒท ํ”„๋กฌํ”„ํŒ… โ€” ์€ ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ ๋Œ€ ์‚ฌ์šฉ์ž ํ”„๋กฌํ”„ํŠธ: ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๊ฐœ๋ฐœ์ž ์‹ ๋ขฐ๋ฅผ ์นจ์‹ํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ์˜คํƒ ๊ด€๋ฆฌํ•˜๊ธฐ

์˜คํƒ์€ LLM ์ฝ”๋“œ ๋ฆฌ๋ทฐ์˜ ์šด์˜ ๋น„์šฉ์ž…๋‹ˆ๋‹ค. 5% ๋น„์œจ์€ ํ—ˆ์šฉ ๊ฐ€๋Šฅํ•˜๊ณ , 20%๋Š” ํ—ˆ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ์ฐจ์ด๋Š” ์ฃผ๋กœ ํ”„๋กฌํ”„ํŠธ ๋ฐ˜๋ณต๊ณผ ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„์— ์žˆ์ง€ ๋ชจ๋ธ์— ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • "์ฐจ๋‹จ" ์ž„๊ณ„๊ฐ’์„ ๋†’๊ฒŒ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค. ์‚ฌ์†Œํ•œ ๋ฆฐํŠธ ๋ฌธ์ œ์—์„œ ์ฐจ๋‹จ ํŒ์ •์ด ๋ฐœ๋™๋˜๋ฉด ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ฒ€์‚ฌ๋ฅผ ๋ฌด์‹œํ•˜๋„๋ก ํ›ˆ๋ จ๋ฉ๋‹ˆ๋‹ค. ์ฐจ๋‹จ์€ ๋ณด์•ˆ ๋ฌธ์ œ, ์‹คํŒจํ•œ ํ…Œ์ŠคํŠธ, ๋ช…๋ฐฑํ•œ ์ •ํ™•์„ฑ ์˜ค๋ฅ˜์—๋งŒ ์˜ˆ์•ฝํ•˜์‹ญ์‹œ์˜ค.
  • ๋น„์ฐจ๋‹จ ๋Œ“๊ธ€์„ ๋น„์šฉ์ด ๋‚ฎ๊ฒŒ ๋งŒ๋“œ์‹ญ์‹œ์˜ค. ๋ชจ๋ธ์ด ํ™•์‹ ํ•˜์ง€ ๋ชปํ•˜๋Š” ์ธ๋ผ์ธ ๋Œ“๊ธ€์€ ("์ž ์ •์ " / "๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค")๋กœ ๋ ˆ์ด๋ธ”๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ ์ž‘์„ฑ์ž๊ฐ€ ์˜์‹ ์—†์ด ๋น ๋ฅด๊ฒŒ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฒซ ๋‹ฌ์— ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„๋ฅผ ๊ตฌ์ถ•ํ•˜์‹ญ์‹œ์˜ค. ๊ฐ ๋ฆฌ๋ทฐ ๋Œ“๊ธ€์— ๋ฐ˜์‘(๐Ÿ‘ / ๐Ÿ‘Ž)์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค. ์ฃผ๊ธฐ์ ์œผ๋กœ(์ฃผ 1ํšŒ๊ฐ€ ํšจ๊ณผ์ ) ๐Ÿ‘Ž๋ฅผ ๊ฒ€ํ† ํ•˜๊ณ  ๊ฐ€์žฅ ํ”ํ•œ ์˜คํƒ ์นดํ…Œ๊ณ ๋ฆฌ์— ๋Œ€ํ•œ ๋ช…์‹œ์ ์ธ "X๋ฅผ ํ”Œ๋ž˜๊ทธํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค" ์ง€์‹œ๋กœ ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์‹ญ์‹œ์˜ค.
  • PR๋‹น ๋Œ“๊ธ€ ๋ณผ๋ฅจ์„ ์ œํ•œํ•˜์‹ญ์‹œ์˜ค. ๋‹จ์ผ PR์€ LLM์œผ๋กœ๋ถ€ํ„ฐ 5~10๊ฐœ ์ด์ƒ์˜ ๋Œ“๊ธ€์„ ๋ฐ›์•„์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค; ๊ทธ ์ด์ƒ์ด ๋˜๋ฉด ์‹ ํ˜ธ ๋Œ€ ์žก์Œ๋น„๊ฐ€ ๋ฌด๋„ˆ์ง‘๋‹ˆ๋‹ค. ํ”„๋กฌํ”„ํŠธ ์ˆ˜์ค€์—์„œ action์„ ์ œํ•œํ•˜์‹ญ์‹œ์˜ค("์ตœ๋Œ€ N๊ฐœ์˜ ๋Œ“๊ธ€์„ ๋ฐ˜ํ™˜ํ•˜์‹ญ์‹œ์˜ค").
  • ์ฃผ๊ฐ„ ํŒ์ •-๋Œ€-๋ณ‘ํ•ฉ ์ƒ๊ด€๊ด€๊ณ„๋ฅผ ์ถ”์ ํ•˜์‹ญ์‹œ์˜ค. ์ฐจ๋‹จ ํŒ์ •์˜ 80%๊ฐ€ ์–ด์จŒ๋“  ๋ณ‘ํ•ฉ๋œ๋‹ค๋ฉด ์ž„๊ณ„๊ฐ’์ด ๋„ˆ๋ฌด ๊ณต๊ฒฉ์ ์ž…๋‹ˆ๋‹ค. ๋Œ“๊ธ€ ํŒ์ •์˜ 0%๊ฐ€ ์ธ๊ฐ„ ์กฐ์น˜๋ฅผ ๋ฐ›๋Š”๋‹ค๋ฉด ํ”„๋กฌํ”„ํŠธ๊ฐ€ ๋…ธ์ด์ฆˆ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ๋‹ฌ์— ๋‚˜ํƒ€๋‚˜๋Š” ์šด์˜์ƒ ํ•จ์ •

์„ค์ •์€ ์ฃผ๋ชฉ์„ ๋ฐ›๊ณ , ์šด์˜์€ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์‹คํŒจ๋“ค์€ ์ดˆ๊ธฐ ํ—ˆ๋‹ˆ๋ฌธ ์ดํ›„ ํŒ€์ด ํ”„๋กœ์ ํŠธ๋ฅผ ํฌ๊ธฐํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ๋“ค์ž…๋‹ˆ๋‹ค.

  • ๋ชจ๋ธ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ”„๋กฌํ”„ํŠธ๋ฅผ ๊นจ๋œจ๋ฆฝ๋‹ˆ๋‹ค. Qwen3-Coder์˜ ์ƒˆ ๋ฒ„์ „์ด ๋ฏธ๋ฌ˜ํ•˜๊ฒŒ ์ถœ๋ ฅ ํ˜•์‹์„ ๋ฐ”๊พธ๊ณ , CI์—์„œ ๊ตฌ์กฐํ™”๋œ JSON ํŒŒ์‹ฑ์ด ์‹คํŒจํ•˜๊ณ , ๋ฆฌ๋ทฐ๊ฐ€ ๊ฒŒ์‹œ๋ฅผ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค. ollama show <model> --modelfile๋กœ ๋ชจ๋ธ ๋‹ค์ด์ œ์ŠคํŠธ๋ฅผ ๊ณ ์ •ํ•˜๊ณ , ํ”„๋กœ๋ชจ์…˜ ์ „์— ์Šคํ…Œ์ด์ง• ๋ธŒ๋žœ์น˜์—์„œ ์—…๋ฐ์ดํŠธํ•˜์‹ญ์‹œ์˜ค.
  • ์žฅ๊ธฐ๊ฐ„ ๊ฐ€๋™ ์‹œ GPU ๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™”. 24/7 ๊ฐ€๋™ํ•˜๋Š” GPU ์„œ๋ฒ„๋Š” ๋ช‡ ์ฃผ๊ฐ„ ์šด์˜ ํ›„ VRAM์„ ๋‹จํŽธํ™”ํ•˜์—ฌ ์ƒˆ ํ• ๋‹น์„ ๊ฑฐ๋ถ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. cron ์ž‘์—…์œผ๋กœ ์ฃผ 1ํšŒ ollama serve๋ฅผ ์žฌ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค; ์ €๋ ดํ•˜๊ณ  ์ด ์˜ค๋ฅ˜ ๋ชจ๋“œ๋ฅผ ์™„์ „ํžˆ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • CI ๋Ÿฌ๋„ˆ ๊ฒฝํ•ฉ. LLM ์„œ๋ฒ„์™€ ๋‹ค๋ฅธ CI ์ž‘์—…์„ ๋ชจ๋‘ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ์ž์ฒด ํ˜ธ์ŠคํŒ… ๋Ÿฌ๋„ˆ๋Š” ๋นŒ๋“œ ๋ถ€ํ•˜ ์‹œ ๋ฆฌ๋ทฐ ์ง€์—ฐ ์‹œ๊ฐ„์ด ๊ธ‰์ฆํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒ€ ๊ทœ๋ชจ๊ฐ€ ๊ฐœ๋ฐœ์ž ~25๋ช…์„ ์ดˆ๊ณผํ•˜๋ฉด ๋Ÿฌ๋„ˆ์™€ GPU ์„œ๋ฒ„๋ฅผ ๋ถ„๋ฆฌํ•˜์‹ญ์‹œ์˜ค.
  • Diff ํฌ๊ธฐ ์ฆ๊ฐ€. PR ํฌ๊ธฐ๊ฐ€ ์ ์  ์ปค์ง€๊ณ ; ๊ฒฐ๊ตญ PR์ด ๋ชจ๋ธ์˜ ์‹ค์ œ ์ž‘์—… ์ปจํ…์ŠคํŠธ๋ฅผ ์ดˆ๊ณผํ•˜์—ฌ ๋ฆฌ๋ทฐ๊ฐ€ ์ž๋™์œผ๋กœ ์ €ํ•˜๋ฉ๋‹ˆ๋‹ค. ~30K ํ† ํฐ ์ด์ƒ์˜ diff๋ฅผ ๋ถ„ํ• ํ•˜๊ฑฐ๋‚˜ ์ž˜๋ผ๋‚ด๊ณ  ์ž‘์„ฑ์ž์—๊ฒŒ ๊ฒฝ๊ณ ํ•˜๋Š” action์˜ ๊ฐ€๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.
  • ์ „๋ ฅ ๋ฐ ๋ƒ‰๊ฐ. ์ง€์†์ ์ธ ๋ถ€ํ•˜์˜ RTX 4090์€ ์ถ”๋ก  ์‹œ ~350W๋ฅผ ์†Œ๋น„ํ•˜๊ณ  ์ƒ๋‹นํ•œ ์—ด์„ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ๋Šฅ๋™์ ์ธ ๋ƒ‰๊ฐ์ด ์—†๋Š” ์บ๋น„๋‹› ํฌ๊ธฐ์˜ ์„œ๋ฒ„์‹ค์€ GPU๋ฅผ ์Šค๋กœํ‹€๋งํ•˜๊ณ , ์Šค๋กœํ‹€๋ง์€ ์ง€์—ฐ ์‹œ๊ฐ„ ๋น„์šฉ์ด ๋“ค๋ฉฐ, ๊ฐœ๋ฐœ์ž๋“ค์ด ์•Œ์•„์ฑ•๋‹ˆ๋‹ค.
  • ์žŠํ˜€์ง„ ๋กœ๊ทธ ์ˆœํ™˜. Ollama๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ ์š”์ฒญ ๋ณธ๋ฌธ์„ ๋กœ๊น…ํ•ฉ๋‹ˆ๋‹ค. 3๊ฐœ์›”์˜ PR ๋ฆฌ๋ทฐ ํ›„ ๋กœ๊ทธ ํŒŒ์ผ์€ ํฌ๊ณ  ๊ณผ๊ฑฐ PR diff๋ฅผ ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ฃผ 1ํšŒ ๋กœ๊ทธ๋ฅผ ์ˆœํ™˜ํ•˜์‹ญ์‹œ์˜ค; ๋ฐ์ดํ„ฐ ๋ณด์กด ์ •์ฑ…์— ๋”ฐ๋ผ ์•„์นด์ด๋ธŒํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜์‹ญ์‹œ์˜ค.

๋กœ์ปฌ LLM ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์„ค์ • ์‹œ ํ”ํ•œ ์‹ค์ˆ˜

  • ์‹ค์ˆ˜ 1: 16 GB GPU์—์„œ 7B ๋ชจ๋ธ๋กœ ์‹œ์ž‘ํ•˜๊ธฐ. Qwen3-Coder 7B ๋ฆฌ๋ทฐ๋Š” 30B๋ณด๋‹ค ํ˜„์ €ํžˆ ๋‚˜์ฉ๋‹ˆ๋‹ค; ๊ฐœ๋ฐœ์ž๋“ค์€ ๋น ๋ฅด๊ฒŒ ์‹ ๋ขฐ๋ฅผ ์žƒ๊ณ  ํ”„๋กœ์ ํŠธ๊ฐ€ ํฌ๊ธฐ๋ฉ๋‹ˆ๋‹ค. 30B๋ฅผ ํ˜ธ์ŠคํŒ…ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด, ์˜ˆ์‚ฐ์„ ํ™•๋ณดํ•˜๋Š” ๋™์•ˆ ์ฒ˜์Œ 6๊ฐœ์›”๊ฐ„ GPU๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ฑฐ๋‚˜ ํด๋ผ์šฐ๋“œ API๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.
  • **์‹ค์ˆ˜ 2: ์ฒซ๋‚ ๋ถ€ํ„ฐ ์ฐจ๋‹จ ํŒ์ •์œผ๋กœ PR ์ฐจ๋‹จํ•˜๊ธฐ.** ์ฒซ ๋‹ฌ์€ ๋ณด์ • ๊ธฐ๊ฐ„์ž…๋‹ˆ๋‹ค; ์˜คํƒ๋ฅ ์„ ์ธก์ •ํ•  ๋•Œ๊นŒ์ง€ ๋ชจ๋“  ์ถœ๋ ฅ์„ ์ž๋ฌธ์œผ๋กœ ์ทจ๊ธ‰ํ•˜์‹ญ์‹œ์˜ค. ~5% ๋ฏธ๋งŒ์œผ๋กœ ๋น„์œจ์ด ๋‚ฎ์•„์ง„ ํ›„์—๋งŒ ์ฐจ๋‹จ์œผ๋กœ ํ”„๋กœ๋ชจ์…˜ํ•˜์‹ญ์‹œ์˜ค.
  • **์‹ค์ˆ˜ 3: ์ธ์ฆ ์—†์ด ollama serve๋ฅผ 0.0.0.0:11434์— ๋…ธ์ถœํ•˜๊ธฐ.** ์ด๊ฒƒ์€ Redis๋ฅผ ๊ณต์šฉ ์ธํ„ฐํŽ˜์ด์Šค์— ๋ฐ”์ธ๋”ฉํ•˜๋Š” ๊ฒƒ์— ํ•ด๋‹นํ•˜๋Š” LLM ์‹œ๋Œ€์˜ ๋“ฑ๊ฐ€๋ฌผ์ž…๋‹ˆ๋‹ค. ์‚ฌ์„ค ์ธํ„ฐํŽ˜์ด์Šค์— ๋ฐ”์ธ๋”ฉํ•˜๊ณ  ํ˜ธ์ŠคํŠธ ๊ฐ„ ๋…ธ์ถœ ์ „์— ์ธ์ฆ์„ ์•ž์— ๋ฐฐ์น˜ํ•˜์‹ญ์‹œ์˜ค.
  • ์‹ค์ˆ˜ 4: ์บ์‹œ ์ƒ๋žตํ•˜๊ธฐ. ๊ฐ CI ์‹คํ–‰์—์„œ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ํŒŒ์ผ์„ ๋‹ค์‹œ ๋ฆฌ๋ทฐํ•˜๋ฉด ์ผ๋ฐ˜์ ์ธ PR์—์„œ ์ถ”๋ก  ์˜ˆ์‚ฐ์˜ ~80%๋ฅผ ๋‚ญ๋น„ํ•ฉ๋‹ˆ๋‹ค. ์†Œ๊ทœ๋ชจ ํŒŒ์ผ ํ•ด์‹œ + diff ํ•ด์‹œ ์บ์‹œ(Redis ๋˜๋Š” SQLite)๋Š” ๋ฆฌ๋ทฐ ์ง€์—ฐ ์‹œ๊ฐ„๊ณผ GPU ๋ถ€ํ•˜๋ฅผ ๊ธ‰๊ฒฉํžˆ ์ค„์ž…๋‹ˆ๋‹ค.
  • ์‹ค์ˆ˜ 5: ๋™์ผํ•œ GPU์—์„œ ํ•™์Šต ์ž‘์—… ์‹คํ–‰ํ•˜๊ธฐ. ํ•™์Šต์€ VRAM์„ ํ•œ๊ณ„๊นŒ์ง€ ๋ฐ€์–ด๋ถ™์—ฌ ๋ฆฌ๋ทฐ ๋ชจ๋ธ์„ ๊ตถ๊น๋‹ˆ๋‹ค. ๋ณ„๋„์˜ GPU๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ๊ผญ ๊ณต์œ ํ•ด์•ผ ํ•œ๋‹ค๋ฉด PR ํ”ผํฌ ์‹œ๊ฐ„๊ณผ ๊ฒน์น˜์ง€ ์•Š๋Š” ์—„๊ฒฉํ•œ ์ผ์ •์œผ๋กœ ํ•™์Šต์„ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.
  • ์‹ค์ˆ˜ 6: ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„ ์—†์ด GitHub Action ๊ตฌ์ถ•ํ•˜๊ธฐ. ๐Ÿ‘/๐Ÿ‘Ž ๋ฐ˜์‘์ด ์—†๋Š” ๋ฆฌ๋ทฐ ์‹œ์Šคํ…œ์€ ๊ฐœ์„ ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฒซ ์ฃผ์— ๋ฃจํ”„๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๋ฉฐ, ์›”๋ณ„๋กœ ํ”„๋กฌํ”„ํŠธ๋ฅผ ๋ฐ˜๋ณตํ•˜์‹ญ์‹œ์˜ค.

์ถœ์ฒ˜

  • Ollama ๋ฌธ์„œ โ€” /api/chat, /api/generate, ๊ตฌ์กฐํ™”๋œ ์ถœ๋ ฅ, ๋ชจ๋ธ ๊ด€๋ฆฌ์— ๋Œ€ํ•œ ๊ณต์‹ HTTP API ์ฐธ์กฐ.
  • vLLM ๋ฌธ์„œ โ€” ๊ณ ์„ฑ๋Šฅ ์ถ”๋ก  ์„œ๋ฒ„ ๋ฌธ์„œ; ๋†’์€ ๋™์‹œ์„ฑ์„ ๊ฐ€์ง„ ํŒ€์„ ์œ„ํ•œ Ollama ์ดํ›„ ์—…๊ทธ๋ ˆ์ด๋“œ ๊ฒฝ๋กœ.
  • GitHub Actions ๋ฌธ์„œ โ€” ์ž์ฒด ํ˜ธ์ŠคํŒ… ๋Ÿฌ๋„ˆ, ์‹œํฌ๋ฆฟ, ์œ„ ์›Œํฌํ”Œ๋กœ์—์„œ ์‚ฌ์šฉ๋œ Actions JavaScript SDK์— ๋Œ€ํ•œ ๊ณต์‹ ์ฐธ์กฐ.
  • GitHub Advanced Security ๊ฐ€๊ฒฉ โ€” ๋น„์šฉ ๋น„๊ต๋ฅผ ์œ„ํ•œ ์ •๊ฐ€ ์ฐธ์กฐ; ์‹ค์ œ ํ˜‘์ƒ๋œ ์กฐ๊ฑด๊ณผ ๋Œ€์กฐํ•˜์—ฌ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
  • Qwen3-Coder ๋ชจ๋ธ ์นด๋“œ โ€” ๊ถŒ์žฅ ๋ฆฌ๋ทฐ ๋ชจ๋ธ์˜ ์•„ํ‚คํ…์ฒ˜, ์ปจํ…์ŠคํŠธ ์ฐฝ, ๋ผ์ด์„ ์Šค ์กฐ๊ฑด.
  • GitLab CI/CD ์ฐธ์กฐ โ€” GitLab ํŒ€์„ ์œ„ํ•œ ๋™๋“ฑํ•œ ์ฐธ์กฐ; ์›Œํฌํ”Œ๋กœ์˜ LLM ํ˜ธ์ถœ ๋ถ€๋ถ„์€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

FAQ

๋‹จ์ผ GPU ์„œ๋ฒ„๊ฐ€ ๊ฐœ๋ฐœ์ž 50๋ช…์˜ CI๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‹จ์ผ 24 GB GPU(RTX 4090)๋Š” ๊ฐœ๋ฐœ์ž 15~25๋ช…์„ ํŽธ์•ˆํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค; ๊ฐœ๋ฐœ์ž 50๋ช…์—๋Š” 48 GB ์นด๋“œ(L40S, A6000 Ada)๊ฐ€ ํ•„์š”ํ•˜๊ฑฐ๋‚˜ ๋™์ผ ํ•˜๋“œ์›จ์–ด์—์„œ Ollama์—์„œ vLLM์œผ๋กœ ์ „ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ณ‘๋ชฉ์€ PR ์ง‘์ค‘ ์‹œ๊ฐ„(์›”์š”์ผ ์•„์นจ, ์Šคํ”„๋ฆฐํŠธ ์ข…๋ฃŒ)์˜ ๋™์‹œ์„ฑ์ด๋ฉฐ, ์ •์ƒ ์ƒํƒœ ์ฒ˜๋ฆฌ๋Ÿ‰์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž 100๋ช… ์ด์ƒ์—๋Š” ๋ฉ€ํ‹ฐ GPU ๋˜๋Š” H100๊ธ‰ ํ•˜๋“œ์›จ์–ด๋ฅผ ๊ณ„ํšํ•˜์‹ญ์‹œ์˜ค.

๋กœ์ปฌ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๊ฐ€ PR ์ง€์—ฐ ์‹œ๊ฐ„์— ์˜ํ–ฅ์„ ์ค๋‹ˆ๊นŒ?

์ผ๋ฐ˜์ ์œผ๋กœ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค โ€” ๋‹จ์ผ 24 GB GPU์—์„œ ์ผ๋ฐ˜์ ์ธ 200์ค„ diff์˜ ๋ฆฌ๋ทฐ ์ง€์—ฐ ์‹œ๊ฐ„์€ 10~30์ดˆ์ด๋ฉฐ, PR ์ž‘์„ฑ์ž์˜ ๋Œ€๊ธฐ ์‹œ๊ฐ„์€ ํ›จ์”ฌ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๋‹ค๋ฅธ CI ์ž‘์—…(๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋ฆฐํŠธ)์ด ์ง€๋ฐฐํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์™ธ๋Š” ๋งค์šฐ ํฐ PR(diff ํ† ํฐ ~30K ์ด์ƒ)์ด๋ฉฐ, ๋ฆฌ๋ทฐ๊ฐ€ 60~90์ดˆ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค; action ์ˆ˜์ค€์—์„œ ๊ทธ๊ฒƒ๋“ค์„ ์ž˜๋ผ๋‚ด๊ฑฐ๋‚˜ ๋ถ„ํ• ํ•˜์‹ญ์‹œ์˜ค.

๋ชจ๋ธ์ด ๋ณด๋Š” ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๊นŒ?

Ollama๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋กœ๊ทธ ํŒŒ์ผ์— ๊ฐ ์š”์ฒญ ๋ณธ๋ฌธ์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค(์œ„์น˜๋Š” OS์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค; systemd์—์„œ journalctl -u ollama ๋˜๋Š” Ollama ๋กœ๊ทธ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ํ™•์ธ). ๋ฆฌ๋ทฐ์— ๊ฐ€๋Š” ๊ฐ PR diff๊ฐ€ ๊ทธ ๋กœ๊ทธ์— ์žˆ์Šต๋‹ˆ๋‹ค. GPU ์„œ๋ฒ„์˜ ์•„์›ƒ๋ฐ”์šด๋“œ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ tcpdump์™€ ๊ฒฐํ•ฉํ•˜์—ฌ ์ œ๋กœ ๋ฐ์ดํ„ฐ ์ด๊ทธ๋ ˆ์Šค๋ฅผ ์ฆ๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ๊ฐ์‚ฌ ํ‘œ๋ฉด์€ ํ”„๋กœ์„ธ์Šค ํ•˜๋‚˜์™€ ๋กœ๊ทธ ํŒŒ์ผ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค โ€” SaaS ์ฝ”๋“œ ๋ฆฌ๋ทฐ API๋ณด๋‹ค ๊ฐ์‚ฌํ•˜๊ธฐ ํ›จ์”ฌ ๋‹จ์ˆœํ•ฉ๋‹ˆ๋‹ค.

๋กœ์ปฌ ๋ชจ๋ธ ์ถœ๋ ฅ์„ ๊ธฐ๋ฐ˜์œผ๋กœ PR์„ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์˜ˆ. action์€ verdict ํ•„๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค; ํŒ์ •์ด ์ฐจ๋‹จ์ด๋ฉด GitHub Action์ด 0์ด ์•„๋‹Œ ์ฝ”๋“œ๋กœ ์ข…๋ฃŒํ•˜๊ณ , ์ด๋กœ ์ธํ•ด ๊ฒ€์‚ฌ๊ฐ€ ์‹คํŒจํ•˜๋ฉฐ, ๋ธŒ๋žœ์น˜ ๋ณดํ˜ธ ๊ทœ์น™์ด ๊ฒ€์‚ฌ ํ†ต๊ณผ๋ฅผ ์š”๊ตฌํ•˜๋ฉด ๋ณ‘ํ•ฉ์ด ์ฐจ๋‹จ๋ฉ๋‹ˆ๋‹ค. ๊ถŒ์žฅ ์‚ฌํ•ญ์€ ์ฒซ ๋‹ฌ ๋™์•ˆ ์ฐจ๋‹จ์„ ๋น„ํ™œ์„ฑํ™”๋œ ์ฑ„๋กœ ์‹œ์ž‘ํ•˜๊ณ (์ž๋ฌธ ์ „์šฉ), ์˜คํƒ๋ฅ ์„ ์ธก์ •ํ•˜๋ฉฐ, ~5% ๋ฏธ๋งŒ์œผ๋กœ ๋‚ฎ์•„์ง„ ํ›„ ์ฐจ๋‹จ์œผ๋กœ ํ”„๋กœ๋ชจ์…˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

GitLab CI์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

์˜ˆ โ€” ์•„ํ‚คํ…์ฒ˜๊ฐ€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. GitHub Action์„ Ollama ์—”๋“œํฌ์ธํŠธ์— ๋™์ผํ•œ curl์„ ์‹คํ–‰ํ•˜๊ณ  GitLab API๋ฅผ ํ†ตํ•ด ๋ณ‘ํ•ฉ ์š”์ฒญ์— ์‘๋‹ต์„ ๋‹ค์‹œ ๊ฒŒ์‹œํ•˜๋Š” GitLab CI ์ž‘์—…์œผ๋กœ ๊ต์ฒดํ•˜์‹ญ์‹œ์˜ค. ๋ชจ๋ธ, ํ”„๋กฌํ”„ํŠธ, ์บ์‹œ, ๋ณด์•ˆ ๋ชจ๋ธ, ํ•˜๋“œ์›จ์–ด ์‚ฌ์ด์ง•์ด ๋ชจ๋‘ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. Bitbucket Pipelines, Jenkins, Buildkite๋„ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ดํ”„๋ผ์ธ์„ ๊นจ๋œจ๋ฆฌ์ง€ ์•Š๊ณ  ๋ชจ๋ธ์„ ์–ด๋–ป๊ฒŒ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๊นŒ?

ํ”„๋กœ๋•์…˜ CI๊ฐ€ ์ •ํ™•ํ•œ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋„๋ก ollama show <model> --modelfile๋กœ ๋ชจ๋ธ ๋‹ค์ด์ œ์ŠคํŠธ๋ฅผ ๊ณ ์ •ํ•˜์‹ญ์‹œ์˜ค. ์ƒˆ ๋ชจ๋ธ ๋ฒ„์ „์ด ๋„์ฐฉํ•˜๋ฉด ์Šคํ…Œ์ด์ง• ์„œ๋ฒ„์— ๋‹ค์šด๋กœ๋“œํ•˜๊ณ , ๋Œ€ํ‘œ์ ์ธ ์†Œ๊ทœ๋ชจ PR diff ์„ธํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉฐ, ๊ตฌ์กฐํ™”๋œ ์ถœ๋ ฅ์„ ํ”„๋กœ๋•์…˜ ๋ฒ„์ „๊ณผ ๋น„๊ตํ•˜๊ณ , ํšŒ๊ท€ ํ…Œ์ŠคํŠธ ์„ธํŠธ๊ฐ€ ํ†ต๊ณผํ•œ ํ›„์—๋งŒ ํ”„๋กœ๋ชจ์…˜ํ•˜์‹ญ์‹œ์˜ค. ๋ชจ๋ธ ์—…๋ฐ์ดํŠธ๋ฅผ ๋‹ค๋ฅธ ์˜์กด์„ฑ ์—…๋ฐ์ดํŠธ์™€ ๋™์ผํ•˜๊ฒŒ ์ทจ๊ธ‰ํ•˜์‹ญ์‹œ์˜ค.

๋ฆฌ๋ทฐ ์™ธ์— ์ฝ”๋“œ ์ƒ์„ฑ์—๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์˜ˆ, ํ•˜์ง€๋งŒ ์›Œํฌ๋กœ๋“œ๊ฐ€ ๋™์ผํ•œ GPU๋ฅผ ๊ฒฝ์Ÿํ•˜๋ฉฐ ์ง€์—ฐ ์‹œ๊ฐ„ ํŠน์„ฑ์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋Š” ๋น„๋™๊ธฐ์ ์ด๊ณ  30์ดˆ ์‘๋‹ต์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค; ์—๋””ํ„ฐ์—์„œ์˜ ๋Œ€ํ™”ํ˜• ์ฝ”๋“œ ์ƒ์„ฑ์€ 2์ดˆ ๋ฏธ๋งŒ์˜ ์ง€์—ฐ ์‹œ๊ฐ„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ถŒ์žฅ ํŒจํ„ด: ๊ฐœ๋ฐœ์ž ๋จธ์‹ ์˜ ์—๋””ํ„ฐ ์ž๋™ ์™„์„ฑ์—๋Š” ๋” ์ž‘์€ ๋ชจ๋ธ(Qwen3-Coder 7B)์„ ์‚ฌ์šฉํ•˜๊ณ , CI์—์„œ ๋ฆฌ๋ทฐ๊ธ‰ ์›Œํฌ๋กœ๋“œ๋ฅผ ์œ„ํ•ด ์ „์šฉ GPU ์„œ๋ฒ„๋ฅผ ์˜ˆ์•ฝํ•˜์‹ญ์‹œ์˜ค.

GPU ์„œ๋ฒ„์˜ ๋ณด์•ˆ ๋ชจ๋ธ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋‹ค๋ฅธ ๋‚ด๋ถ€ ์„œ๋น„์Šค์ฒ˜๋Ÿผ ์ทจ๊ธ‰ํ•˜์‹ญ์‹œ์˜ค: ์ถ”๋ก  ์„œ๋ฒ„๋ฅผ ์‚ฌ์„ค ์ธํ„ฐํŽ˜์ด์Šค์— ๋ฐ”์ธ๋”ฉํ•˜๊ณ , ์•ž์— ์ธ์ฆ(mTLS, ๊ณต์œ  ์‹œํฌ๋ฆฟ ํ† ํฐ ๋˜๋Š” VPN ์ „์šฉ ์ ‘๊ทผ)์„ ๋ฐฐ์น˜ํ•˜๋ฉฐ, ๊ธฐ๋ณธ ๊ฑฐ๋ถ€๋กœ ์•„์›ƒ๋ฐ”์šด๋“œ ํŠธ๋ž˜ํ”ฝ์„ ์ œํ•œํ•˜๊ณ , ์ž๊ฒฉ ์ฆ๋ช…์„ ์ˆœํ™˜ํ•˜์‹ญ์‹œ์˜ค. LLM๋ณ„ ์ถ”๊ฐ€ ์‚ฌํ•ญ์€ ๋ชจ๋ธ ๊ฐ€์ค‘์น˜์˜ ์ถœ์ฒ˜๋ฅผ ๊ฐ์‚ฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค โ€” ๋‹ค์ด์ œ์ŠคํŠธ๋ฅผ ๊ณ ์ •ํ•˜๊ณ , ์†Œ์Šค๋ฅผ ๋ฌธ์„œํ™”ํ•˜๋ฉฐ, ์ฃผ๊ธฐ์ ์ธ ํŒจํ‚ท ์บก์ฒ˜๋กœ ์ œ๋กœ ๋ฐ์ดํ„ฐ ์ด๊ทธ๋ ˆ์Šค๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

์—ฌ๋Ÿฌ ์ €์žฅ์†Œ๊ฐ€ GPU ์„œ๋ฒ„๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์˜ˆ โ€” GPU ์„œ๋ฒ„๋Š” ๋‹จ์ง€ HTTP ์—”๋“œํฌ์ธํŠธ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ์„œ๋ฒ„์— ์šฉ๋Ÿ‰์ด ์žˆ๋Š” ํ•œ ์ž„์˜์˜ ์ˆ˜์˜ ์ €์žฅ์†Œ๊ฐ€ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™œ์„ฑ ์ €์žฅ์†Œ๊ฐ€ 10๊ฐœ ์ด์ƒ์ธ ์กฐ์ง์˜ ๊ฒฝ์šฐ, ํ•˜๋‚˜์˜ ์‹œ๋„๋Ÿฌ์šด ์ €์žฅ์†Œ(๋Œ€ํ˜• ๋ชจ๋…ธ๋ ˆํฌ, ๋นˆ๋ฒˆํ•œ ๊ฐ•์ œ ํ‘ธ์‹œ)๊ฐ€ ๋‹ค๋ฅธ ์ €์žฅ์†Œ๋ฅผ ๊ตถ๊ธฐ์ง€ ์•Š๋„๋ก Ollama ์•ž์˜ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ์— ์ €์žฅ์†Œ๋ณ„ ์†๋„ ์ œํ•œ์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.

CI์—์„œ ์˜คํƒ์„ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๊นŒ?

์„ธ ๊ฐ€์ง€ ๋ ˆ์ด์–ด. ์ฒซ์งธ, ํ”„๋กฌํ”„ํŠธ ์„ค๊ณ„ โ€” ๋†’์€ ์‹ฌ๊ฐ๋„ ์ž„๊ณ„๊ฐ’์„ ์„ค์ •ํ•˜๊ณ , ๊ตฌ์กฐํ™”๋œ ์ถœ๋ ฅ์„ ๊ฐ•์ œํ•˜๋ฉฐ, ์ž ์ •์  ๊ฒฐ๊ณผ์— ๋ ˆ์ด๋ธ”์„ ๋ถ™์ด์‹ญ์‹œ์˜ค. ๋‘˜์งธ, action ์ˆ˜์ค€ ํ•„ํ„ฐ๋ง โ€” severity >= "high"์—์„œ๋งŒ ์ฐจ๋‹จ; ์ค‘๊ฐ„/๋‚ฎ์Œ์€ ๋Œ“๊ธ€๋กœ ํ‘œ์‹œํ•˜์‹ญ์‹œ์˜ค. ์…‹์งธ, ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„ โ€” ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐ ๋Œ“๊ธ€์— ๐Ÿ‘/๐Ÿ‘Ž๋กœ ๋ฐ˜์‘ํ•˜๊ฒŒ ํ•˜๊ณ , ์ฃผ 1ํšŒ ๐Ÿ‘Ž๋ฅผ ๊ฒ€ํ† ํ•˜์—ฌ ๊ฐ€์žฅ ํ”ํ•œ ์˜คํƒ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ์–ต์ œํ•˜๋„๋ก ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์‹ญ์‹œ์˜ค. ํ•œ ๋‹ฌ์˜ ์กฐ์ • ํ›„ 5~10% ๋น„์œจ์„ ์˜ˆ์ƒํ•˜์‹ญ์‹œ์˜ค; ์ง€์†์ ์ธ ๋ฐ˜๋ณต์œผ๋กœ 5% ๋ฏธ๋งŒ์ด ๋‹ฌ์„ฑ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

โ† ๊ณ ๊ธ‰ ๋กœ์ปฌ LLM์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ

๋กœ์ปฌ LLM์œผ๋กœ CI/CD ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์ž๋™ํ™” 2026: PR์„ ์ž๋™์œผ๋กœ ๋ฆฌ๋ทฐํ•˜์‹ญ์‹œ์˜ค