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

Generative UI... in Python? โ€” Jeremiah Lowin, Prefect

AI Engineer ยท 2026-09-11 01:30 ยท 17:38

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

MCP ์•ฑ๊ณผ prefab์„ ํ†ตํ•ด Python ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณต์žกํ•œ ํ”„๋ŸฐํŠธ์—”๋“œ ์—†์ด๋„ MCP ์„œ๋ฒ„์— ์ง์ ‘ ์—ฐ๊ฒฐ๋˜๋Š” ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ UI๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ , ๋‚˜์•„๊ฐ€ Python DSL์„ ์ŠคํŠธ๋ฆฌ๋ฐํ•ด ์ƒ์„ฑํ˜• UI๊นŒ์ง€ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

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

  1. 0:00
    MCP ์•ฑ๊ณผ ์—์ด์ „ํŠธ ์šฐํšŒ ๊ธฐ์กด MCP ๋„๊ตฌ๋Š” ํ•ญ์ƒ ์—์ด์ „ํŠธ๋ฅผ ๊ฑฐ์ณ ๊ฒฐ๊ณผ๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌ๋˜์ง€๋งŒ, MCP ์•ฑ์€ HTML/CSS/JavaScript UI๋ฅผ ์ง์ ‘ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด๋‚ด ์—์ด์ „ํŠธ๋ฅผ ์šฐํšŒํ•œ๋‹ค. ์ด ๋ฐฉ์‹์€ ์˜ˆ์•ฝ, ์ขŒ์„ ๋ณ€๊ฒฝ, ์ผ์ • ์ƒํ˜ธ์ž‘์šฉ์ฒ˜๋Ÿผ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์กฐ์ž‘ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝํ—˜์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋ฉฐ, ํ–ฅํ›„ ์—์ด์ „ํŠธ๊ฐ€ ์•ฑ ์ž์ฒด์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ํ™•์žฅ๋„ ์˜ˆ๊ณ ๋œ๋‹ค.
  2. 3:20
    Python ์—”์ง€๋‹ˆ์–ด์—๊ฒŒ UI๋ฅผ ๋ฐฐํฌํ•˜๊ธฐ ๋Œ€์ƒ ์‚ฌ์šฉ์ž๊ฐ€ ๋Œ€๋ถ€๋ถ„ Python ์—”์ง€๋‹ˆ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— React๋ฅผ ๊ฐ•์ œ๋กœ ์–น๋Š” ๋ฐฉ์‹์€ ํ˜„์‹ค์ ์ด์ง€ ์•Š์œผ๋ฉฐ, ๊ธฐ์กด ํ”„๋ŸฐํŠธ์—”๋“œ ์ƒํƒœ๊ณ„๋ฅผ Python์— ์–ต์ง€๋กœ ํ†ตํ•ฉํ•˜๋Š” ์ ‘๊ทผ๋„ ํ”ผํ•ด์•ผ ํ•œ๋‹ค. ๋Œ€์‹  ์กฐ์ง ๋‚ด๋ถ€์—์„œ ์ •๋ณด ๊ณต์œ ์™€ ์ˆ˜์ง‘์— ํ•„์š”ํ•œ ์‹ค์šฉ์ ์ธ UI๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ชฝ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ์žฌ์ •์˜ํ•œ๋‹ค.
  3. 4:45
    ํ‘œ, ํผ, ์ฐจํŠธ๋กœ ๋ฌธ์ œ๋ฅผ ์ขํžˆ๊ธฐ UI ์š”๊ตฌ๋ฅผ ํ‘œ, ํผ, ์ฐจํŠธ ๊ฐ™์€ ์ œํ•œ๋œ ๋ฒ”์ฃผ๋กœ ์ขํžˆ๋ฉด ๋ฒ”์šฉ ํ”„๋ŸฐํŠธ์—”๋“œ๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“œ๋Š” ๋Œ€์‹  ๋ชฉ์ ์— ๋งž๋Š” scoped UI ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค. prefab์€ ์ด๋Ÿฐ ๋ฒ”์œ„์—์„œ Python๋งŒ์œผ๋กœ UI๋ฅผ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ฃผ๋ฉฐ, Hello world ์นด๋“œ๋„ ์ „๋ถ€ Python ์ฝ”๋“œ๋กœ ์ƒ์„ฑ๋œ๋‹ค.
  4. 5:43
    ํ”„๋ŸฐํŠธ์—”๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๋Œ€์‹  ์กฐํ•ฉํ•˜๊ธฐ ํ•ต์‹ฌ์€ ํ”„๋ŸฐํŠธ์—”๋“œ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ž˜ ์„ค๊ณ„๋œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์กฐํ•ฉํ•ด ์™„์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ตฌ์กฐ๊ฐ€ ์ฝ”๋“œ์— ๋“œ๋Ÿฌ๋‚˜๊ณ , ์‚ฌ์šฉ์ž๋Š” ์ž„์˜์˜ UI๊ฐ€ ์•„๋‹ˆ๋ผ ์ •๋ˆ๋œ ํ™”๋ฉด์„ ๋น ๋ฅด๊ฒŒ ์ œ๊ณต๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
  5. 6:37
    DSL๊ณผ ๊ทธ ์‚ฌ์ด์˜ JSON prefab์€ context manager ๊ธฐ๋ฐ˜์˜ Python DSL๋กœ UI๋ฅผ ์„ ์–ธ์ ์œผ๋กœ ๊ตฌ์„ฑํ•˜๊ณ , ์ด๋ฅผ JSON ํ”„๋กœํ† ์ฝœ๋กœ ์ง๋ ฌํ™”ํ•œ ๋’ค React ์•ฑ์—์„œ ๋ Œ๋”๋งํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ํ•ต์‹ฌ์€ Python์ด ์•„๋‹ˆ๋ผ JSON์ด๋ผ๋Š” ์ค‘๊ฐ„ ํ‘œํ˜„์ด๋ฉฐ, ์ด ๋•๋ถ„์— ์—์ด์ „ํŠธ์™€ ์‚ฌ๋žŒ์ด ๊ฐ™์€ UI ํ‘œํ˜„์„ ์ƒ์„ฑยท์ˆ˜์ •ยท์ „์†กํ•  ์ˆ˜ ์žˆ๊ณ , reactive ๋ณ€์ˆ˜๋กœ ํด๋ผ์ด์–ธํŠธ ์ƒํ˜ธ์ž‘์šฉ๋„ ๊ตฌํ˜„๋œ๋‹ค.
  6. 8:54
    ๋ฌธ์„œ๋ฅผ ๋ฌธ์„œํ™” ๋Œ€์ƒ ์•ˆ์—์„œ ๋ Œ๋”๋งํ•˜๊ธฐ prefab์˜ ๋ฌธ์„œ๋Š” prefab ์ž์ฒด๋กœ ๋ Œ๋”๋ง๋˜๋ฉฐ, ๋ฌธ์„œ์˜ ์˜ˆ์ œ ์ฝ”๋“œ๋Š” ๋ผ์ด๋ธŒ๋กœ ์‹คํ–‰๋˜์–ด UI๊ฐ€ ์ฆ‰์‹œ ๋ณด์ธ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์˜ˆ์ œ๋ฅผ ํ”Œ๋ ˆ์ด๊ทธ๋ผ์šด๋“œ๋กœ ์—ด์–ด Python ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜๊ณ  ๊ฒฐ๊ณผ UI๋ฅผ ๋ฐ”๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  7. 10:13
    ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๋„๊ตฌ์™€ ํ‘œ ์˜†์˜ ์ฐจํŠธ MCP ๋„๊ตฌ๊ฐ€ Python dictionary ๋Œ€์‹  prefab ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด FastMCP๊ฐ€ ์ด๋ฅผ ๊ฐ์ง€ํ•ด ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ MCP ์•ฑ์œผ๋กœ ์ „ํ™˜ํ•œ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ๊ฒ€์ƒ‰ยทํ•„ํ„ฐ๋งยท์ •๋ ฌยทํŽ˜์ด์ง€๋„ค์ด์…˜์ด ๊ฐ€๋Šฅํ•œ ํ‘œ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๊ณ , ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ํ‘œ ์˜†์— ํŒŒ์ด ์ฐจํŠธ๋ฅผ ๋ฐฐ์น˜ํ•˜๋Š” ๊ตฌ์„ฑ๋„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
  8. 12:56
    ์ „์ฒด ์•ฑ๊ณผ ๋น„์‹ผ ๋ณต๋ถ™ ๋ฌธ์ œ ์™„์ „ํ•œ ์•ฑ ํ˜•ํƒœ์—์„œ๋Š” UI ์ง„์ž…์ ๊ณผ ๋ฐฑ์—”๋“œ ๋„๊ตฌ๋ฅผ ํ•จ๊ป˜ ์ •์˜ํ•ด ํผ ์ž…๋ ฅ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ €์žฅ ๊ฐ™์€ ์ž‘์—…์œผ๋กœ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ํŠนํžˆ ํŒŒ์ผ ์—…๋กœ๋“œ์ฒ˜๋Ÿผ ์—์ด์ „ํŠธ๋ฅผ ๊ฑฐ์น˜๋ฉด ๋Œ€์šฉ๋Ÿ‰ ํ…์ŠคํŠธ๋ฅผ ๊ทธ๋Œ€๋กœ ์žฌ์ž…๋ ฅํ•˜๊ฒŒ ๋˜๋Š” ๋น„ํšจ์œจ์ด ๋ฐœ์ƒํ•˜๋ฏ€๋กœ, MCP ์•ฑ์œผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ํŒŒ์ผ์„ ์ง์ ‘ ์„œ๋ฒ„์— ๋ณด๋‚ด๋Š” ๊ตฌ์กฐ๊ฐ€ ํ›จ์”ฌ ์ €๋ ดํ•˜๊ณ  ์•ˆ์ „ํ•˜๋‹ค.
  9. 15:15
    ์ƒ์„ฑํ˜• UI์™€ wire ์œ„์—์„œ JSON๋ณด๋‹ค ์ž‘์€ Python ์—์ด์ „ํŠธ๊ฐ€ UI ํ”„๋กœํ† ์ฝœ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๋ฉด ๋ Œ๋”๋Ÿฌ๊ฐ€ ์ด๋ฅผ ์ฆ‰์‹œ ํ™”๋ฉด์œผ๋กœ ๋ฐ”๊พธ๋Š” ์ƒ์„ฑํ˜• UI๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ดํ›„ ๋ฐœ๊ฒฌ๋œ ์ค‘์š”ํ•œ ์‚ฌ์‹ค์€ Python ํ‘œํ˜„์ด JSON๋ณด๋‹ค ์•ฝ 70% ์ž‘์•„ ํ† ํฐ, ๋น„์šฉ, ์ง€์—ฐ ์‹œ๊ฐ„ ์ธก๋ฉด์—์„œ ๋” ํšจ์œจ์ ์ด๋ฏ€๋กœ, ์ง€๊ธˆ์€ JSON ๋Œ€์‹  Python์„ ์ „์†กํ•ด ์ƒŒ๋“œ๋ฐ•์Šค์—์„œ ์‹คํ–‰ํ•œ ๋’ค JSON์œผ๋กœ ๋ณ€ํ™˜ํ•ด ๋ Œ๋”๋งํ•œ๋‹ค.

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

  • MCP ์•ฑ์€ ์—์ด์ „ํŠธ๋ฅผ ํ†ตํ•œ ๊ฐ„์ ‘ ์‘๋‹ต๋ณด๋‹ค ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์กฐ์ž‘ํ•˜๋Š” ํ™”๋ฉด์ด ํ•„์š”ํ•œ ์—…๋ฌด์— ํŠนํžˆ ์ ํ•ฉํ•˜๋ฏ€๋กœ, ๋‚ด๋ถ€ ์—…๋ฌด ๋„๊ตฌ์™€ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ ํ™”๋ฉด๋ถ€ํ„ฐ ์ ์šฉํ•˜๋ฉด ํšจ๊ณผ๊ฐ€ ํฌ๋‹ค.
  • UI ๋ฒ”์œ„๋ฅผ ํ‘œยทํผยท์ฐจํŠธ๋กœ ์ œํ•œํ•˜๋ฉด Python ํŒ€๋„ ์œ ์ง€ ๊ฐ€๋Šฅํ•œ ์ˆ˜์ค€์˜ DSL์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋•Œ ํ•ต์‹ฌ์€ ํ”„๋ŸฐํŠธ์—”๋“œ ๊ธฐ์ˆ  ์Šคํƒ์ด ์•„๋‹ˆ๋ผ ์ค‘๊ฐ„ ํ‘œํ˜„๊ณผ ์ปดํฌ๋„ŒํŠธ ์„ค๊ณ„๋‹ค.
  • ํŒŒ์ผ ์—…๋กœ๋“œ๋‚˜ ์ƒ์„ฑํ˜• UI์ฒ˜๋Ÿผ ์—์ด์ „ํŠธ๊ฐ€ ์ค‘๊ฐ„์—์„œ ๋ณต๋ถ™ํ•˜๊ฑฐ๋‚˜ ์žฌ์„œ์ˆ ํ•˜๋Š” ๋น„์šฉ์ด ํฐ ์ž‘์—…์€, ์‚ฌ์šฉ์ž-์„œ๋ฒ„ ์ง์ ‘ ๊ฒฝ๋กœ์™€ ๋” ์ž‘์€ ์ง๋ ฌํ™” ํ‘œํ˜„์œผ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ํšจ์œจ์ด ํฌ๊ฒŒ ๊ฐœ์„ ๋œ๋‹ค.