κ°λ°μκ° μμλλ©΄ μ’μ MCP(Model Context Protocol) ν λ²μ μ 리
κ°λ°μκ° μμλλ©΄ μ’μ MCP(Model Context Protocol) ν λ²μ μ 리 μμ¦ κ°λ° νμ₯μμ βAIλ₯Ό λΆμ΄κΈ΄ λΆμλλ°, ν΄μ΄...
κ°λ°μκ° μμλλ©΄ μ’μ MCP(Model Context Protocol) ν λ²μ μ 리
μμ¦ κ°λ° νμ₯μμ βAIλ₯Ό λΆμ΄κΈ΄ λΆμλλ°, ν΄μ΄λ λ°μ΄ν°κ° μ κ°κ°μ΄λΌ κ΄λ¦¬κ° νλ€λ€βλ μκΈ°λ₯Ό μμ£Ό λ£μ΅λλ€. μ½λ μ μ₯μ, μ΄μ νΈλ컀, μ¬λ΄ μν€, DB, λ‘κ·Έβ¦ νμν 컨ν μ€νΈλ λμ΄λλλ°, λͺ¨λΈμ μ°κ²°νλ λ°©μμ λ§€λ² λ¬λΌ ꡬνκ³Ό μ΄μμ΄ λ³΅μ‘ν΄μ§μ£ . μ΄λ΄ λ λ±μ₯νλ κ°λ μ΄ MCP(Model Context Protocol) μ λλ€. νλ§λλ‘, λͺ¨λΈμ΄ μΈλΆ λꡬ/λ°μ΄ν°μ μ κ·Όνλ λ°©μμ νμ€ννλ €λ νλ¦μ΄λΌκ³ 보면 μ΄ν΄κ° μ½μ΅λλ€.
MCPκ° λκΈΈλ κ°λ°μλ€μ΄ μ£Όλͺ©ν κΉ?
MCPλ AI λͺ¨λΈ(λλ μμ΄μ νΈ)μ΄ μμ μ μνν λ νμν 컨ν μ€νΈ(λ¬Έμ, μ½λ, ν°μΌ, DB μ‘°ν κ²°κ³Ό λ±) λ₯Ό κ°μ Έμ€κ±°λ, λꡬ(ν΄)λ₯Ό νΈμΆνλ λ°©λ²μ μΌκ΄λ μΈν°νμ΄μ€λ‘ λ€λ£¨μλ μμ΄λμ΄μ λλ€.
- λͺ¨λΈ β λꡬ/λ°μ΄ν° μ°κ²°μ λ§€λ² μ»€μ€ν μΌλ‘ λ§λ€μ§ μκ² λκ³
- μ΄λ€ ν΄μ΄λ βκ·κ²©μ λ§κ²β λΆμΌ μ μλλ‘ ν΄
- νμ΄ μ΄μνλ μ¬λ΄ μμ€ν κ³Όλ μ°κ²°μ μμνκ² λ§λλ λ°©ν₯μ λλ€. μ 리νλ©΄, βλͺ¨λΈμκ² νμν κ²μ μμ νκ³ μ¬μ¬μ© κ°λ₯νκ² κ³΅κΈνλ μ°κ²° κ·μ½βμ κ°κΉμ΅λλ€.
μ νμνκ°: κ°λ° κ΄μ μ νμ€μ μΈ λ¬Έμ 3κ°μ§
1) μ°κ²° λ°©μμ΄ λμ΄λ μλ‘ μ μ§λ³΄μκ° νλ°
μλ₯Ό λ€μ΄ Git, Jira, Confluence, λ΄λΆ DBλ₯Ό κ°κ° λ€λ₯Έ λ°©μμΌλ‘ λΆμ΄λ©΄, λͺ¨λΈ/μμ΄μ νΈκ° λ°λ λλ§λ€ μμ ν¬μΈνΈκ° λμ΄λ©λλ€. MCP κ°μ κ·κ²©μ΄ μμΌλ©΄ λꡬ μͺ½μ νμ€ ννλ‘ κ°μΈ μ¬μ¬μ©νκΈ° μ¬μμ§λλ€.
2) κΆνκ³Ό 보μμ΄ μ λ§€ν΄μ§κΈ° μ¬μ
βλͺ¨λΈμ΄ DBλ₯Ό μ½μ΄λ λλ?β, βμ΄ API νΈμΆμ λκ° μΉμΈνλ?β κ°μ λ¬Έμ κ° μκΉλλ€. νμ€νλ λꡬ νΈμΆ ꡬ쑰λ κΆν λ²μμ κ°μ¬ λ‘κ·Έλ₯Ό μ€κ³ν λλ λμμ΄ λ©λλ€. (λ€λ§ μ€μ 보μμ ꡬνκ³Ό μ΄μ μ μ± μ΄ ν΅μ¬μ΄λΌ, κ·κ²©λ§μΌλ‘ ν΄κ²°λμ§ μμ΅λλ€.)
3) 컨ν μ€νΈ νμ§μ΄ κ³§ κ²°κ³Ό νμ§
λͺ¨λΈμ΄ μ΄λ€ λ¬Έμλ₯Ό μ½μλμ§, μ΄λ€ 쿼리λ₯Ό λ λ Έλμ§κ° κ²°κ³Όλ₯Ό μ’μ°ν©λλ€. MCP λ°©μμ βνμν 컨ν μ€νΈλ₯Ό μ ν΄μ§ μ μ°¨λ‘ κ°μ Έμ€κ³ κΈ°λ‘νλ€βλ κ΄μ μμ κ°λ° νλ‘μΈμ€μ μ λ§μ΅λλ€.
λμ νλ¦μ μ¬μ΄ μλ‘ μ΄ν΄νκΈ°
κ°μ₯ νν μλ리μ€λ₯Ό λ€μ΄λ³Όκ²μ.
- μ¬μ©μκ° βμ΄λ² 릴리μ¦μμ κ²°ν¨ μ΄μ μμ½ν΄μ€βλΌκ³ μμ²
- λͺ¨λΈμ μ΄ μμ μ νμν λꡬλ€μ νλ¨
- μ΄μ νΈλ컀 μ‘°ν
- λ¦΄λ¦¬μ¦ λ ΈνΈ λ¬Έμ μ½κΈ°
- νμνλ©΄ ν΅κ³ μ§κ³
- κ·Έ κ³Όμ μμ λͺ¨λΈμ μ μλ μΈν°νμ΄μ€λ‘ λꡬλ₯Ό νΈμΆνκ³ , μλ΅μ 컨ν μ€νΈλ‘ μμ μ΅μ’ λ΅μ μμ± ν΅μ¬μ λͺ¨λΈμ΄ βμ무 APIλ λ§ νΈμΆβνλ κ² μλλΌ, λ±λ‘λ λꡬλ₯Ό κ·κ²©μ λ§κ² νΈμΆνλ€λ μ μ λλ€.
κ°λ¨ν βλꡬ μλ²β μμ(κ°λ μ©)
μλλ κ°μ μ‘κΈ° μν μμ£Ό λ¨μνν μμμ λλ€. μ€μ MCP ꡬνμ λΌμ΄λΈλ¬λ¦¬/λ°νμμ λ°λΌ λ€λ₯Ό μ μμ§λ§, κ°λ°μκ° μ€κ³ν λλ λκ° μ΄λ° ννλ₯Ό λ μ¬λ¦¬λ©΄ νΈν©λλ€.
# κ°λ
μμ: μ΄μ λͺ©λ‘μ μ‘°ννλ λꡬλ₯Ό "κ·κ²©νλ ν¨μ"λ‘ μ 곡νλ€κ³ κ°μ
from typing import TypedDict, List
class Issue(TypedDict):
key: str
title: str
status: str
def list_release_issues(release_tag: str) -> List[Issue]:
"""
λͺ¨λΈμ΄ νΈμΆν μ μλ λꡬ ν¨μ(μμ).
μ€μ λ‘λ λ΄λΆ μ΄μ νΈλ컀 API/DBλ₯Ό μ‘°ννκ³ κ²°κ³Όλ₯Ό μ κ·νν΄ λ°ν.
"""
# TODO: κΆν 체ν¬, κ°μ¬ λ‘κ·Έ, μΊμ, μλ¬ νμ€ν λ±
return [
{"key": "PROJ-101", "title": "λ‘κ·ΈμΈ μ€ν¨ κ°ν λ°μ", "status": "Done"},
{"key": "PROJ-115", "title": "κ²°μ 리λ€μ΄λ νΈ μ€λ₯", "status": "In QA"},
]
μ΄λ° λꡬλ₯Ό μ¬λ¬ κ° μ€λΉν΄λλ©΄ λͺ¨λΈμ μμ μ λ§κ² νΈμΆ μ‘°ν©μ λ§λ€κ³ , κ°λ°μλ λꡬμ μ λ ₯/μΆλ ₯ κ·κ²©κ³Ό μμ μ₯μΉμ μ§μ€ν μ μμ΅λλ€.
κ°λ°νμμ MCPλ₯Ό λμ ν λ 체ν¬λ¦¬μ€νΈ
### 1) λꡬμ βμ λ ₯/μΆλ ₯βλΆν° λ¨λ¨νκ²
- μ λ ₯ νλΌλ―Έν°λ μ΅μννκ³ μλ―Έλ₯Ό λͺ νν
- μΆλ ₯μ UIκ° μλ λ°μ΄ν° μ€μ¬(JSON νν λ±) μΌλ‘ μ κ·ν
- μλ¬ νμμ ν΅μΌ(κΆν μμ, νμμμ, λ°μ΄ν° μμ)
### 2) κΆνκ³Ό λ²μ μ νμ λ¨Όμ μ€κ³
- μ½κΈ° μ μ© λꡬμ μ°κΈ° λꡬλ₯Ό λΆλ¦¬
- νκ²½(κ°λ°/μ€ν μ΄μ§/μ΄μ) λ³λ‘ μ κ·Ό μ μ΄
- λκ° μ΄λ€ λꡬλ₯Ό νΈμΆνλμ§ λ‘κ·Έ λ¨κΈ°κΈ°
### 3) βμ’μ λꡬβλ μκ³ μ‘°ν© κ°λ₯νλ€
κ±°λν λ§λ₯ λꡬ νλ보λ€,
- get_issue(id)
- search_issues(query)
- get_release_notes(tag) μ²λΌ μμ λꡬλ₯Ό μ‘°ν©νλ νΈμ΄ μ¬μ¬μ©μ±κ³Ό ν μ€νΈκ° μ’μ΅λλ€.
λ§λ¬΄λ¦¬: MCPλ βAI κΈ°λ₯βμ΄ μλλΌ βκ°λ° μΈνλΌβμ κ°κΉλ€
MCPλ₯Ό μ μ΄ν΄νλ©΄, AIλ₯Ό λΆμΌ λ κ°μΌλ‘ μ°κ²°νλ κ² μλλΌ κ°λ° κ°λ₯ν κ΅¬μ‘°λ‘ λ§λ€ μ μμ΅λλ€. λꡬ νΈμΆμ νμ€ννκ³ , 컨ν μ€νΈ νλ¦μ κ΄λ¦¬νκ³ , κΆνκ³Ό λ‘κ·Έλ₯Ό κ°μΆ ννλ‘μ. κ²°κ΅ νμ μμ μ€μν 건 βλ°λͺ¨κ° λλκ°βλ³΄λ€ βνμ΄ μ μ§λ³΄μνλ©° κ³μ νμ₯ν μ μλκ°βλκΉμ.
μνμλ©΄, μ¬λ΄ κ°λ° νκ²½ κΈ°μ€(μ: Git κΈ°λ° μ½λ κ²μ + μ΄μ νΈλ컀 + μ¬λ΄ μν€)μΌλ‘ βλꡬ μ€κ³μβμ λ ꡬ체μ μΌλ‘ μ‘μλ릴κ²μ.
β¬οΈ μ΄ κΈμ΄ λμμ΄ λμ ¨λ€λ©΄, μλ κ΄κ³ λ₯Ό ν λ²λ§ ν΄λ¦ν΄μ£ΌμΈμ! μ μκ² ν° νμ΄ λ©λλ€ πββοΈ β¬οΈ