htmx sucks

Carson Gross

์ €๋Š” htmx๋ฅผ ํ•œ๋™์•ˆ ์ง€์ผœ๋ณด์•„ ์™”์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ์•ฝ๊ฐ„ ์›ƒ๊ธฐ๊ฑฐ๋‚˜ ๋ฏผ๋งํ•œ ๋ฐˆ์ฒ˜๋Ÿผ ๋Š๊ปด์กŒ๊ณ , ์‹ค์ œ ์›น ๊ฐœ๋ฐœ ์ž‘์—…์—์„œ์˜ ์ฝ”๋ฏนํ•œ ํœด์‹์œผ๋กœ ์—ฌ๊ฒจ์กŒ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด React Server Components, Svelte Runes ๋ฐ Signals๊ณผ ๊ฐ™์€ ๊ฒƒ๋“ค์ด ์‹ค์ œ๋กœ ๊ธฐ์ˆ ์˜ ์ตœ์ฒจ๋‹จ์„ ๋ฐ€๊ณ  ๋‚˜๊ฐ€๋Š” ์ž‘์—…์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ถˆํ–‰ํžˆ๋„, 2023๋…„ ์ค‘๋ฐ˜์— ์ด๋ฅด๋Ÿฌ ์–ด๋–ค ์ด์œ ๋กœ ์‚ฌ๋žŒ๋“ค์€ htmx๋ฅผ ์ง„์ง€ํ•˜๊ฒŒ ๋ฐ›์•„๋“ค์ด๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์›น ๊ฐœ๋ฐœ์˜ ๋ฏธ๋ž˜์— ๋Œ€ํ•ด ๊นŠ์€ ์šฐ๋ ค๋ฅผ ๋ถˆ๋Ÿฌ์ผ์œผํ‚ค๋Š” ๋งค์šฐ ์‹ฌ๊ฐํ•œ ์‚ฌํƒœ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ €๋งŒ ์ด๋Ÿฐ ์šฐ๋ ค๋ฅผ ๊ฐ€์ง„ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ htmx์— ๋Œ€ํ•œ ํ›Œ๋ฅญํ•œ ๋น„ํŒ์„ ์ฝ์–ด๋ณด์„ธ์š”:

๊ธฐ๋ณธ์ ์œผ๋กœ ๊ทธ๋“ค์€ ์ž์‹ ์˜ ๋ฌด์ง€๋ฅผ ์™„์ „ํžˆ ๋“œ๋Ÿฌ๋‚ด๊ณ , ์ž์‹ ๋“ค์ด ํ•ด๋‚ธ ๊ฒƒ์— ๋Œ€ํ•ด ๊ทผ๊ฑฐ ์—†๋Š” ์žฅ์ ์„ ๋ถ€์—ฌํ•˜๋ฉฐ, ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์นญ์ฐฌํ•ด ์ฃผ๊ธฐ๋ฅผ ๋ฐ”๋ž€๋‹ค.

์ •๋ง ์ •ํ™•ํ•œ ๋ง์ž…๋‹ˆ๋‹ค. ์ •๋ง, ์ •๋ง ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค.

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

๊ทธ๋ž˜์„œ ์ด ๊ธฐ์‚ฌ์—์„œ๋Š” htmx๊ฐ€ ์™œ ๋ณ„๋กœ์ธ์ง€๋ฅผ ํ‰๋ฒ”ํ•œ ์›น ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•ด ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•ด ๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

#์ฝ”๋“œ๊ฐ€ ํ˜•ํŽธ์—†๋‹ค

์šฐ์„ , htmx์˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์„ธ์š”.

์ด ์“ฐ๋ ˆ๊ธฐ๋ฅผ ๋ณด์„ธ์š”.

๊ทธ๋“ค์€ var๋ฅผ ์—ฌ๊ธฐ์ €๊ธฐ์„œ ์‚ฌ์šฉํ•˜๊ณ , ๊ฑฐ์˜ ์ตœ์‹  JavaScript ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ (์•ˆ๋…•ํ•˜์„ธ์š”, htmx ์‚ฌ๋žŒ๋“ค, ๋ชจ๋“ˆ์— ๋Œ€ํ•ด ๋“ค์–ด๋ณด์…จ๋‚˜์š”?), window ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์˜ค์—ผ์‹œํ‚ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ์•…์ธ ๊ฒƒ์€, ์ด ์ฝ”๋“œ๊ฐ€ ๊ทธ์ € ํ•˜๋‚˜์˜ ๊ฑฐ๋Œ€ํ•œ JavaScript ๋ฉ์–ด๋ฆฌ๋ผ๋Š” ์ ์ž…๋‹ˆ๋‹ค! ํŒŒ์ผ ํ•˜๋‚˜๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ ์ „ํ˜€ ๋ถ„ํ•ด๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ด ์‚ฌ๋žŒ์ด ์ œ๊ฐ€ MSU์—์„œ ๊ฐ€๋ฅด์น˜๋Š” ์ˆ˜์—…์„ ๋“ค์—ˆ๋‹ค๋ฉด, ์ €๋Š” ์ด ์‚ฌ๋žŒ์„ ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ์— ๋Œ€ํ•œ ์™„์ „ํ•œ ์˜คํ•ด ๋•Œ๋ฌธ์— ๋‚™์ œ์‹œ์ผฐ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ปดํ“จํ„ฐ ๊ณผํ•™์„ ์ „๊ณตํ•œ ์‹ ์ž…์ƒ์ด๋ผ๋ฉด ๋ˆ„๊ตฌ๋‚˜ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ข‹์€ ์†Œํ”„ํŠธ์›จ์–ด๋Š” ๊น”๋”ํ•œ ์ฝ”๋“œ์—์„œ ์‹œ์ž‘๋˜๋ฉฐ, ์ด ์ฝ”๋“œ๋Š” ๋งค์šฐ ์ง€์ €๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

#๋นŒ๋“œ ๋„๊ตฌ๊ฐ€ ์—†๋‹ค

๋‹ค์Œ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๊ฒƒ์€ ๋นŒ๋“œ ๋‹จ๊ณ„์˜ ๋ถ€์žฌ์ž…๋‹ˆ๋‹ค. htmx๋Š” ์ „ํ†ต์ ์ธ ๋นŒ๋“œ ๋‹จ๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, JavaScript ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ๋ˆ„๋ฆฌ๊ณ  ์žˆ๋Š” ์ด์ ์„ ์Šค์Šค๋กœ ๋ฐ•ํƒˆํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์‹ฌ์ง€์–ด ์ด๋ฅผ ์ž๋ž‘์Šค๋Ÿฝ๊ฒŒ ์—ฌ๊ธฐ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค!

๊ทธ๋ฆฌ๊ณ  ๋” ๋‚˜์œ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์„ธํžˆ ์‚ดํŽด๋ณด๋ฉด, ๊ทธ๋“ค์ด ๋นŒ๋“œ ๋‹จ๊ณ„๊ฐ€ ์—†๋‹ค๊ณ  ์ฃผ์žฅํ•˜๋ฉด์„œ๋„ ์‚ฌ์‹ค์€ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ์ € ์ž์‹ ๋“ค์ด ์ž‘์„ฑํ•œ ์ž„์‹œ์ ์ธ bash ์Šคํฌ๋ฆฝํŠธ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

์›ƒ๊ธฐ๊ณ ๋„ ๋ถ€์ •์งํ•ฉ๋‹ˆ๋‹ค. ๋ถ€๋„๋Ÿฌ์šด ์ผ์ž…๋‹ˆ๋‹ค.

#ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์—†๋‹ค

