[Web] HTML ๋ง๊ณ  HTMX(HyperText Markup eXtension)

๋ฐ˜์‘ํ˜•

์›นํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“œ๋ ค๋ฉด ๋ฐ˜๋“œ์‹œ ๋ฐฐ์›Œ์•ผ ํ•˜๋Š” ์–ธ์–ด ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ HTML(HyperText Markup Language)์ž…๋‹ˆ๋‹ค. HTML์€ ํฐ ํ™”๋ฉด์— ํ…์ŠคํŠธ(๊ธ€์ž)๋ฅผ ํ‘œ๊ธฐํ•˜๋Š” ๋งˆํฌ์—… ์–ธ์–ด ์ค‘ ํ•˜๋‚˜๋กœ ๊ณผ๊ฑฐ HTTP ํ†ต์‹ ์„ ์ด์šฉํ•˜์—ฌ ํฐ ํ…์ŠคํŠธ ํŒŒ์ผ์„ ์ฃผ๊ณ  ๋ฐ›๋Š”๋ฐ ์‚ฌ์šฉ๋˜์—ˆ๋˜ ํ‘œ์ค€ ์–ธ์–ด์˜€์Šต๋‹ˆ๋‹ค.

 

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

 

 

 

๊ฐ„๋‹จํ•œ ์›นํŽ˜์ด์ง€, ๋ฐฑ์˜คํ”ผ์Šค๋ฅผ ๋งŒ๋“œ๋Š”๋ฐ, SPA๊ฐ€ ํ•„์š”ํ• ๊นŒ?

์ตœ๊ทผ์— ๋‚ด๊ฐ€ ๋ฌด์–ธ๊ฐ€ ํ™ˆํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๊ฒ ๋‹ค๊ฑฐ๋‚˜, ์•„๋‹ˆ๋ฉด ํ˜„์žฌ ๋ฐฑ์—”๋“œ ์—”์ง€๋‹ˆ์–ด์ธ๋ฐ, ์„œ๋ฒ„ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์œ„ํ•œ ๋ฐฑ์˜คํ”ผ์Šค ๋‚ด์ง€๋Š” ์–ด๋“œ๋ฏผ์„ ๊ฐœ๋ฐœํ•˜๊ณ ์ž ํ•˜๋Š”๋ฐ React.js, Vue.js ๋“ฑ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋‚ด์ง€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ƒ๊ฐํ•˜๊ณค ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ง‰์ƒ ์ด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐฑ์˜คํ”ผ์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜๋ฉด '์ด๋Ÿฌํ•œ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“œ๋Š”๋ฐ ๊ตณ์ด ์ด๋Ÿฐ ๋ณต์žกํ•œ ๊ฐœ๋…๋“ค์ด ํ•„์š”ํ•œ๊ฐ€?' ๋ผ๊ณ  ํ•œ ๋ฒˆ ์ฏค์€ ์ƒ๊ฐํ•ด๋ณธ ์ ์ด ์žˆ์œผ์‹  ๋ถ„๋“ค์ด ๊ณ„์‹ค ๊ฒ๋‹ˆ๋‹ค. ๋ณดํ†ต ์šฐ๋ฆฌ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ SPA๋ฅผ ๋ฐฐ์šฐ๊ฒŒ ๋˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ธฐ์ˆ  ๊ฐœ๋…์„ ์ตํžˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

  • ์ƒํƒœ ๊ด€๋ฆฌ ํŒจํ„ด
  • Virtual DOM

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

 

 

 

HTMX

HTMX๋Š” HTML ์–ธ์–ด์—์„œ ๊ฐ„๋‹จํ•œ attribute ์ถ”๊ฐ€๋งŒ์œผ๋กœ AJAX, CSS Transition, Websocket, HTTP ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๊ฐ€ ๊ฐ„๋‹จํ•œ ์›นํŽ˜์ด์ง€ ๋‚ด์ง€ ๋ฐฑ์˜คํ”ผ์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด ์ƒํƒœ ๊ด€๋ฆฌ ํŒจํ„ด ๋“ฑ๊ณผ ๊ฐ™์€ ๋ณต์žกํ•œ ๊ธฐ์ˆ ์„ ๋ฐฐ์šฐ์ง€ ์•Š๊ณ ๋„ ํ…œํ”Œ๋ฆฟ ์—”์ง„๊ณผ HTMX๋งŒ ์žˆ๋‹ค๋ฉด ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ด์ฃ . 

 

