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

Stop Giving Your AI Agents API Keys - Kim Maida, Keycard & Mason Egger, Temporal

AI Engineer ยท 2026-11-06 06:00 ยท 52:36

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

์—์ด์ „ํŠธ์— API ํ‚ค๋ฅผ ์ง์ ‘ ์ฃผ๋Š” ๋Œ€์‹  token exchange๋กœ ์‚ฌ์šฉ์žยท์—์ด์ „ํŠธยท๋„๊ตฌ์˜ ์‹ ์›์„ ๋ถ„๋ฆฌํ•˜๊ณ , Temporal๋กœ ๊ทธ ์‹คํ–‰์„ ์ค‘๋‹จ ์—†์ด ๋ณต๊ตฌ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ์•ˆ์ „ํ•˜๊ณ  ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋‹ค.

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

  1. 0:00
    ์†Œ๊ฐœ Keycard๋Š” ์—์ด์ „ํŠธ์˜ ๋Ÿฐํƒ€์ž„ ์ ‘๊ทผ ์‹ ์›๊ณผ ๊ถŒํ•œ ๊ด€๋ฆฌ๋ฅผ, Temporal์€ ์—์ด์ „ํŠธ๊นŒ์ง€ ํฌํ•จํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ durable execution์„ ์ œ๊ณตํ•œ๋‹ค. ์›Œํฌ์ˆ์€ ๊ณต์œ  ์กฐ์ง๊ณผ ์ƒŒ๋“œ๋ฐ•์Šค ํ™˜๊ฒฝ์—์„œ ์ง„ํ–‰๋˜๋ฉฐ, ์‚ฌ์ „ ๊ฐ€์ž… ์—†์ด ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.
  2. 1:17
    ์—์ด์ „ํŠธ์— API ํ‚ค๋ฅผ ์ฃผ๋Š” ๋ฌธ์ œ API ํ‚ค๋ฅผ ์—์ด์ „ํŠธ์— ์ง์ ‘ ์ฃผ๋ฉด ์‚ฌ์šฉ์ž๋‚˜ ์—์ด์ „ํŠธ์˜ ์‹ ์›์„ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์—†๊ณ , ํ‚ค๊ฐ€ ๊ฐ€์ง„ ๋ชจ๋“  ๊ถŒํ•œ์ด ๊ทธ๋Œ€๋กœ ๋…ธ์ถœ๋œ๋‹ค. ๋˜ํ•œ ์‚ฌ๋žŒ์˜ ๊ฐœ์ž…์—๋งŒ ์˜์กดํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ž์œจ ์‹คํ–‰ ์—์ด์ „ํŠธ์—๋Š” ๋” ์ •๊ตํ•œ ์ ‘๊ทผ ํ†ต์ œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
  3. 1:59
    token exchange ์„ค๋ช… token exchange๋Š” OAuth 2 ์œ„์—์„œ ์‚ฌ์šฉ์ž ์‹ ์›๊ณผ ์œ„์ž„ ๋ฒ”์œ„๋ฅผ ๋‹จ๊ณ„์ ์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” ํ‘œ์ค€์ด๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋จผ์ € ๋กœ๊ทธ์ธํ•˜๊ณ , ๋™์˜ํ•œ scope๋งŒ ์—์ด์ „ํŠธ์— ์œ„์ž„๋˜๋ฉฐ, ๊ทธ ๊ฒฐ๊ณผ ์‚ฌ์šฉ์ž์™€ ๊ถŒํ•œ ์ˆ˜์ค€์ด ํฌํ•จ๋œ ํ† ํฐ์ด ๋ฐœ๊ธ‰๋œ๋‹ค.
  4. 3:10
    ์—์ด์ „ํŠธ ๋ฃจํ”„๋ฅผ ๋”ฐ๋ผ๊ฐ€๊ธฐ ์—์ด์ „ํŠธ๋Š” LLM ํ˜ธ์ถœ๊ณผ ๋„๊ตฌ ํ˜ธ์ถœ์„ ๋ฐ˜๋ณตํ•˜๋Š” ์ œ์–ด ๋ฃจํ”„์ด๋ฉฐ, ์—ฌ๊ธฐ์„œ๋Š” expense desk agent๊ฐ€ ์˜ˆ์‹œ๋‹ค. ์‚ฌ์šฉ์ž ์š”์ฒญ์€ ๋Ÿฐํƒ€์ž„, MCP client/server, ledger API๋ฅผ ๊ฑฐ์น˜๋ฉฐ, ๊ฐ ๋‹จ๊ณ„์—์„œ ํ† ํฐ์ด ๋‹ค์Œ ํ™‰์œผ๋กœ ๊ตํ™˜๋˜์–ด ์ „๋‹ฌ๋œ๋‹ค.
  5. 5:41
    ๋„๊ตฌ ํ˜ธ์ถœ๋งˆ๋‹ค ๋ณ„๋„ ํ† ํฐ ๋ฐœ๊ธ‰ ๊ฐ tool call๋งˆ๋‹ค ํ•„์š”ํ•œ ๋ฒ”์œ„๋กœ๋งŒ ์ œํ•œ๋œ ํ† ํฐ์„ ์ƒˆ๋กœ ๋ฐœ๊ธ‰๋ฐ›์•„์•ผ ํ•œ๋‹ค. ์—์ด์ „ํŠธ์™€ ์‚ฌ์šฉ์ž์˜ ์‹ ์›, ์œ„์ž„ ์ฒด์ธ์ด ์ •์ฑ…์— ๋ถ€ํ•ฉํ•  ๋•Œ๋งŒ MCP ์„œ๋ฒ„์šฉ ํ† ํฐ๊ณผ ๊ทธ ๋‹ค์Œ ledger API์šฉ ํ† ํฐ์ด ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐœ๊ธ‰๋˜๊ณ , ์‚ฌ์šฉ ํ›„ ์ฆ‰์‹œ ํ๊ธฐ๋œ๋‹ค.
  6. 8:49
    ์›Œํฌ์ˆ ํ™˜๊ฒฝ ์„ค์ •: expense desk agent ์‹ค์Šต์€ ๋กœ๊ทธ์ธ ์—†์ด ์‹œ์ž‘๋˜๋Š” expense desk agent๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ง„ํ–‰๋˜๋ฉฐ, ๋ชจ๋“  ์ฐธ๊ฐ€์ž๊ฐ€ ๊ฐ™์€ Keycard ์กฐ์ง์„ ๊ณต์œ ํ•œ๋‹ค. ํ•„์š” ์‹œ ๊ด€๋ฆฌ ๊ถŒํ•œ์„ ๋ถ€์—ฌ๋ฐ›์•„ ์ฝ˜์†”์—์„œ ์ง์ ‘ ์„ค์ •๊ณผ ์‹ค์Šต์„ ๋”ฐ๋ผ๊ฐ€๊ฒŒ ๋œ๋‹ค.
  7. 10:28
    ๋ณ€๊ฒฝ ์ „: ๋ชจ๋‘๊ฐ€ API ํ‚ค๋ฅผ ๊ณต์œ  ์ดˆ๊ธฐ ์ƒํƒœ์—์„œ๋Š” ๋ˆ„๊ฐ€ ์š”์ฒญํ–ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๊ณ , ๋ชจ๋“  ์ž‘์—…์ด ๊ฐ™์€ MCP ์„œ๋ฒ„์™€ API ํ‚ค๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌ๋œ๋‹ค. ์ง€์ถœ ์ƒ์„ฑยท์Šน์ธ ๊ธฐ๋ก์—๋„ ์‚ฌ๋žŒ์ด๋‚˜ ์—์ด์ „ํŠธ์˜ ์ •์ฒด์„ฑ์ด ๋‚จ์ง€ ์•Š์•„ ๊ฐ์‚ฌ ์ถ”์ ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
  8. 12:51
    ์—์ด์ „ํŠธ์— ๊ณ ์œ ํ•œ ์‹ ์› ๋ถ€์—ฌ Keycard์—์„œ application๊ณผ resource๋ฅผ ๋“ฑ๋กํ•ด ์—์ด์ „ํŠธ๊ฐ€ ํ† ํฐ์„ ์š”์ฒญํ•˜๊ณ  ๋™์‹œ์— ํ† ํฐ์˜ ์ˆ˜์‹  ๋Œ€์ƒ์ด ๋˜๋„๋ก ๊ตฌ์„ฑํ•œ๋‹ค. ์ดํ›„ dependencies์— MCP ์„œ๋ฒ„, LLM API, user info endpoint๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ , client ID์™€ secret์œผ๋กœ ์—์ด์ „ํŠธ๊ฐ€ ์ž๊ธฐ ์ž์‹ ์„ ์ธ์ฆํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค.
  9. 21:47
    ์ฝ”๋“œ์— token exchange ์—ฐ๊ฒฐ ์„ค์ •๋งŒ์œผ๋กœ๋Š” ๋ถ€์กฑํ•˜๊ณ , ์‹ค์ œ ์—์ด์ „ํŠธ ์ฝ”๋“œ๊ฐ€ ํ† ํฐ ๊ตํ™˜์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์—ฐ๊ฒฐํ•ด์•ผ ํ•œ๋‹ค. MCP tool set๊ณผ mint ํ•จ์ˆ˜๊ฐ€ ๋„๊ตฌ ํ˜ธ์ถœ๋งˆ๋‹ค ์ ์ ˆํ•œ ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•˜๋ฉฐ, ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ์—†์œผ๋ฉด client credentials grant๋กœ ์—์ด์ „ํŠธ ์ž์‹ ์ด ์ธ์ฆํ•œ๋‹ค.
  10. 26:05
    ์—์ด์ „ํŠธ๊ฐ€ ์ž๊ธฐ ์ž์‹ ์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋กœ๊ทธ์ธ ์‚ฌ์šฉ์ž๊ฐ€ ์—†์„ ๋•Œ๋Š” ์—์ด์ „ํŠธ๊ฐ€ ์ž๊ธฐ ์‹ ์›์œผ๋กœ ์‹คํ–‰๋˜๋ฉฐ, approval limit ๊ฐ™์€ ๊ถŒํ•œ๋„ ๊ทธ ์—์ด์ „ํŠธ ๊ณ„์ • ๊ธฐ์ค€์œผ๋กœ ์ ์šฉ๋œ๋‹ค. ์ง€์ถœ์€ ์‚ฌ์šฉ์ž ์ง€์‹œ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ƒ์„ฑ๋˜์ง€๋งŒ, ์‹ค์ œ ๊ธฐ๋ก์ƒ์œผ๋กœ๋Š” ์—์ด์ „ํŠธ ์ž์‹ ์˜ ํ–‰์œ„๋กœ ๋‚จ๋Š”๋‹ค.
  11. 28:00
    ๊ฐ์‚ฌ ๋กœ๊ทธ ์ฝ๊ธฐ Keycloak์˜ ํ™œ๋™ ๊ธฐ๋ก์—์„œ ์–ด๋–ค ์ฃผ์ฒด๊ฐ€ ์–ด๋–ค ์ž์›์— ์ ‘๊ทผํ–ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” agent application์ด MCP ์ž์›์— ์ ‘๊ทผํ•œ ๊ธฐ๋ก๊ณผ, ๊ทธ ๋’ค MCP ์„œ๋ฒ„๊ฐ€ ledger API๋กœ ํ† ํฐ์„ ๊ตํ™˜ํ•œ ํ”์ ์ด ๋‚จ์•„ delegation chain์œผ๋กœ ๋ณด์ธ๋‹ค.
  12. 31:22
    ์ž„ํผ์„œ๋„ค์ด์…˜ ์—†์ด ์ธ๊ฐ„ ์‚ฌ์šฉ์ž ์ถ”๊ฐ€ ์ด์ œ ์—์ด์ „ํŠธ๊ฐ€ ์‚ฌ๋žŒ์„ ๊ฐ€์žฅํ•˜์ง€ ์•Š๊ณ , ์‹ค์ œ ์ธ๊ฐ„ ์‚ฌ์šฉ์ž์˜ ์‹ ์›์„ ํฌํ•จํ•œ ์ƒํƒœ๋กœ ๋™์ž‘ํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค. ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž์˜ ์ด๋ฉ”์ผ๊ณผ approval limit์ด ์‹๋ณ„๋˜๋ฉฐ, ๊ณผ๊ฑฐ์— ์ƒ์„ฑ๋œ ํ•ญ๋ชฉ์€ ๊ทธ๋Œ€๋กœ ๋‚จ์•„ ์žˆ๊ณ  ์ดํ›„๋ถ€ํ„ฐ๋งŒ ์ธ๊ฐ„ ์‚ฌ์šฉ์ž ๋งฅ๋ฝ์ด ๋ฐ˜์˜๋œ๋‹ค.
  13. 34:01
    ์Šน์ธ ํ•œ๋„์™€ ์Šน์ธ ์ฃผ์ฒด ์—์ด์ „ํŠธ๋Š” ์ผ์ • ๊ธˆ์•ก ์ดํ•˜์˜ ์ง€์ถœ์€ ์ž์ฒด์ ์œผ๋กœ ์Šน์ธํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํ•œ๋„๋ฅผ ๋„˜์œผ๋ฉด ์‚ฌ๋žŒ์˜ ๊ฒ€ํ† ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๊ธฐ๋ก์—๋Š” ๋ˆ„๊ฐ€ ์ƒ์„ฑํ–ˆ๊ณ  ๋ˆ„๊ฐ€ ์Šน์ธ ๋˜๋Š” ๊ฑฐ์ ˆํ–ˆ๋Š”์ง€๊ฐ€ ๋ช…ํ™•ํžˆ ๋‚จ์•„, ์—์ด์ „ํŠธ๊ฐ€ ์ž๊ธฐ ์ž์‹ ์˜ ๋น„์šฉ์€ ์Šน์ธํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋œ๋‹ค.
  14. 38:09
    ์œ„์ž„ ์ฒด์ธ ์ถ”์  ์ฒซ ๋ฒˆ์งธ ํ™‰์—์„œ๋Š” ์‚ฌ์šฉ์ž์˜ sign-in token์ด MCP ์„œ๋ฒ„์šฉ ํ† ํฐ์œผ๋กœ ๊ตํ™˜๋˜๊ณ , ๋‘ ๋ฒˆ์งธ ํ™‰์—์„œ๋Š” MCP ์„œ๋ฒ„๊ฐ€ ๊ทธ ํ† ํฐ์„ ๊ฐ€์ง€๊ณ  ledger API์šฉ ํ† ํฐ์„ ๋ฐœ๊ธ‰๋ฐ›๋Š”๋‹ค. session ๋ฒˆํ˜ธ๋ฅผ ํ†ตํ•ด ๊ฐ ํ™‰์„ ์ด์–ด์„œ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์–ด, ๋ˆ„๊ฐ€ ๋ˆ„๊ตฌ๋ฅผ ๋Œ€์‹ ํ•ด ์–ด๋–ค ์ž์›์— ์ ‘๊ทผํ–ˆ๋Š”์ง€ ๋๊นŒ์ง€ ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.
  15. 41:26
    ์—์ด์ „ํŠธ๋ฅผ ์œ„ํ•œ Temporal์˜ durable execution Temporal์€ ์›Œํฌํ”Œ๋กœ์™€ activity๋กœ ๋ถ„๋ฆฌ๋œ ์‹คํ–‰ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด, ์ค‘๊ฐ„ ์‹คํŒจ๊ฐ€ ๋‚˜๋„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ณต๊ตฌํ•˜๊ณ  ์ด์–ด์„œ ์‹คํ–‰ํ•œ๋‹ค. ์—์ด์ „ํŠธ ๋ฃจํ”„๋„ ๊ฒฐ๊ตญ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ๋ฐ˜๋ณต ์‹คํ–‰์ด๋ฏ€๋กœ, ์‹คํŒจ ๋ณต๊ตฌ์™€ ์žฌ์‹œ๋„๊ฐ€ ๊ฐ€๋Šฅํ•œ ์‹คํ–‰ ๊ณ„์ธต์ด ํ•„์š”ํ•˜๋‹ค.
  16. 46:01
    ์ž‘์—…์ž ๊ฐ•์ œ ์ข…๋ฃŒ ํ›„ ๋ณต๊ตฌ ์ž‘์—…์ž๋ฅผ ์‹คํ–‰ ์ค‘๊ฐ„์— ๊ฐ•์ œ๋กœ ์ข…๋ฃŒํ•ด๋„ Temporal์€ ์ด๋ฏธ ์ €์žฅ๋œ ์ƒํƒœ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์›Œํฌํ”Œ๋กœ๋ฅผ ์žฌ๊ฐœํ•œ๋‹ค. LLM ํ˜ธ์ถœ์ด๋‚˜ ์ด์ „ activity๋ฅผ ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ณ ๋„ ๋งˆ์ง€๋ง‰ ์ง€์ ๋ถ€ํ„ฐ ์ด์–ด์„œ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ๋Š” ์žฅ์• ๋ฅผ ๊ฑฐ์˜ ๋А๋ผ์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.
  17. 48:07
    ์—์ด์ „ํŠธ์—์„œ ๋‚ด๊ตฌ์„ฑ์ด ์ค‘์š”ํ•œ ์ด์œ  ์—์ด์ „ํŠธ๋Š” ๊ธด ๋ฃจํ”„์™€ ๋งŽ์€ ์™ธ๋ถ€ ํ˜ธ์ถœ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ๊ทธ ๊ณผ์ •์—์„œ ์ƒํƒœ ์†์‹ค์€ ๋น„์šฉ๊ณผ ์‹คํŒจ๋ฅผ ํฌ๊ฒŒ ํ‚ค์šด๋‹ค. durable execution์„ ์“ฐ๋ฉด LLM ์ œ๊ณต์ž ์žฅ์• , ์ง€์—ญ ์žฅ์• , ํ”„๋กœ์„ธ์Šค ์‹คํŒจ๊ฐ€ ๋‚˜๋„ ๋งˆ์ง€๋ง‰ ์ง€์ ์—์„œ ๋ฐ”๋กœ ์žฌ๊ฐœํ•  ์ˆ˜ ์žˆ๋‹ค.
  18. 49:28
    ์ด๋ฒคํŠธ ํžˆ์Šคํ† ๋ฆฌ์—์„œ ๋น„๋ฐ€์ •๋ณด ์ˆจ๊ธฐ๊ธฐ Temporal์˜ ์ด๋ฒคํŠธ ํžˆ์Šคํ† ๋ฆฌ์—๋Š” ๋ฏผ๊ฐํ•œ JWT๋‚˜ ๋น„๋ฐ€๊ฐ’์ด ๋‚จ์ง€ ์•Š๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด interceptor๋กœ just-in-time ์ฃผ์ž…์„ ํ•˜๊ฑฐ๋‚˜, payload encoder๋กœ ์ €์žฅ ๋ฐ์ดํ„ฐ๋ฅผ ์•”ํ˜ธํ™”ํ•ด ์‹คํ–‰ ๊ธฐ๋ก๊ณผ ๋น„๋ฐ€์ •๋ณด๋ฅผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

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

  • ์—์ด์ „ํŠธ ๊ถŒํ•œ์€ API ํ‚ค ํ•˜๋‚˜๋กœ ๋ฌถ์ง€ ๋ง๊ณ , ์‚ฌ์šฉ์žยท์—์ด์ „ํŠธยท์ž์›๋ณ„๋กœ ๋ถ„๋ฆฌ๋œ token exchange ์ฒด์ธ์œผ๋กœ ๊ด€๋ฆฌํ•ด์•ผ ๊ฐ์‚ฌ์™€ ์ตœ์†Œ๊ถŒํ•œ ์›์น™์„ ๋™์‹œ์— ๋งŒ์กฑํ•œ๋‹ค.
  • ๋„๊ตฌ ํ˜ธ์ถœ๋งˆ๋‹ค ์งง๊ฒŒ ์‚ด์•„ ์žˆ๋Š” scoped token์„ ๋ฐœ๊ธ‰ํ•˜๊ณ  ์ฆ‰์‹œ ํ๊ธฐํ•˜๋ฉด, MCP ์„œ๋ฒ„์™€ ํ•˜์œ„ API๊นŒ์ง€ ๊ถŒํ•œ ํ™•์‚ฐ์„ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ์—์ด์ „ํŠธ ์šด์˜์—์„œ๋Š” ๋ณด์•ˆ๋งŒํผ์ด๋‚˜ ์‹คํ–‰ ๋ณต๊ตฌ๊ฐ€ ์ค‘์š”ํ•˜๋ฏ€๋กœ, durable execution๊ณผ ๋น„๋ฐ€์ •๋ณด ๋น„๋…ธ์ถœ ์„ค๊ณ„๋ฅผ ํ•จ๊ป˜ ์ ์šฉํ•ด์•ผ ์‹ค์ œ ์„œ๋น„์Šค ํ’ˆ์งˆ์ด ๋‚˜์˜จ๋‹ค.