์ด๋Ÿฐ ํ”„๋กœ์ ํŠธ์— TypeScript๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ฐฑํ•œ ์ด์ ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ์ €์ž๋“ค์€ ์ด๋ฅผ ๊ณ ์ง‘์Šค๋Ÿฝ๊ฒŒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ค‘ ์ผ๋ถ€๋Š” ๋นŒ๋“œ ๋‹จ๊ณ„์— ๋Œ€ํ•œ ๋น„ํ•ฉ๋ฆฌ์ ์ธ ๋ฐ˜๋Œ€(๊ทธ๋“ค์€ ์‚ฌ์‹ค ๋นŒ๋“œ ๋‹จ๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ!) ๋•Œ๋ฌธ์ด์ง€๋งŒ, ๋˜ ๋‹ค๋ฅธ ์ด์œ ๋Š” โ€œ๋””๋ฒ„๊น… ๊ฐ€๋Šฅํ•œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ œ๊ณตโ€œํ•˜๊ฒ ๋‹ค๋Š” ๋ง๋„ ์•ˆ ๋˜๋Š” ์•ฝ์† ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก , JavaScript ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ๋ˆ„๊ตฌ๋‚˜ ์•Œ๋“ฏ์ด, TypeScript๋Š” ์™„๋ฒฝํ•˜๊ฒŒ ๋””๋ฒ„๊น… ๊ฐ€๋Šฅํ•œ ์†Œ์Šค ๋งต์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ด ์‚ฌ์‹ค์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ €์ž๋“ค์€ ์—ฌ์ „ํžˆ ๊ตฌ์‹ JavaScript ๋ฒ„์ „์„ ๊ณ ์ง‘ํ•˜๋ฉฐ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋“ค์ด ์ž˜๋ชป๋˜์—ˆ์Œ์„ ๋ฌต์‹œ์ ์œผ๋กœ ์ธ์ •ํ•˜๋ฉฐ, ์ด์ œ JSDoc ์ฃผ์„์„ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ์ถ”๊ฐ€ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค (์—ฌ๊ธฐ์„œ โ€œ์ฝ”๋“œ๋ฒ ์ด์Šคโ€œ๋ผ๋Š” ๋ง์„ ๋Š์Šจํ•˜๊ฒŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค). ์ด ๋ชจ๋“  ๊ฒƒ์€ ์ฒ˜์Œ๋ถ€ํ„ฐ ํ˜„๋Œ€์ ์ด๊ณ  ๋ชจ๋“ˆํ™”๋œ TypeScript๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋Œ€์‹ , ์ž˜๋ชป๋œ ์„ ํƒ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋‚˜๋งˆ ๋‹คํ–‰์ธ ์ ์€ ์ ์–ด๋„ ์ด๋“ค์€ ์ ˆ๋ฐ˜ ์ •๋„ ๊ดœ์ฐฎ์€ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ์ƒํƒœ๋ฅผ ๊ณ ๋ คํ•˜๋ฉด ๋‹น์—ฐํžˆ ๊ทธ๋ž˜์•ผ ํ•ฉ๋‹ˆ๋‹ค!

#๊ตฌ์‹ ๊ธฐ์ˆ 

์ด์ œ htmx ์ฝ”๋“œ๋ฒ ์ด์Šค ์ž์ฒด์˜ ์ฃผ์š” (ํ•˜์ง€๋งŒ ๊ฒฐ์ฝ” ๋ชจ๋“  ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค!) ๋ฌธ์ œ๋ฅผ ๋‹ค๋ฃจ์—ˆ์œผ๋‹ˆ, ๋” ์ผ๋ฐ˜์ ์ธ htmx์˜ ๋ฌธ์ œ๋กœ ๋„˜์–ด๊ฐ€ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ๋ˆˆ์— ๋„๋Š” ๋ฌธ์ œ๋Š” ์ €์ž๋“ค์ด ๋˜๋‹ค์‹œ ์ž๋ž‘์Šค๋Ÿฌ์›Œํ•˜๋Š” ๊ฒƒ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค: ํ•˜์ดํผ๋ฏธ๋””์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์ด๊ฒƒ์€ ๋‹จ์ˆœํžˆ โ€œHTML์„ ์‚ฌ์šฉํ•œ๋‹คโ€œ๋Š” ๋ง์˜ ์šฐ์•„ํ•œ ํ‘œํ˜„์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ์™œ ๊ทธ๋“ค์ด ๋‹ค๋ฅธ ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ์šฉ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ์–ด์จŒ๋“  ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.

์ž, ๋งŒ์•ฝ ๋ˆˆ์น˜์ฑ„์ง€ ๋ชปํ•˜์…จ๋‹ค๋ฉด, HTML์€ ์ด์ œ 30๋…„์ด ๋„˜์—ˆ์Šต๋‹ˆ๋‹ค. ์•„์ฃผ ์˜ค๋ž˜๋œ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋” ๋‚˜์•„๊ฐ€, ์šฐ๋ฆฌ๋Š” ์ด ์‚ฌ๋žŒ๋“ค์ด ์ถ”์ฒœํ•˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์— ๋Œ€ํ•œ ๋งŽ์€ ๊ฒฝํ—˜์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. htmx๊ฐ€ ์ƒˆ๋กœ์šด ๊ฒƒ์„ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค: intercooler.js, PJax ๋ฐ Unpoly (htmx๋ณด๋‹ค ํ›จ์”ฌ ๋‚ซ์Šต๋‹ˆ๋‹ค, ์ฐธ๊ณ ๋กœ)๋Š” ์ด๋ฏธ ์˜ค๋ž˜์ „๋ถ€ํ„ฐ ์กด์žฌํ•ด์™”์Šต๋‹ˆ๋‹ค.

๊ทธ ์ด์ „์—๋„ jquery.load()๋ผ๋Š” ๊ฒƒ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ 2008๋…„์˜ jQuery ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค:

$( "#result" ).load( "ajax/test.html" );

๊ทธ๋ฆฌ๊ณ  ์ด์ œ htmx ์‚ฌ๋žŒ๋“ค์ด ์ œ๊ณตํ•˜๋Š” ํ˜์‹ ์ ์ธ ์ฝ”๋“œ๋ฅผ ๋ณด์„ธ์š”:

<button hx-get="/ajax/test.html"
        hx-target="#result">
    Load
</button>

์™€์šฐ. ๋†€๋ž๊ตฐ์š”.

์›ƒ๊ธฐ์ง€ ์•Š์•˜๋‹ค๋ฉด ์ •๋ง ํ™”๊ฐ€ ๋‚  ๋ป”ํ–ˆ์Šต๋‹ˆ๋‹ค.

#์ปดํฌ๋„ŒํŠธ๊ฐ€ ์—†์Œ

htmx๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ง์•„์•ผ ํ•  ๋˜ ๋‹ค๋ฅธ ์ด์œ ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. React๋ฅผ ์„ ํƒํ•˜๋ฉด MUI, NextUI ๋ฐ Chakra์™€ ๊ฐ™์€ ๊ฒƒ๋“ค์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

htmx์—์„œ๋Š”โ€ฆ ์•„๋ฌด๊ฒƒ๋„ ์—†์Šต๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ง์ ‘ ์ฐพ์•„์„œ htmx์™€ ์ด๋ฒคํŠธ ๋“ฑ์„ ํ†ตํ•ด ํ†ตํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

#ํ”„๋ก ํŠธ์—”๋“œ/๋ฐฑ์—”๋“œ ๋ถ„ํ• ์ด ์—†์Œ

htmx๋ฅผ ํ”ผํ•ด์•ผ ํ•  ๋˜ ๋‹ค๋ฅธ ์ฃผ์š” ์ด์œ ๋Š” ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ ํŒ€ ๊ฐ„์˜ ๋ถ„ํ• ์„ ์ œ๊ฑฐํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์‹ฌ์ง€์–ด ํšŒ์‚ฌ๊ฐ€ React์—์„œ htmx๋กœ ์ „ํ™˜ํ–ˆ์„ ๋•Œ ์ด๋ฅผ ์žฅ์ ์œผ๋กœ ์ž๋ž‘ํ•˜๋Š” ํŽ˜์ด์ง€๊นŒ์ง€ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋ฌผ๋ก , ๋‘ ํŒ€ ๊ฐ„์˜ ์กฐ์œจ์— ์–ด๋ ค์›€์ด ์žˆ์„ ๋•Œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ ์—”์ง€๋‹ˆ์–ด๋Š” ํ”„๋ก ํŠธ์—”๋“œ ์—”์ง€๋‹ˆ์–ด๊ฐ€ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋„ˆ๋ฌด ์ž์ฃผ ๋ณ€๊ฒฝํ•œ๋‹ค๊ณ  ๋ถˆํ‰ํ•˜๊ณ , ํ”„๋ก ํŠธ์—”๋“œ ์—”์ง€๋‹ˆ์–ด๋Š” ๋ฐฑ์—”๋“œ ์—”์ง€๋‹ˆ์–ด๊ฐ€ ๋„ˆ๋ฌด ๋Š๋ฆฌ๊ฒŒ ์›€์ง์ธ๋‹ค๊ณ  ๋ถˆํ‰ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ GraphQL๊ณผ RSC์™€ ๊ฐ™์€ ๊ธฐ์ˆ ์ด ์žˆ์–ด ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ํ˜„์žฌ ๊ธฐ์กด์˜ ํ‘œ์ค€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชจ๋ธ ๋‚ด์—์„œ ํ•ด๊ฒฐ๋œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

