MPA์ (๋จ์ ์๋) ํฐ ์ฅ์ ์ค ํ๋๋ (์๋ฒ ์ฌ์ด๋ ํ๋ก๊ทธ๋๋ฐ) ์ธ์ด ์ ํ์ ๋๋ค. ๋ง์ฝ ์ด๋ฏธ ๋ฐ(ๅ) ์๋ฐ์คํฌ๋ฆฝํธ ์ ํญ๊ตฐ์ ์ผ์์ด๋ผ๋ฉด, ์ด ๋ฐํ์ ๋๋จธ์ง ๋ด์ฉ์ ๋ณ๋ก ์ค์ํ์ง ์์ ๊ฒ๋๋ค.
ํ์ง๋ง, ์ด ๋ถ๋ถ์ ๋์ค์ ๋ค๋ฃฐ ๊ฑด๋ฐ, ๊ทธ ๋ฐฐ๋ ์ด๋ฏธ ๋ ๋ ๊ฒ์ผ ์๋ ์์ต๋๋คโฆ
Rich Harris - SPAs๊ฐ ์น์ ๋ง์ณค๋๊ฐ?
์ฐ๋ฆฌ๊ฐ ์์ฃผ ์ด์ผ๊ธฐํ๋ ๊ฐ๋ ์ค ํ๋๋ โHOWL ์คํโ์ ๋๋ค. HOWL์ _Hypermedia On Whatever youโd Like_์ ์ฝ์์ ๋๋ค.
์ด๋ ๋๋ด ๊ฐ์ง๋ง ๊ฒฐ์ฝ ๋๋ด์ด ์๋ ์ํํธ์จ์ด ์คํ์ ์๋ฏธํ๋ฉฐ, ์ ์๋ ค์ง LAMP ์คํ์ด๋ MEAN ์คํ์ ์ฐธ์กฐํ ๊ฒ์ ๋๋ค.
HOWL ์คํ์ ์์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค: ํ์ดํผ๋ฏธ๋์ด ๊ธฐ๋ฐ ์ ๊ทผ ๋ฐฉ์์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํ ๋, ๋ฌธ์ ํด๊ฒฐ๊ณผ ์์ ์ ๊ธฐ์ ์ ์ทจํฅ์ ๊ฐ์ฅ ์ ํฉํ ์๋ฒ ์ฌ์ด๋ ๊ธฐ์ ์ ๋ฌด์์ด๋ ์์ ๋กญ๊ฒ ์ ํํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
์น ์ ํ๋ฆฌ์ผ์ด์ ์ SPA ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ฉด, ์์ฐ์ค๋ฝ๊ฒ ํฐ ํ๋ก ํธ์๋ ์ฝ๋๋ฒ ์ด์ค๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์์ฑ๋ ๊ฒ์ ๋๋ค.
์ด ์ํฉ์์ ๋ค์๊ณผ ๊ฐ์ ์ง๋ฌธ์ด ํ์ฐ์ ์ผ๋ก ๋ ์ค๋ฅผ ๊ฒ์ ๋๋ค:
โ๊ทธ๋ ๋ค๋ฉด, ์ ๋ฐฑ์๋๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ํ์ง ์์ฃ ?โ
์ด ์ง๋ฌธ์ ํฉ๋ฆฌ์ ์ด๋ฉฐ, ์์ธก์์ ๋์ผํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ฑํํ๋ ๋ฐ์๋ ์ฌ๋ฌ ๊ฐ์ง ์ฅ์ ์ด ์์ต๋๋ค:
ํ๋ก ํธ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ํ๊ณ์ ๋ํ ํฌ์๊ฐ ์ปค์ง์๋ก ์ด๋ฌํ _์๋ฐ์คํฌ๋ฆฝํธ ์๋ฐ๊ฐ_์ ์ ์ ๋ ์ปค์ง ๊ฒ์ ๋๋ค.
๊ฒ๋ค๊ฐ, ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ง๋ 5๋ ๋์ ํฌ๊ฒ ๊ฐ์ ๋์์ผ๋ฉฐ, ์ด์ ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ์ ์๋ ์ฌ๋ฌ ํ๋ฅญํ ์๋ฒ ์ฌ์ด๋ ๋ฐํ์๋ ์กด์ฌํฉ๋๋ค. ์ธ์ด์ ๋ณต์ก์ฑ์ ๋ํ ์ด์ ์ ๋นํ์ ์ด์ ๋ฆฐํ , ๊ฐ๋ฐ์์ ๊ท์จ ๋ฑ์ ํตํด ์๋ฐฉํ ์ ์๋ค๊ณ ํ ์ ์์ต๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ์น ๊ฐ๋ฐ์ ์ฌ์ ๋ฆฌ๋๋ค ์ฌ์ด์์ ์ง๋ฐฐ์ ์ธ ์ธ์ด์ด๋ฉฐ, ์๋ง์ ํํ ๋ฆฌ์ผ, ์ฝ๋ ์บ ํ ๋ฑ์ด ์ด ์ธ์ด๋ฅผ ๊ฐ๋ ฅํ๊ฒ ๊ฐ์กฐํ๊ณ ์์ต๋๋ค. ์ฑ๊ณต์ด ์ฑ๊ณต์ ๋ถ๋ฅธ๋ค๊ณ , ์๋ฐ์คํฌ๋ฆฝํธ(์ React)๋ ์ฑ๊ณต์ ๊ฑฐ๋์์ต๋๋ค.
์ด๋ฌํ ๊ฒฐ๊ณผ๋ฅผ _์๋ฐ์คํฌ๋ฆฝํธ ์๋ฐ๊ฐ_์ด๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, ๊ฑฐ์ ๋ชจ๋ ์น ๊ฐ๋ฐ์๊ฐ ์ด๋ ์ ๋๋ ์ด ์๋ฐ๊ฐ์ ๋๋๋ค๊ณ ์ธ์ ํด์ผ ํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์๋ ๊ฐ๋ฐ์๋ค์ด ์น ๊ฐ๋ฐ์์ ์ด๋ค ํฌ๋ง์ ๊ฐ์ง ์ ์์๊น์?
์, ์๋ฐ์คํฌ๋ฆฝํธ์ ๋๋ํ ๋ธ๋ผ์ฐ์ ์ ์๋ ํ๋์ ์ค๋๋ ๊ธฐ์ ์ด ์์ต๋๋ค: _ํ์ดํผ๋ฏธ๋์ด_์ ๋๋ค.
๋ธ๋ผ์ฐ์ ๋ ํ๋ฅญํ HTML ์ง์์ ์ ๊ณตํฉ๋๋ค(๊ด๋ จ ๋ฌธ์ ๊ฐ์ฒด ๋ชจ๋ธ, ๋๋ DOM๋ ํฌํจ). ์ฌ์ค, SPA ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋, JSX ํ ํ๋ฆฟ์ ํตํด ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋ UI๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ด๋ค ํํ๋ก๋ ํ์ดํผ๋ฏธ๋์ด ์ธํ๋ผ๋ฅผ ์ฌ์ฉํ๊ฒ ๋ ๊ฒ์ ๋๋ค.
๋ฐ๋ผ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ HTML ๋๋ ๊ด๋ จ DOM API๋ฅผ ์ด๋ค ๋ฐฉ์์ผ๋ก๋ ์ฌ์ฉํ๊ฒ ๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ ๋ค๋ฉด HTML์ ๋ ๊ฐ๋ ฅํ ํ์ดํผ๋ฏธ๋์ด๋ก ๋ง๋ค๋ฉด ์ด๋จ๊น์?
์ด๊ฒ์ด ๋ฐ๋ก htmx์ ์์ด๋์ด๋ก, ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ํจํด์ ํ์ดํผ๋ฏธ๋์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ์ฌ ๊ตฌํํ ์ ์๊ฒ ํด์ค๋๋ค. ์ด๋ฅผ ํตํด ์ ํต์ ์ธ MPA์ SPA ๊ฐ์ UX ๊ฒฉ์ฐจ๊ฐ ์ข์์ง๋ฉด์, ํ์ดํผ๋ฏธ๋์ด ๊ฒฝ๋ก๋ฅผ ์ ํํ๋ ๊ฒ์ด ๋ ๋์ ๋ฒ์์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํด ํ์ค์ ์ผ๋ก ๊ฐ๋ฅํด์ง๋๋ค.
ํ์ดํผ๋ฏธ๋์ด ์ ๊ทผ ๋ฐฉ์์ ์ฑํํ๋ฉด(๊ธฐ์ตํ์ธ์, ์ด์จ๋ ํ์ดํผ๋ฏธ๋์ด ์ธํ๋ผ๋ฅผ ์ฌ์ฉํ๊ฒ ๋ ๊ฒ์ด๋ฏ๋ก ๊ฐ๋ฅํ ํ ์ต๋ํ ํ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค), ๋๋ผ์ด ๋ถ์์ฉ์ด ๋ฐ์ํฉ๋๋ค:
Harris๊ฐ MPA์ ๊ท์์์ผฐ๋ ์๋ฒ ์ฌ์ด๋ ์ธ์ด ์ ํ์ ์ด์ ์ด ๋ค์ ํ ์ด๋ธ ์๋ก ์ฌ๋ผ์ค๊ฒ ๋ฉ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋ก ํธ์๋๊ฐ ์ฃผ๋ก HTML๋ก ์์ฑ๋๊ณ , ์ฝ๊ฐ์ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ์คํฌ๋ฆฝํ ์ด ํฌํจ๋๋ฉฐ, ๋๊ท๋ชจ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฒ ์ด์ค๊ฐ ์๋ ๊ฒฝ์ฐ, ๋ฐฑ์๋์์ ์๋ฐ์คํฌ๋ฆฝํธ ์๋ฐ๊ฐ์ ๊ทน์ ์ผ๋ก ์ค์ด๊ฑฐ๋ ์์ ํ ์ ๊ฑฐํ๊ฒ ๋ฉ๋๋ค.
์ด์ ์๋ฒ ์ฌ์ด๋ ์ธ์ด(๋ฐ ํ๋ ์์ํฌ)๋ฅผ ์ ํํ ๋ ๊ธฐ์ ์ , ๋ฏธํ์ ๋๋ ๊ธฐํ ๊ณ ๋ ค ์ฌํญ์ ๊ธฐ๋ฐ์ผ๋ก ์ ํํ ์ ์์ต๋๋ค:
์ด๋ฌํ ๊ฒ๋ค์ ๋ชจ๋ ์์ ํ ํฉ๋ฆฌ์ ์ธ ๊ธฐ์ ์ , ์ฒ ํ์ , ๋ฏธํ์ ๊ด์ ์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ํ์ดํผ๋ฏธ๋์ด๋ฅผ ์ฃผ๋ ํ๋ก ํธ์๋ ๊ธฐ์ ๋ก ์ฑํํ๋ฉด, ์ด ๋ชฉํ๋ค์ ์ด์ค ์ฝ๋๋ฒ ์ด์ค ์์ด ์ถ๊ตฌํ ์ ์์ต๋๋ค. ํ์ดํผ๋ฏธ๋์ด๋ ๋ฌด์์ ์ฌ์ฉํ๋ ์ง ์ ๊ฒฝ ์ฐ์ง ์์ต๋๋ค: ๋ฌด์์ด๋ ์ฌ์ฉํ์ฌ ํ์ดํผ๋ฏธ๋์ด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๊ฐ โ๋ฌด์์ด๋ โ์ด๋ผ๊ณ ๋งํ ๋, ์ฐ๋ฆฌ๋ ์ ๋ง๋ก ๊ทธ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์๋๋ ์ต๊ทผ htmx ๋์ค์ฝ๋ ์๋ฒ์ HOWL ํ์ ์น์ ์คํฌ๋ฆฐ์ท์ ๋๋ค. ์ฌ๊ธฐ์๋ ํ์ฑํ๋ ์ฑ๋๋ค๋ง ๋์ ์์ง๋ง, ๋ ๋ง์ ์ฑ๋์ด ์กด์ฌํฉ๋๋ค.
์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํ๋ ์์ํฌ์์ ์งํ ์ค์ธ ๋ํ๋ฅผ ๋ณผ ์ ์์ต๋๋ค: Java, Go, .NET, Rust, Clojure, PHP, Ruby, Python, Ocaml. ์ฌ์ง์ด htmx๋ฅผ Bash์ Cobol๊ณผ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ์ ๋ํด ์ด์ผ๊ธฐํ๋ ์ฌ๋๋ค๋ ์์ต๋๋ค!
์ด๊ฒ์ด ๋ฐ๋ก ์ฐ๋ฆฌ๊ฐ ๋ณด๊ณ ์ถ์ ๋ฏธ๋์ ๋๋ค: ๋ชจ๋ ๋ฐฑ์๋ ์ธ์ด์ ํ๋ ์์ํฌ๊ฐ ๋๋ฑํ๊ณ ํฅ๋ฏธ๋ก์ด ๋์์ผ๋ก ํ์ฝํ๋ ํ๋ถํ๊ณ ํ๊ธฐ์ฐฌ ์น์ ๋๋ค. ๊ฐ ์ธ์ด์ ํ๋ ์์ํฌ๋ ๊ณ ์ ํ ๊ฐ์ ๊ณผ ๋ฌธํ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๊ทธ๋ค์ ๋ชจ๋ ์น์ด๋ผ๋ ๋ง๋ฒ ๊ฐ์ ํ์ดํผ๋ฏธ๋์ด ์์คํ ์ ๊ธฐ์ฌํ ์ ์์ต๋๋ค.
์ด ์์ธ์ด๋ฅผ ๋ง๋ฌด๋ฆฌํ๊ธฐ ์ ์, ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด๋์๋ ์ฌ์ฉํ๋ ๊ฒ์ ๋ํ ์ ํญ์ด ๊ผญ ๋ฐ(ๅ)-์๋ฐ์คํฌ๋ฆฝํธ์ธ์ง๋ ์ง๊ณ ๋์ด๊ฐ๊ณ ์ถ์ต๋๋ค.
์์งํ ๋งํด์, ์ฐ๋ฆฌ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ํ ๋๋ด์ ๋ง์ด ์์ด ๋๊ฒผ๊ณ , ์ฌ์ง์ด ์น์ ์ํ ๋์ ์คํฌ๋ฆฝํ ์ธ์ด์ธ hyperscript๋ฅผ ๋ง๋ค๊ธฐ๊น์ง ํ์ต๋๋ค.
๊ทธ๋์ ์ฐ๋ฆฌ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ฐ๋ํ๋ ์ง์์ ์ํ ๊ฒ์ฒ๋ผ ๋ณด์ผ์ง๋ ๋ชจ๋ฆ ๋๋ค.
ํ์ง๋ง, ๋ฐ๋๋ก ์ฐ๋ฆฌ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๊น์ด ๊ฐ์ฌํ๊ณ ์์ต๋๋ค.
๊ฒฐ๊ตญ, htmx์ hyperscript ๋ชจ๋ _์๋ฐ์คํฌ๋ฆฝํธ๋ก ๊ตฌ์ถ_๋์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ด๋ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค ์ ์์์ ๊ฒ์ ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋, ๋ฌด์์ด๋ ๋งํ ์ ์๊ฒ ์ง๋ง, ๊ทธ ์๋ฆฌ์ ์์๋ค๋ ๊ฒ์ด๋ผ๋ ํฐ ๋ฏธ๋์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ํ์ดํผ๋ฏธ๋์ด ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํ๋ก ํธ์๋ ์คํฌ๋ฆฝํ ์ _์ฌ์ฉํ ๊ฒ์ ์ถ์ฒ_ํ๊ธฐ๊น์ง ํฉ๋๋ค. ๋จ, ํ์ดํผ๋ฏธ๋์ด ์นํ์ ์ธ ๋ฐฉ์์ผ๋ก ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค.
๋ํ, ํ์ดํผ๋ฏธ๋์ด ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ _์๋ฒ ์ฌ์ด๋_์์ ์๋ฐ์คํฌ๋ฆฝํธ(๋๋ ํ์ ์คํฌ๋ฆฝํธ)๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ง๋ฆฌ์ง๋ ์์ ๊ฒ์ ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ด์ ์ฌ๋ฌ ํ๋ฅญํ ์๋ฒ ์ฌ์ด๋ ๋ฐํ์๊ณผ ๋ง์ ํ๋ฅญํ ์๋ฒ ์ฌ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ถ๊ณ ์์ต๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋น์ ๊ณผ ๋น์ ์ ํ์๊ฒ ๊ฐ์ฅ ์ข์ ์ ํ์ผ ์ ์์ผ๋ฉฐ, ๊ทธ๋ฐ ๊ฒฝ์ฐ์๋ ์ฌ์ฉํ ์ด์ ๊ฐ ์ ํ ์์ต๋๋ค.
Hypermedia On Whatever youโd Like๋ ์ ๋ง๋ก โ์ํ๋ ๋๋กโ๋ผ๋ ์๋ฏธ์ ๋๋ค.
ํ์ง๋ง ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋น์ ์ ํ์ ์ํ ์ ์ผํ ์๋ฒ ์ฌ์ด๋ ์ต์ ์ด ๋์ด์๋ ์ ๋ฉ๋๋ค.
ํ์ดํผ๋ฏธ๋์ด์ ๋ํ ๊ด์ฌ์ด ๋ค์ ์ผ์ด๋๊ณ (๊ทธ๋ฆฌ๊ณ ํ์ดํผ๋ฏธ๋์ด๊ฐ ๊ฐ์ ๋๋ฉด์), ์น์ ์ด๋ฆฐ ๋ค์์ฑ ์๋ ๋ฏธ๋๋ ์ด์ ํ์ค ๊ฐ๋ฅ์ฑ, ์๋๋ฉด ์ด๋ฏธ ํ์ค์ด ๋์ด๊ฐ๊ณ ์์ต๋๋ค.
์น์ ์๋ ๊ฐ๋ฐฉ์ ์ด๊ณ , ๋ค์ธ์ด์ ์ด๋ฉฐ ์ฐธ์ฌ์ ์ธ ํ์ดํผ๋ฏธ๋์ด ์์คํ ์ผ๋ก ์ค๊ณ๋์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ฟ์ด ์์ ํ ์ฌ๋ผ์ง ๊ฒ์ ์๋๋๋ค, ์ ์ด๋ ์์ง์ ์๋๋๋ค!
์ฐ๋ฆฌ๋ ์น์ ๊ธฐ์ด ๊ธฐ์ ์ธ ํ์ดํผ๋ฏธ๋์ด๋ฅผ ๋ค์ ๋ฐฐ์ฐ๊ณ ๋ฐ์๋ค์์ผ๋ก์จ ๊ทธ ๊ฟ์ ๊ณ์ ์ด์ด๊ฐ ์ ์์ต๋๋ค.
htmx ์ปค๋ฎค๋ํฐ๊ฐ ์ข์์ ์์ ์ ๊ฒฝ ์ฐ์ง ์๊ณ ์๋ก ๋๋ ๋น๋๋ค๋ก ๋ณ์ง๋ ๊ฒ์ด ์ซ์ต๋๋ค. ํ์ดํ์ ๋ฐ๋ฅด์ง ์๋ ์ฌ๋๋ค๊ณผ ๊ต๋ฅํ๊ณ , ๊ฐ๋จํ ๋ฌธ๊ตฌ๋ฅผ ํ๋ถํ ์๋ฏธ๋ก ํ์ฅํ๊ณ ์์ต๋๋ค. ์ด๊ฒ์ ์ธ๊ตฌ๋ ค ์์ ๋ฏธ๋์ด ํฌ์ธํธ๋ฅผ ์ป์ง๋ ๋ชปํ์ง๋ง, ๊ฑด๊ฐํ ๊ฒ์ ๋๋ค. ์น์ ์์ ๋ณด๋ค ๋์์ก์ต๋๋ค.