๋…ธ๋น„์Šค์˜ ์ง„ํ™”: RAG๋ฅผ ๋ฒ„๋ฆฌ๊ณ  ๋ฉ€ํ‹ฐ์—์ด์ „ํŠธ๋กœ ๊ฐˆ์•„ํƒ„ ์ด์•ผ๊ธฐ

seungbo
  • #AI Agent
  • #MCP
  • #์‚ฌ๋‚ด AI ์ฑ—๋ด‡
  • #๋…ธ๋น„์Šค
  • #์—…๋ฌดํšจ์œจํ™”

์ด์ „ ๊ธ€์—์„œ ๋…ธ๋น„์Šค๋ฅผ ๋งŒ๋“ค๋ฉด์„œ ๊ฒช์—ˆ๋˜ RAG์˜ ํ˜„์‹ค์ ์ธ ๋ฌธ์ œ๋“ค์„ ๊ณต์œ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ ํ›„๋กœ ๋ช‡ ๊ฐœ์›”. ๋…ธ๋น„์Šค๋Š” ์™„์ „ํžˆ ๋‹ค๋ฅธ ๋ชจ์Šต์œผ๋กœ ์ง„ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”. ๋…ธ๋จธ์Šค์—์„œ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋กœ ๊ทผ๋ฌดํ•˜๊ณ  ์žˆ๋Š” ์ง€์Šน๋ณด์ž…๋‹ˆ๋‹ค.

๋…ธ๋น„์Šค(Knowbis) ๋Š” ์งˆ๋ฌธ์˜ ํ—ˆ๋“ค์„ ๋‚ฎ์ถ”๊ณ , ์‚ฌ๋‚ด ์ •๋ณด๋ฅผ ์‰ฝ๊ฒŒ ์ฐพ์•„์ฃผ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ๋งŒ๋“  Slack ๊ธฐ๋ฐ˜ ์‚ฌ๋‚ด AI ์ฑ—๋ด‡์ž…๋‹ˆ๋‹ค.

TL;DR

  • RAG ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰์˜ ํ•œ๊ณ„๋ฅผ ์ฒด๊ฐํ•˜๊ณ , ๋ฉ€ํ‹ฐ์—์ด์ „ํŠธ ์•„ํ‚คํ…์ฒ˜๋กœ ์ „ํ™˜
  • Google ADK(Agent Development Kit)๋ฅผ ๋„์ž…ํ•ด ์ „๋ฌธ ์—์ด์ „ํŠธ๋“ค์ด ํ˜‘์—…ํ•˜๋Š” ๊ตฌ์กฐ๋กœ ๊ฐœํŽธ
  • ๊ฐ ์—์ด์ „ํŠธ๋Š” ๋งก์€ ๋„๋ฉ”์ธ(๋ฌธ์„œ, ์ฝ”๋“œ, AWS, ๋ชจ๋‹ˆํ„ฐ๋ง)์— ํŠนํ™”๋œ ๋„๊ตฌ์™€ ์ „๋žต์„ ๊ฐ€์ง
  • Rovo MCP ์—ฐ๋™ ๊ณผ์ •์—์„œ OAuth sidecar๋ฅผ ๊ฑฐ์ณ API Token์œผ๋กœ ๋‹จ์ˆœํ™”ํ•œ ์—ฌ์ •
  • โ€œ๋งŒ๋Šฅ ๊ฒ€์ƒ‰ ๋ด‡โ€์ด ์•„๋‹Œ โ€œ์ ์žฌ์ ์†Œ์— ์ „๋ฌธ๊ฐ€๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋ด‡โ€์œผ๋กœ ๋ฐฉํ–ฅ ์ „ํ™˜

ํ‚ค์›Œ๋“œ: Multi-Agent, Google ADK, MCP, Slack Bot, ์‚ฌ๋‚ด AI ์ฑ—๋ด‡


๋ชฉ์ฐจ

  1. RAG๋งŒ์œผ๋กœ๋Š” ๋ถ€์กฑํ–ˆ๋‹ค
  2. ๋ฉ€ํ‹ฐ์—์ด์ „ํŠธ๋กœ์˜ ์ „ํ™˜: ์™œ?
  3. ๊ธฐ์ˆ  ์Šคํƒ ์„ ํƒ: Google ADK์™€ Gemini
  4. ์ „์ฒด ์•„ํ‚คํ…์ฒ˜์™€ ์—์ด์ „ํŠธ๋“ค
  5. Rovo MCP ์—ฐ๋™: OAuth์—์„œ API Token๊นŒ์ง€
  6. ์‹ค์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€
  7. ๋งˆ๋ฌด๋ฆฌํ•˜๋ฉฐ

RAG๋งŒ์œผ๋กœ๋Š” ๋ถ€์กฑํ–ˆ๋‹ค

์ด์ „ ๊ธ€์—์„œ RAG์˜ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ์‹œ๋„๋ฅผ ํ–ˆ์Šต๋‹ˆ๋‹ค. Query Rewrite, Re-ranking, Hierarchical ์ž„๋ฒ ๋”ฉ, Vertex AI ๋„์ž…๊นŒ์ง€.

๊ทธ๋Ÿฐ๋ฐ ์šด์˜ํ•˜๋‹ค ๋ณด๋‹ˆ ๊ทผ๋ณธ์ ์ธ ํ•œ๊ณ„๊ฐ€ ๋ณด์ด๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋งŒ๋“  ์‚ฌ๋žŒ๋งŒ ์ž˜ ์“ธ ์ˆ˜ ์žˆ๋Š” ๋ด‡

๋…ธ๋น„์Šค๋ฅผ ๋งŒ๋“  ์ €๋Š” ์ด ๋ด‡์ด ๋ญ˜ ํ•  ์ˆ˜ ์žˆ๊ณ , ์–ด๋–ป๊ฒŒ ์งˆ๋ฌธํ•ด์•ผ ์ž˜ ๋Œ€๋‹ตํ•˜๋Š”์ง€ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Confluence์— ์–ด๋–ค ๋ฌธ์„œ๊ฐ€ ์žˆ๋Š”์ง€, ์–ด๋–ค ํ‚ค์›Œ๋“œ๋กœ ๊ฒ€์ƒ‰ํ•ด์•ผ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋Š”์ง€ ๊ฐ์ด ์žˆ์ฃ .

ํ•˜์ง€๋งŒ ๋™๋ฃŒ๋“ค์€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ œ ์˜๋„๋Œ€๋กœ ์งˆ๋ฌธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹น์—ฐํžˆ์š”.

โ€œ์ด Lambda ํ•จ์ˆ˜ ๋ญํ•˜๋Š” ๊ฑฐ์•ผ?โ€ โ€œ์„ ๋ฌผํ•˜๊ธฐ ๊ธฐ๋Šฅ ํžˆ์Šคํ† ๋ฆฌ ์•Œ๋ ค์ค˜โ€ โ€œ๊ฒฐ์ œ/ํ™˜๋ถˆ ๋กœ์ง ๊ด€๋ จ ๋ฌธ์„œ ๋‹ค ์ฐพ์•„์ค˜โ€

์ด๋Ÿฐ ์งˆ๋ฌธ๋“ค์ด ์Šฌ๋ž™์— ์˜ฌ๋ผ์˜ฌ ๋•Œ๋งˆ๋‹ค, ๋…ธ๋น„์Šค๋Š” ์—ด์‹ฌํžˆ Confluence ๋ฌธ์„œ๋ฅผ ๋’ค์กŒ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋Œ€๋ถ€๋ถ„ ์—‰๋šฑํ•œ ๋‹ต๋ณ€์„ ๋‚ด๋†“๊ฑฐ๋‚˜, โ€œ๊ด€๋ จ ๋ฌธ์„œ๋ฅผ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹คโ€๋ฅผ ๋ฐ˜ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

์งˆ๋ฌธ์˜ ์„ฑ๊ฒฉ์ด ๋‹ค๋ฅธ๋ฐ, ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ?

๋ฌธ์ œ๋ฅผ ๋ถ„์„ํ•ด๋ณด๋‹ˆ ํŒจํ„ด์ด ๋ณด์˜€์Šต๋‹ˆ๋‹ค.

์งˆ๋ฌธ ์œ ํ˜•์ •๋ณด ์œ„์น˜RAG๋กœ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ?
โ€์ด Lambda ๋ญ์•ผ?โ€AWS ์ฝ˜์†”โŒ ์• ์ดˆ์— ๋ฌธ์„œ์— ์—†์Œ
โ€๊ธฐ๋Šฅ ํžˆ์Šคํ† ๋ฆฌ ์•Œ๋ ค์ค˜โ€์—ฌ๋Ÿฌ Jira/Confluence ๋ฌธ์„œโ–ณ ๋‹จ์ผ ๊ฒ€์ƒ‰์œผ๋ก  ๋ถ€์กฑ
โ€๊ฒฐ์ œ ๋กœ์ง ์„ค๋ช…ํ•ด์ค˜โ€Git ์ฝ”๋“œ๋ฒ ์ด์ŠคโŒ ์ฝ”๋“œ๋ฅผ ๋ด์•ผ ํ•จ
โ€์ง€๋‚œ์ฃผ ํšŒ์˜๋กโ€Confluence ํŠน์ • ์ŠคํŽ˜์ด์Šคโ—‹ ์ž˜ ์ฐพ์œผ๋ฉด ๊ฐ€๋Šฅ

RAG๋Š” โ€œ๋ฌธ์„œ๋ฅผ ์ž˜ ์ฐพ์•„์„œ ๋‹ต๋ณ€ํ•˜๋Š” ๊ฒƒโ€์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋™๋ฃŒ๋“ค์ด ์‹ค์ œ๋กœ ํ•˜๋Š” ์งˆ๋ฌธ์€:

  • RAG์— ํ•™์Šต๋˜์ง€ ์•Š์€ ์ •๋ณด๋ฅผ ๋ฌป๊ฑฐ๋‚˜ (AWS ๋ฆฌ์†Œ์Šค, ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ)
  • ์—ฌ๋Ÿฌ ๋ฌธ์„œ๋ฅผ ์˜ค๊ฐ€๋ฉฐ ๋ถ„์„ํ•ด์•ผ ํ•˜๊ฑฐ๋‚˜ (๊ธฐ๋Šฅ ๋ณ€๊ฒฝ ํžˆ์Šคํ† ๋ฆฌ)
  • ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ๋ด์•ผ ๋‹ตํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋“ค์ด์—ˆ์Šต๋‹ˆ๋‹ค (๊ตฌํ˜„ ๋กœ์ง)

๊ฒฐ๊ตญ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค.

๋…ธ๋น„์Šค์—๊ฒŒ ํ•„์š”ํ•œ ๊ฑด โ€œ๋” ์ข‹์€ ๊ฒ€์ƒ‰โ€์ด ์•„๋‹ˆ๋ผ, โ€œ์งˆ๋ฌธ์„ ์ดํ•ดํ•˜๊ณ  ์ ์ ˆํ•œ ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•˜๋Š” ๋Šฅ๋ ฅโ€ ์ด๋‹ค.


๋ฉ€ํ‹ฐ์—์ด์ „ํŠธ๋กœ์˜ ์ „ํ™˜: ์™œ?

์‚ฌ๋žŒ์—๊ฒŒ ์งˆ๋ฌธํ•  ๋•Œ๋ฅผ ์ƒ๊ฐํ•ด๋ดค์Šต๋‹ˆ๋‹ค.

  • ์ธํ”„๋ผ ๊ด€๋ จ ์งˆ๋ฌธ โ†’ DevOps ๋‹ด๋‹น์ž์—๊ฒŒ
  • ์ฝ”๋“œ ๊ด€๋ จ ์งˆ๋ฌธ โ†’ ํ•ด๋‹น ๋ ˆํฌ ๋‹ด๋‹น ๊ฐœ๋ฐœ์ž์—๊ฒŒ
  • ํšŒ์˜๋ก ์ฐพ๊ธฐ โ†’ ํ•ด๋‹น ํŒ€ ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ

์งˆ๋ฌธ์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ๋ฌผ์–ด๋ณผ ๋Œ€์ƒ์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์ด๊ฑธ AI๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ์–ด๋–จ๊นŒ์š”?

ํ•˜๋‚˜์˜ ๋งŒ๋Šฅ ์—์ด์ „ํŠธ๊ฐ€ ๋ชจ๋“  ๊ฑธ ์ฒ˜๋ฆฌํ•˜๋Š” ๋Œ€์‹ , ์ „๋ฌธ ๋ถ„์•ผ๊ฐ€ ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ์—์ด์ „ํŠธ๊ฐ€ ํ˜‘์—…ํ•˜๋Š” ๊ตฌ์กฐ.

์—์ด์ „ํŠธ ๋ผ์šฐํŒ… ๊ตฌ์กฐ

์ด ๊ตฌ์กฐ์˜ ์žฅ์ ์€ ๋ช…ํ™•ํ–ˆ์Šต๋‹ˆ๋‹ค.

  1. ๊ฐ ์—์ด์ „ํŠธ๋Š” ์ž๊ธฐ ๋ถ„์•ผ์—๋งŒ ์ง‘์ค‘ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค
  2. ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ์‹œ ๊ธฐ์กด ์—์ด์ „ํŠธ์— ์˜ํ–ฅ ์—†์ด ์ƒˆ ์—์ด์ „ํŠธ๋งŒ ์ถ”๊ฐ€
  3. ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ ์–ด๋А ์—์ด์ „ํŠธ์—์„œ ๋ฌธ์ œ์ธ์ง€ ํŒŒ์•…ํ•˜๊ธฐ ์‰ฌ์›€
  4. ๊ฐ ์—์ด์ „ํŠธ๋ณ„๋กœ ๋‹ค๋ฅธ ๋ชจ๋ธ, ๋‹ค๋ฅธ ์ „๋žต์„ ์ ์šฉ ๊ฐ€๋Šฅ

๋‹จ์ ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋ผ์šฐํŒ…์ด ์ž˜๋ชป๋˜๋ฉด ์—‰๋šฑํ•œ ์—์ด์ „ํŠธ๊ฐ€ ๋‹ต๋ณ€
  2. ์—์ด์ „ํŠธ ๊ฐ„ ์ปจํ…์ŠคํŠธ ๊ณต์œ ๊ฐ€ ์–ด๋ ค์›€
  3. ์ „์ฒด ์‹œ์Šคํ…œ ๋ณต์žก๋„ ์ฆ๊ฐ€
  4. ๋””๋ฒ„๊น…ํ•  ๋•Œ ํ๋ฆ„ ์ถ”์ ์ด ๊นŒ๋‹ค๋กœ์›€

ํ•˜์ง€๋งŒ โ€œ๋งŒ๋Šฅ ๊ฒ€์ƒ‰ ๋ด‡โ€์˜ ํ•œ๊ณ„๋ฅผ ๊ณ„์† ๊ฒฝํ—˜ํ•œ ์ž…์žฅ์—์„œ, ์ด ์ •๋„ ๋ณต์žก๋„๋Š” ๊ฐ์ˆ˜ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.


๊ธฐ์ˆ  ์Šคํƒ ์„ ํƒ: Google ADK์™€ Gemini

๋ฉ€ํ‹ฐ์—์ด์ „ํŠธ ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ฒ€ํ† ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • LangChain/LangGraph: ๊ฐ€์žฅ ์œ ๋ช…ํ•˜๊ณ  ์ž๋ฃŒ๋„ ๋งŽ์Œ
  • AutoGen: Microsoft์˜ ๋ฉ€ํ‹ฐ์—์ด์ „ํŠธ ํ”„๋ ˆ์ž„์›Œํฌ
  • CrewAI: ์—ญํ•  ๊ธฐ๋ฐ˜ ์—์ด์ „ํŠธ ํ˜‘์—…์— ํŠนํ™”
  • Google ADK: Google์˜ Agent Development Kit

๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜๋ฉด, Google ADK๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์™œ ADK์ธ๊ฐ€?

Gemini์™€์˜ ๋„ค์ดํ‹ฐ๋ธŒ ํ†ตํ•ฉ

์ด๋ฏธ Vertex AI๋ฅผ ์“ฐ๊ณ  ์žˆ์–ด์„œ GCP ์ƒํƒœ๊ณ„ ์•ˆ์—์„œ ์›€์ง์ด๋Š” ๊ฒŒ ์ž์—ฐ์Šค๋Ÿฌ์› ์Šต๋‹ˆ๋‹ค. Gemini ๋ชจ๋ธ๋“ค์„ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์‹ฌํ”Œํ•œ ์—์ด์ „ํŠธ ์ •์˜

์—์ด์ „ํŠธ ํ•˜๋‚˜ ๋งŒ๋“œ๋Š” ๋ฐ ํ•„์š”ํ•œ ์ฝ”๋“œ๊ฐ€ ์ •๋ง ๊ฐ„๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

from google.adk.agents import LlmAgent

docs_agent = LlmAgent(
    name="docs_agent",
    model="gemini-3-flash-preview",
    instruction="Confluence์™€ Jira์—์„œ ๋ฌธ์„œ๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค...",
    tools=[rovo_search, rovo_search_cql, ...],
)