ํ”„๋ก ํŠธ์—”๋“œ/๋ฐฑ์—”๋“œ ๋ถ„ํ• ์€ ํŠนํžˆ ๊ฐœ๋ฐœ ํŒ€์ด ํ™•์žฅ๋จ์— ๋”ฐ๋ผ ํšŒ์‚ฌ์— ๋งค์šฐ ์ข‹์€ ์กฐ์ง ๋ชจ๋ธ๋กœ ์ž…์ฆ๋˜์—ˆ์œผ๋ฉฐ, ์ด๋ฅผ (์ด๋ฅธ๋ฐ”) โ€œํ’€์Šคํƒโ€ ๊ฐœ๋ฐœ๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ์œ„ํ—˜ํ•˜๊ณ , ์†”์งํžˆ ๋งํ•ด ์–ด๋ฆฌ์„์€ ์ผ์ž…๋‹ˆ๋‹ค.

#๋ฐฑ์—”๋“œ ์—”์ง€๋‹ˆ์–ด๋Š” ์“ฐ๋ ˆ๊ธฐ ๊ฐ™์€ UI๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค

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

htmx ์›น์‚ฌ์ดํŠธ๋ฅผ ๋ณด์„ธ์š”. ์ธ๋ผ์ธ ์Šคํƒ€์ผ, ํ…Œ์ด๋ธ”, ์˜ค๋žซ๋™์•ˆ alt ์„ค๋ช…์ด ์—†๋Š” ์ด๋ฏธ์ง€ ํƒœ๊ทธ๊ฐ€ ์ž”๋œฉ ์žˆ์Šต๋‹ˆ๋‹ค. HTML์„ ์‚ฌ์šฉํ•˜๋ผ๊ณ  ๊ถŒ์žฅํ•˜๋Š” ์‚ฌ๋žŒ๋“ค๋กœ๋ถ€ํ„ฐ ๋‚˜์˜จ ํ˜•ํŽธ์—†๋Š” HTML์ž…๋‹ˆ๋‹ค!

์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ด๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋งก๊ฒจ์•ผ ํ•˜๋ฉฐ, ์˜ค๋Š˜๋‚  ๊ทธ๋Ÿฐ ์‚ฌ๋žŒ๋“ค์€ ๋Œ€๋ถ€๋ถ„ ํ”„๋ก ํŠธ์—”๋“œ SPA ๊ฐœ๋ฐœ์ž๋“ค์ž…๋‹ˆ๋‹ค.

#XSS ์ทจ์•ฝ์ 

htmx๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ง์•„์•ผ ํ•  ๋” ๊ธฐ์ˆ ์ ์ธ ์ด์œ ๋กœ, ๊ทธ๊ฒƒ์€ ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ ์Šคํฌ๋ฆฝํŒ… ๊ณต๊ฒฉ์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ์ผ๋ จ์˜ ๋ณด์•ˆ ๋ฌธ์ œ์— ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” htmx์˜ ์„ค๊ณ„์— ๊ทผ๋ณธ์ ์œผ๋กœ ์žˆ์Šต๋‹ˆ๋‹ค: ๊ทธ๊ฒƒ์€ ๋งˆํฌ์—…์— ๋™์ž‘์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ณ , ์‹ฌ์ง€์–ด ๊ถŒ์žฅํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์‹œ ํ•œ ๋ฒˆ ์šฐ๋ฆฌ๋Š” ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ์˜ ๋ช…๋ฐฑํ•œ ์œ„๋ฐ˜์„ ๋ณด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์›น ๊ฐœ๋ฐœ์—์„œ ๋งˆํฌ์—…, ์Šคํƒ€์ผ๋ง, ๋™์ž‘์„ ๊ฐ๊ฐ HTML, CSS ๋ฐ JavaScript ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์˜ค๋ž˜์ „๋ถ€ํ„ฐ ์•Œ๊ณ  ์žˆ๋Š” ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค.