https://htmx.org/

 

</> htmx - high power tools for html

 

htmx.org

HTMX๋Š” HDA(Hypermedia Driven Application) ๊ธฐ๋ฐ˜์˜ ๊ฐœ๋ฐœ ๋ฐฉ์‹์œผ๋กœ ๊ธฐ์กด์˜ MPA์™€ SPA์—์„œ ๋” ๋‚˜์€ UX๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํƒ„์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. SPA์—์„œ๋Š” ๊ฐ„๋‹จํ•œ HTML ํŒŒ์ผ ํ•œ ๊ฐœ์™€ ์—ฌ๋Ÿฌ Javascript, Typescript ํŒŒ์ผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ํ•œ ํŽ˜์ด์ง€์— ๋ณด๋‹ค ๋งŽ์€ ์ปจํ…์ธ ๋ฅผ ๋„ฃ๊ณ  ๊ตฌ์„ฑํ•˜์—ฌ ๋ Œ๋”๋ง ์‹œ๊ฐ„์„ ์ค„์ด๋Š” ๋“ฑ์˜ ์žฅ์ ์„ ๋ณด์˜€๊ณ , MPA์—์„œ๋Š” ์—ฌ๋Ÿฌ HTML ํŒŒ์ผ์„ ํ†ตํ•ด ๊ฐ ํŽ˜์ด์ง€๋ณ„๋กœ ์„œ๋กœ ๋‹ค๋ฅธ ์ปจํ…์ธ ๋ฅผ ๊ฐœ๋ฐœํ•˜์—ฌ ๊ฐœ๋ฐœ ์šฉ์ด์„ฑ์„ ๋†’์˜€์Šต๋‹ˆ๋‹ค.

 

HDA๋Š” ์›น์˜ ๊ธฐ์กด HTML ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜์—ฌ ํ•˜์ดํผ๋ฏธ๋””์–ด ๊ฐœ๋ฐœ์ž๊ฐ€ ๋” ๊ฐ•๋ ฅํ•œ ํ•˜์ดํผ๋ฏธ๋””์–ด ์ค‘์‹ฌ์ ์ธ ์ƒํ˜ธ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ HTMX๋Š” HTML์„ ์ด์šฉํ•˜์—ฌ ๊ฐ€๋Šฅํ•œํ•œ ๋งŽ์€ ๊ธฐ๋Šฅ(AJAX ๋“ฑ)์„ ๊ตฌํ˜„ํ•˜๋„๋ก ํ•˜๊ณ , ๊ฐ€๋Šฅํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

HDA

์šฐ๋ฆฌ๊ฐ€ ๊ธฐ์กด MPA, SPA๋ฅผ ์ด์šฉํ•ด ๊ฐœ๋ฐœ์„ ํ–ˆ์„ ๋•Œ๋Š” JSON ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์™€ ์ด๋ฅผ ๋‹ค์‹œ ๋ Œ๋”๋งํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์ณค์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ HDA๋Š” REST ๊ฐœ๋…์— ๋”ฐ๋ผ ๋‘ ๊ฐ€์ง€ ์ œ์•ฝ ์กฐ๊ฑด์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

 

  • ๋ช…๋ นํ˜• ์Šคํฌ๋ฆฝํŒ…์ด ์•„๋‹Œ ์„ ์–ธ์  HTML ๋‚ด์žฅ ๊ตฌ๋ฌธ ์‚ฌ์šฉ
  • ๋น„ํ•˜์ดํผ๋ฏธ๋””์–ด ํ˜•์‹(JSON, XML ๋“ฑ)์ด ์•„๋‹Œ ํ•˜์ดํผ๋ฏธ๋””์–ด(HTML ๋“ฑ)๋กœ ์„œ๋ฒ„์™€ ์ƒํ˜ธ ์ž‘์šฉ

