๐Ÿ“บ ์˜์ƒ ์š”์•ฝ ์•„์นด์ด๋ธŒ
โ† ๋ชฉ๋ก

Build-Time vs. Run-Time: Why Dev Tools Fail in Production โ€” Averi Kitsch & Prerna Kakkar, Google

AI Engineer ยท 2026-09-09 22:00 ยท 20:26

ํ•œ ์ค„ ํ•ต์‹ฌ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์šฉ ์—์ด์ „ํŠธ ๋„๊ตฌ๋Š” ๋นŒ๋“œํƒ€์ž„์˜ ์œ ์—ฐํ•œ ๊ฐœ๋ฐœ ๋ณด์กฐ์—๋Š” ์œ ์šฉํ•˜์ง€๋งŒ, ํ”„๋กœ๋•์…˜์—์„œ๋Š” ๊ถŒํ•œยท์ž…๋ ฅยท์ถœ๋ ฅ์„ ์—„๊ฒฉํžˆ ์ œํ•œํ•˜๋Š” ๋Ÿฐํƒ€์ž„ ๋„๊ตฌ์™€ ์‹ ์› ๋ถ„๋ฆฌ๊ฐ€ ์—†์œผ๋ฉด ๋ณด์•ˆ ์‚ฌ๊ณ ์™€ ์˜ค์ž‘๋™์ด ์‰ฝ๊ฒŒ ๋ฐœ์ƒํ•œ๋‹ค.