์ด ๋ช…๋ฐฑํ•˜๊ณ  ์ž˜ ์•Œ๋ ค์ง„ ์ง„๋ฆฌ๋ฅผ ์œ„๋ฐ˜ํ•จ์œผ๋กœ์จ, htmx๋Š” HTML์„ ์ ์ ˆํ•˜๊ฒŒ ์ •ํ™”ํ•˜์ง€ ์•Š์œผ๋ฉด ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๊ท€ํ•˜์˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋™์ž‘์„ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๋Š” ์ทจ์•ฝ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€๋” htmx ์ €์ž๋Š” โ€œ๊ทธ๋ ‡๋‹ค๋ฉด href ์†์„ฑ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?โ€œ์™€ ๊ฐ™์€ ๋˜‘๋˜‘ํ•œ ์ฒ™ํ•˜๋Š” ๋Œ“๊ธ€์„ ๋‹ฌ๊ธฐ๋„ ํ•˜์ง€๋งŒ, ๊ทธ๊ฑด ๋ถ„๋ช…ํžˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

#์ผ์ž๋ฆฌ ์—†์Œ

htmx๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ง์•„์•ผ ํ•  ๋˜ ๋‹ค๋ฅธ ์‹ค์šฉ์ ์ธ ์ด์œ ๋Š” htmx ๊ด€๋ จ ์ผ์ž๋ฆฌ๊ฐ€ ๊ฑฐ์˜ ์—†๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

์ €๋Š” ๋ฐฉ๊ธˆ indeed์—์„œ htmx ์ผ์ž๋ฆฌ๋ฅผ ๊ฒ€์ƒ‰ํ•ด ๋ณด์•˜๊ณ , ์ด ๋‘ ๊ฐœ์˜ ์ผ์ž๋ฆฌ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค: ํ•˜๋‚˜๋Š” Microsoft, ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” Oak Ridge National Laboratory์—์„œ์ž…๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด์— โ€œreactโ€œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ฉด 13,758๊ฐœ์˜ ์ผ์ž๋ฆฌ๊ฐ€ ๋‚˜์˜ต๋‹ˆ๋‹ค.

์ง„์ง€ํ•˜๊ฒŒ ๋งํ•˜์ž๋ฉด, ์–ด๋–ค ๊ธฐ์ˆ ์— ๊ฒฝ๋ ฅ์„ ๊ฑธ๊ณ  ์‹ถ์Šต๋‹ˆ๊นŒ?

#๊ณ ์šฉํ•  ์‚ฌ๋žŒ ์—†์Œ

์œ„์˜ ๋ฌธ์ œ์˜ ๋‹ค๋ฅธ ์ธก๋ฉด์€ ํšŒ์‚ฌ๋ผ๋ฉด, htmx ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฑฐ์˜ ์—†๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

๋ชจ๋‘๊ฐ€ ๋ถ€ํŠธ์บ ํ”„์— ๊ฐ€์„œ React๋ฅผ ๋ฐฐ์›๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์—ฌ๋Ÿฌ๋ถ„์˜ ํšŒ์‚ฌ๊ฐ€ ํฐ ์ง์› ํ’€์„ ํ•„์š”๋กœ ํ•˜๊ฑฐ๋‚˜ (์–ด์ฉŒ๋ฉด ํšŒ์‚ฌ์— ๋†’์€ ์ด์ง๋ฅ ์ด ์žˆ์„ ์ˆ˜๋„ ์žˆ๊ณ , ์ง์› ์ž„๊ธˆ์„ ๋‚ฎ์ถ”๊ณ  ์‹ถ์„ ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, ํ’€ ์Šคํƒ ์—”์ง€๋‹ˆ์–ด์˜ ์ž‘์€ ํŒ€์ด ํšŒ์‚ฌ ํ™•์žฅ์„ ๋ฐฉํ•ดํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค), ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์—์„œ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋” ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค.

์˜ค๋Š˜๋‚ , ๊ทธ ๊ธฐ์ˆ ์€ React์ž…๋‹ˆ๋‹ค.

