April 17, 2023
์๋ฌธ: Rethinking React best practices
ํด๋ผ์ด์ธํธ ์ธก ๋ทฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ํคํ ์ฒ์ ์ด๋ฅด๊ธฐ๊น์ง ๋ฆฌ์กํธ์ ์งํ์ ๋ํด ์์ธํ ์์๋ณด์ธ์.
10๋ ์ , ๋ฆฌ์กํธ๋ ํด๋ผ์ด์ธํธ๊ฐ ๋ ๋๋งํ๋ SPA์ ์ธ๊ณ์ ๋ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๊ฟ๋์์ต๋๋ค.
์ค๋๋ ๋ฆฌ์กํธ ๋์ ๋ฅ ์ ์ต๊ณ ์กฐ์ ๋ฌํ๊ณ ์์ผ๋ฉฐ, ๋นํ๊ณผ ํ์๋ก ๋ ์ง์์ ์ผ๋ก ์ ๊ธฐ๋๊ณ ์์ต๋๋ค.
๋ฆฌ์กํธ 18์ ๋ฆฌ์กํธ ์๋ฒ ์ปดํฌ๋ํธ(RSC)์ ํจ๊ป โ๋ทฐโ ์ญํ ๋ง์ ์ํํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ฌ๊ฒจ์ก๋ ํด๋ผ์ด์ธํธ ์ธก MVC ํจํด์์ ํฌ๊ฒ ๋ฒ์ด๋๊ณ ์์ต๋๋ค. ์ด๋ฌํ ๋ณํ๋ ๋ฆฌ์กํธ์ ๋ฐ์ ๊ณผ์ ์์ ์๋นํ ์ค์ํ ๋จ๊ณ๋ก ๋ณผ ์ ์์ต๋๋ค.
์ด ๊ธ์์๋ ๋ฆฌ์กํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๋ฆฌ์กํธ ์ํคํ ์ฒ๋ก ์งํํ ๋ฆฌ์กํธ์ ์งํ๋ฅผ ์ดํดํ ๊ฒ์ ๋๋ค.
์๋ ์นด๋ ๋๋ ๋ฒ์น์ ๋ฐ๋ฅด๋ฉด, โ๋ชจ๋ ํ๋ณตํ ๊ฐ์ ์ ์๋ก ๋ฎ์ ์๊ณ , ๋ถํํ ๊ฐ์ ์ ์ ๋ง๋ค ๋ค๋ฅธ ์ด์ ๋ก ๋ถํํ๋คโ๋ผ๊ณ ํฉ๋๋ค.
๋จผ์ ๋ฆฌ์กํธ์ ํต์ฌ ์ ์ฝ ์กฐ๊ฑด๊ณผ ์ด๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ๊ณผ๊ฑฐ์ ์ ๊ทผ ๋ฐฉ์์ ์ดํดํ๋ ๊ฒ์ผ๋ก ์์ํ๊ฒ ์ต๋๋ค. ์ดํ์๋ ๋ง์กฑ์ค๋ฌ์ด ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ณตํต์ผ๋ก ๊ฐ์ง๊ณ ์๋ ๊ธฐ๋ณธ ํจํด๊ณผ ์์น์ ์ดํด๋ด ๋๋ค.
๋ง์ง๋ง์๋ Remix์ Next 13 ์ฑ ๋๋ ํ ๋ฆฌ์ ๊ฐ์ ๋ฆฌ์กํธ ํ๋ ์์ํฌ์์ ๋ฐ๊ฒฌ๋๋ ๋ณํํ๋ ๋ฉํ ๋ชจ๋ธ์ ์ดํดํ๊ฒ ๋ ๊ฒ์ ๋๋ค.
์ง๊ธ๊น์ง ์ฐ๋ฆฌ๊ฐ ํด๊ฒฐํ๋ ค๊ณ ํ๋ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ ๋ฅผ ์ดํดํ๋ ๊ฒ๋ถํฐ ์์ํ๊ฒ ์ต๋๋ค. ์ด๋ฅผ ํตํด ์๋ฒ, ํด๋ผ์ด์ธํธ, ๋ฒ๋ค๋ฌ๊ฐ ๊ธด๋ฐํ๊ฒ ํตํฉ๋ ์์ ํ๋ ์์ํฌ๋ฅผ ํ์ฉํ๋ผ๋ ๋ฆฌ์กํธ ์ฝ์ด ํ์ ๊ถ๊ณ ๋ฅผ ๋งฅ๋ฝ์ ๋ง๊ฒ ์ดํดํ๋ ๋ฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
์ํํธ์จ์ด ์์ง๋์ด๋ง์๋ ์ผ๋ฐ์ ์ผ๋ก ๊ธฐ์ ์ ๋ฌธ์ ์ ์ธ์ ๋ฌธ์ ๋ผ๋ ๋ ๊ฐ์ง ์ ํ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์ํคํ ์ฒ๋ฅผ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ๋์์ด ๋๋ ์ ์ ํ ์ ์ฝ ์กฐ๊ฑด์ ์ฐพ๋ ๊ณผ์ ์ผ๋ก์จ ์๊ฐํ๋ ๊ฒ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋๋ค.
์ธ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์ฌ๋ฐ๋ฅธ ์ ์ฝ ์กฐ๊ฑด์ด ์๋ค๋ฉด ๋ ๋ง์ ์ฌ๋์ด ํ์ ํ ์๋ก ์๊ฐ์ด ์ง๋ ์๋ก ๋ ๋ณต์กํ๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฌ์ฐ๋ฉฐ ๋ ์ํํ ๋ณ๊ฒฝ์ด ์ด๋ฃจ์ด์ง๋๋ค. ๊ธฐ์ ์ ์ธ ๋ฌธ์ ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ์ ์ ํ ์ ์ฝ ์กฐ๊ฑด์ด ์์ผ๋ฉด ์ผ๋ฐ์ ์ผ๋ก ๋ ๋ง์ด ๋ฐฐํฌํ ์๋ก ์ต์ข ์ฌ์ฉ์ ๊ฒฝํ์ ๋ ๋๋น ์ง๊ฒ ๋ฉ๋๋ค.
์ด๋ฌํ ์ ์ฝ ์กฐ๊ฑด์ ๊ถ๊ทน์ ์ผ๋ก ๋ณต์กํ ์์คํ ์ ๊ตฌ์ถํ๊ณ ์ํธ ์์ฉํ๋ ์ธ๊ฐ์ผ๋ก์ ๊ฐ์ฅ ํฐ ์ ์ฝ ์กฐ๊ฑด์ธ ์ ํ๋ ์๊ฐ๊ณผ ์ฃผ์๋ ฅ์ ๊ด๋ฆฌํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
์ธ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ ๋์ ์ํฅ๋ ฅ์ ๋ฐํํฉ๋๋ค. ์ ํ๋ ์๊ฐ๊ณผ ์ฃผ์๋ ฅ์ผ๋ก ๊ฐ์ธ, ํ, ์กฐ์ง์ ์์ฐ์ฑ์ ํ์ฅํ ์ ์์ต๋๋ค.
ํ์ ๋น ๋ฅด๊ฒ ์ถ์ํ ์ ์๋ ์๊ฐ๊ณผ ์์์ด ์ ํ๋์ด ์์ต๋๋ค. ๊ฐ์ธ์ผ๋ก์ ์ฐ๋ฆฌ๋ ๋ง์ ์์ ๋ณต์ก์ฑ์ ๋จธ๋ฆฟ์์ ๋ด์๋๋ ๋ฐ ํ๊ณ๊ฐ ์์ต๋๋ค.
์ฐ๋ฆฌ์ ๋๋ถ๋ถ์ ์๊ฐ์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง, ๋ฌด์ธ๊ฐ๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ์ถ๊ฐํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๋ฌด์์ธ์ง ํ์ ํ๋ ๋ฐ ์๋น๋ฉ๋๋ค. ์ฌ๋๋ค์ ๋จธ๋ฆฟ์์ ์ ์ฒด ์์คํ ์ผ๋ก ๊ฐ๋ ์ฑ์ฐ์ง ์๊ณ ๋ ์์ ํ ์ ์์ด์ผ ํฉ๋๋ค.
๋ฆฌ์กํธ์ ์ฑ๊ณต ์์ธ ์ค ๊ฐ์ฅ ํฐ ๋ถ๋ถ์ ๋น์์ ๊ธฐ์กด ํด๊ฒฐ์ฑ ์ ๋นํด ์ด๋ฌํ ์ ์ฝ์ ์ผ๋ง๋ ์ ๊ด๋ฆฌํ๋์ง์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ํ์ ์ ์ธ์ ์ผ๋ก ๋ค์ ๊ตฌ์ฑํ ์ ์๊ณ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ์ผ๋ก โ๊ทธ๋ฅ ์๋โํ ์ ์๋ ๋ถ๋ฆฌ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ณ๋ ฌ๋ก ๊ตฌ์ถํ ์ ์์์ต๋๋ค.
์ปดํฌ๋ํธ ๋ชจ๋ธ๊ณผ ์ผ๋ฐ์ ์ธ ํจํด์์ ๋ฒ์ด๋๋ ์ ๋ต(escape hatch)์ ํตํด ๋ช ํํ ๊ฒฝ๊ณ ๋ค์ ๋จ์์๋ ๋ ๊ฑฐ์ ์์คํ ๊ณผ ํตํฉ์ ๋ณต์ก์ฑ์ ์ถ์ํํ ์ ์์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ๋ถ๋ฆฌ์ ์ปดํฌ๋ํธ ๋ชจ๋ธ์ ์ํฅ ์ค ํ๋๋, ๋๋ฌด๋ง ๋ณด๊ณ ์ฒ์ ํฐ ๊ทธ๋ฆผ์ ๋์น๊ธฐ ์ฝ๋ค๋ ์ ์ ๋๋ค.
๋ํ ๋ฆฌ์กํธ๋ ๋น์์ ๊ธฐ์กด ํด๊ฒฐ์ฑ ์ ๋นํด ๋ณต์กํ ์ํธ์์ฉ ๊ธฐ๋ฅ์ ๋ ์ฝ๊ฒ ๊ตฌํํ ์ ์์์ต๋๋ค.
์ ์ธ์ ๋ชจ๋ธ ๋๋ถ์ n-ary ํธ๋ฆฌ ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ์์ฑ๋๊ณ , ์ด ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ react-dom๊ณผ ๊ฐ์ ํ๋ซํผ๋ณ ๋ ๋๋ฌ์ ๊ณต๊ธ๋ฉ๋๋ค. ํ์ด ํ์ฅ๋๊ณ ์์ฉ ํจํค์ง๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด์ ์ด ํธ๋ฆฌ ๊ตฌ์กฐ๋ ๋งค์ฐ ๋น ๋ฅด๊ฒ ๊น์ด์ง๋ ๊ฒฝํฅ์ด ์์์ต๋๋ค.
2016๋ ๋ฆฌํฉํฐ๋ง ๋ ์ดํ, ๋ฆฌ์กํธ๋ ์ต์ข ์ฌ์ฉ์ ํ๋์จ์ด์์ ์ฒ๋ฆฌํด์ผ ํ๋ ํฌ๊ณ ๊น์ ํธ๋ฆฌ๋ฅผ ์ต์ ํํ๋ ๊ธฐ์ ์ ๋ฌธ์ ๋ฅผ ์ ๊ทน์ ์ผ๋ก ๋์ํด ์์ต๋๋ค.
ํ๋ฉด ๋ฐ๋ํธ์ ์๋ ์ฌ์ฉ์ ์ญ์ ์๊ฐ๊ณผ ์ฃผ์๋ ฅ์ด ์ ํ๋์ด ์์ต๋๋ค. ๊ธฐ๋์น๋ ๋์์ง์ง๋ง, ์ง์คํ ์ ์๋ ์๊ฐ์ ์ค์ด๋ค๊ณ ์์ต๋๋ค. ์ฌ์ฉ์๋ ํ๋ ์์ํฌ, ๋ ๋๋ง ์ํคํ ์ฒ ๋๋ ์ํ ๊ด๋ฆฌ์ ์ ๊ฒฝ ์ฐ์ง ์์ต๋๋ค. ์ฌ์ฉ์๋ ๊ทธ์ ๋ถํธํจ ์์ด ํ์ํ ์์ ์ ์ํํ๊ธฐ๋ฅผ ์ํฉ๋๋ค. ๋ ๋ค๋ฅธ ์ ์ฝ ์กฐ๊ฑด์ ์ฌ์ฉ์๊ฐ ์๊ฐํ๊ฒ ๋ง๋ค์ง ๋ง๊ณ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค.
์๋์์ ์ดํด๋ณด๊ฒ ์ง๋ง, ์ฐจ์ธ๋ ๋ฆฌ์กํธ(๋ฐ ๋ฆฌ์กํธ ๊ณ์ด) ํ๋ ์์ํฌ์์ ๊ถ์ฅํ๋ ๋ง์ ๋ชจ๋ฒ ์ฌ๋ก๋ ์ค๋ก์ง ํด๋ผ์ด์ธํธ CPU์์๋ง ์ฒ๋ฆฌ๋๋ ๊น์ ํธ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ ๋์ ์ํฅ์ ์ํํด ์ค๋๋ค.
์ง๊ธ๊น์ง ๊ธฐ์ ์ ๊ณ๋ ์๋น์ค์ ์ค์ ์ง์คํ vs ๋ถ์ฐํ, ๊ฐ๋ฒผ์ด ํด๋ผ์ด์ธํธ vs ๋ฌด๊ฑฐ์ด ํด๋ผ์ด์ธํธ์ ๊ฐ์ ๋ค์ํ ์ถ์์ ์ง์์ฒ๋ผ ์์ง์ฌ ์์ต๋๋ค.
๋ฌด๊ฑฐ์ด ๋ฐ์คํฌํฑ ํด๋ผ์ด์ธํธ์์ ์น์ ๋ฑ์ฅ์ผ๋ก ๊ฐ๋ฒผ์ด ํด๋ผ์ด์ธํธ๋ก, ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ฐ์ผ ์ปดํจํ ๊ณผ SPA์ ๋ฑ์ฅ์ผ๋ก ๋ค์ ๋ฌด๊ฑฐ์ด ํด๋ผ์ด์ธํธ๋ก ์ ํํ์ต๋๋ค. ์ค๋๋ ๋ฆฌ์กํธ์ ์ง๋ฐฐ์ ์ธ ๋ฉํ ๋ชจ๋ธ์ ์ด ๋ฌด๊ฑฐ์ด ํด๋ผ์ด์ธํธ ์ธก ์ ๊ทผ ๋ฐฉ์์ ๋ฟ๋ฆฌ๋ฅผ ๋๊ณ ์์ต๋๋ค.
์ด๋ฌํ ๋ณํ๋ ํ๋ฐํธ์๋์ ๋ฐฑ์๋ ๋ถ๋ฆฌ ๊ณผ์ ์์ ํด๋ผ์ด์ธํธ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ฉด์ CSS, ์ธํฐ๋ ์ ๋์์ธ, HTML, ์ ๊ทผ์ฑ ํจํด์ ์ ํตํ โํ๋ฐํธ์๋ ์ ๋ฉดโ ๊ฐ๋ฐ์์ โํ๋ฐํธ์๋ ํ๋ฉดโ ๊ฐ๋ฐ์ ์ฌ์ด์ ์๊ทนํ๋ฅผ ๊ฐ์ ธ์์ต๋๋ค.
๋ฆฌ์กํธ ์ํ๊ณ์์๋ โํ๋ฐํธ์๋๋ฅผ ์ํ ๋ฐฑ์๋โ ์คํ์ผ ์ฝ๋์ ์๋น ๋ถ๋ถ์ด ์๋ฒ๋ก ๋ค์ ์ด๋ํ๋ฉด์ ๋ ์ธ๊ณ์ ์ฅ์ ์ ์กฐํ์ํค๊ธฐ ์ํด ์ง์๊ฐ ๊ทธ ์ค๊ฐ ์ด๋๊ฐ์์ ํ๋ค๋ฆฌ๊ณ ์์ต๋๋ค.
๋๊ท๋ชจ ์กฐ์ง์์๋ ์์ง๋์ด์ ์ผ๋ถ๊ฐ ์ํคํ ์ฒ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ตฌ์ถํ๋ ํ๋ซํผ ํํธ์์ ์ผํฉ๋๋ค.
์ด๋ฌํ ๊ฐ๋ฐ์๋ ๋๋จธ์ง ๊ฐ๋ฐ์๊ฐ ์ ํ๋ ์๊ฐ๊ณผ ์ฃผ์๋ฅผ ์ง์คํ์ฌ ํฐ ์ฑ๊ณผ๋ฅผ ๋ด๋ ์ผ์ ์ง์คํ ์ ์๋๋ก ์ง์ํฉ๋๋ค.
์๊ฐ๊ณผ ์ฃผ์๋ ฅ์ ์ ์ฝ์ ๋ฐ์ผ๋ฉด ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ํ๊ฒ ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ์ฐ๋ฆฌ๋ฅผ ์ฌ๋ฐ๋ฅธ ๊ธธ๋ก ์ด๋์ด์ฃผ๊ณ ์ฑ๊ณต์ ๊ตฌ๋ ํ ์ด์ ์ฝ๊ฒ ๋น ๋จ๋ฆฌ๋ ์ด๋ฌํ ๊ธ์ ์ ์ธ ์ ์ฝ์ ์ํฉ๋๋ค.
์ด๋ฌํ ์ฑ๊ณต์ ํฐ ๋ถ๋ถ์ ์ต์ข ์ฌ์ฉ์ ๋๋ฐ์ด์ค์์ ๋ถ๋ฌ์ ์คํํด์ผ ํ๋ ์ฝ๋์ ์์ ์ค์ด๋ ๊ฒ์ ๋๋ค. ํ์ํ ๊ฒ๋ง ๋ค์ด๋ก๋ํ๊ณ ์คํํ๋ ๊ฒ์ ์์น์ผ๋ก ํฉ๋๋ค. ํด๋ผ์ด์ธํธ ์ ์ฉ ํจ๋ฌ๋ค์์ ๊ฐํ ์์ผ๋ฉด ์ด ์์น์ ์งํค๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค. ๋ฒ๋ค์๋ ๋ฉ์ธ ์ค๋ ๋์์ ์คํ๋ ์ ์๋ ๋ฐ์ดํฐ ํ์นญ, ์ฒ๋ฆฌ, ํฌ๋งทํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(์: moment)๊ฐ ํฌํจ๋๊ฒ ๋ฉ๋๋ค.
์ด๋ ๋ฆฌ์กํธ์ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ์ด ์๋ฒ๊น์ง ํ์ฅ๋์ด MPA์ ๋จ์ํ ์์ฒญ-์๋ต ๋ฉํ ๋ชจ๋ธ๊ณผ SPA์ ์ํธ์์ฉ์ด ๊ฒฐํฉํ Remix๋ Next์ ๊ฐ์ ํ๋ ์์ํฌ์์ ๋ณํํ๊ณ ์์ต๋๋ค.
์ด์ ๊ทธ๋์ ํด๋ผ์ด์ธํธ ์ ์ฉ ํจ๋ฌ๋ค์์ ์ ์ฉํ๋ ์ต์ ํ๋ฅผ ์ดํดํด ๋ณด๊ฒ ์ต๋๋ค. ๋ ๋์ ์ฑ๋ฅ์ ์ํด ์๋ฒ๋ฅผ ๋ค์ ๋์ ํด์ผ ํ์ต๋๋ค. ์ด๋ฌํ ๋งฅ๋ฝ์ ์๋ฒ๊ฐ ์ผ๊ธ ์๋ฏผ์ด ๋๊ธฐ ์ํด ์งํํ๋ ๋ฆฌ์กํธ ํ๋ ์์ํฌ๋ฅผ ์ดํดํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
๋ค์์ ํด๋ผ์ด์ธํธ ๋ ๋๋ง ํ๋ฐํธ์๋(์คํฌ๋ฆฝํธ ํ๊ทธ๊ฐ ๋ง์ ๋น HTML ํ์ด์ง)๋ฅผ ์ ๊ณตํ๋ ๊ฐ๋จํ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค.
์ด ์ ๊ทผ ๋ฐฉ์์ ์ฅ์ ์ ๋น ๋ฅธ TTFB, ๊ฐ๋จํ ์ด์ ๋ชจ๋ธ, ๋ถ๋ฆฌ๋ ๋ฐฑ์๋์ ๋๋ค. ์ด ์กฐํฉ์ ๋ฆฌ์กํธ์ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ๊ณผ ๊ฒฐํฉํ์ฌ ๋ง์ ์ฌ๋์ ๋ฌธ์ ๋ฅผ ๋จ์ํํฉ๋๋ค.
ํ์ง๋ง ๋ชจ๋ ์์ ์ ์ฌ์ฉ์ ํ๋์จ์ด์ ๋งก๊ธฐ๊ธฐ ๋๋ฌธ์ ๊ธฐ์ ์ ์ธ ๋ฌธ์ ๊ฐ ๋น ๋ฅด๊ฒ ๋ฐ์ํฉ๋๋ค. ๋ชจ๋ ๊ฒ์ด ๋ค์ด๋ก๋๋๊ณ ์คํ๋ ๋๊น์ง ๊ธฐ๋ค๋ ธ๋ค๊ฐ ํด๋ผ์ด์ธํธ์์ ๊ฐ์ ธ์์ผ๋ง ์ ์ฉํ ๋ด์ฉ์ ํ์ํ ์ ์์ต๋๋ค.
์ฝ๋๊ฐ ์ถ๊ฐ๋๋ ๊ณต๊ฐ์ ํ๊ณ๊ฐ ์์ต๋๋ค. ์ ์คํ ์ฑ๋ฅ ๊ด๋ฆฌ๊ฐ ์์ผ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ด ํ์ ํ๊ฒ ๋๋ ค์ง๋ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค.
์๋ฒ๋ก ๋์๊ฐ๋ ์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ ์ด๋ฌํ ๋๋ฆฐ ์์ ์๊ฐ์ ํด๊ฒฐํ๊ธฐ ์ํ ๊ฒ์ด์์ต๋๋ค.
์ด๊ธฐ ๋ฌธ์ ์์ฒญ์ ๋น HTML ํ์ด์ง๋ก ์๋ตํ๋ ๋์ , ์ฆ์ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ ๋ค์ ์ปดํฌ๋ํธ ํธ๋ฆฌ๋ฅผ HTML๋ก ๋ ๋๋งํ์ฌ ์๋ตํ์ต๋๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ๋ ๋๋งํ๋ SPA์ ๋งฅ๋ฝ์์ SSR์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋ก๋๋๋ ๋์ ์ด๊ธฐ์ ๋น ํฐ์ ํ๋ฉด ๋์ ์ต์ํ ๋ฌด์ธ๊ฐ๋ฅผ ํ์ํ๋ ํธ๋ฆญ๊ณผ ๊ฐ์ต๋๋ค.
SSR์ ํนํ ์ฝํ ์ธ ๊ฐ ๋ง์ ํ์ด์ง์ ์ฒด๊ฐ ์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์์ต๋๋ค. ํ์ง๋ง ์ด์ ๋น์ฉ์ด ๋ฐ์ํ๊ณ , TTI๊ฐ ๋ ๋ฐ๋ ค๋๋ฉด์ ์ํธ์์ฉ์ด ๋ง์ ํ์ด์ง์ ์ฌ์ฉ์ ๊ฒฝํ์ด ์ ํ๋ ์ ์์ต๋๋ค.
์ด๋ฅผ โ๋ถ์พํ ๊ณ๊ณกโ์ด๋ผ๊ณ ํ๋๋ฐ, ์ฌ์ฉ์๊ฐ ํ์ด์ง์์ ์ฝํ ์ธ ๋ฅผ ๋ณด๊ณ ์ํธ ์์ฉ์ ์๋ํ์ง๋ง ๋ฉ์ธ ์ค๋ ๋๊ฐ ์ ๊ฒจ ์๋ ์ํ์ ๋๋ค. ๋ฌธ์ ๋ ์ฌ์ ํ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๊ฐ ๋๋ฌด ๋ง๋ค๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ฏ๋ก SSR์ ์๋๋ฅผ ๋์ผ ์๋ ์์ง๋ง ํ์คํ ํด๊ฒฐ์ฑ ์ ์๋๋๋ค.
์๋ฒ์์ ๋ ๋๋ง ํ๊ณ ํด๋ผ์ด์ธํธ์์ ๋ฆฌ์กํธ๊ฐ ์ด๋ฅผ ์ด์ด๋ฐ์ผ๋ฉด ๋ชจ๋ ๊ฒ์ ๋ค์ ์ํํ์ฌ ๋ ๋ฒ ์์ ํ๋ ๋ด์ฌ์ ์ธ ๋นํจ์จ์ฑ์ด ์์ต๋๋ค.
TTFB๊ฐ ๋๋ฆฌ๋ฉด ๋ธ๋ผ์ฐ์ ๋ ์ด๋ค ์ ์ ์ ๋ค์ด๋ก๋ํ ๊ฒ์ธ์ง ์๊ธฐ ์ํด ๋ฌธ์ ์์ฒญ ํ head๋ฅผ ๋ฐ๊ธฐ๊น์ง ์ธ๋ด์ฌ์ ๊ฐ๊ณ ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค.
๋ฐ๋ก ์ด ์ง์ ์์ ์คํธ๋ฆฌ๋ฐ(streaming)์ด ๋ฑ์ฅํ์ฌ ๋ณ๋ ฌ์ฑ(parallelism)์ ๊ฐํํฉ๋๋ค.
ChatGPT๊ฐ ์ ์ฒด ์๋ต์ด ์๋ฃ๋ ๋๊น์ง ์คํผ๋๋ฅผ ํ์ํ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ์ง ์๊ฐํด ๋ณผ ์ ์์ต๋๋ค. ๋๋ถ๋ถ ์ฌ๋์ ๊ธฐ๋ฅ์ด ๊ณ ์ฅ ๋ฌ๋ค๊ณ ์๊ฐํ๊ณ ํญ์ ๋ซ์ ๊ฒ์ ๋๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ ๋ฐ์ดํฐ์ ์ฝํ ์ธ ๋ฅผ ์๋ฃ๋๋ ๋๋ก ๋ธ๋ผ์ฐ์ ๋ก ์คํธ๋ฆฌ๋ฐ ํ์ฌ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ํ์ํฉ๋๋ค.
๋์ ํ์ด์ง์ ๋ํ ์คํธ๋ฆฌ๋ฐ์ ์๋ฒ์์ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ํ์นญ๋ฅผ ์์ํ๊ณ ๋์์ ๋ธ๋ผ์ฐ์ ์์ ์ ์ ๋ค์ด๋ก๋๋ฅผ ์์ํ๋๋ก ํ๋ ๋ฐฉ๋ฒ์ผ๋ก, ๋ชจ๋ ๋์์ ์งํ๋ฉ๋๋ค. ์ด๋ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ HTML์ ์ ์กํ๊ธฐ ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ํ์นญํ๊ณ ๋ชจ๋ ๋ ๋๋ง์ด ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ์์ ์ด์ ๋ค์ด์ด๊ทธ๋จ๋ณด๋ค ํจ์ฌ ๋น ๋ฆ ๋๋ค.
์คํธ๋ฆฌ๋ฐ์ ๋ํด ๋ ์์ธํ ์์๋ณด๊ธฐ
์ด ์คํธ๋ฆฌ๋ฐ ๊ธฐ์ ์ ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ๋ฅผ ์ง์ํ ์ ์๋ ๋ฐฑ์๋ ์๋ฒ ์คํ ๋๋ ์์ง ๋ฐํ์์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
HTTP/2์์๋ ์ฌ๋ฌ ์์ฒญ๊ณผ ์๋ต์ ๋์์ ์ ์กํ ์ ์๋ ๊ธฐ๋ฅ์ธ HTTP ์คํธ๋ฆผ์ด ์ฌ์ฉ๋๋ฉฐ, HTTP/1์์๋ ๋ฐ์ดํฐ๋ฅผ ๋ ์์ ๊ฐ๋ณ ์ฒญํฌ๋ก ์ ์กํ ์ ์๋ Transfer-Encoding: chunked ๋ฉ์ปค๋์ฆ์ด ์ฌ์ฉ๋ฉ๋๋ค.
์ต์ ๋ธ๋ผ์ฐ์ ์๋ ์ฝ๊ธฐ ๊ฐ๋ฅํ ์คํธ๋ฆผ์ผ๋ก ๊ฐ์ ธ์ค๊ธฐ ์๋ต์ ์ฌ์ฉํ ์ ์๋ Fetch API๊ฐ ๋ด์ฅ๋์ด ์์ต๋๋ค.
์๋ต์ body ์์ฑ์ ์ฝ๊ธฐ ๊ฐ๋ฅํ ์คํธ๋ฆผ์ผ๋ก, ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ ๋ฐ์ดํฐ๋ฅผ ํ ์ฒญํฌ์ฉ ๋ฐ์ ์ ์๋๋ก ํฉ๋๋ค. ๋ชจ๋ ์ฒญํฌ๊ฐ ์์ ํ ๋ค์ด๋ก๋๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์์๋ ๋ฉ๋๋ค.
์ด ๋ฐฉ์์ ์ฌ์ฉํ๋ ค๋ฉด ์๋ฒ์์ ์คํธ๋ฆฌ๋ฐ ์๋ต์ ์ ์กํ๊ณ ํด๋ผ์ด์ธํธ์์ ๋ค์ ์ฝ์ ์ ์๋ ๊ธฐ๋ฅ์ ์ค์ ํด์ผ ํ๋ฏ๋ก ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ๊ธด๋ฐํ ํ์ ์ด ํ์ํฉ๋๋ค.
์บ์ฑ ๊ณ ๋ ค ์ฌํญ, HTTP ์ํ ์ฝ๋ ๋ฐ ์ค๋ฅ ์ฒ๋ฆฌ, ์ต์ข ์ฌ์ฉ์ ํ๊ฒฝ์ ์ค์ ํ์ ๋ฑ ์คํธ๋ฆฌ๋ฐ์๋ ์ฃผ๋ชฉํ ๋งํ ๋ช ๊ฐ์ง ์ธ๋ฐํ ๋ถ๋ถ๋ค์ด ์์ต๋๋ค. ๋ ์ด์์ ์ด๋๊ณผ ๋น ๋ฅธ TTFB ์ฌ์ด์๋ ํธ๋ ์ด๋์คํ๊ฐ ์์ต๋๋ค.
์ง๊ธ๊น์ง๋ ํด๋ผ์ด์ธํธ๊ฐ ๋ ๋๋งํ ํธ๋ฆฌ๋ฅผ ์๋ฒ์์ ๋น ๋ฅด๊ฒ ๊ฐ์ ธ์ค๋ ๋์์ HTML์ ์ผ์ฐ ํ๋ฌ์ ํ์ฌ ๋ฐ์ดํฐ์ ์ ์ ์ ๋ค์ด๋ก๋๋ฅผ ๋์์ ๋ณ๋ ฌ ์ฒ๋ฆฌํจ์ผ๋ก์จ ์์ ์๊ฐ์ ๊ฐ์ ํ์ต๋๋ค.
์ด์ ๋ฐ์ดํฐ ํ์นญ ๋ฐ ๋ณ๊ฒฝ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
โ๋ชจ๋ ๊ฒ์ด ์ปดํฌ๋ํธโ์ธ ๊ณ์ธต์ ์ปดํฌ๋ํธ ํธ๋ฆฌ์ ํ ๊ฐ์ง ์ ์ฝ ์กฐ๊ฑด์ ๋ ธ๋๊ฐ ๊ฐ์ ธ์ค๊ธฐ ์์, ๋ก๋ฉ ์ํ ๊ด๋ฆฌ, ์ด๋ฒคํธ ์๋ต, ๋ ๋๋ง๊ณผ ๊ฐ์ ์ฌ๋ฌ ๊ฐ์ง ์ฑ ์์ ๊ฐ์ง๋ค๋ ์ ์ ๋๋ค.
์ด๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฌด์์ ๊ฐ์ ธ์ฌ์ง ํ์ ํ๊ธฐ ์ํด ํธ๋ฆฌ๋ฅผ ํ์ํด์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ด์ฐฝ๊ธฐ์๋ SSR๋ก ์ด๊ธฐ HTML์ ์์ฑํ๋ ค๋ฉด ์๋ฒ์์ ํธ๋ฆฌ๋ฅผ ์๋์ผ๋ก ํ์ํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์ต๋๋ค. ์ด๋ฅผ ์ํด์๋ ๋ชจ๋ ๋ฐ์ดํฐ ์ข ์์ฑ์ ์์งํ๊ธฐ ์ํด ๋ฆฌ์กํธ ๋ด๋ถ๋ฅผ ๋ค์ฌ๋ค๋ณด๊ณ ํธ๋ฆฌ๋ฅผ ํ์ํ๋ฉด์ ์์ฐจ์ ์ผ๋ก ๊ฐ์ ธ์ค๋ ์์ ์ด ํ์ํ์ต๋๋ค.
ํด๋ผ์ด์ธํธ์์ ์ด โ๋ ๋๋ง ํ ๋ถ๋ฌ์ค๊ธฐโ ์์๋ ๋ ์ด์์ ์ด๋์ ๋ฐ๋ผ ๋ก๋ฉ ์คํผ๋๊ฐ ๋ํ๋ฌ๋ค ์ฌ๋ผ์ง๊ธฐ๋ฅผ ๋ฐ๋ณตํ๊ฒ ํฉ๋๋ค. ํธ๋ฆฌ๋ฅผ ์ํํ๋ฉด ์์ฐจ์ ์ผ๋ก ๋คํธ์ํฌ ์ํฐํด๋ก ์ด์ด์ง๋๋ค.
๋ฐ๋ผ์ ๋ค์ด๋ก๋ํ ๋ด์ฉ์ ํ์ ํ๊ธฐ ์ํด ๋งค๋ฒ ํธ๋ฆฌ๋ฅผ ์์์ ์๋๋ก ํ์ํ ํ์ ์์ด ๋ฐ์ดํฐ์ ์ฝ๋๋ฅผ ๋ณ๋ ฌ๋ก ๊ฐ์ ธ์ฌ ์ ์๋ ๋ฐฉ๋ฒ์ด ํ์ํฉ๋๋ค.
Relay์ ์๋ฆฌ์ Facebook์์ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ๋๊ท๋ชจ๋ก ํด๊ฒฐํ๋์ง ์ดํดํด ๋ณด๋ฉด ๋ง์ ๋์์ด ๋ฉ๋๋ค. ์ด๋ฌํ ๊ฐ๋ ์ ์ดํ์ ๋ณด๊ฒ ๋ ํจํด์ ์ดํดํ๋ ๋ฐ์๋ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
์ปดํฌ๋ํธ์๋ ๋ฐ์ดํฐ ์ข ์์ฑ์ด ํจ๊ป ์์ต๋๋ค.
Relay์์ ์ปดํฌ๋ํธ๋ ๋ฐ์ดํฐ ์ข ์์ฑ์ GraphQL ์กฐ๊ฐ์ผ๋ก ์ ์ธ์ ์ผ๋ก ์ ์ํฉ๋๋ค.
์ฝ๋ก์ผ์ด์ ์ ์ง์ํ๋ React Query์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ์ปดํฌ๋ํธ๊ฐ ๋ฐ์ดํฐ๋ฅผ ํ์นญํ๋ ์์ ์ ์ง์ ์ํํ์ง ์๋๋ค๋ ์ ์ ๋๋ค.
๋น๋ ์๊ฐ ๋์ ํธ๋ฆฌ ํ์์ด ๋ฐ์ํฉ๋๋ค.
Relay ์ปดํ์ผ๋ฌ๋ ํธ๋ฆฌ๋ฅผ ํตํด ๊ฐ ์ปดํฌ๋ํธ์ ๋ฐ์ดํฐ ์๊ตฌ ์ฌํญ์ ์์งํ๊ณ ์ต์ ํ๋ GraphQL ์ฟผ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ด ์ฟผ๋ฆฌ๋ ๋ฐํ์์ ๊ฒฝ๋ก ๋ฐ์ด๋๋ฆฌ(๋๋ ํน์ ์ง์ ์ )์์ ์คํ๋๋ฏ๋ก ์ปดํฌ๋ํธ ์ฝ๋์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ๋ณ๋ ฌ๋ก ๋ก๋ํ ์ ์์ต๋๋ค.
์ฝ๋ก์ผ์ด์ ์ ๊ฐ์ฅ ์ค์ํ ์ํคํ ์ฒ ์์น ์ค ํ๋์ธ ์ฝ๋๋ฅผ ์ญ์ ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ง์ํฉ๋๋ค. ์ปดํฌ๋ํธ๋ฅผ ์ ๊ฑฐํ๋ฉด ํด๋น ๋ฐ์ดํฐ ์๊ตฌ ์ฌํญ๋ ์ ๊ฑฐ๋์ด ์ฟผ๋ฆฌ์ ๋ ์ด์ ํฌํจ๋์ง ์์ต๋๋ค.
Relay๋ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ฌ ๋ ํฐ ํธ๋ฆฌ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ๋ง์ ํธ๋ ์ด๋์คํ ๋ฌธ์ ๋ฅผ ์ํํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ด๋ ๋ค์ ๋ณต์กํ ์ ์์ผ๋ฉฐ, ์ฑ๋ฅ์ ์ ์งํ๋ฉด์ DX ์์ฑ์ ์กฐ์ ํ๊ธฐ ์ํด GraphQL, ํด๋ผ์ด์ธํธ ์ธก ๋ฐํ์ ๋ฐ ๊ณ ์ฑ๋ฅ ์ปดํ์ผ๋ฌ๊ฐ ํ์ํฉ๋๋ค.
๋์ค์ ๋ ๋์ ํ๊ฒฝ์์ ๋ฆฌ์กํธ ์๋ฒ ์ปดํฌ๋ํธ๊ฐ ์ด๋ป๊ฒ ๋น์ทํ ํจํด์ ๋ฐ๋ฅด๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ด ๋ชจ๋ ์์ ์ ์ํํ์ง ์๊ณ ๋ฐ์ดํฐ์ ์ฝ๋๋ฅผ ๊ฐ์ ธ์ฌ ๋ ํธ๋ฆฌ๋ฅผ ํ์ํ์ง ์๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋ฌด์์ผ๊น์?
๋ฐ๋ก Remix๋ Next์ ๊ฐ์ ํ๋ ์์ํฌ์์ ๋ณผ ์ ์๋ ์๋ฒ์ ์ค์ฒฉ ๊ฒฝ๋ก(nested routes) ๊ฐ ์ฌ๊ธฐ์ ํด๋นํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ปดํฌ๋ํธ์ ์ด๊ธฐ ๋ฐ์ดํฐ ์ข ์์ฑ์ URL์ ๋งคํ๋ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ URL์ ์ค์ฒฉ๋ ์ธ๊ทธ๋จผํธ๋ ์ปดํฌ๋ํธ ํ์ ํธ๋ฆฌ์ ๋งคํ๋ฉ๋๋ค. ์ด ๋งคํ์ ํตํด ํ๋ ์์ํฌ๋ ํน์ URL์ ํ์ํ ๋ฐ์ดํฐ์ ์ปดํฌ๋ํธ ์ฝ๋๋ฅผ ๋ฏธ๋ฆฌ ์๋ณํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด Remix์์๋ ํ์ ํธ๋ฆฌ๊ฐ ์์ ๊ฒฝ๋ก์ ๋ ๋ฆฝ์ ์ผ๋ก ์์ฒด ๋ฐ์ดํฐ ์๊ตฌ ์ฌํญ์ ๊ฐ์ง ์ ์์ผ๋ฉฐ, ์ปดํ์ผ๋ฌ๋ ์ค์ฒฉ๋ ๊ฒฝ๋ก๊ฐ ๋ณ๋ ฌ๋ก ๋ก๋๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
๋ํ ์ด๋ฌํ ์บก์ํ๋ ๋ ๋ฆฝ์ ์ธ ํ์ ๊ฒฝ๋ก์ ๋ํด ๋ณ๋์ ์ค๋ฅ ๊ฒฝ๊ณ๋ฅผ ์ ๊ณตํจ์ผ๋ก์จ ์ฑ๋ฅ ์ ํ๋ฅผ ์ ์ง์ ์ผ๋ก ์ํํ ์ ์์ต๋๋ค. ๋ํ ํ๋ ์์ํฌ๊ฐ URL์ ํ์ธํ์ฌ ๋ฐ์ดํฐ์ ์ฝ๋๋ฅผ ๋ฏธ๋ฆฌ ๋ก๋ํ ์ ์์ผ๋ฏ๋ก SPA ์ ํ์ด ๋นจ๋ผ์ง๋๋ค.
์์คํ์ค, ๋์(concurrent) ๋ชจ๋, ์คํธ๋ฆฌ๋ฐ์ด ์ง๊ธ๊น์ง ์ดํด๋ณธ ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ ํจํด์ ์ด๋ป๊ฒ ๊ฐ์ ํ๋์ง ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์์คํ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ ์์ ๋ ํ์ ํธ๋ฆฌ๊ฐ ๋ก๋ฉ UI๋ฅผ ํ์ํ๋๋ก ํ๊ณ , ๋ฐ์ดํฐ๊ฐ ์ค๋น๋๋ฉด ๋ ๋๋ง์ ๋ค์ ์์ํ ์ ์์ต๋๋ค.
์ด๋ ๋๊ธฐ์ ํธ๋ฆฌ์์ ๋น๋๊ธฐ์ฑ์ ์ ์ธ์ ์ผ๋ก ํํํ ์ ์๋ ๊ธฐ๋ณธ ์์์ ๋๋ค. ์ด๋ฅผ ํตํด ๋ฆฌ์์ค ๊ฐ์ ธ์ค๊ธฐ์ ๋ ๋๋ง์ ๋์์ ๋ณ๋ ฌํํ ์ ์์ต๋๋ค.
์คํธ๋ฆฌ๋ฐ์์ ๋ณด์๋ฏ์ด ๋ ๋๋ง์ด ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆด ํ์ ์์ด ๋ ๋นจ๋ฆฌ ์ ์ก์ ์์ํ ์ ์์ต๋๋ค.
Remix์์๋ ์ด ํจํด์ด ๊ฒฝ๋ก ์์ค ๋ฐ์ดํฐ ๋ก๋์ defer ํจ์๋ก ํํ๋ฉ๋๋ค.
// Remix API๋ ์ค์ฒฉ๋ ๋ก๋๊ฐ ๋ณ๋ ฌ๋ก ๋ก๋๋๋ ๊ฒฝ๋ก ๊ฒฝ๊ณ์์
// ๋ฐ์ดํฐ๋ฅผ ํ์นญํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
export function loader ({ params }) {
// ๋ฐ์ดํฐ ํ์นญ์ ์์ํ์ง๋ง ๋ ๋๋ง์ ๋ง์ง๋ ์๊ธฐ ๋๋ฌธ์ ์ค์ํ์ง ์์ต๋๋ค.
const productReviewsPromise = fetchReview(params.id)
// ๋ฐ์ดํฐ๊ฐ ์๋ ํ์ด์ง๋ฅผ ํ์ํ๋๋ฐ ์ค์ํ๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ค๋ฆฝ๋๋ค.
const product = await fetchProduct(params.id)
return defer({ product, productReviewsPromise })
}
export default function ProductPage() {
const { product, productReviewsPromise } = useLoaderData()
return (
<>
<ProductView product={product}>
<Suspense fallback={<LoadingSkeleton />}>
<Async resolve={productReviewsPromise}>
{reviews => <ReviewsView reviews={reviews} />}
</Async>
</Suspense>
</>
)
}
Next์ RSC๋ ์ค์ํ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ค๋ฆด ์ ์๋ ์๋ฒ์ ๋น๋๊ธฐ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฌํ ๋ฐ์ดํฐ ํ์นญ ํจํด์ ์ ๊ณตํฉ๋๋ค.
// ์๋ฒ ์ปดํฌ๋ํธ์์ ์ ์ฌํ ํจํด์ ์์ ์
๋๋ค.
export default async function Product({ id }) {
// ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์์ํ์ง๋ง ๋ ๋๋ง์ ๋ง์ง๋ ์๊ธฐ ๋๋ฌธ์ ์ค์ํ์ง ์์ต๋๋ค.
const productReviewsPromise = fetchReview(id)
// ๊ธฐ๋ค๋ฆฌ๋ฉด์ ๋ ๋๋ง์ ๋ง๊ธฐ ๋๋ฌธ์ ์ค์ํ ๋ถ๋ถ์
๋๋ค.
const product = await fetchProduct(id)
return (
<>
<ProductView product={product}>
<Suspense fallback={<LoadingSkeleton />}>
{/* use() ํ
์ผ๋ก ๋ด๋ถ์ ํ๋ก๋ฏธ์ค๋ฅผ ์ธ๋ํํฉ๋๋ค. */}
<ReviewsView data={productReviewsPromise} />
</Suspense>
</>
)
}
์ฌ๊ธฐ์ ์ค์ํ ์์น์ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ํ์นญํ๋ ๊ฒ์ ๋๋ค. ๋ฐ์ดํฐ ์์ค์ ๊ฐ๊น์ด ๋ก๋์ RSC๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ด์์ ์ ๋๋ค.
๋ถํ์ํ ๋๊ธฐ๋ฅผ ํผํ๊ธฐ ์ํด ๋ ์ค์ํ ๋ฐ์ดํฐ๋ฅผ ์คํธ๋ฆฌ๋ฐํ์ฌ ํ์ด์ง๊ฐ ๋จ๊ณ์ ์ผ๋ก ๋ก๋๋ ์ ์๋๋ก ํ๋ฉฐ, ์ด๋ ์์คํ์ค๋ฅผ ํตํด ์ฝ๊ฒ ์ด๋ฃจ์ด์ง๋๋ค.
RSC ์์ฒด์๋ ๊ฒฝ๋ก ๊ฒฝ๊ณ์์ ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ๋ฅผ ์ด์งํ๋ ๊ณ ์ ํ API๊ฐ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ ์คํ๊ฒ ๊ตฌ์กฐํํ์ง ์์ผ๋ฉด ์์ฐจ์ ์ธ ๋คํธ์ํฌ ์ํฐํด์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ํ๋ ์์ํฌ๋ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ด์ฌํํ๋ฉด์, ๋ ๋ง์ ์ ์ฐ์ฑ์ ์ ๊ณตํจ๊ณผ ๋์์ ์ ์ฌ์ ์ธ ์ค๋ฅ๋ ๋ณด์ ์ทจ์ฝ์ ๊ฐ๋ฅ์ฑ(foot-gun)์ ์ต์ํํ๊ธฐ ์ํด ๊ท ํ์ ์ ์งํด์ผ ํฉ๋๋ค.
๋ฒ์ญ์ ์ฃผ : foot-gun์ ๋ง ๊ทธ๋๋ก ๋ฐ์ ๋ํฌ๋ฅผ ๋ง์ถ๋ฏ์ด ํ๋ก๊ทธ๋๋จธ๊ฐ ์ค์๋ก ๋ฐ์์ํฌ ์ ์๋ ์ ์ฌ์ ์ธ ์ค๋ฅ ๋ฐ ๋ณด์ ์ทจ์ฝ์ ์ ์๋ฏธํฉ๋๋ค. ์ด๋ ํ๋ ์์ํฌ๊ฐ ๊ฐ๋ฐ์์๊ฒ ์ ๊ณตํ๋ ์์ ๋ก์๊ณผ ์ ์ฐ์ฑ์ด ๋์์ง์๋ก ๋ฐ์ํ ๊ฐ๋ฅ์ฑ๋ ๋์์ง๋๋ค.
RSC๋ฅผ ๋ฐ์ดํฐ์ ๊ฐ๊น๊ฒ ๋ฐฐํฌํ๋ฉด ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ์ํฐํด์ ๋นํด ์์ฐจ์ ์ํฐํด์ ์ํฅ์ด ํฌ๊ฒ ์ค์ด๋ ๋ค๋ ์ ์ ์ฃผ๋ชฉํ ํ์๊ฐ ์์ต๋๋ค.
์ด๋ฌํ ํจํด์ ๊ฐ์กฐํ๋ ๊ฒ์ RSC๊ฐ URL์ ํน์ ์ปดํฌ๋ํธ์ ๋งคํํ ์ ์๋ ๋ผ์ฐํฐ์ ๋ ๋์ ์์ค์ ํ๋ ์์ํฌ ํตํฉํด์ผ ํ๋ค๋ ์ ์ ๊ฐ์กฐํฉ๋๋ค.
RSC์ ๋ํด ์์ธํ ์์๋ณด๊ธฐ ์ ์ ์ ์ ์๊ฐ์ ๋ด์ด ๋๋จธ์ง ๋ถ๋ถ์ ์ดํดํด ๋ณด๊ฒ ์ต๋๋ค.
ํด๋ผ์ด์ธํธ ์ ์ฉ ํจ๋ฌ๋ค์์์ ์๊ฒฉ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ์ผ๋ฐ์ ์ธ ํจํด์ ์ผ์ข ์ ํ์คํ๋ ์ ์ฅ์(์: Redux store) ๋ด๋ถ์์ ์ด๋ฃจ์ด์ง๋๋ค.
์ด ๋ชจ๋ธ์์ ๋ณํ(mutation)์ ์ข ์ข ๋ฉ๋ชจ๋ฆฌ์์ ํด๋ผ์ด์ธํธ ์บ์๋ฅผ ์ต์ ์ผ๋ก ์ ๋ฐ์ดํธํ ๋ค์ ๋คํธ์ํฌ ์์ฒญ์ ๋ณด๋ด ์๋ฒ์ ์๊ฒฉ ์ํ๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
์ด๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํ๋ ค๋ฉด ์ง๊ธ๊น์ง ๋ง์ ๋ณด์ผ๋ฌ ํ๋ ์ดํธ๊ฐ ํ์ํ๊ณ , The new wave of React state management์์ ์ดํด๋ณด์๋ ๋ชจ๋ ์์ธ ์ผ์ด์ค์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฌ์ ์ต๋๋ค.
Hook์ ๋ฑ์ฅ์ผ๋ก ์ด๋ฌํ ๋ชจ๋ ์์ธ ์ผ์ด์ค์ ํนํ๋ Redux RTK ๋ฐ React Query์ ๊ฐ์ ๋๊ตฌ๊ฐ ๋ฑ์ฅํ์ต๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด์๋ ์ฝ๋๋ฅผ ์ธ๋ถ๋ก ์ ์กํ๊ณ , ๋ฆฌ์กํธ ์ปจํ ์คํธ๋ฅผ ํตํด ๊ฐ์ด ์ ํ๋์ด์ผ ํจ์ ์๋ฏธํฉ๋๋ค. ์ด๋ฌํ ๋ฐฉ์์ ํธ๋ฆฌ๋ฅผ ํ์ํ๋ ๋์ ๋นํจ์จ์ ์ธ ์์ฐจ์ ์ ์ถ๋ ฅ ์์ ์ด ์ฝ๊ฒ ๋ฐ์ํ ์ ์์ด์ ์ฃผ์๊ฐ ํ์ํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ฆฌ์กํธ์ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ์ด ์๋ฒ๊น์ง ํ์ฅ๋๋ฉด ์ด ๊ธฐ์กด ํจํด์ ์ด๋ป๊ฒ ๋ฐ๋๊น์?
์ด โํ๋ฐํธ์๋ ํ๋ฉดโ ์คํ์ผ ์ฝ๋์ ์๋น ๋ถ๋ถ์ด ์ค์ ๋ฐฑ์๋๋ก ์ด๋ํฉ๋๋ค.
์๋๋ Remix์ ๋ฐ์ดํฐ ํ๋ฆ์์ ๊ฐ์ ธ์จ ์ด๋ฏธ์ง๋ก, ํ๋ ์์ํฌ๊ฐ MPA(๋ค์ค ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ ) ์ํคํ ์ฒ์์ ๋ณผ ์ ์๋ ์์ฒญ-์๋ต ๋ชจ๋ธ์ ํฅํด ๋ณํํ๊ณ ์์์ ๋ณด์ฌ์ค๋๋ค.
์ด๋ฌํ ๋ณํ๋ ๋ชจ๋ ๊ฒ์ ํด๋ผ์ด์ธํธ์์ ์ฒ๋ฆฌํ๋ ๋ชจ๋ธ์์ ๋ฒ์ด๋ ์๋ฒ๊ฐ ๋ ์ค์ํ ์ญํ ์ ํ๋ ๋ชจ๋ธ๋ก ์ ํํ๋ ๊ฒ์ ๋๋ค.
์ด ์ ํ์ ๋ํด ๋ ์์ธํ ์์๋ณด๋ ค๋ฉด ์น์ ๋ค์ ์ ํ์ ์ฐธ์กฐํ์ธ์.
์ด ํจํด์ ์คํ์ ์ธ โ์๋ฒ ์ก์ ํจ์โ๋ฅผ ํตํด RSC์๋ ํ์ฅ๋ฉ๋๋ค. ๋ฆฌ์กํธ์ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ์ด ์๋ฒ๋ก ํ์ฅ๋๋ ๊ฒฝ์ฐ, ์์ฒญ-์๋ต ๋ชจ๋ธ์ด ์ ์ง์ ์ผ๋ก ํฅ์๋ ํํ๋ก ๋จ์ํ๋ฉ๋๋ค.
ํด๋ผ์ด์ธํธ์์ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ ์ ์๋ค๋ ๊ฒ๋ ์ด ์ ๊ทผ ๋ฐฉ์์ ์ข์ ์ฅ์ ์ ๋๋ค. ํ์ง๋ง ๊ฐ์ฅ ํฐ ์ฅ์ ์ ๋ฐ์ดํฐ ๊ด๋ฆฌ ๋ฉํ ๋ชจ๋ธ์ ๋จ์ํํ์ฌ ๊ธฐ์กด์ ๋ง์ ํด๋ผ์ด์ธํธ ์ฝ๋๋ฅผ ๊ฐ์ํํ ์ ์๋ค๋ ์ ์ ๋๋ค.
์ง๊ธ๊น์ง ์ฐ๋ฆฌ๋ ์์ ํ ํด๋ผ์ด์ธํธ ์ธก ์ ๊ทผ ๋ฐฉ์์ ์ต์ ํํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก ์๋ฒ๋ฅผ ํ์ฉํ์ต๋๋ค. ์ค๋๋ ๋ฆฌ์กํธ์ ๋ฉํ ๋ชจ๋ธ์ ์ฌ์ฉ์ ์ปดํจํฐ์์ ์คํ๋๋ ํด๋ผ์ด์ธํธ ๋ ๋๋ง ํธ๋ฆฌ์ ๊น์ด ๋ฟ๋ฆฌ๋ฅผ ๋๊ณ ์์ต๋๋ค.
RSC(React Server Components)๋ ์๋ฒ๋ฅผ ๋จ์ํ ์ต์ ํ ๋ฐฉ๋ฒ์ด ์๋๋ผ ์ผ๊ธ ์๋ฏผ(first-class citizen)์ผ๋ก ์๊ฐํฉ๋๋ค. ๋ฆฌ์กํธ๋ ๊ฐ๋ ฅํ ์ธ๋ถ ๋ ์ด์ด๋ฅผ ๊ฐ์ถ์ด ๋ฐฑ์๋๊ฐ ์ปดํฌ๋ํธ ํธ๋ฆฌ์ ๋ด์ฅ๋ ์ ์๋๋ก ์งํํฉ๋๋ค.
์ด๋ฌํ ์ํคํ ์ฒ์ ๋ณํ๋ ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฌด์์ด๋ฉฐ ์ด๋ป๊ฒ ๋ฐฐํฌ๋๋์ง์ ๋ํ ๊ธฐ์กด์ ๋ฉํ ๋ชจ๋ธ์ ๋ง์ ๋ณํ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
๊ฐ์ฅ ๋๋ ทํ ๋ ๊ฐ์ง ํจ๊ณผ๋ ์ฐ๋ฆฌ๊ฐ ์ง๊ธ๊น์ง ์ธ๊ธํด ์จ ์ต์ ํ๋ ๋ฐ์ดํฐ ๋ก๋ฉ ํจํด์ ์ ๊ณต๊ณผ ์๋ ์ฝ๋ ๋ถํ ์ ๋๋ค.
๋๊ท๋ชจ ํ๋ก ํธ์๋ ๊ตฌ์ถ ๋ฐ ์ ๊ณต์ ํ๋ฐ๋ถ์์๋ ์ข ์์ฑ ๊ด๋ฆฌ, ๊ตญ์ ํ, ์ต์ ํ๋ A/B ํ ์คํธ์ ๊ฐ์ ๋๊ท๋ชจ์์ ๋ฐ์ํ๋ ์ฃผ์ ๋ฌธ์ ์ ๋ํด ๋ค๋ฃจ์์ต๋๋ค.
ํด๋ผ์ด์ธํธ ์ธก ํ๊ฒฝ์ผ๋ก ํ์ ๋ ๊ฒฝ์ฐ ์ด๋ฌํ ๋ฌธ์ ๋ค์ ๋๊ท๋ชจ ํ๊ฒฝ์์ ์ต์ ํํ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ๋ฆฌ์กํธ 18์ ๋ง์ ๊ธฐ๋ฅ๊ณผ ํจ๊ป RSC(React Server Components)๋ ํ๋ ์์ํฌ๊ฐ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉํ ์ ์๋ ์ผ๋ จ์ ๊ธฐ๋ณธ ์์๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋ฉํ ๋ชจ๋ธ์ ํ ๊ฐ์ง ํ๊ธฐ์ ์ธ ๋ณํ๋ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๊ฐ ์๋ฒ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ ์ ์๋ค๋ ์ฌ์ค์ ๋๋ค.
RSCs(React Server Components)๋ฅผ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ ํธ๋ฆฌ ์ ์ฒด์ ๊ฑธ์ณ ์ฐ๊ฒฐ๋์ด ์๋ ๋ชจ์ต์ ์๊ฐํํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค. ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๊ฐ ํด๋ผ์ด์ธํธ ์ธก ์ํธ์์ฉ์ ์ ๊ณตํ๊ธฐ ์ํด ์ฝ์ ๋๋ โ๊ตฌ๋ฉ(holes)โ์ด ์์ต๋๋ค.
์ปดํฌ๋ํธ ํธ๋ฆฌ ์๋๋ก ์๋ฒ๋ฅผ ํ์ฅํ๋ฉด ๋ถํ์ํ ์ฝ๋ ์ ์ก์ ํผํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ ฅํฉ๋๋ค. ๋ํ ์ฌ์ฉ์ ํ๋์จ์ด์ ๋ฌ๋ฆฌ ์๋ฒ ๋ฆฌ์์ค๋ฅผ ํจ์ฌ ๋ ๋ง์ด ์ ์ดํ ์ ์์ต๋๋ค.
ํธ๋ฆฌ์ ๋ฟ๋ฆฌ๋ ์๋ฒ์ ์ฌ๊ฒจ ์๊ณ , ์ค๊ธฐ๋ ๋คํธ์ํฌ๋ฅผ ๊ฐ๋ก์ง๋ฌ ํ์ฅ๋๋ฉฐ, ์์ ์ฌ์ฉ์ ํ๋์จ์ด์์ ์คํ๋๋ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ก ํธ์๋ฉ๋๋ค.
์ด ํ์ฅ๋ ๋ชจ๋ธ์์๋ ์ปดํฌ๋ํธ ํธ๋ฆฌ์ ์ง๋ ฌํ ๊ฒฝ๊ณ๋ฅผ ์ธ์ํด์ผ ํ๋ฉฐ, ์ด๋ โuse clientโ ์ง์๋ฌธ์ผ๋ก ํ์๋ฉ๋๋ค.
๋ํ RSC๊ฐ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์ ์์์ด๋ ์ฌ๋กฏ์ ํต๊ณผํ์ฌ ํ์ํ ๋งํผ ํธ๋ฆฌ ๊น์ํ ๊ณณ๊น์ง ๋ ๋๋งํ ์ ์๋๋ก ์ปดํฌ์ง์ ์ ์ตํ๋ ๊ฒ์ด ์ค์ํ๋ค๋ ์ ์ ๋ค์ ํ๋ฒ ๊ฐ์กฐํฉ๋๋ค.
ํ๋ฐํธ์๋ ์์ญ์ ์๋ฒ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ฉด์ ๋ง์ ํ์ ์ ์ธ ์์ด๋์ด๊ฐ ๋ชจ์๋๊ณ ์์ต๋๋ค. ์ด๋ฌํ ์์ด๋์ด๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ์ํํ ํตํฉ์ ๋ฏธ๋๋ฅผ ์ฟ๋ณผ ์ ์์ต๋๋ค.
ํด๋ผ์ด์ธํธ ์ธก ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ GraphQL์ด๋ ๋ฐํ์์ ๋นํจ์จ์ ์ธ ์ํฐํด์ ๋ํ ๊ฑฑ์ ์์ด ์ปดํฌ๋ํธ์์ ์ฝ๋ก์ผ์ด์ ์ ์ด์ ์ ์ป์ ์ ์๋ค๋ฉด ์ด๋จ๊น์?
์๋ฒ ํจ์์ ์๋ ๋ฆฌ์กํธ ๊ณ์ด์ ๋ฉํํ๋ ์์ํฌ์ธ Qwik city์์ ๋ณผ ์ ์์ต๋๋ค. ๋น์ทํ ์์ด๋์ด๊ฐ ๋ฆฌ์กํธ(Next) ๋ฐ Remix์์ ํ๊ตฌ๋๊ณ ๋ ผ์๋๊ณ ์์ต๋๋ค.
Wakuwork ๋ ํผ์งํ ๋ฆฌ๋ ๋ฐ์ดํฐ ๋ณํ์ ์ํ ๋ฆฌ์กํธ ์๋ฒ โ์ก์ ํจ์โ๋ฅผ ๊ตฌํํ๊ธฐ ์ํ PoC(๊ฐ๋ ์ฆ๋ช )๋ ์ ๊ณตํฉ๋๋ค.
๋ชจ๋ ์คํ์ ์ ๊ทผ ๋ฐฉ์๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ณ ๋ คํด์ผ ํ ์ฅ๋จ์ ์ด ์์ต๋๋ค. ํด๋ผ์ด์ธํธ-์๋ฒ ํต์ ๊ณผ ๊ด๋ จํด์๋ ๋ณด์, ์ค๋ฅ ์ฒ๋ฆฌ, ์ต์ ์ ๋ฐ์ดํธ, ์ฌ์๋ ๋ฐ ๊ฒฝ์ ์กฐ๊ฑด์ ๋ํ ์ฐ๋ ค๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ ํ๋ ์์ํฌ์์ ๊ด๋ฆฌํ์ง ์์ผ๋ฉด ํด๊ฒฐ๋์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค๋ ๊ฒ์ ์๊ฒ ๋์์ต๋๋ค.
๋ํ ์ด ํ๊ตฌ์์๋ ์ต๊ณ ์ DX์ ๊ฒฐํฉ๋ ์ต๊ณ ์ UX๋ฅผ ๊ตฌํํ๋ ค๋ฉด ๋ด๋ถ์ ์ผ๋ก ๋ณต์ก์ฑ์ ์ฆ๊ฐ์ํค๋ ๊ณ ๋ํ๋ ์ปดํ์ผ๋ฌ ์ต์ ํ๊ฐ ์๋ฐ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค๋ ์ฌ์ค์ ๊ฐ์กฐํฉ๋๋ค.
โ์ํํธ์จ์ด๋ ์ฌ๋๋ค์ด ๋ฌด์ธ๊ฐ๋ฅผ ์ฑ์ทจํ ์ ์๋๋ก ๋์์ฃผ๋ ๋๊ตฌ์ผ ๋ฟ์ ๋๋ค. ํ์ง๋ง ๋ง์ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ด๋ฅผ ์ดํดํ์ง ๋ชปํฉ๋๋ค. ์ ๋ฌ๋๋ ๊ฐ์น์ ์ง์คํ๊ณ ๋๊ตฌ์ ์ธ๋ถ ์ฌํญ์ ์ง๋์น๊ฒ ์ง์คํ์ง ๋ง์ธ์ - John Carmackโ
๋ฆฌ์กํธ ์ํ๊ณ๊ฐ ํด๋ผ์ด์ธํธ ์ ์ฉ ํจ๋ฌ๋ค์์ ๋์ด ์งํํจ์ ๋ฐ๋ผ, ์ฐ๋ฆฌ ์๋์ ์์ ๋์ธ ์ถ์ํ๋ฅผ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์ฐ๋ฆฌ๊ฐ ์์ ํ๋ ๊ทผ๋ณธ์ ์ธ ์ ์ฝ ์กฐ๊ฑด์ ๋ช ํํ๊ฒ ์ดํดํ๋ฉด ๋ ๋์ ์ ๋ณด์ ๊ธฐ๋ฐํ ์ ์ถฉ์์ ๋ง๋ค ์ ์์ต๋๋ค.
์ง์๊ฐ ํ๋ค๋ฆด ๋๋ง๋ค ์ฐ๋ฆฌ๋ ๋ค์ ๋ผ์ด๋์ ๋ฐ๋ณต์ ํ์ฉํ ์ ์๋ ์๋ก์ด ์ง์๊ณผ ๊ฒฝํ์ ์ป์ต๋๋ค. ์ด์ ์ ๊ทผ ๋ฐฉ์์ ์ฅ์ ์ ์ฌ์ ํ ์ ํจํฉ๋๋ค. ์ธ์ ๋ ๊ทธ๋ ๋ฏ์ด ์ฅ๋จ์ ์ด ์์ต๋๋ค.
๋คํ์ค๋ฌ์ด ์ ์ ํ๋ ์์ํฌ๊ฐ ์ ์ ๋ ๋ง์ ์๋จ์ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ์๊ฐ ํน์ ์ํฉ์ ๋ง๊ฒ ์ธ๋ฐํ๊ฒ ์ ์ถฉ์ ์ ์ฐพ์ ์ ์๋๋ก ์ง์ํ๊ณ ์๋ค๋ ์ ์ ๋๋ค. ์ด ์ ์ถฉ์ ์ ์ต์ ํ๋ ์ฌ์ฉ์ ๊ฒฝํ๊ณผ ์ต์ ํ๋ ๊ฐ๋ฐ์ ๊ฒฝํ์ด ๊ฒฐํฉ๋๋ ์ง์ ์ด๋ฉฐ, SPA์ ๋ณต์กํ ๋ชจ๋ธ๊ณผ MPA์ ๋จ์ํ ๋ชจ๋ธ์ด ํ์ด๋ธ๋ฆฌ๋๋ก ๊ฒฐํฉ๋๋ ์ง์ ์ ๋๋ค.
๐ ํ๊ตญ์ด๋ก ๋ ํ๋ฐํธ์๋ ์ํฐํด์ ๋น ๋ฅด๊ฒ ๋ฐ์๋ณด๊ณ ์ถ๋ค๋ฉด Korean FE Article(https://kofearticle.substack.com/)์ ๊ตฌ๋ ํด์ฃผ์ธ์!