Rich Harris๋ ์๋ก์ด ์ฑ๊ธ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ (SPA) ํ๋ ์์ํฌ์ธ Svelte.js๋ฅผ ๊ฐ๋ฐํ ์ ๋ช ํ ์น ๊ฐ๋ฐ์์ ๋๋ค.
2021๋ 10์, ๊ทธ๋ JamStack์์ โ์ฑ๊ธ ํ์ด์ง ์ฑ์ด ์น์ ๋ง์ณค๋๊ฐ?โ๋ผ๋ ์ฃผ์ ๋ก ๊ฐ์ฐ์ ํ์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ด ๊ฐ์ฐ์ ๋ํ ์๊ฒฌ์ ์์ฒญ๋ฐ์๊ณ , ์ด ์์ธ์ด๋ ๊ทธ์ ๋ํ ์ฐ๋ฆฌ์ ์๋ต์ ๋๋ค.
๊ฐ์ฐ์ ๋ํด ์ฒซ ๋ฒ์งธ๋ก ์ธ๊ธํ ๊ฒ์, ์ด ๊ฐ์ฐ์ด ๋งค์ฐ ์ ๋ง๋ค์ด์ก๋ค๋ ์ ์ ๋๋ค. ์ ์ ์๋์๊ณ , ์ฌ๋ ค ๊น์ผ๋ฉฐ, ์ ๋จธ๋ฌ์คํ๊ณ , ๋ ผ์์ ์์ธก์ ๊ณต์ ํ๋ฉฐ, ์ ๋ฐ์ ์ผ๋ก ๋งค์ฐ ํฉ๋ฆฌ์ ์ ๋๋ค. ์ฐ๋ฆฌ๋ ์๋์์ ์์ธํ ์ค๋ช ํ ๊ฒ์ฒ๋ผ Harris ์จ์ ๋ง์ ์๊ฒฌ์ ๋์ํ์ง ์์ง๋ง, ๊ทธ์ ์๊ฒฌ๊ณผ ๊ทธ๊ฐ ์์ ํ ๊ธฐ์ ๋ค์ ์กด์คํ๊ณ ๊ฐ์ฌํ๊ฒ ์๊ฐํฉ๋๋ค.
๊ฐ์ฐ์ SPA์ ๋ช ๊ฐ์ง ํ๋นํ ๋นํ์ผ๋ก ์์๋ฉ๋๋ค. ํนํ Facebook์ ๋ํ์ ์ธ SPA ๊ตฌํ์ธ Instagram์์ ๋ฐ๊ฒฌ๋๋ ์ฌ์ฉ์ฑ ๋ฌธ์ ์ ์ด์ ์ ๋ง์ถ๊ณ ์์ต๋๋ค. ๊ทธ๋ SPA์ ๋ค์๊ณผ ๊ฐ์ ๋จ์ ๋ค์ ๊ณต์ ํ๊ฒ ๋ค๋ฃจ๊ณ ์์ต๋๋ค:
Instagram์ ์ฌ์ฉ์ฑ ๋ฌธ์ ๋ฅผ ๊ณ ๋ คํ ํ, Harris ์จ๋ ๋ค์๊ณผ ๊ฐ์ด ๋งํฉ๋๋ค:
์ฌ๋ฌ๋ถ, ์ ๋ฐ. ์ธ๊ณ ์ต๊ณ ์ ํ๋ก ํธ์๋ ์์ง๋์ด๋ค์ด 5MB์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ด ํ ์คํธ์ ์ด๋ฏธ์ง๋ฅผ ์๋์ํฌ ์ ์๋ค๋ฉด, ์ฐ๋ฆฌ๋ ์๋ง๋ ์น ํ๋ซํผ์ ํฌ๊ธฐํด์ผ ํ ๊ฒ์ ๋๋ค.
์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ Harris ์จ์ ๊ฐ๋ ฅํ๊ฒ ๋์ํฉ๋๋ค. ๋จ, โ์น ํ๋ซํผโ ๋์ โ์๋ฐ์คํฌ๋ฆฝํธ ์น ํ๋ซํผโ์ ์ฌ์ฉํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. Instagram์์๋ ๋ฐ๋ก ๊ทธ๊ฒ์ด ๋ฌธ์ ๊ฐ ๋๊ณ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ฐ๋ฆฌ๋ ๋ํ SPA ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ํ๋ ์์ํฌ๊ฐ ์ข ์ข ์๋์ REST-ful ๋ชจ๋ธ์ ๋จ์ง ๋ถํธ์คํธ๋ฉ ๋ฉ์ปค๋์ฆ์ผ๋ก๋ง ์ฌ์ฉํ๋ฉด์ ์ค์ ์น ํ๋ซํผ์ ๋จ์ํ ๋ฌด์ํ๋ค๋ ์ ์ ๋ช ํํ ํ๊ณ ์ถ์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ Harris ์จ๋ โ์ ํต์ ์ธโ, ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด HTML ํ์ด์ง๊ฐ ๋ก๋๋๋ ๋ฐฉ์์ MPA(Multi-Page Applications)์ ๊ด๋ จ๋ ๋ฌธ์ ๋ก ๋์ด๊ฐ๋๋ค. MPA๋ ์ฐ๋ฆฌ๊ฐ ๋ชจ๋ ์ต์ํ ๋ฐฉ์์ด๋ฉฐ, SPA์ ์ํด ์ด๋ ์ ๋ ๋์ฒด๋๊ณ ์์ต๋๋ค.
์๋์์ ๊ทธ๋ โํ์คโ MPA์ ๊ด๋ จ๋ ์ฌ๋ฌ ๋ฌธ์ ๋ฅผ ์ค๋ช ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ค ๋ฌธ์ ๋ฅผ ๊ฒํ ํ๊ณ , ํ์ดํผ๋ฏธ๋์ด ์งํฅ ๊ธฐ์ ์ธ htmx์ ์ฌ์ฉํ์ฌ ๊ฐ๊ฐ์ ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ ์ ์๋์ง ์ค๋ช ํ ๊ฒ์ ๋๋ค.
ํ์ค MPA์ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ๋ ๋ชจ๋ ์์ฒญ์์ ์ ์ฒด ํ์ด์ง ์๋ก ๊ณ ์นจ์ด ๋ฐ์ํ๋ค๋ ๊ฒ์ ๋๋ค. ์ด๋ก ์ธํด ๋น๋์ค๋ ์ค๋์ค ํ๋ ์ด์ด์ ๊ฐ์ ์ฝํ ์ธ ๊ฐ ์์ฒญ ์ ๊ต์ฒด๋์ด ์ค๋จ๋ ์ ์์ต๋๋ค.
์ด ๋ฌธ์ ๋ htmx์ hx-preserve
์์ฑ์ ์ฌ์ฉํ์ฌ ๊ฐ ์์ฒญ ๊ฐ์ ํน์ ์ฝํ
์ธ ๋ฅผ ์ ์งํ๋๋ก ํจ์ผ๋ก์จ ํด๊ฒฐํ ์ ์์ต๋๋ค.
๋ฌดํ ์คํฌ๋กค ๋์์ด ์๋ ๊ฒฝ์ฐ(์๋ง๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๊ตฌํ๋จ) ๋ค๋ก ๊ฐ๊ธฐ ๋ฒํผ์ด MPA์์ ์ ๋๋ก ์๋ํ์ง ์์ ๊ฒ์ ๋๋ค. ์ ํต์ ์ธ MPA๋ ๋ฌดํ ์คํฌ๋กค ๋์ ํ์ด์ง์ ์ฌ์ฉํ๋ฏ๋ก, MPA๋ผ๋ ์ฉ์ด ์์ฒด๊ฐ ์๋ฌธ์๋ ์ ์์ต๋๋ค.
๊ทธ๋ ๊ธด ํ์ง๋ง, ๋ฌดํ ์คํฌ๋กค์ htmx๋ฅผ ์ฌ์ฉํ์ฌ ํ์ดํผ๋ฏธ๋์ด ์งํฅ์ ์ด๊ณ ๋ช
ํํ ๋ฐฉ์์ผ๋ก ์ฝ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค.
hx-push-url
์์ฑ๊ณผ ๊ฒฐํฉํ๋ฉด, ํ์คํ ๋ฆฌ์ ๋ค๋ก ๊ฐ๊ธฐ ๋ฒํผ์ด ๊ฐ๋ฐ์๊ฐ ๊ฑฐ์ ๋
ธ๋ ฅ์ ๊ธฐ์ธ์ด์ง ์๊ณ ๋ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋ฉฐ,
์ข
์ข
SPA ์ปค๋ฎค๋ํฐ์์ โ๋ฅ ๋งํฌโ๋ผ๊ณ ๋ถ๋ฅด๋ ๋ฉ์ง ๋ณต์ฌ-๋ถ์ฌ๋ฃ๊ธฐ ๊ฐ๋ฅํ URL๋ ์ ๊ณตํฉ๋๋ค.
๋ฉ์ง ์ ํ์ ํ์คํ ์ข์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ๋์์ด๋๋ค์ด ์ ํ๋ฆฌ์ผ์ด์ ์ฌ์ฉ์ฑ์ ๋ํ ๊ธฐ์ฌ๋ฅผ ๊ณผ๋ํ๊ฐํ๋ ๊ฒฝํฅ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฐ๋ชจ์์๋ ๋ฉ์ง ์ ์์ง๋ง, ์ฌ์ฉ์๊ฐ ์ฌ๋ฌ ๋ฒ ํด๋ฆญํ ๋๋ UI๊ฐ ๋น ๋ฅด๊ฒ ์๋ตํ๊ธฐ๋ฅผ ์ํ ๋๊ฐ ๋ง์ต๋๋ค.
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ , htmx๋ ํ์ค CSS ์ ํ์ ์ฌ์ฉํ์ฌ ์ ๋๋ฉ์ด์ ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ์์ํ CSS ๊ธฐ์ ๋ก ๋ฌ์ฑํ ์ ์๋ ๊ฒ์๋ ํ๊ณ๊ฐ ์์ง๋ง, ์ด ๋ฐฉ๋ฒ์ด 80/20 ์ํฉ์ 80%๋ฅผ ์ ๊ณตํ ์ ์๋ค๊ณ ๋ฏฟ์ต๋๋ค. (์ด์ฉ๋ฉด 95/5 ์ํฉ์ 95%์ผ ์๋ ์์ต๋๋ค.)
Harris ์จ๋ โ์๋ง์ธ ๊ด๊ณ ๊ธฐ์ โ์ ์น ์ฌ์ฉ์ฑ ๋ฌธ์ ์ ์ฃผ๋ฒ์ผ๋ก ๊ผฝ์ผ๋ฉฐ, ์ค๋๋ ๋๋ถ๋ถ์ ์น์ฌ์ดํธ๊ฐ ์ฌ์ฉ์์๊ฒ ์ ๊ณตํ๋ 2.5MB์ ์ถ์ ๊ธฐ, ์คํ์ด์จ์ด, ์ ๋์จ์ด๋ฅผ ๋ฐฉ์ดํ ์ ์๋ ์ฌ๋์ ์๋ค๊ณ ์ง์ ํฉ๋๋ค. ๊ทธ๋ SPA๊ฐ ์ด ๋ฌธ์ ๋ฅผ ์ํํ๋ค๊ณ ์ง์ ํ๋ฉฐ, SPA๋ ์ด ์ฐ๋ ๊ธฐ ๋๋ฏธ๋ฅผ ํ ๋ฒ๋ง ๋ก๋ํ๋ฉด ๋๋ฏ๋ก MPA์ฒ๋ผ ๋งค๋ฒ ๋ก๋ํ ํ์๊ฐ ์๋ค๊ณ ๋งํฉ๋๋ค.
์ฌ์ค, ๊ธฐ๋ณธ์ ์ธ MPA๋ ์ฒซ ๋ฒ์งธ ์์ฒญ ํ์ ํด๋น ์ฐ๋ ๊ธฐ๋ค์ ์บ์ฑํ๋ฏ๋ก, ๋ค์ด๋ก๋ ๋น์ฉ์ SPA์ ๊ฑฐ์ ๋์ผํฉ๋๋ค. ๊ทธ๋ฌ๋ MPA๋ ๊ฐ ํ์ด์ง์์ ์ด ์ฐ๋ ๊ธฐ๋ค์ ๋ค์ ์คํํด์ผ ํ๋ฏ๋ก, CPU๋ฅผ ์๋ชจํ๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ํ์ํฌ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ htmx๋ก ๊ตฌ๋๋๋ MPA๋ SPA์ ์ ํํ ๋์ผํ ํน์ฑ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๊ด๊ณ ์ฐ๋ ๊ธฐ๋ ์ฒซ ๋ฒ์งธ ์์ฒญ์์ ํ ๋ฒ๋ง ๋ค์ด๋ก๋๋๊ณ ์คํ๋๋ฉฐ, ๊ทธ ํ ๋ชจ๋ ์์ฒญ์ ์๋์ ์ผ๋ก ๊ฐ๋ฒผ์ด DOM ์์ ๊ต์ฒด๋ก ์ด๋ฃจ์ด์ง๋๋ค.
์ด๊ฒ์ ์ ํจํ ์ง์ ์ ๋๋ค. MPA ์คํ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ UI ์ํธ ์์ฉ์ด ์๋ฒ์ ์๋ต ์๋, ์ฆ ์ง์ฐ ์๊ฐ์ ์ํด ์ ํ๋ฉ๋๋ค. ์ด ์ง์ฐ ์๊ฐ์ ์ผ๋ถ๋ ๋คํธ์ํฌ ์ง์ฐ์ธ๋ฐ, ์ด๋ ์ค์ ์ง์ค์ ๋ฐ์ดํฐ ์ ์ฅ์์ ์ฅ์ ์ ํฌ๊ธฐํ์ง ์์ผ๋ฉด ๊ทน๋ณตํ๊ธฐ ์ด๋ ค์ด ๋ฌธ์ ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋คํธ์ํฌ๋ ๋น ๋ฅด๊ณ ์ ์ ๋ ๋นจ๋ผ์ง๊ณ ์์ผ๋ฉฐ, ์๋ต ์๊ฐ์ ๋ชจ๋ํฐ๋งํ๊ณ ์ต์ ํํ๊ธฐ ์ํ ์์ญ ๋ ๋์ ๊ฐ๋ฐ๋ ์ ์๋ ค์ง ๊ธฐ๋ฒ์ด ์์ต๋๋ค. SQL ํ๋, Redis ์บ์ฑ ๋ฑ์ด ์ ํ๋ฆฝ๋์ด ์์ผ๋ฉฐ 100ms ์ดํ์ ์๋ต ์๊ฐ์ ๋ชฉํ๋ก ํ ์ ์์ต๋๋ค. ๋ง์ htmx ์ฌ์ฉ์๋ htmx ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋งค์ฐ ๋น ๋ฅด๊ฒ ๋๊ปด์ง๋ค๊ณ ๋งํ์ง๋ง, ์ฐ๋ฆฌ๋ ์ง์ฐ์ด ๊ณ ๋ คํด์ผ ํ ๋ฌธ์ ๊ฐ ์๋๋ผ๊ณ ๋ ๋งํ์ง ์๊ฒ ์ต๋๋ค.
๋ฌผ๋ก ์ง์ฐ ๋ฌธ์ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋๋ฆฌ๊ฒ ๋๊ปด์ง ์ ์๋ ๋ฌธ์ ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ฌ๋ฌ๋ถ๋ ์๋ค์ํผ, ์ฐ๋ฆฌ๋ ๋๋ฆฐ SPA๋ ๋ง์ด ์์ ํด์๊ธฐ ๋๋ฌธ์ SPA ํ๋ ์์ํฌ๋ฅผ ์ฑํํ๋ค๊ณ ํด์ ๋ฌธ์ ๊ฐ ๊น๋ํ๊ฒ ํด๊ฒฐ๋์ง๋ ์๋๋ค๊ณ ๋งํ ์ ์์ต๋๋ค. ๊ฒ๋ค๊ฐ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๋๊ด์ ์ผ๋ก ๋๊ธฐํํ๋ ๊ฒ์ ๋งค์ฐ ์ดํดํ๊ธฐ ์ด๋ ค์ด ๋ฐ์ดํฐ ์ผ๊ด์ฑ ๋ฌธ์ ๋ฅผ ์ด๋ํ ์ ์์ผ๋ฉฐ, ์ ๋ฐ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ๋ณต์ก์ฑ์ ํฌ๊ฒ ์ฆ๊ฐ์ํฌ ์ ์์ต๋๋ค. ์ด๋ ๋์ค์ ๋ค์ ๋ค๋ฃฐ ์ฃผ์ ์ ๋๋ค.
GitHub์๋ ์ค์ ๋ก UI ๋ฒ๊ทธ๊ฐ ์กด์ฌํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ๋ฒ๊ทธ ์ค ์ด๋ ๊ฒ๋ ํด๊ฒฐํ๊ธฐ ์ด๋ ค์ด ๊ฒ์ ์๋๋๋ค.
htmx๋ ํ๊ฒ ์์ ์ด์ธ์ ์ฝํ ์ธ ๋ฅผ ์ ๋ฐ์ดํธํ๋ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ฉฐ, ์ด ๋ชจ๋ ๋ฐฉ๋ฒ์ ๋งค์ฐ ๊ฐ๋จํ๊ณ Harris ์จ๊ฐ ์ง์ ํ UI ์ผ๊ด์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ํจ๊ณผ์ ์ ๋๋ค.
Harris ์จ๊ฐ ์ธ๊ธํ Instagram์ UI ๋ฌธ์ ์ ๋น๊ตํด๋ณด๋ฉด, Instagram ๋ฌธ์ ๋ ํจ์ฌ ๋ ์ ๊ตํ ์์ง๋์ด๋ง ์์ ์ด ํ์ํฉ๋๋ค.
Harris ์จ๋ SPA์ MPA ๊ธฐ์ ์ด ํผํฉ๋ โ์ ํ ์ ํ๋ฆฌ์ผ์ด์ โ ๊ฐ๋ ์ ๋ํด ๋ ผ์ํฉ๋๋ค. ์ด ์ฉ์ด๋ ํฉ๋ฆฌ์ ์ด๋ฉฐ, ์ด ์ฉ์ด๊ฐ ์ ๊ณ์ ์ ์ฐฉ๋ ์ง ์ง์ผ๋ณด๊ฒ ์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ข ์ข htmx๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋จ์ํจ์ ์ ์งํ๋ ๊ฒ์ด ์๋ฏธ ์๋ ๋ถ๋ถ์ ์ฌ์ฉํ๊ณ , ๋ค๋ฅธ ๊ธฐ์ ์ ํ์์ ๋ฐ๋ผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค: alpine.js, hyperscript, ์๊ท๋ชจ ๋ฐ์ํ ํ๋ ์์ํฌ ๋ฑ.
๊ทธ๋์ ์ฐ๋ฆฌ๋ ์ฌ๊ธฐ์์ Harris ์จ์ ์ด๋ ์ ๋ ๋์ํ๋ฉฐ, ์น ๊ฐ๋ฐ์ โ์ ํโ ์ ๊ทผ ๋ฐฉ์์ ๊ถ์ฅํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ๊ฐ๋ฅํ ๊ฒฝ์ฐ MPA/ํ์ดํผ๋ฏธ๋์ด ์ชฝ์ผ๋ก ๊ธฐ์ธ์ผ ๊ฒ์ ๊ถ์ฅํ๋ฉฐ, Harris ์จ๋ SPA/์๋ฐ์คํฌ๋ฆฝํธ ์ชฝ์ผ๋ก ๊ธฐ์ธ์ผ ๊ฐ๋ฅ์ฑ์ด ๋์ ๋ณด์ ๋๋ค.
๋ถํํ๊ฒ๋, Harris ์จ๊ฐ ๋ ผ์ํ์ง ์์ ์ฃผ์ ๊ฐ ํ๋ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ง๋ ๊ทธ๊ฐ ์ด ์ฃผ์ ๋ฅผ ๋ณด์ง ๋ชปํ ์ด์ ๋ ๊ทธ๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์์ด๋ฉฐ, ํ๋ก ํธ์๋ ํ๋ ์์ํฌ์ ์์ง๋์ด๋ง ๋ฌธํ ์์์ ์ํํ๊ธฐ ๋๋ฌธ์ผ ๊ฒ์ ๋๋ค. ํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ๋ณต์ก์ฑ์ด ๊ทธ์๊ฒ๋ ์์ฐ์ค๋ฌ์ ๋ณด์ผ์ง ๋ชจ๋ฅด์ง๋ง, ์ฐ๋ฆฌ ์ค ๋ง์ ์ฌ๋๋ค์๊ฒ ์๋ฐ์คํฌ๋ฆฝํธ ์ํ๊ณ๋ ๋จ์ํ ๋ฏธ์น๋ฏ์ด ์ง๋์น๊ฒ ๋ณต์กํ๊ฒ ๋๊ปด์ง๋๋ค. ์ฌ์ค, ๋๋ถ๋ถ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์๊ตฌ ์ฌํญ์ ๊ณ ๋ คํ ๋ ๊ทธ ๋ณต์ก์ฑ์ ์ฐ์ค๊ฝ์ค๋ฌ์ธ ์ ๋์ ๋๋ค.
Harris ์จ๊ฐ ์ธ๊ธํ ์ฌ๋ฌ โ์ ํโ ๊ธฐ์ ๋ค, ์๋ฅผ ๋ค์ด React Server Components (๊ทธ๊ฐ โHTML over the wire์ ๋น์ทํ์ง๋ง ํจ์ฌ ๋ ์ ๊ตํ ๊ฒโ์ด๋ผ๊ณ ๋ถ๋ฅด๋ ๊ธฐ์ ), Marko (๋ถ๋ถ์ ํ์ด๋๋ ์ด์ ์ ์ํํ๋ ๊ธฐ์ ), Quik (์์ฃผ ์ ๊ทน์ ์ผ๋ก ๊ฒ์ผ๋ฅด๊ฒ ๋ก๋ํ๋ ๊ธฐ์ ๋ก ๋ณด์) ๋ฑ์ ๋ชจ๋ ๋๋ผ์ด ์์ง๋์ด๋ง ์ฑ๊ณผ์ด์ง๋ง, ๋์์ ๋งค์ฐ ๋ณต์กํ ๊ธฐ์ ๋ค์ด๊ธฐ๋ ํฉ๋๋ค.
์ํ๊น๊ฒ๋, ์ด๋ ํ์ฌ ํ๋ก ํธ์๋ ๊ฐ๋ฐ ๋ฌธํ์ ์ผ๋ถ์ ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ, ๋น๋ ๋๊ตฌ ์ฒด์ธ, ๋ฐฐํฌ ๋ชจ๋ธ ๋ฑ์์ ํ๋ ๋์ด ์น์์ ๋ณต์ก์ฑ์ ์ฉ์ธํ๊ณ , ์ด๋ฌํ ๋ณต์ก์ฑ์ผ๋ก ์ธํด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๋, ๋ ๋ง์ ๋ณต์ก์ฑ์ด ์ข ์ข ํด๊ฒฐ์ฑ ์ผ๋ก ์ ์๋ฉ๋๋ค.
โ๋จ์ํจโ์ ๊ฒฝ์๋๊ณ โ์ ๊ตํจโ์ ๋์ ํ๊ฐ๋ฅผ ๋ฐ์ต๋๋ค.
์ด ๋ณต์ก์ฑ์ ์ค๋๋ ๋ง์ ๊ฐ๋ฐ์์ ๊ฐ๋ฐ ํ์๊ฒ ์๋์ ์ ๋๋ค. Harris ์จ ์์ ์ด Instagram์ ๋ ผ์ํ ๋ ์ง์ ํ ๊ฒ์ฒ๋ผ, ์ธ๊ณ ์ต๊ณ ์ ํ๋ก ํธ์๋ ์์ง๋์ด๋ค์กฐ์ฐจ ๋ชจ๋ ๊ฒ์ ํต์ ํ ์ ์๊ฒ ๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค.
์ฌ๊ธฐ์๋ ๋ฌธํ์ ์ธ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๋ํ ๊ธฐ์ ์ ์ธ ๋ฌธ์ ๋ ์กด์ฌํฉ๋๋ค.
์ด ๊ธฐ์ ์ ์ธ ๋ฌธ์ ๋ โํ์ดํผ๋ฏธ๋์ด ์ ๊ทผ๋ฒโ ๋ โ์๊ฒฉ ํ๋ก์์ ํธ์ถ (RPC) ์ ๊ทผ๋ฒโ์ผ๋ก ์์ฝํ ์ ์์ต๋๋ค.
์น ์ ํ๋ฆฌ์ผ์ด์ ์ด MPA์์ SPA๋ก ์ ํ๋๋ฉด์, ๊ฐ๋ฐ์๋ค์ ์ข ์ข ๋ฌด์์์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ RPC ์ ๊ทผ ๋ฐฉ์์ ์ฑํํ์ต๋๋ค. AJAX๋ ๋ฐ์ดํฐ ์ง๋ ฌํ ํ์์ผ๋ก JSON์ผ๋ก ์ด๋ํ๊ณ , ๋์ฒด๋ก (์ ๋นํ๊ฒ) ํ์ดํผ๋ฏธ๋์ด ๊ฐ๋ ์ ๋ฒ๋ ธ์ต๋๋ค. ์ด ํ์ดํผ๋ฏธ๋์ด ์ ๊ทผ๋ฒ์ ํฌ๊ธฐ๋ ๋ฐ๋๋ผ MPA์ ์ฌ์ฉ์ฑ ๋ฌธ์ ๋ก ์ธํด ๋ฐ์ํ์ต๋๋ค.
๊ทธ๋ฌ๋ ์ด๋ฌํ ์ฌ์ฉ์ฑ ๋ฌธ์ ๋ ์ข ์ข ํ์ดํผ๋ฏธ๋์ด ์ ๊ทผ๋ฒ์ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ ์ ์์์ด ๋ฐํ์ก์ต๋๋ค: RPC๋ก ํ์ดํผ๋ฏธ๋์ด๋ฅผ ํฌ๊ธฐํ๋ ๋์ , ๋น์์ ์ค๋๋ ์ฐ๋ฆฌ๊ฐ ํ์๋ก ํ๋ ๊ฒ์ ๋ ๊ฐ๋ ฅํ ํ์ดํผ๋ฏธ๋์ด์ ๋๋ค.
์ด๊ฒ์ด ๋ฐ๋ก htmx๊ฐ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค.
ํ์ดํผ๋ฏธ๋์ด ์ ๊ทผ๋ฒ์ผ๋ก ๋์๊ฐ๋ฉด, ๋๋ถ๋ถ์ ์ธ๊ธฐ ์๋ SPA ํ๋ ์์ํฌ์์ ์๊ตฌํ๋ ๋ณต์ก์ฑ์ ์ผ๋ถ๋ก Harris ์จ์ MPA์ ๋ํ ๋ง์ ์ฐ๋ ค๋ฅผ ํด๊ฒฐํ ์ ์๋ ์ ๋นํ ์ ๊ตํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ๊ฒ๋ค๊ฐ ๋ง์ ์๊ฐ์ ํ์ง ์์๋, ์ง์ ํ REST-ful ์ํคํ ์ฒ์ ๋ํด Roy Fielding์ด ์ค๋ช ํ ๋ชจ๋ ์ด์ ์ ์ป์ ์ ์์ต๋๋ค.
ํ์ดํผ๋ฏธ๋์ด ์ํคํ ์ฒ๊ฐ ๋ชจ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํฉ๋๊น? ๋ถ๋ช ํ ๊ทธ๋ ์ง ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๋ง์, ์๋ง๋ ๋๋ถ๋ถ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํฉ๋๊น? ์ฐ๋ฆฌ๋ ์ ์ด๋ ์ผ๋ถ์์ ๊ทธ๋ ๊ฒ ์๊ฐํฉ๋๋ค.
์ด์ ๊ฐ์ฐ์์ ์ ๊ธฐ๋ ๊ฐ์ฅ ๊ฐ์ ์ ์ผ๋ก ์ถฉ์ ๋ ์ฃผ์ฅ์ ๋๋ฌํ์ต๋๋ค. ๋ฐ๋ก โ์๋ฐ์คํฌ๋ฆฝํธ์ ์๋๋ ์ด๋ฏธ ์ง๋๊ฐ๋คโ๋ ์ฃผ์ฅ์ ๋๋ค. Harris ์จ๋ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์์ผ๋ก ์น ๊ฐ๋ฐ์์ ์ง๋ฐฐ์ ์ธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ๋ ๊ฒ์ด๋ผ๋ ์ฌ์ค์ ๋ฐ์๋ค์ฌ์ผ ํ๋ค๊ณ ์ฃผ์ฅํฉ๋๋ค.
Harris ์จ๋ ์ต์ข ์ ์ผ๋ก ๋จ์ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ํ ์ ํญ์ ์์จ ์ฃผ๋ ๋๋ ฅ์ด ์ฃ์ง ์ปดํจํ ์ผ ๊ฒ์ด๋ผ๊ณ ๋ฏฟ๊ณ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ๊ทธ๋ ๊ฒ ํ์ ํ์ง ์์ต๋๋ค.
๋ฐ๋๋ก, ์ฐ๋ฆฌ๋ ๊ฐ๊น์ด ๋ฏธ๋์ ์ฃ์ง ์ปดํจํ ์ด ๋๋ถ๋ถ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ํ ์ญํ ์ ํ ๊ฒ์ด๋ผ๊ณ ๊ธฐ๋ํ์ง ์์ต๋๋ค. ์์งํ ๋งํด, ์ ๋ ๊ทธ๋ ๊ฒ ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค. CPU๋ ์ ๋ ดํ๊ณ ๋คํธ์ํฌ ์๋๋ ๋น ๋ฅด๊ณ ๊ณ์ ๋นจ๋ผ์ง๊ณ ์์ผ๋ฉฐ ๋ง์ดํฌ๋ก์๋น์ค๋ ๋ณต์กํ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํฉ๋๋ค.
Harris ์จ์ ๋ง๊ณผ๋ ๋ฌ๋ฆฌ, ์ค๋๋ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋ถ๋ช ํ ์ฐ์ธํ ์ถ์ธ๊ฐ ์๋๋ผ๋ ์ฌ์ค์ ๋ณผ ์ ์์ต๋๋ค. 5๋ ์ , ์ฐ๋ฆฌ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ ํญ์ ์ฐฝ๋ฆฝ ๋ฉค๋ฒ๋ก์ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฑฐ๋ํ ๋ฌผ๊ฒฐ์ ๋ง์ ํฌ๋ง์ด ์๋ค๊ณ ์ ๋งํ๊ณ ์์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๋ ์์์น ๋ชปํ ์ผ์ด ๋ฐ์ํ์ต๋๋ค. ํ์ด์ฌ์ด ๊ธ์ฑ์ฅํ๊ณ , ๋์์ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ฑ์ฅ์ธ๊ฐ ์ ์ฒด๋์์ต๋๋ค:
์ด ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ 2010๋ ๋ ์ค๋ฐ์ ์ ์ ์ ๋๋ฌํ ํธ๋ ๋๋ GitHub์์๋ ๊ด์ฐฐํ ์ ์์ต๋๋ค:
๋ฌผ๋ก , ์ด๊ฒ์ด ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๊ฒฐ๊ตญ ํ์ด์ฌ์๊ฒ โํจ๋ฐฐโํ๊ณ ์ฌ๋ผ์ง ๊ฒ์ด๋ผ๋ ๊ฒ์ ์๋ฏธํ์ง๋ ์์ต๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ์น์ ํต์ฌ ๊ธฐ์ ์ด๋ฉฐ ์์ํ ์ฐ๋ฆฌ์ ํจ๊ปํ ๊ฒ์ ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์์ด๋ htmx (๋๋ hyperscript)๋ฅผ ๊ตฌ์ถํ ์ ์์์ ๊ฒ์ด๋ฉฐ, ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ํด ๋งค์ฐ ๊ฐ์ฌํ๊ฒ ์๊ฐํฉ๋๋ค.
ํ์ง๋ง ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋ฏธ๋์ ์น์์ ๋ฐ๋์ ์์ ํ ์ง๋ฐฐ์ ์ด์ง ์์ ์๋ ์์์ ์์ฌํฉ๋๋ค. ์ด๋ 5๋ ์ ๋ง ํด๋ ๊ทธ๋ ๊ฒ ๋ณด์๋ ์ํฉ๊ณผ๋ ๋ค๋ฆ ๋๋ค.
์ฐ๋ฆฌ๋ HOWL ์คํ, ์ฆ โHypermedia On Whatever youโd Likeโ์ ๋ํด ์์ฃผ ์ด์ผ๊ธฐํฉ๋๋ค. ์ด๋ ๋ ๊ฐ๋ ฅํ ํ์ดํผ๋ฏธ๋์ด ์ํคํ ์ฒ๋ก ๋์๊ฐ๋ฉด ์ํ๋ ๋ฐฑ์๋ ์ธ์ด๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ์์ด๋์ด์ ๋๋ค: Python, LISP, Haskell, GO, JAVA, C#, ๋ฌด์์ด๋ ๊ฐ๋ฅํฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด ๋ง์ด์ฃ .
์๋ฒ ์ํธ์์ฉ์ ์ํด ํ์ดํผ๋ฏธ๋์ด์ HTML์ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์, ๊ฑฐ๋ํ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก ํธ์๋๊ฐ ๋ฐฑ์๋์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฑํํ๋๋ก ํ๋ ์๋ ฅ์ ๋๋ผ์ง ์์ต๋๋ค. ๋ฌผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ ํ ์ฌ์ฉํ ์ ์์ต๋๋ค (์๋ฅผ ๋ค์ด alpine.js ํํ๋ก). ๊ทธ๋ฌ๋ ์ด๋ฅผ ์๋ ์๋๋ ๋ฐฉ์์ผ๋ก, ์ฆ ์ ํ๋ฆฌ์ผ์ด์ ์ ํฅ์์ํค๊ธฐ ์ํ ๊ฐ๋ฒผ์ด ํ๋ก ํธ์๋ ์คํฌ๋ฆฝํ ์ธ์ด๋ก ์ฌ์ฉํฉ๋๋ค. ๋๋ ์ฉ๊ฐํ๋ค๋ฉด, ์ด๋ฌํ ํ์๋ฅผ ์ํด hyperscript๋ฅผ ์๋ํด ๋ณผ ์๋ ์์ต๋๋ค.
์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ์ด๊ณ ์ถ์ ์ธ๊ณ์ ๋๋ค: ์ฌ๋ฌ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์ต์ ์ด ์กด์ฌํ๊ณ , ๊ฐ ์ธ์ด๊ฐ ๊ณ ์ ํ ๊ฐ์ , ๊ธฐ์ ์ ๋ฌธํ ๋ฐ ํ๋ฐํ ์ปค๋ฎค๋ํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๋ชจ๋๊ฐ ๋ ๊ฐ๋ ฅํ ํ์ดํผ๋ฏธ๋์ด์ ๋ง๋ฒ์ ํตํด ์น ๊ฐ๋ฐ ์ธ๊ณ์ ์ฐธ์ฌํ ์ ์๋ ์ธ์์ ๋๋ค. SPA๊ฐ JSON์ผ๋ก Node์ ํต์ ํ๋ ๋ ์ ์ ์ธ ๊ตฌ์กฐ ๋์ ๋ง์ด์ฃ . ๋ค์์ฑ์ด์ผ๋ง๋ก ์ฐ๋ฆฌ์ ๊ฐ์ ์ ๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก,