IT

πŸ€–λ‚˜λ…Έ λ°”λ‚˜λ‚˜ ν”„λ‘œ!AI λΉ„μ„œμ—κ²Œ 일을 μ‹œμΌœλΌ: λ‚˜λ…Έ λ°”λ‚˜λ‚˜ ν”„λ‘œ 둜컬 LLM ν™œμš© 일상 μžλ™ν™” 슀크립트 μž‘μ„± κ°€μ΄λ“œ

ν”„λ‘€λ‘œκ·Έ: 둜컬 LLM, 이제 β€˜λ§β€™μ΄ μ•„λ‹Œ β€˜ν–‰λ™β€™μ„ μ‹œμž‘ν•©λ‹ˆλ‹€

이전 κ°€μ΄λ“œλ₯Ό 톡해 λ‚˜λ…Έ λ°”λ‚˜λ‚˜ ν”„λ‘œ(NBP)에 λ‚˜λ§Œμ˜ 둜컬 LLM μ„œλ²„λ₯Ό κ΅¬μΆ•ν•˜μ…¨μŠ΅λ‹ˆλ‹€. 이제 λ‹€μŒ λ‹¨κ³„μž…λ‹ˆλ‹€. 직접 λŒ€ν™”ν•˜λŠ” 것을 λ„˜μ–΄, AIκ°€ μ •ν•΄μ§„ μ‹œκ°„μ— 슀슀둜 νŠΉμ • μž‘μ—…μ„ μ²˜λ¦¬ν•˜κ²Œ λ§Œλ“€μ–΄μ•Ό ν•©λ‹ˆλ‹€.

이것이 λ°”λ‘œ β€˜μΌμƒ μžλ™ν™” μŠ€ν¬λ¦½νŠΈβ€™μ˜ 힘이며, NBP의 μ €μ „λ ₯ 24μ‹œκ°„ ꡬ동 λŠ₯λ ₯κ³Ό κ²°ν•©ν•  λ•Œ μ§„μ •ν•œ κ°€μΉ˜λ₯Ό λ°œνœ˜ν•©λ‹ˆλ‹€.

🌟 핡심: μš°λ¦¬λŠ” LLM을 챗봇이 μ•„λ‹Œ, APIλ₯Ό 톡해 λͺ…령을 μˆ˜ν–‰ν•˜λŠ” 일꾼으둜 ν™œμš©ν•  κ²ƒμž…λ‹ˆλ‹€. (μ™ΈλΆ€ API μš”κΈˆ ❌)


1. πŸ–₯ 1단계: 둜컬 LLMμ—κ²Œ λͺ…λ Ήν•˜λŠ” 방법 (API 호좜 Deep Dive)

둜컬 LLM(Ollama κΈ°μ€€)κ³Ό λŒ€ν™”ν•˜λ €λ©΄, ν„°λ―Έλ„μ΄λ‚˜ μ›Ή UIλ₯Ό μ‚¬μš©ν•˜λŠ” λŒ€μ‹  β€˜API(Application Programming Interface)β€™λΌλŠ” ν†΅λ‘œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

β‘  LLM μ„œλ²„ μ—”λ“œν¬μΈνŠΈ 확인

NBPμ—μ„œ LLM이 정상 μž‘λ™ν•˜κ³  μžˆλ‹€λ©΄, λ‹€μŒκ³Ό 같은 μ£Όμ†Œλ‘œ API 호좜이 κ°€λŠ₯ν•©λ‹ˆλ‹€. (포트 11434)

Plaintext

http://[NBP IPμ£Όμ†Œ]:11434/api/generate

β‘‘ Python을 μ΄μš©ν•œ API 호좜 슀크립트 μ˜ˆμ‹œ

λŒ€λΆ€λΆ„μ˜ μžλ™ν™” μŠ€ν¬λ¦½νŠΈλŠ” Python으둜 μž‘μ„±λ©λ‹ˆλ‹€. NBP에 Python을 μ„€μΉ˜ν•˜κ³ , λ‹€μŒ μ½”λ“œλ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€.

Python

import requests
import json

# 둜컬 Ollama API μ£Όμ†Œ
API_URL = "http://localhost:11434/api/generate"
MODEL = "tinyllama" # NBP에 μ„€μΉ˜λœ λͺ¨λΈ 이름
PROMPT = "였늘의 날씨 λ‰΄μŠ€λ₯Ό μš”μ•½ν•˜μ—¬ 3μ€„λ‘œ μ •λ¦¬ν•΄μ€˜."

data = {
    "model": MODEL,
    "prompt": PROMPT,
    "stream": False # κ²°κ³Όλ₯Ό ν•œλ²ˆμ— λ°›κΈ° μœ„ν•΄ stream λΉ„ν™œμ„±ν™”
}

response = requests.post(API_URL, data=json.dumps(data))

# μ‘λ‹΅μ—μ„œ AIκ°€ μƒμ„±ν•œ ν…μŠ€νŠΈλ§Œ μΆ”μΆœ
if response.status_code == 200:
    result = response.json().get("response")
    print("πŸ€– AI λΉ„μ„œμ˜ λ‹΅λ³€:")
    print(result)
  • Deep Tip: requests λΌμ΄λΈŒλŸ¬λ¦¬λŠ” pip install requests λͺ…λ Ήμ–΄λ‘œ μ„€μΉ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€. NBP의 μ„±λŠ₯상 stream: False둜 ν•œ λ²ˆμ— κ²°κ³Όλ₯Ό λ°›λŠ” 것이 μ•ˆμ •μ μž…λ‹ˆλ‹€.

2. 🏠 2단계: ν˜„μ‹€ μžλ™ν™” μ˜ˆμ‹œ 1 – β€˜μ•„μΉ¨ λ‰΄μŠ€ μš”μ•½λ΄‡β€™

κ°€μž₯ ν˜„μ‹€μ μΈ 첫 번째 μžλ™ν™”μž…λ‹ˆλ‹€. μƒˆλ²½μ— ν¬λ‘€λ§ν•œ λ‰΄μŠ€ ν—€λ“œλΌμΈμ„ LLM이 μš”μ•½ν•˜μ—¬ μ•„μΉ¨ 7μ‹œμ— ν…”λ ˆκ·Έλž¨μœΌλ‘œ λ³΄λ‚΄μ£ΌλŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€.

β‘  크둀링 슀크립트 (κ°€μ •)

νŠΉμ • λ‰΄μŠ€ μ‚¬μ΄νŠΈμ—μ„œ 제λͺ©κ³Ό 링크λ₯Ό κ°€μ Έμ˜€λŠ” Python 슀크립트 (news_crawler.py)κ°€ μ€€λΉ„λ˜μ—ˆλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€.

β‘‘ μš”μ•½ 및 λ°œμ†‘ 슀크립트 (daily_summary.py)

LLMμ—κ²Œ 크둀링된 ν…μŠ€νŠΈλ₯Ό μ „λ‹¬ν•˜κ³ , μš”μ•½λœ 결과물을 ν…”λ ˆκ·Έλž¨ API둜 λ³΄λ‚΄λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€.

LLMμ—κ²Œ μ£ΌλŠ” λͺ…λ Ή(Prompt)

β€œμ•„λž˜ λ‰΄μŠ€ 기사 리슀트λ₯Ό μ°Έκ³ ν•˜μ—¬, 2025λ…„ 11μ›” 27일 μ•„μΉ¨ 좜근길 μ£Όμš” 이슈 5κ°€μ§€λ₯Ό ν—€λ“œλΌμΈκ³Ό 1쀄 μš”μ•½μœΌλ‘œ μ •λ¦¬ν•˜κ³ , λ§ˆμ§€λ§‰μ— μΆœν‡΄κ·Ό μ†Œμš” μ‹œκ°„μ„ ν•¨κ»˜ μ˜ˆμΈ‘ν•΄μ€˜.”


3. πŸ›‘ 3단계: μ‹œμŠ€ν…œ μžκ°€ 진단 및 λ³΄κ³ μ„œ μžλ™ 생성 (Deep Dive)

NBPκ°€ 24μ‹œκ°„ μ„œλ²„λ‘œ μž‘λ™ν•˜λ©΄μ„œ λ°œμƒν•˜λŠ” 각쒅 μ—λŸ¬λ₯Ό AIκ°€ 슀슀둜 κ°μ§€ν•˜κ³  λ³΄κ³ μ„œλ₯Ό μž‘μ„±ν•˜κ²Œ λ§Œλ“­λ‹ˆλ‹€.

β‘  둜그 파일 μˆ˜μ§‘

NBPλŠ” μ‹œμŠ€ν…œ 둜그 파일(예: /var/log/syslog)을 κΈ°λ‘ν•©λ‹ˆλ‹€.