sub_agents๋ฅผ ํ†ตํ•œ ๋ผ์šฐํŒ…

๋ผ์šฐํ„ฐ ์—์ด์ „ํŠธ๊ฐ€ sub_agents ๋ชฉ๋ก ์ค‘ ์ ์ ˆํ•œ ์—์ด์ „ํŠธ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ตฌ์กฐ๊ฐ€ ์ง๊ด€์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋ธ ์„ ํƒ์˜ ๊ณ ๋ฏผ

์—์ด์ „ํŠธ์˜ ์—ญํ•  ๋ณต์žก๋„์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋ชจ๋ธ์„ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

์—ญํ• ๋ชจ๋ธ์ด์œ 
๋ผ์šฐํ„ฐgemini-3-flash-preview๋น ๋ฅธ ํŒ๋‹จ, ๋น„์šฉ ํšจ์œจ
docs/codebase/signozgemini-3-flash-preview๋ณต์žกํ•œ ๊ฒ€์ƒ‰๊ณผ ์ข…ํ•ฉ์ด ํ•„์š”
awsgemini-3.1-flash-lite-preview๋‹จ์ˆœ CLI ๋ช…๋ น ์‹คํ–‰, ๋น„์šฉ ์ตœ์ ํ™”

์ด์ „ ๊ธ€์—์„œ๋„ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด, ์ €๋ ดํ•œ ๋ชจ๋ธ๋กœ ๋น„์šฉ์„ ์•„๋ผ๋ ค๋‹ค๊ฐ€ ํ’ˆ์งˆ์ด ๋–จ์–ด์ง€๋Š” ๊ฒฝํ—˜์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ๋ชจ๋ธ ์„ธ๋Œ€๊ฐ€ ์˜ฌ๋ผ๊ฐ€๋ฉด์„œ Flash๊ธ‰์œผ๋กœ๋„ ์ถฉ๋ถ„ํ•œ ํ’ˆ์งˆ์ด ๋‚˜์˜ค๋Š” ์˜์—ญ์ด ๋งŽ์•„์กŒ์Šต๋‹ˆ๋‹ค. โ€œ๋ณต์žกํ•œ ์ง€์‹œ์‚ฌํ•ญ์„ ๋”ฐ๋ผ์•ผ ํ•˜๋Š” ์—์ด์ „ํŠธโ€์—๋Š” ์—ฌ์ „ํžˆ ์ƒ์œ„ ๋ชจ๋ธ์ด ํ•„์š”ํ•˜์ง€๋งŒ, AWS CLI ๋ช…๋ น ์‹คํ–‰ ๊ฐ™์€ ๋‹จ์ˆœํ•œ ์ž‘์—…์€ Flash Lite๋กœ๋„ ์ถฉ๋ถ„ํ–ˆ์Šต๋‹ˆ๋‹ค.


์ „์ฒด ์•„ํ‚คํ…์ฒ˜์™€ ์—์ด์ „ํŠธ๋“ค

ํ˜„์žฌ ๋…ธ๋น„์Šค์˜ ์ „์ฒด ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

๋…ธ๋น„์Šค ์ „์ฒด ์•„ํ‚คํ…์ฒ˜

๋ผ์šฐํ„ฐ: ์งˆ๋ฌธ์„ ์ ์ ˆํ•œ ์ „๋ฌธ๊ฐ€์—๊ฒŒ

๋ผ์šฐํ„ฐ ์—์ด์ „ํŠธ์˜ instruction์—๋Š” ๊ฐ ์—์ด์ „ํŠธ๊ฐ€ ์–ด๋–ค ์งˆ๋ฌธ์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š”์ง€, ์–ด๋–ค ํ‚ค์›Œ๋“œ๊ฐ€ ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ๋˜๋Š”์ง€ ์šฐ์„ ์ˆœ์œ„์™€ ํ•จ๊ป˜ ๋ช…์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ์„ ์ˆœ์œ„์—์ด์ „ํŠธํŠธ๋ฆฌ๊ฑฐ ํ‚ค์›Œ๋“œ
1docs_agentํšŒ์˜๋ก, ๋ฌธ์„œ, Confluence, Jira, ์ •์ฑ…
2signoz_agentSignOz, API ํŠธ๋ ˆ์ด์Šค, ๋ชจ๋‹ˆํ„ฐ๋ง
3codebase_agent์ฝ”๋“œ, ํ•จ์ˆ˜, ํด๋ž˜์Šค, API ๊ตฌํ˜„
4aws_agentS3, Lambda, CloudWatch, EC2

์˜ˆ๋ฅผ ๋“ค์–ด instruction์—๋Š” ์ด๋Ÿฐ ๊ทœ์น™๋“ค์ด ๋“ค์–ด์žˆ์Šต๋‹ˆ๋‹ค.

## ํ•ต์‹ฌ ๊ทœ์น™
1. ์‚ฌ๋‚ด ์ •๋ณด ์งˆ๋ฌธ = docs_agent: "์ง€๋‚œ ์ฃผ ~", "~๊ฐ€ ๊ณต์œ ํ•œ", "~ํšŒ์˜์—์„œ"
2. ์—…๋ฌด ์งˆ๋ฌธ = ๋ฐ˜๋“œ์‹œ sub_agent ํ˜ธ์ถœ: ์ง์ ‘ ๋‹ต๋ณ€ ๊ธˆ์ง€
3. ๋ชจํ˜ธํ•˜๋ฉด ๋˜๋ฌป๊ธฐ: "์–ด๋А ํŒ€?", "์–ด๋–ค ํ”„๋กœ์ ํŠธ?"