#API ์ค‘๋ณต (๋˜๋Š” ๊ทธ ์ด์ƒ!)

๋” ๊ธฐ์ˆ ์ ์ธ ์ธก๋ฉด์œผ๋กœ ๋Œ์•„๊ฐ€์„œ, htmx๋ฅผ ์ฑ„ํƒํ•˜๊ณ  ๋˜ํ•œ ๋ชจ๋ฐ”์ผ ์•ฑ์ด๋‚˜ ์ œ3์ž๊ฐ€ ์‚ฌ์šฉํ•  API๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด, ํ•ด๋‹น API๋ฅผ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์—”๋“œํฌ์ธํŠธ์™€ ์™„์ „ํžˆ ๋ณ„๋„๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋‹ค์‹œ ํ•œ๋ฒˆ, ๋ฏฟ์„ ์ˆ˜ ์—†๊ฒŒ๋„, htmx ์‚ฌ๋žŒ๋“ค์€ ์ด ์‚ฌ์‹ค์„ ์ž๋ž‘ํ•ฉ๋‹ˆ๋‹ค, ์—ฌ๊ธฐ์—๋Š” ์ค‘๋ณต ์ž‘์—…์ด ์ˆ˜๋ฐ˜๋œ๋‹ค๋Š” ์ ์„ ์™„์ „ํžˆ ๋ฌด์‹œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ์ผ API๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋” ํ•ฉ๋ฆฌ์ ์ด๋ฉฐ, ๋‹จ์ผ ๋ฐฑ์—”๋“œ ํŒ€์ด ๋ชจ๋“  ์š”๊ตฌ ์‚ฌํ•ญ์„ ์œ ์—ฐํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค.

์ด๋Š” ๋ช…๋ฐฑํ•˜๋ฉฐ, ์†”์งํžˆ ๋งํ•ด ๋…ผ์Ÿ์˜ ์—ฌ์ง€์กฐ์ฐจ ์—†๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

#ํ™•์žฅ๋˜์ง€ ์•Š์Œ

htmx์˜ ๋˜ ๋‹ค๋ฅธ ๊ธฐ์ˆ ์  ๋ฌธ์ œ๋Š” ๊ทธ๊ฒƒ์ด ํ™•์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ž‘์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ปค์ง€๋ฉด htmx ๋ชจ๋ธ์€ ๋ฌด๋„ˆ์ง€๊ณ  ์—‰๋ง์ด ๋ฉ๋‹ˆ๋‹ค. React์™€ ๊ฐ™์€ ํ”„๋ก ํŠธ์—”๋“œ ๋„๊ตฌ์˜ ์ปดํฌ๋„ŒํŠธ ๋ชจ๋ธ์€ ๋ชจ๋“  ๊ฒƒ์„ ๊ตฌํšํ™”ํ•˜๊ณ  ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•˜๊ฒŒ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํฐ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๋ฐ ํ›จ์”ฌ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, Github์€ htmx์™€ ๋งค์šฐ ์œ ์‚ฌํ•œ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ตœ๊ทผ React๋ฅผ ๋„์ž…ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์œผ๋ฉฐ, ์ด์ „๋ณด๋‹ค ํ›จ์”ฌ ๋” ์•ˆ์ •์ ์ž…๋‹ˆ๋‹ค. ์ฒ˜์Œ๋ถ€ํ„ฐ React๋กœ ์‹œ์ž‘ํ•˜๊ณ  ๋ชจ๋“  ๊ฒƒ์„ ํ˜„๋Œ€์ ์ธ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์ถ•ํ–ˆ๋‹ค๋ฉด ํ›จ์”ฌ ๋” ๋‚˜์•˜์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋Šฆ๊ฒŒ๋ผ๋„ ์˜ฌ๋ฐ”๋ฅธ ์„ ํƒ์„ ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์€ ๋‹คํ–‰์ž…๋‹ˆ๋‹ค. ๋Šฆ๋”๋ผ๋„ ์•ˆ ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋‚ซ์Šต๋‹ˆ๋‹ค.

#์ฐฝ์ž‘์ž๊ฐ€ ๋ฏธ์ณ์žˆ์Œ