๋”ฐ๋ผ์„œ HTMX๋Š” ๊ธฐ์กด์˜ SPA์ฒ˜๋Ÿผ JSON์œผ๋กœ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•œ ๋’ค ์ด๋ฅผ HTML๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋ฐ”๋กœ ์„œ๋ฒ„์—์„œ HTML ๊ตฌ๋ฌธ์„ ๋ฐ›์•„์™€ ์›น ํŽ˜์ด์ง€๋ฅผ ๊ฐœ๋ฐœํ•จ์œผ๋กœ์จ ๋ช…๋ นํ˜• ์Šคํฌ๋ฆฝํŒ…์ด ์•„๋‹Œ ์„ ์–ธ์  ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€๋ น ์˜ˆ๋ฅผ ๋“ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ์•ก์…˜์„ ์ทจํ–ˆ์„ ๋•Œ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ "Clicked"๋กœ ์ค€๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ HTMX๋Š” ์„œ๋ฒ„ ํ†ต์‹  ๋™์•ˆ ์ž ์‹œ ๋ฉˆ์ถ˜ ํ›„, ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„์™”์„ ๋•Œ ๋ฒ„ํŠผ์ด ์‚ฌ๋ผ์ง€๊ณ  Clicked๊ฐ€ ๋˜๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ์•ก์…˜๋“ค์ด ์ „๋ถ€ HTML์—์„œ ์ด๋ค„์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

 

HTMX ์—”์ง„์ด Web Application Server๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๋ฉด ์„œ๋ฒ„๋Š” HTML ์ฝ”๋“œ๋กœ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค. HTMX๋Š” ์‘๋‹ต ๋ฐ›์€ HTML ์ฝ”๋“œ๋ฅผ DOM์— ์‚ฝ์ž…ํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ HDA ์ž…๋‹ˆ๋‹ค.

 

์ด๋Ÿฌํ•œ HDA ์Šคํƒ€์ผ์„ ์ง€์›ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์—ฌ๋Ÿฟ ์žˆ์œผ๋ฉฐ ๊ทธ ์ค‘์—์„œ๋„ HTMX์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋ฉด HDA ์ ‘๊ทผ์„ ๋ณด์™„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

 

๋งˆ์น˜๋ฉฐ..

ํ˜น์‹œ๋ผ๋„ ๊ฐ„๋‹จํ•œ ์›นํŽ˜์ด์ง€, ๋ฐฑ์˜คํ”ผ์Šค ๊ฐœ๋ฐœ์— SPA๋ฅผ ๊ณ ๋ คํ•˜๊ณ  ์žˆ๊ณ , ๊ทธ๋“ค์˜ ๋†’์€ ๋Ÿฌ๋‹ ์ปค๋ธŒ์— ๋ถ€๋‹ด์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด HTMX๋Š” ๊ทธ์•ผ๋ง๋กœ ์ตœ๊ณ ์˜ ์„ ํƒ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํ•œ ๊ฐ€์ง€ ๋ฌธ์„œ ํŒŒ์ผ์— ๋งŽ์€ ์ปจํ…์ธ ๋ฅผ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๊ณ , ์ด๋ฏธ ๊ทธ ์ปจํ…์ธ ๋Š” ์ •ํ•ด์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ์ด ๋ชจ๋“  ๊ฒƒ์„ ์„ ์–ธ์  ๊ตฌ๋ฌธ์œผ๋กœ ๋‹ค ๋˜๋‹ˆ.. ์ข‹์ง€ ์•Š์„ ์ˆ˜๊ฐ€..

 

๋‹ค์Œ ํฌ์ŠคํŠธ์—์„œ๋Š” ์‹ค์ œ๋กœ HTMX๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments