๐ ์ ํ ํธ์คํ AI ์ฝ๋ ์์ฑ: ๊ฐ์ธ AI ์ฝ๋ฉ ์ด์์คํดํธ ๊ตฌ์ถ์ ์ํ ์์ ๊ฐ์ด๋
Source: Dev.to
์ AI ์ฝ๋ ์์ฑ๊ธฐ๋ฅผ ์์ฒด ํธ์คํ ํด์ผ ํ ๊น์?
์์ ํ ๋ฐ์ดํฐ ์ฃผ๊ถ
- IP ๋ณดํธ โ ๊ฒฝ์ ์ฐ์๊ฐ ์กฐ์ง ๋ด๋ถ์ ๋จธ๋ฌด๋ฆ ๋๋ค.
- ๊ณ ๊ฐ ๊ธฐ๋ฐ ์ ์ง โ ๋ฏผ๊ฐํ ํ๋ก์ ํธ ์ธ๋ถ ์ ๋ณด๋ฅผ ๋ ธ์ถํ ์ํ์ด ์์ต๋๋ค.
- ๊ท์ ์ค์ โ GDPR, HIPAA, SOCโฏ2 ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํฉ๋๋ค.
- ์์ด๊ฐญ ํ๊ฒฝ โ ๋ณด์์ด ๊ฐํ๋ ๊ฒฉ๋ฆฌ๋ ๊ฐ๋ฐ ๋คํธ์ํฌ๋ฅผ ์ง์ํฉ๋๋ค.
์ฅ๊ธฐ ๋น์ฉ ํจ์จ์ฑ
์์ฒด ํธ์คํ ์ ์ด๊ธฐ ํฌ์๊ฐ ํ์ํ์ง๋ง ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก ๊ฒฝ์ ์ฑ์ด ์ข์์ง๋๋ค. 50๋ช ์ ๊ฐ๋ฐ์๋ฅผ ๊ธฐ์ค์ผ๋ก ํด๋ผ์ฐ๋ ๋น์ฉ์ $12,000โฏ/โฏ๋ (โโฏ$60,000โฏ5๋ )์ธ ๋ฐ๋ฉด, ์์ฒด ํธ์คํ ์ธํ๋ผ ๋น์ฉ์ $25,000โ$40,000 ์ ๋๋ก ๋์ผ ๊ธฐ๊ฐ์ $20,000โ$35,000๋ฅผ ์ ๊ฐํ๊ณ ์ฌ์ฉ ์ ํ๋ ์์ ์ค๋๋ค.
๋ฌด์ ํ ์ปค์คํฐ๋ง์ด์ง
์์ฒด ํธ์คํ ์๋ฃจ์ ์ ํน์ ์ฝ๋๋ฒ ์ด์ค์ ๋ง์ถฐ ๋ชจ๋ธ์ ๋ฏธ์ธ ์กฐ์ ํ๊ณ , ๋ง์ถค ํ๋กฌํํธ๋ฅผ ๊ตฌํํ๋ฉฐ, ๋ด๋ถ ๋๊ตฌ์ ๊น๊ฒ ํตํฉํ๊ณ , ์คํ์ ์ธ ๋ชจ๋ธ์ ์คํํ๋ฉฐ, ๊ณ ์ ํ ๊ธฐ์ ์คํ์ ์ต์ ํํ ์ ์๋ ์์ ํ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค.
์ฃผ์ ์์ฒด ํธ์คํ ์๋ฃจ์
Continue.dev
Continue๋ ์์ฒด ํธ์คํ ๋ฐฐํฌ๋ฅผ ์ํด ์ค๊ณ๋ ์คํ์์ค AI ์ฝ๋ ์ด์์คํดํธ์ ๋๋ค.
ํต์ฌ ๊ธฐ๋ฅ
- Ollama, LMโฏStudio ๋๋ OpenAI ํธํ API๋ฅผ ํตํ ๋ก์ปฌ ๋ชจ๋ธ ์ฌ์ฉ.
- ๊น์ ์ฝ๋๋ฒ ์ด์ค ์ดํด๋ฅผ ๋ฐํ์ผ๋ก ํ ์ปจํ ์คํธ ์ธ์ ์ฝ๋ ์์ฑ.
- ์ธ๋ผ์ธ ์ฝ๋ ํธ์ง ๋ฐ ๋ฆฌํฉํ ๋ง ๊ธฐ๋ฅ.
- ์์ฐ์ดโ์ฝ๋ ๋ณํ.
- ์ฌ๋ฌ ๋ชจ๋ธ์ ๋์์ ์ง์.
์ Continue๋ฅผ ์ ํํ ๊น?
๋ฒค๋ ๋ฝ์ธ ์์, ํ๋ฐํ ์ปค๋ฎค๋ํฐ, VSโฏCode์ JetBrains IDE์์ ๋์, GPTโ4๋ถํฐ CodeโฏLlama๊น์ง ๋ชจ๋ ๋ชจ๋ธ ์ง์.
Tabby
Tabby๋ ์ธํ๋ผ ์ ์ฒด์ ๊ฑธ์ณ GitHub Copilot ์คํ์ผ ์๋์์ฑ์ ์ ๊ณตํฉ๋๋ค.
ํต์ฌ ๊ธฐ๋ฅ
- ํ์ดํํ ๋ ์ค์๊ฐ ์ฝ๋ ์ ์.
- ๋ ํฌ์งํ ๋ฆฌ ์์ค์ ์ฝ๋ ์ดํด.
- 40๊ฐ ์ด์์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์ง์.
- ํฅ์๋ ์ปจํ ์คํธ๋ฅผ ์ํ Retrievalโaugmented Generation (RAG).
- ์๋น์ ๊ธ GPU์์๋ ๊ตฌ๋ ๊ฐ๋ฅํ ๊ฒฝ๋์ฑ.
๋น ๋ฅธ ์ค์
docker run -it --gpus all -p 8080:8080 -v $HOME/.tabby:/data \
tabbyml/tabby serve --model TabbyML/StarCoder-1B --device cuda
LocalAI
LocalAI๋ OpenAI API๋ฅผ ์์ ํ ๋ก์ปฌ์์ ๋์ฒดํ๋ ์๋ฃจ์ ์ผ๋ก, n8n๊ณผ ๊ฐ์ ์๋ํ ํ์ดํ๋ผ์ธ์ ์ต์ ์ ๋๋ค.
ํต์ฌ ๊ธฐ๋ฅ
- OpenAI API ํธํ์ฑ.
- ๋ค์ํ ๋ชจ๋ธ ํฌ๋งท ์ง์ (GGML, GGUF, GPTQ).
- CPU ๋๋ GPU์์ ์คํ.
- ์ต๋ ํตํฉ ์ ์ฐ์ฑ์ ์ํ REST API.
Ollama
Ollama๋ ๋ํ ์ธ์ด ๋ชจ๋ธ์ ๋ก์ปฌ์์ ๊ฐ๋จํ ์คํํ ์ ์๊ฒ ํด ์ฃผ๋ CLI, ์๋ ๋ชจ๋ธ ๊ด๋ฆฌ, ๋ฐฉ๋ํ ๋ชจ๋ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ฌ์ฉ ์์
ollama run codellama:13b
curl http://localhost:11434/api/generate -d '{
"model": "codellama:13b",
"prompt": "Write a Python function to validate email addresses."
}'
์์ฒด ํธ์คํ ์คํ ๊ตฌ์ถํ๊ธฐ
ํ๋์จ์ด ์๊ตฌ์ฌํญ
| ํ ๊ท๋ชจ | CPU | RAM | GPU | ์คํ ๋ฆฌ์ง | ๋๋ต์ ์ธ ๋น์ฉ |
|---|---|---|---|---|---|
| ์๊ท๋ชจ (1โ5 dev) | 6+ ์ฝ์ด | 16โ32โฏGB | RTXโฏ3060โฏ12โฏGB | 500โฏGBโฏSSD | $1,500โ$3,000 |
| ์ค๊ฐ ๊ท๋ชจ (10โ20 dev) | 12+ ์ฝ์ด | 64โฏGB | RTXโฏ4090โฏ24โฏGB | 1โฏTBโฏSSD | $5,000โ$8,000 |
| ๋๊ท๋ชจ (50+ dev) | 24+ ์ฝ์ด | 128โฏGB+ | ๋ค์ค A6000โฏ48โฏGB | 2โฏTB+โฏRAID | $20,000โ$50,000+ |
๋ชจ๋ธ ์ ํ ๊ฐ์ด๋
- ์ฝ๋ ์๋์์ฑ: DeepSeek Coderโฏ6.7B (์๋/ํ์ง ๊ท ํ), CodeโฏLlamaโฏ13B (๋ฒ์ฉ), StarCoderโฏ15B (๋ค์ค ์ธ์ด).
- ์ฝ๋ ์์ฑ: DeepSeek Coderโฏ33B (๋ณต์ก ์์ ๊ณ ํ์ง), WizardCoderโฏ34B (์ฐ์ํ ์ง์ ์ํ), CodeโฏLlamaโฏ34B (๊ฐ๋ ฅํ ์ถ๋ก ).
- ์ฝ๋ ์ค๋ช : Mistralโฏ7BโฏInstruct (๋น ๋ฅด๊ณ ๋ฅ์), CodeโฏLlamaโฏInstructโฏ13B (๋ํํ).
IDE ํตํฉ
VSโฏCode + Continue
{
"models": [{
"title": "DeepSeek Coder",
"provider": "ollama",
"model": "deepseek-coder:6.7b-instruct"
}],
"tabAutocompleteModel": {
"provider": "ollama",
"model": "codellama:7b"
}
}
n8n๊ณผ ์ฐ๊ณํ ์ํฌํ๋ก ์๋ํ
์ n8n๊ณผ ์์ฒด ํธ์คํ AI๋ฅผ ๊ฒฐํฉํ ๊น?
- ์๋ ์ฝ๋ ๋ฆฌ๋ทฐ ์ํฌํ๋ก โ Git ์ปค๋ฐ์ ํธ๋ฆฌ๊ฑฐ๋ก ๋ก์ปฌ AI์ ์ฝ๋๋ฅผ ์ ๋ฌํด ๋ณด์ ์ทจ์ฝ์ ์ ๊ฒ์ฌํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ ๋ค์ ๊ฒ์ํฉ๋๋ค.
- ๋ฌธ์ ์๋ ์์ฑ โ ๋ฌธ์๊ฐ ์๋ ํจ์๋ฅผ ๊ฐ์ํ๊ณ , AI๊ฐ JSDoc์ด๋ docstring์ ์์ฑํด ์๋ PR์ ๋ง๋ค๊ณ ์ ๊ธฐ์ ์ธ ๋ฌธ์ ๊ฐ์ฌ๋ฅผ ์ค์ผ์ค๋งํฉ๋๋ค.
- ์ง๋ฅํ ์ฝ๋ ๊ฒ์ โ ์์ฒด ๋ชจ๋ธ์ ํ์ฉํด ์๋ฏธ ๊ธฐ๋ฐ ์ฝ๋ ๊ฒ์์ ๊ตฌ์ถํ๊ณ , ๋ด๋ถ ์ค๋ํซ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค๋ฉฐ, ์์ฐ์ด ์ง์๋ก ์ฝ๋๋ฒ ์ด์ค ์ ์ฒด๋ฅผ ํ์ํฉ๋๋ค.
n8n ์ค์
docker run -d --restart unless-stopped \
-p 5678:5678 -v ~/.n8n:/home/node/.n8n \
--name n8n n8nio/n8n
์์ ์ํฌํ๋ก: ์๋ ์ฝ๋ ๋ฆฌ๋ทฐ
- ์นํ ์ด GitHub PR ์ด๋ฒคํธ๋ฅผ ์์ .
- HTTP Request๋ก diff๋ฅผ ๊ฐ์ ธ์ด.
- HTTP Request๋ฅผ LocalAI/Ollama์ ์ ์กํด ๋ถ์.
- IF ๋ ธ๋๊ฐ ๋ฌธ์ ๋ฅผ ๊ฒ์ฌ.
- GitHub ๋ ธ๋๊ฐ ๋ฆฌ๋ทฐ ์ฝ๋ฉํธ๋ฅผ ๊ฒ์.
- Slack ๋ ธ๋๊ฐ ํ์ ์๋ฆผ.
์์ฒด ํธ์คํ AI์ ์ ์ฒด ๊ฐ๋ฐ ์ธํ๋ผ๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฐ๋ ฅํ n8n ์ํฌํ๋ก๋ฅผ ๋ง๋ค์ด ๋ณด์ธ์.
๊ณ ๊ธ ์ค์
๋ชจ๋ธ ์์ํ
์์ํ๋ ๋ชจ๋ธ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ์๋๋ฅผ ๋์ด๋ฉฐ ํ์ง ์์ค์ ์ต์ํํฉ๋๋ค:
ollama pull codellama:13b-q4_0 # 4โbit: ~8โฏGB VRAM, 2โ3ร ๋น ๋ฆ
ollama pull codellama:13b-q8_0 # 8โbit: ~14โฏGB VRAM, 1.5ร ๋น ๋ฆ
๋ชจ๋ํฐ๋ง
Prometheus์ Grafana๋ฅผ ๋ฐฐํฌํด ์์ฒญ ์ง์ฐ ์๊ฐ, GPU ์ฌ์ฉ๋, ๋ชจ๋ธ ์ถ๋ก ์๊ฐ, ํ ๊น์ด, ํ ํฐ ์์ฑ ์๋ ๋ฑ์ ์ถ์ ํด ์ต์ ์ฑ๋ฅ์ ์ ์งํฉ๋๋ค.
๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก
์ ๊ทผ ์ ์ด
- OAuth2 ์ธ์ฆ ๊ตฌํ.
- ๊ฐ๋ฐ์๋น ๊ณ ์ API ํค ๋ฐ๊ธ.
- ํค ํ์ ์ ์ฑ ์ ์ฉ.
- API ํค ์ฌ์ฉ์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋ง.
๋คํธ์ํฌ ๋ณด์
- VPN ๋๋ ์ ๋ก ํธ๋ฌ์คํธ ๋คํธ์ํฌ ๋ค์ ๋ฐฐ์น.
- ๋ชจ๋ ์๋ํฌ์ธํธ์ SSL/TLS ์ ์ฉ.
- Rate limiting ์ ์ฉ.
fail2ban์ผ๋ก ๋ฌด์ฐจ๋ณ ๊ณต๊ฒฉ ๋ฐฉ์ด.- ์ ๊ธฐ์ ์ธ ๋ณด์ ๊ฐ์ฌ๋ฅผ ์ํ.
๊ฐ์ฌ ๋ก๊ทธ
def log_ai_request(user, prompt, response):
logger.info({
'timestamp': datetime.utcnow(),
'user': user,
'prompt_length': len(prompt),
'model_used': 'codellama-13b'
})
์กฐ์ง์ ์ํ ํ์ธโํ๋
์ปค์คํ ๋ชจ๋ธ ๋ง๋ค๊ธฐ
๋ ํฌ์งํ ๋ฆฌ์์ ํ์ต ๋ฐ์ดํฐ๋ฅผ ์์งํ๋, ์ ์ ํ ๋ผ์ด์ ์ค๋ฅผ ํ์ธํ๊ณ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ์ ๊ฑฐํ ๋ค ํ์ธโํ๋์ ์งํํฉ๋๋ค.