๋งˆ์ง€๋ง‰์œผ๋กœ, ์•„๋งˆ๋„ htmx๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ง์•„์•ผ ํ•  ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ด์œ ๋Š” ์ฐฝ์ž‘์ž๊ฐ€ ๋ถ„๋ช…ํžˆ ์ •์‹ ์ด ์ด์ƒํ•˜๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

๊ทธ์˜ ํŠธ์œ„ํ„ฐ ํ”ผ๋“œ๋ฅผ ๋ณด์„ธ์š”: ๋น„์ „๋ฌธ์ ์ด๊ณ , ์œ ์น˜ํ•˜๋ฉฐ, ๊ณ ์˜์ ์œผ๋กœ ๋„๋ฐœ์ ์ž…๋‹ˆ๋‹ค.

๋˜๋Š” ์ž์‹ ์ด ๋™์˜ํ•˜์ง€ ์•Š๋Š” ์—์„ธ์ด๋ฅผ ์ž์‹ ์˜ ์‚ฌ์ดํŠธ์— ๊ฒŒ์‹œํ•˜๋Š” ์‚ฌ์‹ค์„ ๊ณ ๋ คํ•ด ๋ณด์„ธ์š”.

์—์„ธ์ด ํƒญ์—๋Š” ๋ฐˆ ์„น์…˜์ด ์žˆ๋Š”๋ฐ, ๋Œ€๋ถ€๋ถ„์ด ๋ฏผ๋งํ•˜๊ณ  ํ”„๋ก ํŠธ์—”๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์›น์‚ฌ์ดํŠธ์— ์žˆ์–ด์•ผ ํ•  ๊ฒƒ์ด ์ „ํ˜€ ์•„๋‹™๋‹ˆ๋‹ค.

๊ทธ๋Š” ๋ˆ„๊ตฌ๋“  htmx์˜ CEO๊ฐ€ ๋  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์—ฌ LinkedIn์—์„œ ๋งค์šฐ ๋ฏผ๋งํ•œ ์ง์ฑ… ๋ฐœํ‘œ๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

๋ฌด๋ถ„๋ณ„ํ•œ ๊ด‘๋Œ€์ง“์ž…๋‹ˆ๋‹ค.

ํ”„๋ก ํŠธ์—”๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ ํƒํ•  ๋•Œ, ์–ด๋Š ์ •๋„๋Š” ๊ทธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ €์ž๋ฅผ ๋™๋ฃŒ๋กœ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ •๋ง๋กœ ์ด ์‚ฌ๋žŒ๊ณผ ํ•จ๊ป˜ ์ผํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๊นŒ?

์ €๋Š” ์ ˆ๋Œ€ ๊ทธ๋ ‡๊ฒŒ ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

#๊ฒฐ๋ก 

์ด ๊ธ€์„ ํ†ตํ•ด htmx ๋ฐ ํ•˜์ดํผ๋ฏธ๋””์–ด๋ฅผ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ๊ทน๋„๋กœ ๋‚˜์œ ์•„์ด๋””์–ด์ด๋ฉฐ, ์ด๋Š” ๋ชฌํƒœ๋‚˜์—์„œ๋งŒ ๊ธฐ์›ํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ์ƒ๊ฐ์ด๋ผ๋Š” ๊ฒƒ์„ ํ™•์‹ ์‹œ์ผœ๋“œ๋ฆฌ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. โ€œ์ด์ œ ๋๋‚ฌ๋‹คโ€, โ€œ๋‹ค์‹œ ์‹œ์ž‘ํ•œ๋‹คโ€œ๋Š” ์‹์˜ ํ—›์†Œ๋ฆฌ, CEO ํ”„๋กœํ•„๊ณผ ์œ ์น˜ํ•œ ๋ฐˆ์„ ๊ฐ€์ง„ ํŒฌ๋ณด์ด์™€ ํŒฌ๊ฑธ์˜ ๋ง์„ ๋“ฃ์ง€ ๋งˆ์„ธ์š”.

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

์ด๊ฒƒ์€ ์ƒ์‹์ž…๋‹ˆ๋‹ค: htmx๋Š” ๋ณ„๋กœ์ž…๋‹ˆ๋‹ค.

</>