๋ผ์šฐํ„ฐ๊ฐ€ ์ง์ ‘ ๋‹ต๋ณ€ํ•˜์ง€ ์•Š๊ณ  ๋ฐ˜๋“œ์‹œ ์ ์ ˆํ•œ ์—์ด์ „ํŠธ์—๊ฒŒ ์œ„์ž„ํ•˜๋„๋ก ๊ฐ•์ œํ•œ ๊ฒƒ์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

4๊ฐœ์˜ ์ „๋ฌธ ์—์ด์ „ํŠธ

docs_agent โ€” Confluence/Jira ๊ฒ€์ƒ‰

Atlassian์˜ Rovo MCP๋ฅผ ํ†ตํ•ด Confluence์™€ Jira๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ์ž์—ฐ์–ด ๊ฒ€์ƒ‰, CQL/JQL ์ฟผ๋ฆฌ, ํŽ˜์ด์ง€/์ด์Šˆ ์ƒ์„ธ ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. โ€œ์ง€๋‚œ ์ฃผ ํšŒ์˜๋ก ์ฐพ์•„์ค˜โ€ ๊ฐ™์€ ์‹œ๊ฐ„ ํ‘œํ˜„์€ ์š”์ฒญ์— KST ์‹œ๊ฐ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ์ „๋‹ฌํ•ด์„œ ์ •ํ™•ํ•˜๊ฒŒ ํ•ด์„ํ•ฉ๋‹ˆ๋‹ค.

codebase_agent โ€” ์ฝ”๋“œ๋ฒ ์ด์Šค ๊ฒ€์ƒ‰

Gemini CLI๋ฅผ subprocess๋กœ ํ˜ธ์ถœํ•ด์„œ ๋กœ์ปฌ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ์ž์—ฐ์–ด ์งˆ๋ฌธ์„ ํ•ฉ๋‹ˆ๋‹ค. ํ•ต์‹ฌ์€ ์ฟผ๋ฆฌ ํ™•์žฅ์ž…๋‹ˆ๋‹ค. โ€œ๊ฒฐ์ œ ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด ๋ญ ๋ผ?โ€๋ผ๋Š” ๋‹จํŽธ์ ์ธ ์งˆ๋ฌธ์„ โ€œ๊ฒฐ์ œ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์ „์ฒด ํ”Œ๋กœ์šฐ: UI โ†’ API โ†’ ๋ฐฑ์—”๋“œ โ†’ DBโ€๋กœ ํ™•์žฅํ•ด์„œ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋Š” 10๋ถ„ ์ฃผ๊ธฐ ํฌ๋ก ์žก์œผ๋กœ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

aws_agent โ€” AWS ๋ฆฌ์†Œ์Šค ์กฐํšŒ

๋ณ„๋„ Docker ์ปจํ…Œ์ด๋„ˆ์— AWS CLI๋ฅผ ๋„ฃ๊ณ , docker exec๋กœ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. AWS ์ž๊ฒฉ ์ฆ๋ช…์ด ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—๋งŒ ์กด์žฌํ•˜๋„๋ก ๊ฒฉ๋ฆฌํ•œ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. โ€œfromm channel dev contents ๋ฒ„ํ‚ทโ€์ฒ˜๋Ÿผ ๋ถ€์ •ํ™•ํ•œ ๋ฆฌ์†Œ์Šค๋ช…๋„ ์ „์ฒด ๋ชฉ๋ก์—์„œ ์œ ์‚ฌ ๋งค์นญ์œผ๋กœ ์ฐพ์•„์ค๋‹ˆ๋‹ค.

signoz_agent โ€” ๋ชจ๋‹ˆํ„ฐ๋ง ๋กœ๊ทธ/ํŠธ๋ ˆ์ด์Šค ์กฐํšŒ

Go๋กœ ์ž‘์„ฑ๋œ signoz-mcp-server๋ฅผ stdio ๊ธฐ๋ฐ˜ MCP๋กœ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค ๋ชฉ๋ก, ์—๋Ÿฌ ๋กœ๊ทธ, ํŠธ๋ ˆ์ด์Šค, ์•Œ๋ฆผ ๋“ฑ 9๊ฐ€์ง€ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ„ ๋ฒ”์œ„๊ฐ€ ํ•ต์‹ฌ์ด๋ผ, ์•Œ๋ฆผ ์‹œ๊ฐ ๊ธฐ์ค€ -3๋ถ„ ~ +1๋ถ„ ๊ฐ™์€ ๊ทœ์น™์„ instruction์— ๋ช…์‹œํ•ด๋’€์Šต๋‹ˆ๋‹ค.


Rovo MCP ์—ฐ๋™: OAuth์—์„œ API Token๊นŒ์ง€

๋ฉ€ํ‹ฐ์—์ด์ „ํŠธ ์ด์•ผ๊ธฐ์™€๋Š” ๊ฒฐ์ด ์ข€ ๋‹ค๋ฅด์ง€๋งŒ, ์šด์˜ ๊ณผ์ •์—์„œ ๊ฐ€์žฅ ๋งŽ์€ ์‹œ๊ฐ„์„ ์žก์•„๋จน์€ ๋ถ€๋ถ„์ด๋ผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ: OAuth 2.1๋งŒ ์ง€์›

์ดˆ๊ธฐ Rovo MCP๋Š” OAuth 2.1 ํ”Œ๋กœ์šฐ๋งŒ ์ง€์›ํ–ˆ์Šต๋‹ˆ๋‹ค. API Token ๋ฐฉ์‹์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์—ˆ์ฃ .

๋‹ค๋งŒ Atlassian ๋ฌธ์„œ์—๋Š” API Token ์ธ์ฆ์ด ์ถ”ํ›„ ๋„์ž…๋  ์˜ˆ์ •์ด๋ผ๊ณ  ๋ช…์‹œ๋˜์–ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ „๋žต์„ ์„ธ์› ์Šต๋‹ˆ๋‹ค.

โ€œ๋ณต์žกํ•˜์ง€๋งŒ ํ™•์‹คํ•˜๊ฒŒ ๋™์ž‘ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๋จผ์ € ๊ตฌํ˜„ํ•˜์ž. API Token์ด ๋‚˜์˜ค๋ฉด ๊ทธ๋•Œ ๋ฐ”๊พธ๋ฉด ๋œ๋‹ค.โ€

๊ฒช์€ ์ผ๋“ค

ํ† ํฐ ์ž๋™ ๊ฐฑ์‹ : OAuth ํ† ํฐ์€ ์•ฝ 1์‹œ๊ฐ„(์šฐ๋ฆฌ ํ™˜๊ฒฝ ๊ธฐ์ค€)๋งˆ๋‹ค ๋งŒ๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๊ฐ€ 24์‹œ๊ฐ„ ๋Œ์•„๊ฐ€์•ผ ํ•˜๋‹ˆ TokenRefresher๋ฅผ ๋งŒ๋“ค์–ด 5๋ถ„๋งˆ๋‹ค ์ฒดํฌ, ๋งŒ๋ฃŒ 25๋ถ„ ์ „ ๊ฐฑ์‹ , ์‹คํŒจ ์‹œ 3ํšŒ ์žฌ์‹œ๋„, ์›์ž์  ํŒŒ์ผ ์“ฐ๊ธฐ์™€ ๋ฐฑ์—…๊นŒ์ง€ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

mcp-remote ํ† ํฐ ์ถฉ๋Œ: Rovo MCP ํ†ต์‹ ์— ์‚ฌ์šฉํ•˜๋Š” mcp-remote CLI๊ฐ€ ์ž์ฒด์ ์œผ๋กœ ํ† ํฐ ํŒŒ์ผ์„ ๊ด€๋ฆฌํ•˜๋ฉด์„œ, ์ œ๊ฐ€ ๊ฐฑ์‹ ํ•œ ํ† ํฐ์„ ๋ฎ์–ด์“ฐ๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„์ „๋งˆ๋‹ค ํ† ํฐ ๊ฒฝ๋กœ๋„ ๋ฐ”๋€Œ์–ด์„œ symlink๋กœ ๋Œ€์‘ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜์™€ Sidecar ๋ถ„๋ฆฌ: mcp-remote๋ฅผ ๋งค ํ˜ธ์ถœ๋งˆ๋‹ค subprocess๋กœ ์‹คํ–‰ํ•˜๋‹ˆ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ˆ„์ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ rovo-sidecar๋ผ๋Š” ๋ณ„๋„ FastAPI ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค์–ด ๋ถ„๋ฆฌํ–ˆ๋Š”๋ฐ, Docker ๋„คํŠธ์›Œํฌ, ๋ณผ๋ฅจ ๊ณต์œ , ๋ณต์žก๋„ ์ฆ๊ฐ€๋ผ๋Š” ๋Œ€๊ฐ€๊ฐ€ ๋”ฐ๋ž์Šต๋‹ˆ๋‹ค.

โ€œOAuth ํ† ํฐ ๊ฐฑ์‹ โ€์ด๋ผ๋Š” ๋‹จ์ˆœํ•ด ๋ณด์ด๋Š” ๋ฌธ์ œ๊ฐ€, ๋ณ„๋„ ์ปจํ…Œ์ด๋„ˆ + ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค์ผ€์ค„๋Ÿฌ + ๋ฐฑ์—… ๋ณต๊ตฌ + symlink ๊ด€๋ฆฌ๊นŒ์ง€ ๋‚ณ์€ ๊ฒ๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ: API Token ๋„์ž…

์˜ˆ์ƒ๋Œ€๋กœ, Atlassian์ด Rovo MCP์— Basic Auth (API Token) ์ธ์ฆ์„ ์ง€์›ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

credentials = base64.b64encode(f"{email}:{api_token}".encode()).decode()
headers = {"Authorization": f"Basic {credentials}"}

async with streamablehttp_client(ATLASSIAN_MCP_URL, headers=headers) as (read, write, _):
    async with ClientSession(read, write) as session:
        await session.initialize()
        result = await session.call_tool(tool_name, arguments)

์ด ์ฝ”๋“œ๋กœ rovo-sidecar, TokenRefresher, mcp-remote, ๋ฐฑ์—… ๋ฉ”์ปค๋‹ˆ์ฆ˜, symlink ๊ด€๋ฆฌ๊ฐ€ ์ „๋ถ€ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. MCP SDK์˜ streamablehttp_client๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋‹ˆ subprocess ์—†์ด HTTP ์—ฐ๊ฒฐ์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๊ณ , ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋„ ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ API Token ๋ฐฉ์‹์€ ์กฐ์ง ๊ด€๋ฆฌ์ž๊ฐ€ ํ™œ์„ฑํ™”ํ•ด์•ผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ตํ›ˆ: โ€œ๋ณ„๊ฑฐ ์•„๋‹Œ ๊ฒƒ ๊ฐ™์€โ€ ์ธ์ฆ ๋ฌธ์ œ๊ฐ€ ์‹œ์Šคํ…œ์—์„œ ๊ฐ€์žฅ ํฐ ๋ณต์žก๋„๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋ณต์žก๋„๋Š” ์ข…์ข… ํ”Œ๋žซํผ์˜ ์ง€์› ๋ฒ”์œ„๊ฐ€ ๋„“์–ด์ง€๋ฉด์„œ ํ•œ ์ˆœ๊ฐ„์— ์‚ฌ๋ผ์ง€๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

๊ถŒํ•œ ์ œ์–ด: ์ „์šฉ ๊ณ„์ • ๋ฐฉ์‹

Confluence์™€ Jira์˜ MCP ๊ฒ€์ƒ‰์€ ์ธ์ฆ์— ์‚ฌ์šฉํ•œ ๊ณ„์ •์˜ ๊ถŒํ•œ์„ ๊ทธ๋Œ€๋กœ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

์ฒ˜์Œ์—๋Š” โ€œ๋ฌธ์„œ๋ณ„๋กœ ์ ‘๊ทผ ์ œ์–ด๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋‚˜?โ€ ๊ณ ๋ฏผํ–ˆ์ง€๋งŒ, ๋…ธ๋น„์Šค ์ „์šฉ ์„œ๋น„์Šค ๊ณ„์ •์„ ๋งŒ๋“ค๊ณ , ์ด ๊ณ„์ •์— ํ•„์š”ํ•œ ์ŠคํŽ˜์ด์Šค์™€ ํ”„๋กœ์ ํŠธ๋งŒ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ๋ฐฉ์‹์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ๊ณต๊ฐœ ๋ฌธ์„œ โ†’ ์ ‘๊ทผ ํ—ˆ์šฉ
  • ๋ฏผ๊ฐํ•œ ๋ฌธ์„œ (HR, ์žฌ๋ฌด ๋“ฑ) โ†’ ์ ‘๊ทผ ์ฐจ๋‹จ

Atlassian์˜ ๊ธฐ์กด ๊ถŒํ•œ ์ฒด๊ณ„๋ฅผ ๊ทธ๋Œ€๋กœ ํ™œ์šฉํ•˜๋‹ˆ, ๋ณ„๋„์˜ ์ ‘๊ทผ ์ œ์–ด ์ฝ”๋“œ ์—†์ด ๋ฌธ์„œ ๋ฒ”์œ„๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๊ทœ๋ชจ ์กฐ์ง์ด๋ผ๋ฉด ๋” ์„ธ๋ฐ€ํ•œ RBAC์ด ํ•„์š”ํ•˜๊ฒ ์ง€๋งŒ, 10~20๋ช… ๊ทœ๋ชจ์˜ ํŒ€์—์„œ๋Š” ์ด ๋ฐฉ์‹์ด ๊ฐ€์žฅ ํ•ฉ๋ฆฌ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.


์‹ค์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€

์—ฌ๊ธฐ๊นŒ์ง€ ๊ธฐ์ˆ ์ ์ธ ์ด์•ผ๊ธฐ๋ฅผ ๋งŽ์ด ํ–ˆ๋Š”๋ฐ, ๊ฒฐ๊ตญ ์ค‘์š”ํ•œ ๊ฑด โ€œ์‹ค์ œ๋กœ ํŒ€์—์„œ ์–ผ๋งˆ๋‚˜ ์“ฐ์ด๊ณ  ์žˆ๋Š”๊ฐ€โ€ ์ž…๋‹ˆ๋‹ค.

์‹ค์ œ Slack์—์„œ ๋…ธ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ์Šต์„ ๋ช‡ ๊ฐ€์ง€ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

์—๋Ÿฌ ๋ถ„์„์„ ์‹œ์ผœ๋‘๊ณ , ๋‹ค๋ฅธ ์ผ์„ ํ•œ๋‹ค

์—๋Ÿฌ ์•Œ๋ฆผ ๋ถ„์„

AWS ์—๋Ÿฌ ์•Œ๋ฆผ์ด ์˜ฌ๋ผ์™”์„ ๋•Œ, ์ถœํ‡ด๊ทผ ์ค‘์ด๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์—…๋ฌด๋ฅผ ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด? ๋…ธ๋น„์Šค์—๊ฒŒ ์—๋Ÿฌ ๋ถ„์„์„ ์‹œ์ผœ๋‘๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋Œ์•„์™€์„œ ํ™•์ธํ•˜๋ฉด ์›์ธ ๋ถ„์„์ด ๋๋‚˜ ์žˆ๊ณ , ๋ฐ”๋กœ ์ž‘์—…์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ถ„์„์—์„œ ์ž‘์—… ์‹œ์ž‘๊นŒ์ง€ ํ•œ ๋ฒˆ์—

Jira ํ‹ฐ์ผ“ ์ดˆ์•ˆ ์ž‘์„ฑ

๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ Jira ํ‹ฐ์ผ“ ์ดˆ์•ˆ๊ณผ AI ์ฝ”๋”ฉ ๋„๊ตฌ์—์„œ ์‚ฌ์šฉํ•  ํ”„๋กฌํ”„ํŠธ๊นŒ์ง€ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—๋Ÿฌ ๋ฐœ๊ฒฌ๋ถ€ํ„ฐ ์ˆ˜์ • ์ž‘์—… ์‹œ์ž‘๊นŒ์ง€์˜ ๊ฐ„๊ทน์„ ์ค„์—ฌ์ฃผ๋Š” ์›Œํฌํ”Œ๋กœ์šฐ์ž…๋‹ˆ๋‹ค. (๋‚˜์ค‘์—๋Š” ๋…ธ๋น„์Šค๊ฐ€ ์ง์ ‘ ํ‹ฐ์ผ“์„ ์˜ฌ๋ฆฌ๊ณ  PR๊นŒ์ง€ ์ƒ์„ฑํ•˜๋Š” ๋‹จ๊ณ„๋กœ ๋ฐœ์ „์‹œํ‚ฌ ์ƒ๊ฐ๋„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.)

๋ฌธ์„œ์™€ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์˜ ๋‹ต๋ณ€

๋น„์ฆˆ๋‹ˆ์Šค ์งˆ๋ฌธ ๋‹ต๋ณ€

์‚ฌ์šฉ์ž์˜ ์งˆ๋ฌธ์— ๋”ฐ๋ผ Confluence ๋ฌธ์„œ๋‚˜ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๊ฒ€์ƒ‰ํ•ด์„œ ๊ทผ๊ฑฐ ์žˆ๋Š” ๋‹ต๋ณ€์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์„œ์— ์ •์ฑ…์ด ์ •๋ฆฌ๋˜์–ด ์žˆ์œผ๋ฉด ๋ฌธ์„œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ, ๋ฌธ์„œ์— ์—†์œผ๋ฉด ์ฝ”๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹ต๋ณ€ํ•ฉ๋‹ˆ๋‹ค.

์—์ด์ „ํŠธ ๊ฐ„ ์—ฐ๊ณ„

Lambda ํƒ€์ž„์•„์›ƒ ๋ถ„์„

aws_agent๋ฅผ ํ†ตํ•ด Lambda์˜ ํƒ€์ž„์•„์›ƒ, ๋ฉ”๋ชจ๋ฆฌ ๊ฐ™์€ ์„ค์ •๊ฐ’์„ ๋ฐ”๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋” ๋‚˜์•„๊ฐ€, ์ด์ „ ๋Œ€ํ™” ์ปจํ…์ŠคํŠธ๋ฅผ ์ด์–ด์„œ codebase_agent์—๊ฒŒ ์ฝ”๋“œ ๋ถ„์„์„ ์š”์ฒญํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์งˆ๋ฌธ์—์„œ ์‹œ์ž‘ํ•ด ์—ฌ๋Ÿฌ ์—์ด์ „ํŠธ๊ฐ€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ˜‘์—…ํ•˜๋Š” ํ๋ฆ„์ž…๋‹ˆ๋‹ค.

์—๋Ÿฌ ์‹œ๋‚˜๋ฆฌ์˜ค ๋ถ„์„

์—๋Ÿฌ ์‹œ๋‚˜๋ฆฌ์˜ค ๋ถ„์„

โ€œ์ด ์˜ค๋ฅ˜๊ฐ€ ์™œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š”์ง€โ€ ์‹œ๋‚˜๋ฆฌ์˜ค ๋ถ„์„์„ ์š”์ฒญํ•˜๋ฉด, ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ€๋Šฅํ•œ ์›์ธ๋“ค์„ ์ƒ์„ธํ•˜๊ฒŒ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค.


๋งˆ๋ฌด๋ฆฌํ•˜๋ฉฐ

๋…ธ๋น„์Šค๋Š” โ€œRAG ๊ธฐ๋ฐ˜ ๋ฌธ์„œ ๊ฒ€์ƒ‰ ๋ด‡โ€์—์„œ โ€œ๋ฉ€ํ‹ฐ์—์ด์ „ํŠธ ๊ธฐ๋ฐ˜ ์‚ฌ๋‚ด AI ์–ด์‹œ์Šคํ„ดํŠธโ€๋กœ ์ง„ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ๋ณ€ํ™”๋ฅผ ์ •๋ฆฌํ•˜๋ฉด:

์ด์ „ํ˜„์žฌ
๋‹จ์ผ RAG ํŒŒ์ดํ”„๋ผ์ธ์ „๋ฌธ ์—์ด์ „ํŠธ๋“ค + ๋ผ์šฐํ„ฐ
Vertex AI DatastoreRovo MCP, Gemini CLI, AWS CLI, SignOz MCP
โ€๊ฒ€์ƒ‰ํ•ด์„œ ๋‹ต๋ณ€""์งˆ๋ฌธ์— ๋งž๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ •๋ณด ์กฐํšŒโ€
๋ฌธ์„œ ๊ฒ€์ƒ‰ ํŠนํ™”๋ฌธ์„œ, ์ฝ”๋“œ, ์ธํ”„๋ผ, ๋ชจ๋‹ˆํ„ฐ๋ง ํ†ตํ•ฉ
OAuth sidecar ๋ณต์žก๋„API Token ๊ธฐ๋ฐ˜ ๋‹จ์ˆœํ™”

๋ฌผ๋ก  ์•„์ง ์™„๋ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ๋ผ์šฐํŒ…์ด ๊ฐ€๋” ํ‹€๋ฆผ (์ฝ”๋“œ ์งˆ๋ฌธ์„ docs_agent๋กœ ๋ณด๋‚ด๋Š” ๋“ฑ)
  • ์—์ด์ „ํŠธ ๊ฐ„ ์ปจํ…์ŠคํŠธ ๊ณต์œ ๊ฐ€ ์•„์ง ๋ฏธํก
  • Vertex AI ๋ชจ๋ธ ์ฟผํ„ฐ ์ œํ•œ์œผ๋กœ ๊ฐ€๋” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ

ํ•˜์ง€๋งŒ ๋ฐฉํ–ฅ์„ฑ์€ ๋งž๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. โ€œ๋งŒ๋Šฅ ๊ฒ€์ƒ‰ ๋ด‡โ€์ด ์•„๋‹ˆ๋ผ โ€œ์ ์žฌ์ ์†Œ์— ์ „๋ฌธ๊ฐ€๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋ด‡โ€.

๋…ธ๋น„์Šค๋Š” ํŒ€ ๋ˆ„๊ตฌ๋‚˜ ์ฐธ์—ฌํ•ด์„œ ์—…๋ฌด ํšจ์œจํ™”๋ฅผ ์œ„ํ•œ ๋ณธ์ธ์˜ ์•„์ด๋””์–ด๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ํ”Œ๋žซํผ์ด ๋˜๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.

์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

โ† ๋ชฉ๋ก์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ

Art Changes Life

๋…ธ๋จธ์Šค์™€ ํ•จ๊ป˜ ์—”ํ„ฐํ…Œํฌ ์‚ฐ์—…์„ ํ˜์‹ ํ•ด๋‚˜๊ฐˆ ๋ฉค๋ฒ„๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

์ฑ„์šฉ ์ค‘์ธ ๊ณต๊ณ  ๋ณด๊ธฐ