β‘‘ AI 진단 슀크립트

  1. Python이 둜그 파일의 졜근 100쀄을 μ½μ–΄μ˜΅λ‹ˆλ‹€.
  2. LLM API에 둜그 ν…μŠ€νŠΈλ₯Ό μ „λ‹¬ν•˜λ©° λ‹€μŒ Promptλ₯Ό μž…λ ₯ν•©λ‹ˆλ‹€.

LLMμ—κ²Œ μ£ΌλŠ” λͺ…λ Ή(Prompt)

β€œμ•„λž˜λŠ” μ–΄μ ―λ°€ 12μ‹œλΆ€ν„° 6μ‹œκΉŒμ§€μ˜ μ„œλ²„ 둜그 기둝이닀. 이 κΈ°λ‘μ—μ„œ β€˜ERROR’, β€˜FAILED’, β€˜FATAL’ ν‚€μ›Œλ“œλ₯Ό ν¬ν•¨ν•˜λŠ” 비정상적인 둜그λ₯Ό μΆ”μΆœν•˜κ³ , ν•΄λ‹Ή 문제의 원인과 μ˜ˆμƒλ˜λŠ” 해결책을 기술적인 μš©μ–΄ λŒ€μ‹  일반적인 ν•œκ΅­μ–΄λ‘œ 2쀄 μ΄λ‚΄λ‘œ μ„€λͺ…ν•΄μ€˜.”

  • κ²°κ³Ό: ❌ λ³΅μž‘ν•œ μ„œλ²„ 둜그λ₯Ό ν•΄μ„ν•˜μ§€ λͺ»ν•˜λ”라도, LLM이 정리해 μ€€ λ³΄κ³ μ„œ 덕뢄에 μƒˆλ²½μ— μ–΄λ–€ λ¬Έμ œκ°€ μžˆμ—ˆλŠ”μ§€ μ‰½κ²Œ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

4. ⏰ 4단계: 슀크립트 μ‹€ν–‰ μ˜ˆμ•½ (Crontab ν™œμš©)

μž‘μ„±λœ Python μŠ€ν¬λ¦½νŠΈκ°€ μ •ν•΄μ§„ μ‹œκ°„μ— μžλ™μœΌλ‘œ μ‹€ν–‰λ˜λ„λ‘ μ„€μ •ν•©λ‹ˆλ‹€.

– Crontab μ„€μ • λͺ…λ Ήμ–΄

SSHμ—μ„œ λ‹€μŒ λͺ…λ Ήμ–΄λ₯Ό μž…λ ₯ν•˜μ—¬ μ˜ˆμ•½ λͺ©λ‘μ„ μ—½λ‹ˆλ‹€.

Bash

crontab -e

– Crontab μ‹€ν–‰ μ˜ˆμ•½ μ˜ˆμ‹œ

맀일 μ•„μΉ¨ 7μ‹œμ— μš”μ•½ 슀크립트(daily_summary.py)λ₯Ό μ‹€ν–‰ν•˜λ„λ‘ μ„€μ •ν•©λ‹ˆλ‹€.

Plaintext

# λΆ„ μ‹œ 일 μ›” μš”μΌ λͺ…λ Ήμ–΄
0 7 * * * python3 /path/to/your/script/daily_summary.py

Deep Tip: Crontab은 ν™˜κ²½ λ³€μˆ˜λ₯Ό μ œλŒ€λ‘œ μΈμ‹ν•˜μ§€ λͺ»ν•  λ•Œκ°€ μžˆμŠ΅λ‹ˆλ‹€. λ°˜λ“œμ‹œ Python 파일의 전체 경둜(/home/user/...)λ₯Ό μ‚¬μš©ν•˜κ³ , λͺ…λ Ήμ–΄ μ•žμ— python3λ₯Ό λͺ…μ‹œν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.


5. κ²°λ‘ : AI μ—μ΄μ „νŠΈλ‘œ μ—…κ·Έλ ˆμ΄λ“œ ν•˜μ„Έμš”

λ‚˜λ…Έ λ°”λ‚˜λ‚˜ ν”„λ‘œμ˜ 둜컬 LLM을 API둜 ν™œμš©ν•˜λŠ” 것은 AIλ₯Ό μˆ˜λ™μ μΈ λŒ€ν™” μƒλŒ€κ°€ μ•„λ‹Œ, λŠ₯동적인 μžλ™ν™” μ—μ΄μ „νŠΈλ‘œ λ§Œλ“œλŠ” μ²«κ±ΈμŒμž…λ‹ˆλ‹€. 이 μž‘μ€ μ„œλ²„λ₯Ό λ‹Ήμ‹ μ˜ κ°€μž₯ 유λŠ₯ν•˜κ³  μ‹ λ’°ν•  수 μžˆλŠ” AI λΉ„μ„œλ‘œ ν™œμš©ν•˜μ„Έμš”!

infodori1234

Recent Posts

πŸ–₯ NetBIOS over TCP IP NBT μ™„μ „ κ°€μ΄λ“œ

둜컬 λ„€νŠΈμ›Œν¬ ν™˜κ²½μ„ μ‘°κΈˆμ΄λΌλ„ 닀뀄본 μ‚¬λžŒμ΄λΌλ©΄ ν•œ λ²ˆμ―€μ€ λ§ˆμ£ΌμΉ˜λŠ” μ΅μˆ™ν•œ 단어가 μžˆμŠ΅λ‹ˆλ‹€. λ°”λ‘œ NetBIOS와 NBTμž…λ‹ˆλ‹€.…

2κ°œμ›” ago

🏠 JSON Schema: 데이터 μœ νš¨μ„± κ²€μ¦μ˜ ν‘œμ€€ 섀계도 πŸ–₯

μ•ˆλ…•ν•˜μ„Έμš”! ν˜„λŒ€ μ›Ή κ°œλ°œμ—μ„œ 데이터 κ΅ν™˜μ˜ 핡심인 JSON(JavaScript Object Notation)을 λ”μš± κ°•λ ₯ν•˜κ³  μ•ˆμ •μ μœΌλ‘œ λ§Œλ“€μ–΄μ£ΌλŠ” 도ꡬ,…

2κ°œμ›” ago

🏠 ECMAScript 3 ν˜Έν™˜μ„± μ™„μ „ 정리 κ°€μ΄λ“œ

❌ ECMAScript 3(E3)λž€ λ¬΄μ—‡μΌκΉŒ ECMAScript 3λŠ” 1999년에 κ³΅μ‹ν™”λœ μžλ°”μŠ€ν¬λ¦½νŠΈ ν‘œμ€€μ΄λ‹€. μ§€κΈˆ 보면 였래된 기술 κ°™μ§€λ§Œ,…

2κ°œμ›” ago

πŸ–₯ CoffeeScript μ™„μ „ κ°€μ΄λ“œ

CoffeeScriptλŠ” ν•œλ•Œ ν”„λ‘ νŠΈμ—”λ“œ 개발 μƒνƒœκ³„μ—μ„œ 맀우 인기 μžˆμ—ˆλ˜ μ–Έμ–΄μ˜€κ³ , μ§€κΈˆλ„ νŠΉμ • ν”„λ‘œμ νŠΈλ‚˜ λ ˆκ±°μ‹œ μ‹œμŠ€ν…œ, κ°„κ²°ν•œ…

2κ°œμ›” ago

🏠 λ©”λͺ¨λ¦¬ λˆ„μˆ˜(Memory Leak) μ‰½κ²Œ μ΄ν•΄ν•˜κΈ°: πŸ–₯ λ‚­λΉ„λ˜λŠ” μ»΄ν“¨ν„°μ˜ κΈ°μ–΅λ ₯ ❌

ν˜„λŒ€μ μΈ ν”„λ‘œκ·Έλž˜λ° ν™˜κ²½μ—μ„œ λ©”λͺ¨λ¦¬ λˆ„μˆ˜(Memory Leak)λŠ” μ—¬μ „νžˆ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ„±λŠ₯ μ €ν•˜μ™€ μΆ©λŒμ„ μΌμœΌν‚€λŠ” μ£Όμš” 원인 쀑…

2κ°œμ›” ago

πŸ–₯️ λΈŒλΌμš°μ € λ Œλ”λ§ κ³Όμ • (CRP) : μ›ΉνŽ˜μ΄μ§€κ°€ λˆˆμ•žμ— λ‚˜νƒ€λ‚˜κΈ°κΉŒμ§€μ˜ λ§ˆλ²•

(Critical Rendering Path, 핡심 λ Œλ”λ§ 경둜 μ™„λ²½ 이해) μ›Ή λΈŒλΌμš°μ €μ— μ£Όμ†Œλ₯Ό μž…λ ₯ν•˜κ³  μ—”ν„°λ₯Ό λˆ„λ₯΄λŠ” μˆœκ°„,…

2κ°œμ›” ago