์‹œ๊ฐ„๋ณ„ ์š”์•ฝ

  1. 0:00
    ์†Œ๊ฐœ, MCP Toolbox์™€ ๊ด€๋ฆฌํ˜• MCP ๋ฐœํ‘œ๋Š” Google์˜ MCP Toolbox for databases์™€ Google managed MCP๋ฅผ ์ค‘์‹ฌ์œผ๋กœ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์šฉ ์—์ด์ „ํŠธ ๋„๊ตฌ๋ฅผ ์–ด๋–ป๊ฒŒ ์•ˆ์ „ํ•˜๊ฒŒ ์ œ๊ณตํ•˜๋Š”์ง€ ์„ค๋ช…ํ•œ๋‹ค. ์ž์ฒด ์šด์˜ํ˜•์€ ์—ฐ๊ฒฐ ํ’€๋ง๊ณผ ๊ด€์ธก์„ฑ์„ ๊ธฐ๋ณธ ์ œ๊ณตํ•˜๊ณ , ๊ด€๋ฆฌํ˜•์€ Gemini CLI, Cloud Code ๊ฐ™์€ ํ•˜๋„ค์Šค์— ์—ฐ๊ฒฐํ•ด ๋Œ€๊ทœ๋ชจ ๋„๊ตฌ ํ˜ธ์ถœ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  2. 2:56
    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์šฉ ์ผ๋ฐ˜์ ์ธ ๋„๊ตฌ ํŒจํ„ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋„๊ตฌ๋Š” ๊ด€๋ฆฌ ์ž‘์—…์šฉ control plane ๋„๊ตฌ์™€ ์ž์—ฐ์–ด๋ฅผ SQL๋กœ ๋ฐ”๊พธ๋Š” NL2SQL ๋„๊ตฌ๋กœ ํฌ๊ฒŒ ๋‚˜๋‰œ๋‹ค. ์ „์ž๋Š” ์ธ์Šคํ„ด์Šค์™€ DB ์ƒ์„ฑยท๊ด€๋ฆฌ์ฒ˜๋Ÿผ ์œ„ํ—˜ํ•œ ์ž‘์—…์„ ๋‹ค๋ฃจ๋ฏ€๋กœ human in the loop์ด ํ•„์š”ํ•˜๊ณ , ํ›„์ž๋Š” ํƒ์ƒ‰์  ๋ถ„์„๊ณผ ๋ณต์žกํ•œ ์งˆ์˜ ์ž‘์„ฑ์— ์ ํ•ฉํ•˜๋‹ค.
  3. 4:37
    ํ”„๋กœ๋•์…˜์„ ์œ„ํ•œ ๊ตฌ์กฐํ™”๋œ SQL ๋„๊ตฌ ํ”„๋กœ๋•์…˜์—์„œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋–ค SQL์„ ์“ธ์ง€ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ๊ณ , ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋ฏธ๋ฆฌ ์ •ํ•ด์ง„ ๊ตฌ์กฐํ™”๋œ SQL ๋„๊ตฌ๊ฐ€ ๋” ์ ํ•ฉํ•˜๋‹ค. ์ด ๋ฐฉ์‹์€ SQL injection ์œ„ํ—˜์„ ์ค„์ด๊ณ , ์—์ด์ „ํŠธ์˜ ํ™˜๊ฐ์„ ๋‚ฎ์ถ”๋ฉฐ, ์ง€์—ฐ์‹œ๊ฐ„๊ณผ ์ ‘๊ทผ ์ œ์–ด๋ฅผ ๋” ์—„๊ฒฉํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  4. 5:20
    ๋นŒ๋“œํƒ€์ž„๊ณผ ๋Ÿฐํƒ€์ž„์˜ ์ฐจ์ด NL2SQL ๋„๊ตฌ์™€ control plane ๋„๊ตฌ๋Š” ๊ฐœ๋ฐœ ๋ณด์กฐ์šฉ ๋นŒ๋“œํƒ€์ž„ ๋„๊ตฌ๋กœ๋Š” ์œ ์šฉํ•˜์ง€๋งŒ, ํ”„๋กœ๋•์…˜ ์‚ฌ์šฉ์ž ํ๋ฆ„์—๋Š” ๊ทธ๋Œ€๋กœ ์“ฐ๋ฉด ์•ˆ ๋œ๋‹ค. ๋Ÿฐํƒ€์ž„์—๋Š” Patching AI๋‚˜ LangChain ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉ์ž์šฉ ์•ฑ์— ๋งž๋Š” ๊ฒฐ์ •์  ๋„๊ตฌ๋ฅผ ๊ตฌ์„ฑํ•ด์•ผ ํ•œ๋‹ค.
  5. 6:16
    ๋นŒ๋“œํƒ€์ž„ ๋„๊ตฌ๊ฐ€ ํ…Œ์ด๋ธ”์„ ์‚ญ์ œํ•  ๋•Œ ๋ฐ๋ชจ์—์„œ๋Š” ๋นŒ๋“œํƒ€์ž„ ๋„๊ตฌ๊ฐ€ ์—์ด์ „ํŠธ์˜ ์ž˜๋ชป๋œ ์ง€์‹œ๋ฅผ ๋ฐ›์•„ ํ…Œ์ด๋ธ” ์ „์ฒด๋ฅผ ์‚ญ์ œํ•˜๋Š” ์‚ฌ๊ณ ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์•ˆ์ „์žฅ์น˜์™€ guardrail์ด ์—†์œผ๋ฉด ์—์ด์ „ํŠธ๊ฐ€ ์ž์‹  ์žˆ๊ฒŒ ์œ„ํ—˜ํ•œ ์ž‘์—…์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋Š” ์ฆ‰์‹œ ํŒŒ๊ดด์ ์ผ ์ˆ˜ ์žˆ๋‹ค.
  6. 8:46
    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ณด์•ˆ์€ ์—์ด์ „ํŠธ๋งŒํผ๋งŒ ๊ฐ•ํ•˜๋‹ค ์—์ด์ „ํŠธ์™€ LLM์€ ์‰ฝ๊ฒŒ ์†์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณด์•ˆ์€ ๊ฒฐ๊ตญ ์—์ด์ „ํŠธ์˜ ๊ถŒํ•œ ์„ค๊ณ„์— ๋‹ฌ๋ ค ์žˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์—์ด์ „ํŠธ๋ฅผ ์†์—ฌ ๊ถŒํ•œ์„ ์˜ค๋‚จ์šฉํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” confused deputy ๊ณต๊ฒฉ์ด ๋Œ€ํ‘œ์ ์ธ ์œ„ํ—˜์ด๋‹ค.
  7. 9:13
    ์น˜๋ช…์  ์‚ผ์ค‘์กฐํ•ฉ๊ณผ confused deputy ์œ ์ถœ์€ ๋น„๊ณต๊ฐœ ๋ฐ์ดํ„ฐ, ์‹ ๋ขฐ๋˜์ง€ ์•Š์€ ์ž…๋ ฅ, ๊ทธ๋ฆฌ๊ณ  ์™ธ๋ถ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ทธ ๋‚ด์šฉ์„ ๋‹ค์‹œ ๋…ธ์ถœํ•  ๋Šฅ๋ ฅ์ด ๋™์‹œ์— ์žˆ์„ ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค. ํ‹ฐ์ผ“ ๊ธฐ๋ฐ˜ ํŠธ๋ฆฌ์•„์ง€ ์—์ด์ „ํŠธ์ฒ˜๋Ÿผ ์‹ ๋ขฐ๋œ ์‹œ์Šคํ…œ์ด ์•…์„ฑ ์ž…๋ ฅ์„ ๋ฐ›์•„ ๊ถŒํ•œ์„ ๊ทธ๋Œ€๋กœ ํ–‰์‚ฌํ•˜๋ฉด, ์›๋ž˜ ์ ‘๊ทผ ๊ถŒํ•œ์ด ์—†๋˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์™ธ๋ถ€๋กœ ํ˜๋Ÿฌ๋‚˜๊ฐ„๋‹ค.
  8. 11:19
    ์‚ฌ์šฉ์ž, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ์—์ด์ „ํŠธ ์‹ ์› ๋ถ„๋ฆฌ ์‚ฌ์šฉ์ž ์‹ ์›, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹ ์›, ์—์ด์ „ํŠธ ์‹ ์›์„ ๋ถ„๋ฆฌํ•ด์•ผ ๊ถŒํ•œ ๋ฒ”์œ„๋ฅผ ์ •ํ™•ํžˆ ํ†ต์ œํ•  ์ˆ˜ ์žˆ๋‹ค. ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ์•ฑ ์ ‘๊ทผ๋งŒ ์ฃผ๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ํ•„์š”ํ•œ ์„œ๋น„์Šค์—๋งŒ ๋„“๊ฒŒ ์ ‘๊ทผํ•˜๋˜, ์—์ด์ „ํŠธ๋Š” ์ตœ์ข… ์‚ฌ์šฉ์ž์—๊ฒŒ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ๋ฒ”์œ„๊นŒ์ง€๋งŒ ์ ‘๊ทผํ•˜๊ฒŒ ํ•ด์•ผ ํ•œ๋‹ค.
  9. 12:33
    ์Šˆํผ์œ ์ € ๋„๊ตฌ๋ฅผ ์ œํ•œํ˜• ๋„๊ตฌ๋กœ ์ง„ํ™”์‹œํ‚ค๊ธฐ ์ดˆ๊ธฐ์—๋Š” ์—์ด์ „ํŠธ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž๊ฒฉ ์ฆ๋ช…, ํ˜ธ์ŠคํŠธ, ํฌํŠธ, raw SQL๊นŒ์ง€ ์ฅ” ์Šˆํผ์œ ์ € ํ˜•ํƒœ์ง€๋งŒ, MCP Toolbox๋Š” source primitive๋กœ ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ์—์ด์ „ํŠธ ๋ฐ”๊นฅ์— ๋‘”๋‹ค. read only ์ œํ•œ, allowed data sets, ์ถœ๋ ฅ ํฌ๊ธฐ ์ œํ•œ๊นŒ์ง€ ๋”ํ•ด blast radius๋ฅผ ์ค„์ด๊ณ , ๋„๊ตฌ ์ž…๋ ฅ๋„ SQL string ์ˆ˜์ค€์œผ๋กœ ๋‹จ์ˆœํ™”ํ•œ๋‹ค.
  10. 14:55
    ์ปค์Šคํ…€ ๋„๊ตฌ์™€ prepared statements ์—์ด์ „ํŠธ๊ฐ€ ์ž„์˜์˜ SQL์„ ์ƒ์„ฑํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด YAML๋กœ ์ •ํ™•ํ•œ SQL ๋ฌธ์„ ์ •์˜ํ•œ custom tools๊ฐ€ ํ•„์š”ํ•˜๋‹ค. prepared statements์™€ type parameters๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž…๋ ฅ ๊ฒ€์ฆ์ด ๊ฐ•ํ•ด์ง€๊ณ , ๋„๊ตฌ ์ด๋ฆ„๊ณผ ์„ค๋ช…๋„ ์—์ด์ „ํŠธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ช…ํ™•ํžˆ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  11. 15:52
    ๋„๊ตฌ ํ’ˆ์งˆ์„ ์œ„ํ•œ ๋ชจ๋ฒ” ์‚ฌ๋ก€ ๋„๊ตฌ๋Š” ์›์ž์  REST API๊ฐ€ ์•„๋‹ˆ๋ผ ์‹ค์ œ ๊ฒฐ๊ณผ ์ค‘์‹ฌ์œผ๋กœ ์„ค๊ณ„ํ•ด์•ผ ํ•˜๋ฉฐ, ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ๋ฅผ ๋ถ„๋ฆฌํ•ด ์Šน์ธ ํ๋ฆ„์„ ๋‹ค๋ฅด๊ฒŒ ๊ฐ€์ ธ๊ฐ€์•ผ ํ•œ๋‹ค. ๋˜ํ•œ ์žฌ์‹œ๋„ ๊ฐ€๋Šฅํ•œ ๊ตฌ์ฒด์  ์˜ค๋ฅ˜, ๋‹จ์ˆœํ•œ ํ‰๋ฉด ์ž…๋ ฅ ๊ตฌ์กฐ, ๊ทธ๋ฆฌ๊ณ  ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ๋ช…ํ™•ํ•œ ์„ค๋ช…์ด ๋„๊ตฌ ํ’ˆ์งˆ์„ ํฌ๊ฒŒ ๋†’์ธ๋‹ค.
  12. 17:39
    ๋ฐ”์ธ๋”ฉ๋œ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ์—์ด์ „ํŠธ์—์„œ PII ์ˆจ๊ธฐ๊ธฐ user ID ๊ฐ™์€ PII๋Š” ์—์ด์ „ํŠธ๊ฐ€ ์ง์ ‘ ๋‹ค๋ฃจ๊ฒŒ ๋‘๋ฉด ์•ˆ ๋˜๋ฉฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋จผ์ € ์ธ์ฆํ•œ ๋’ค bound parameters๋กœ ๋„๊ตฌ์— ๋ฌถ์–ด์•ผ ํ•œ๋‹ค. ๋˜๋Š” authenticated parameters๋กœ identity token์„ ๊ฒ€์ฆํ•ด user claims๋ฅผ ์ถ”์ถœํ•˜๋ฉด, ๋ฏผ๊ฐํ•œ ์‹ ์› ์ •๋ณด๊ฐ€ ์—์ด์ „ํŠธ ์ œ์–ด ๋ฐ–์—์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค.

์‹ค๋ฌด ์ธ์‚ฌ์ดํŠธ

  • ํ”„๋กœ๋•์…˜์šฉ ์—์ด์ „ํŠธ ๋„๊ตฌ๋Š” '๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ๋‚˜'๋ณด๋‹ค '๋ฌด์—‡์„ ์ ˆ๋Œ€ ๋ชป ํ•˜๊ฒŒ ํ•  ๊ฒƒ์ธ๊ฐ€'๋ฅผ ๋จผ์ € ์„ค๊ณ„ํ•ด์•ผ ํ•œ๋‹ค.
  • SQL ์ƒ์„ฑ๊ถŒ, ์—ฐ๊ฒฐ ์ •๋ณด, ์‚ฌ์šฉ์ž ์‹ ์›์ฒ˜๋Ÿผ ์œ„ํ—˜๋„๊ฐ€ ํฐ ์š”์†Œ๋Š” ์—์ด์ „ํŠธ ์ž…๋ ฅ์—์„œ ๋ถ„๋ฆฌํ•˜๊ณ , ๋„๊ตฌ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ๊ฐ€๋Šฅํ•œ ํ•œ ์ข๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ด๋‹ค.
  • ์ฝ๊ธฐ/์“ฐ๊ธฐ ๋ถ„๋ฆฌ, ๋ช…์‹œ์  ์˜ค๋ฅ˜, bound parameters, authenticated parameters๋ฅผ ํ•จ๊ป˜ ์ ์šฉํ•˜๋ฉด ๋ณด์•ˆ๊ณผ ์šด์˜ ์•ˆ์ •์„ฑ์„ ๋™์‹œ์— ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.