๐ Front-end
๐ Webpack์ด๋ ๋ฌด์์ธ๊ฐ?โ
์น ์ฌ์ดํธ๋ฅผ ๊ตฌ์ฑํ ๋ js, css, images ํ์ผ๋ฑ ์ ๋ง์ ํ์ผ๋ค์ด ๋ชจ์ฌ ์น์ฌ์ดํธ๋ฅผ ๊ตฌ์ฑํ๊ฒ ๋ฉ๋๋ค.
๋ฐ๋ผ์ ์น ์ฌ์ดํธ์ ์ ์ํ์ ๋ ๊ต์ฅํ ๋ง์ ํ์ผ์ด ๋ค์ด๋ก๋๋ ์ ์๋๋ฐ ์ด๊ฒ์ ๋น๋กํ์ฌ ์๋ฒ์ ์์์ ์๋ชจํ๊ณ ์น์ฌ์ดํธ๊ฐ ๋๋ฆฌ๊ฒ ๋ก๋ฉ๋ฉ๋๋ค.
๋ํ, ๋ง์ ์๋ฐ์คํฌ๋ฆฝํธ ํจํค์ง๋ฑ์ ์ฌ์ฉํ๋ค๋ณด๋ฉด ๊ฐ๊ฐ์ ์๋ก์ ๋ค๋ฅธ ํจํค์ง๋ค์ด ์๋ก ๊ฐ์ ์ด๋ฆ์ด๋ ํจ์๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด์ ์ ํ๋ฆฌ์ผ์ด์
์ด ๊นจ์ง๊ฒ ๋๋๋ฐ ์ด๋ฌํ ํ์์ ํด๊ฒฐํ๊ธฐ ์ํด ๋์จ ๊ฐ๋
์ด ๋ฌถ๋๋ค๋ ๊ฐ๋
์ ๋ฒ๋ค๋ฌ๊ฐ ๋ฑ์ฅํ๊ฒ ๋์์ต๋๋ค.
webpack, broserify, parcel๋ฑ๊ณผ ๊ฐ์ ๋๊ตฌ๋ค์ด ๋ฒ๋ค๋ฌ์ ์ํฉ๋๋ค.
์นํฉ์ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ ํ๋ฆฌ์ผ์ด์
์ ์ํ ์ ์ ๋ชจ๋๋ฌ์
๋๋ค.
๋ชจ๋ ๋ฒ๋ค๋ฌ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ฑํ๋ ์์(HTML, CSS, JavaScript, images ๋ฑ)์ ๋ชจ๋ ๊ฐ๊ฐ์ ๋ชจ๋๋ก ๋ณด๊ณ ์ด๋ฅผ ์กฐํฉํด์ ๋ณํฉ๋ ํ๋์ ๊ฒฐ๊ณผ๋ฌผ์ ๋ง๋๋ ๋๊ตฌ๋ฅผ ์๋ฏธํฉ๋๋ค. ๊ฐ๋จํ๊ฒ ํํํ์๋ฉด ์นํฉ์ด๋ ์ฌ๋ฌ ํ์ผ์ ํ๋ ์ด์์ ํ์ผ๋ก ํฉ์ณ์ฃผ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค๋ฌ์
๋๋ค.
์ด๋ฌํ ์นํฉ์ ์ ๋ฑ์ฅํ๊ฒ ๋์์๊น์?
์์์ ์ธ๊ธํ์๋ฏ ์ ๋ง์ ํ์ผ์ด ๋ชจ์ฌ ํ๋์ ์น ์ฌ์ดํธ๋ฅผ ๊ตฌ์ฑํ๊ฒ ๋ฉ๋๋ค. ์ธํฐ๋ท์ ๋ฐ์ ์ผ๋ก ์น ์ดํ๋ฆฌ์ผ์ด์
์ ๋ณต์ก๋๊ฐ ์ฆ๊ฐํ๋ฉด์ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ฝ๋์ ์์ด ๋ฐฉ๋ํด์ง๊ณ ์ด๋ฌํ ์ฝ๋๋ฅผ ์ฝ๊ฒ ์ ์ง๋ณด์ํ๊ธฐ ์ํด ๋ชจ๋๋ก์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ด ํ์ํ๊ฒ ๋์์ต๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์๋ ES2015(ES6) ์ด์ ์๋ ๋ชจ๋๋ก์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ผ๋ก AMD, CommonJS๋ฑ์ด ์กด์ฌํ์์ผ๋ ํ๋์ ํ์ค์ด ์๋ ์ฌ์ฉํ๋ ์ฌ๋์ ๋ฐ๋ผ ์ํ๋ ๊ฒ์ ์ ํํ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํด์์ต๋๋ค.
๊ทธ ํ, ES6 ์ดํ๋ถํฐ ์๋ฐ์คํฌ๋ฆฝํธ์์ ํ์ค ๋ชจ๋ ์์คํ
์ ์ ์ํ์๊ณ ์ด๊ฒ์ด export/import
๋ฐฉ์์
๋๋ค.
๊ทธ๋ฌ๋, ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ES6 ๋ฐฉ์์ ๋ชจ๋ ์์คํ ์ ์ง์ํ์ง๋ ์์์ต๋๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐ์๋ค์ ๋ธ๋ผ์ฐ์ ์ ๋ฒ์ ์ ์๊ด์์ด ํธ๋ฆฌํ ๋ชจ๋ ์์คํ ์ ์ฌ์ฉํ๊ธฐ๋ฅผ ์ํ๊ณ , ์ด๋ฌํ ๋ฐฐ๊ฒฝ์ ์ํด ๋ฑ์ฅํ๊ฒ๋ ํด์ด ์นํฉ์ ๋๋ค.
์กฐ๊ธ ๋ ์ธ๋ถํํ์๋ฉด ์นํฉ์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ์ ์๋์ ๊ฐ์ด ์ ๋ฆฌํ ์ ์์ต๋๋ค.
- ํ์ผ ๋จ์์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๊ด๋ฆฌ์ ํ์์ฑ
- ์น ๊ฐ๋ฐ ์์ ์๋ํ ๋๊ตฌ(Web Task Manager)
- ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น ๋ฅธ ๋ก๋ฉ ์๋์ ๋์ ์ฑ๋ฅ
์นํฉ์์ ์ง์นญํ๋ ๋ชจ๋์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๋ฟ๋ง์ด ์๋ HTML, CSS, JavaScript, Images, Font๋ฑ ๋ชจ๋ ํ์ผ ํ๋ํ๋ ๋ชจ๋์ด๋ผ ์ง์นญํ๋ฉฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ๋ ๋ชจ๋ ์์์ ๋ชจ๋์ด๋ผ ๋ณด๋ฉด ๋ฉ๋๋ค. ๋ณดํต ๋ชจ๋ ๋ฒ๋ค๋ง์์๋ ๋น๋, ๋ฒ๋ค๋ง, ๋ณํ ์ด ์ธ ๋จ์ด๋ ๋ชจ๋ ๊ฐ์ ์๋ฏธ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
์นํฉ์ผ๋ก ํด๊ฒฐํ๋ ค๋ ๋ฌธ์
- ์๋ฐ์คํฌ๋ฆฝํธ ๋ณ์ ์ ํจ ๋ฒ์ ๋ฌธ์
- ES6์ ๋ชจ๋ ๋ฌธ๋ฒ๊ณผ ๋ฒ๋ค๋ง์ผ๋ก ํด๊ฒฐ
- ๋ธ๋ผ์ฐ์ ๋ณ HTTP ์์ฒญ ์ซ์์ ์ ์ฝ
- ์นํฉ์ ์ฌ๋ฌ ํ์ผ์ ํ๋ ์ด์์ ํ์ผ๋ก ํฉ์ณ ๋งจ ์ฒ์ ์ธ๊ธํ์๋ ์๋ฒ๋ก๋ถํฐ ํ์ผ์ ๋ค์ด๋ก๋ ๋ฐ๋ ํ์๊ฐ ์ค์ด๋ค๊ฒ ๋๊ณ ์ด ํจ๊ณผ๋ก ์ธํด ๋ธ๋ผ์ฐ์ ๋ณ HTTP ์์ฒญ ์ซ์ ์ ์ฝ์ ํผํ ์ ์์ต๋๋ค.
- ์ฌ์ฉํ์ง ์๋ ์ฝ๋์ ๊ด๋ฆฌ
- Dynamic Loading ๋ฐ Lazy Loading ๋ฏธ์ง์ ๋ฌธ์
- ์ด์ ์ Require.js์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ด์ ๋์ ์ผ๋ก ์ํ๋ ์๊ฐ์ ๋ชจ๋์ ๋ก๋ฉํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ์ต๋๋ค. ์นํฉ์์๋ Code Splitting ๊ธฐ๋ฅ์ ์ด์ฉํ์ฌ ์ํ๋ ๋ชจ๋์ ์ํ๋ ํ์ด๋ฐ์ ๋ก๋ฉํ ์ ์์ต๋๋ค.
๐ Babel vs Terser vs SWCโ
๋ฐ๋ฒจ (Babel)โ
๋ฐ๋ฒจ์ ์๋ฐ์คํฌ๋ฆฝํธ ๋น๋ ํด ์ค ํธ๋์คํ์ผ๋ฌ(Transpiler) ๋ผ๋ ์์ญ์ ์ํฉ๋๋ค.
๋ฐ๋ฒจ์ด ํธ๋์คํ์ผ๋ฌ์ธ ์ด์ ๋, ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ผ๋ก ์์ฑ๋ ์ฝ๋๋ฅผ ๊ตฌ๋ฒ์ ๋ธ๋ผ์ฐ์ ๋ ์ดํดํ ์ ์๋ ์์ค์ ์ค๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ก ๋ณํํด ์ฃผ๋ ์ํํธ์จ์ด์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฆ, ๋ฐ๋ฒจ์ ํธ๋์คํ์ผ๋ฌ๋ก์จ ์ ์ฌํ ๋ ์ธ์ด ์ฌ์ด์์์ ๋ณํ ๊ธฐ๋ฅ์ ์ ๊ณตํด์ค๋๋ค.
Terserโ
Terser๋ผ๋ ๋น๋ ํด์ ๋ํด ์ฒ์ ๋ค์ด๋ณด๋ ๋ถ์ด ์์ผ์ค ๊ฑฐ๋ก ์๊ฐํฉ๋๋ค. ์ฌ์ค, ์ฐ๋ฆฌ๊ฐ Terser๋ผ๋ ํด์ ์ง์ ๋ค๋ฃฐ ์ผ์ ๋ง์ง ์์ต๋๋ค. ๋๋ถ๋ถ์ ํ๋ ์์ํฌ์์๋ ์ด๋ฏธ Terser์ ๋ํ ์ธํ ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ๋์ด์์ผ๋ฉฐ, ๋์ฑ์ด Webpack์ ๊ฒฝ์ฐ v4 ์ดํ ๋ฒ์ ๋ถํฐ ๋ณ๋์ ์ค์ ์์ด๋ ํ๋ก๋์ ๋ชจ๋์์ ์๋์ผ๋ก Terser ํด์ ์ฌ์ฉํ๋๋ก ์ธํ ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
Terser ๊ณต์ ์น์ฌ์ดํธ์์๋ Terser๋ผ๋ ํด์ ๋ค์๊ณผ ๊ฐ์ด ์๊ฐํ๊ณ ์์ต๋๋ค.
ES6+๋ฅผ ์ํ ์๋ฐ์คํฌ๋ฆฝํธ parser, mangler ๊ทธ๋ฆฌ๊ณ compressor
Terser๊ฐ mangler๋ก์จ ํ๋ ์ญํ ์ ์ฐ๋ฆฌ๊ฐ ์ฝ๋์์ ์ฌ์ฉํ ๋ณ์ / ํจ์ / ์์ฑ๋ค์ ์ด๋ฆ์ ๋งค์ฐ ๋จ์ํ๋ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํด์ฃผ๋ ๊ฒ์
๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ด๋ค ์ธ์ด๋ก ํ๋ก๊ทธ๋๋ฐ์ ํ๋์ง์ ๋ฌด๊ดํ๊ฒ, ๋ณ์๋ ํจ์์ ์ด๋ฆ์ ์ ํ ๋์๋ ํญ์ ์๋ฏธ ์๋ ๋ค์ด๋ฐ์ ์ฌ์ฉํ๋ผ๋ ๊ฒฉ์ธ์ด ์ธ์ ๋ ๋ฑ์ฅํฉ๋๋ค. ์ข์ ๋ค์ด๋ฐ์ ๊ทธ ๋ณ์๋ ํจ์๊ฐ ์ด๋ค ์ญํ ์ ํ๋์ง ์ฝ๋ ์ ์ฒด๋ฅผ ๋ณด์ง ์๋๋ผ๋ ๋๋ต์ ์ผ๋ก ์ดํดํ ์ ์๊ฒ ํด์ฃผ๊ธฐ ๋๋ฌธ์, ์ฝ๋์ ๊ฐ๋
์ฑ์ ๋งค์ฐ ํฅ์์ํฌ ์ ์์ต๋๋ค.
ํ์ง๋ง, ์ปดํจํฐ ์
์ฅ์์ ์ด ๋ค์ด๋ฐ์ ์ ํ ์ค์ํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ํน์ ๋ฉ๋ด๊ฐ ๋ณด์ฌ์ ธ์ผ ํ๋์ง์ ์ฌ๋ถ๋ฅผ ๊ด๋ฆฌํ๋ Boolean ํ์
๋ณ์์ ์ด๋ฆ์ isMenuVisible
์ด๋ผ๊ณ ์ง๋ ์ง ์๋๋ฉด ๋จ์ํ b๋ผ๊ณ ์ง๋ ์ง ์ ์๊ด ์์ด, ์ปดํจํฐ๋ ๊ทธ์ ํ๋์ ๋๊ฐ์ ๋ถ๋ฆฌ์ธ ๋ณ์๋ก ์ทจ๊ธํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ฝ๋์ ๊ฐ๋
์ฑ์ ์ํด ๋ถ์ฌ์ค ์ด๋ฆ๋ค์ ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฝ๋์ ๊ธธ์ด๋ฅผ ๊ธธ๊ฒ ๋ง๋ค๊ธฐ ๋๋ฌธ์, ์์ค ํ์ผ์ ํฌ๊ธฐ๊ฐ ์ปค์ง ์๋ฐ์ ์์ต๋๋ค.
mangler๋ ์ฐ๋ฆฌ์ ์์ค์ฝ๋์ ์กด์ฌํ๋ ๋ค์ด๋ฐ๋ค์ ์๋ฏธ ์๋ ๋ฌธ์๋ก ๋ฐ๊ฟ๋ฒ๋ฆฝ๋๋ค. isMenuVisible
์ด๋ผ๋ ๋ณ์๋ช
์ ๋จ์ํ a
๋ก ๋ฐ๊ฟ๋ฒ๋ฆฌ๋ฉด, 13๊ธ์๋ฅผ ํ ๊ธ์๋ก ์ค์ผ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ต์ ํ ๊ณผ์ ์ ํตํด ์ค์ ํ๋ก๋์
ํ๊ฒฝ์์ ์ฌ์ฉ๋ ์ฐ๋ฆฌ์ ์ฝ๋ ์ฌ์ด์ฆ๋ฅผ ํ๊ธฐ์ ์ผ๋ก ์ค์ผ ์ ์์ต๋๋ค. ๋ฌผ๋ก ์ฐ๋ฆฌ์ ์ฝ๋๋ ์๋ง์ด ๋๊ฒ ์ง๋ง ๋ง์ด์ฃ (mangled).
Terser๊ฐ compressor๋ก์จ ํ๋ ์ญํ ์ ์ฐ๋ฆฌ์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ๋ถ์ํ ํ, ๋ ์งง์ ์ฝ๋๋ฅผ ํตํด ๋์ผํ ๊ธฐ๋ฅ์ ๊ตฌํํ ๋ฐฉ๋ฒ์ด ์๋์ง ํ์ธํ๊ณ ๊ทธ ๋ฐฉํฅ์ผ๋ก ์ฝ๋๋ฅผ ๋ณํํด ์ฃผ๋ ๊ฒ์ ๋๋ค.
mangle ํ๋ ๊ณผ์ ์ด๋ compress ํ๋ ๊ณผ์ ๊ณผ ๊ฐ์ด, ์ฐ๋ฆฌ๊ฐ ์์ฑํ ์ฝ๋๋ฅผ ๋์ผํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๊ฒฝ๋ํ๋ ์ฝ๋๋ก ๋ณํํด ์ฃผ๋ ์ผ๋ จ์ ์์ ์ minify ํน์ minification(์ฝ๋ ๊ฒฝ๋ํ) ์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฝ๋ ๊ฒฝ๋ํ ์์ ์ ํด์ฃผ๋ ํด์ ์ฐ๋ฆฌ๋ minifier๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ๋ฐ๋ผ์, Terser๋ ์ฐ๋ฆฌ๊ฐ ์์ฑํ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ํ๋ก๋์ ์์ ๋์ฑ ๊ฒฝ๋ํ๋ ์ํ๋ก ์ ๊ณต๋ ์ ์๋๋ก ๋์์ฃผ๋ minifier ๋น๋ ํด์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
SWC(Speedy Web Compiler)โ
SWC๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก์ ํธ์ ์ปดํ์ผ๊ณผ ๋ฒ๋ค๋ง ๋ชจ๋์ ์ฌ์ฉ๋ ์ ์๋, Rust๋ผ๋ ์ธ์ด๋ก ์ ์๋ ๋น๋ ํด์ ๋๋ค. SWC๋ Speedy Web Compiler์ ์ฝ์๋ก, ๋ง ๊ทธ๋๋ก ๋งค์ฐ ๋น ๋ฅธ ์น ์ปดํ์ผ๋ฌ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ํด์ ๋๋ค.
Next.js์์๋ SWC๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐํ ์ปดํ์ผ๋ฌ๋ฅผ ํตํด ๊ธฐ์กด ๋น๋์ ํ์ฉํ๋ ๋ฐ๋ฒจ๊ณผ Terser๋ฅผ ๋์ฒดํฉ๋๋ค. ์ฆ, Next.js์ ๋น๋ ๊ณผ์ ์ค ํธ๋์คํ์ผ๋ง์ ์ํํ๋ ๋ฐ๋ฒจ๊ณผ, ์ฝ๋ ๊ฒฝ๋ํ๋ฅผ ์ํํ๋ Terser๊ฐ SWC๋ก ๋์ฒด๋๋ค๋ ๋ป์ ๋๋ค. SWC๋ก ๊ต์ฒดํจ์ผ๋ก์จ ํธ๋์คํ์ผ๋ง์ ๋ฌด๋ ค 17๋ฐฐ๋ ๋นจ๋ผ์ก๋ค๊ณ ํ๋ฉฐ, ์ฝ๋ ๊ฒฝ๋ํ ์์ ์ 7๋ฐฐ๊ฐ ๋นจ๋ผ์ก๋ค๊ณ ํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด, SWC๋ผ๋ ํด์ด ๋ฐ๋ฒจ์ด๋ Terser๋ณด๋ค ์๋ฑํ๊ฒ ๋น ๋ฅธ ์ด์ ๊ฐ ๋์ฒด ๋ญ๊น์? ๊ฐ์ฅ ํฐ ์ด์ ๋ ๋ฐ๋ก Rust๋ผ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ์ด๋ฒคํธ ๋ฃจํ ๊ธฐ๋ฐ์ ์ฑ๊ธ ์ค๋ ๋ ์ธ์ด์ธ ์๋ฐ์คํฌ๋ฆฝํธ์๋ ๋ค๋ฅด๊ฒ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ๊ณ ๋ คํด์ ์ค๊ณ๋ ์ธ์ด๋ผ๋ ์ ์ ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ํ ๊ฐ์ ์ค๋ ๋๋ง์ ์ฌ์ฉํ๋ ์ฑ๊ธ ์ค๋ ๋ ์ธ์ด์ด๊ธฐ ๋๋ฌธ์, ์ด๋ฌํ ์๋ฐ์คํฌ๋ฆฝํธ ์ธ์ด๋ก ๊ตฌํ๋ ๋ฐ๋ฒจ๊ณผ Terser๋ ํ ๋ฒ์ ํ ๊ฐ์ ํ์ผ๋ง์ ๋ณํํ ์ ์์ต๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์๋ ๋ฌ๋ฆฌ ๋ณ๋ ฌ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋๋ก ์ค๊ณ๋ Rust ์ธ์ด๋ก ์์ฑ๋ SWC๋ ์์กด์ฑ์ด ์๋ ํ์ผ๋ค์ ๋์์ ๋ณํํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์, ๋ง์ฝ ํ์ฌ ์ปดํจํฐ๊ฐ ์ต๋ 4๊ฐ์ ์์ ์ ๋์์ ํ ์ ์๋ค๋ฉด SWC๋ฅผ ์ฌ์ฉํ ๋น๋ ์๋๋ ๋ฐ๋ฒจ์ด๋ Terser๋ฅผ ํตํด ๋น๋ํ์ ๋ ๋ณด๋ค ์ต๋ 4๋ฐฐ๊น์ง ๋ ๋นจ๋ผ์ง ์ ์์ ๊ฒ์ ๋๋ค.
๐ ์ปดํ์ผ๋ฌ vs ํธ๋์คํ์ผ๋ฌโ
์ปดํ์ผ๋ฌโ
์ปดํจํฐ๊ฐ 0๊ณผ 1๋ง์ ์ดํดํ ์ ์์ต๋๋ค.(๊ธฐ๊ณ์ด) ํ์ง๋ง ์ปดํจํฐ์์ ๋์ํ ์ด๋ค ํ๋ก๊ทธ๋จ์ ๊ตฌํํ ๋, ํ๋ก๊ทธ๋๋จธ๋ 0๊ณผ 1๋ก ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ๋ C++์ ๊ฐ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ฌ์ฉํด ํ๋ก๊ทธ๋จ์ ์์ฑํฉ๋๋ค.
์ปดํจํฐ์ ์ฐ๋ฆฌ๊ฐ ์์ฑํ ์ฝ๋๋ฅผ ์ดํด์ํค๊ธฐ ์ํด์๋, ์ปดํจํฐ๊ฐ ์ดํดํ๋ ๊ธฐ๊ณ์ด์ 1๋ 1๋ก ๋์๋๋ ์ ๊ธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด(์ด์ ๋ธ๋ฆฌ์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค)๋ก ๋ฒ์ญํ๋ ๊ณผ์ ์ด ํ์ํฉ๋๋ค.
์ฐ๋ฆฌ๋ ํ๋ก๊ทธ๋๋ฐ์ ์์ญ์์ ์ด๋ฌํ ์ธ์ด ๊ฐ์ ๋ฒ์ญ(๋ณํ)์ ๋ด๋นํ๋ ๋ฒ์ญ๊ฐ๋ฅผ ์ปดํ์ผ๋ฌ๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
ํ ์ธ์ด๋ก ์์ฑ๋ ์ฝ๋๋ฅผ ๋์ผํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ค๋ฅธ ์ธ์ด์ ์ฝ๋๋ก ๋ณํํด์ฃผ๋ ์ญํ ๋ง ์ ๊ณตํ๋ค๋ฉด ๊ทธ ์ํํธ์จ์ด๋ ์ปดํ์ผ๋ฌ๋ผ๊ณ ํ ์ ์์ต๋๋ค.
ํธ๋์คํ์ผ๋ฌโ
ํธ๋์คํ์ผ๋ฌ๋ ์์์ ์ค๋ช ํ ์ปดํ์ผ๋ฌ์ ํ์๋ถ๋ฅ์ ๋๋ค. ์ธ์ด๋ฅผ ๋ณํํด ์ฃผ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์ํํธ์จ์ด์ธ ๊ฒ์ ์ผ๋ฐ์ ์ธ ์ปดํ์ผ๋ฌ์ ๋์ผํ์ง๋ง, ํธ๋์คํ์ผ๋ฌ๋ ์์ ํ ๋ค๋ฅธ ๋ ์ธ์ด ์ฌ์ด๋ฅผ ๋ณํํด ์ฃผ๋ ๊ฒ์ด ์๋๋ผ ์ ์ฌํ ๋ ์ธ์ด ์ฌ์ด์์ ๋ณํํด์ฃผ๋ ํ์ ๋ ์ญํ ์ ์ ๊ณตํด ์ฃผ๋ ์ํํธ์จ์ด๋ผ๋ ์ ์ด ๋ค๋ฆ ๋๋ค.
๐ ํ๋ก ํธ์๋ ๋ ๋๋ง: SSG vs ISR vs SSR vs CSR - ์ธ์ ์ด๋ค ๊ฒ์ ์ฌ์ฉํด์ผ ํ ๊น์?โ
์ ์ ํ์ด์ง ์์ฑ (SSG, Static Site Generation)โ
SSG๋ raw ๋ฐ์ดํฐ์ ํ ํ๋ฆฟ ์ธํธ๋ฅผ ๋ฐํ์ผ๋ก ์์ ํ ์ ์ ์ธ HTML ์น ์ฌ์ดํธ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ ์ฌ์ดํธ ์์ฑ์ ๊ฐ๊ฐ์ HTML ํ์ด์ง ์ฝ๋ฉ ์์ ์ ์๋ํํ๊ณ ํด๋น ํ์ด์ง๋ฅผ ๋ฏธ๋ฆฌ ์ฌ์ฉ์์๊ฒ ์ ๊ณตํ ์ ์๋๋ก ์ค๋นํฉ๋๋ค. ๊ฐ๋จํ ๋งํด์, SSG๋ ์น ์ฌ์ดํธ์ ๋ชจ๋ ํ์ด์ง๋ฅผ ๋ฏธ๋ฆฌ ๋ ๋๋งํ๊ณ ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ฐ๋ผ ํ์ด์ง๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ฅ์
- SSG๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋๋ ์๋ฒ ์ธก ํ๋ก์ธ์ค๊ฐ ๊ฑฐ์ ํ์ํ์ง ์์ ์์ ํ ์ ์ ์ธ HTML ๊ธฐ๋ฐ ์ฌ์ดํธ๋ฅผ ์์ฑํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ์ ์ ์ฌ์ดํธ๋ ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ ธ ์ฌ์ฉ์์๊ฒ ์ ๊ณต๋ ์ค๋น๊ฐ ๋์ด ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ ๋น ๋ฅธ ํ์์ ์น ํ์ด์ง์ ๋๋ค.
- ์น์ฌ์ดํธ๊ฐ ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ก๊ธฐ ๋๋ฌธ์ ์ฝํ ์ธ ๊ฐ ํจ์ฌ ๋ ์์ ํฉ๋๋ค.
- ๊ฒ์ ์์ง ์ต์ ํ(SEO) ์ ์ ๋ฆฌํฉ๋๋ค.
๋จ์
- ์ฝํ ์ธ ๋ฅผ ํธ์งํ๊ณ ์ฌ๋ฆฌ๋ ๊ฒ์ด ์ด๋ ต์ต๋๋ค. ํธ์ง์๋ค์ ๋จ์ํ ์น ์ฑ ์ธํฐํ์ด์ค๊ฐ ์๋ Git ์ ์ฅ์์ ์ ๊ทผ ๊ถํ์ ์๊ตฌํ ์ ์์ต๋๋ค.
- ์ฝํ ์ธ ๋ฅผ ์ ๋ฐ์ดํธํ๋ ค๋ฉด ์ฌ์ดํธ๋ฅผ ๋ค์ ๋น๋ํ๊ณ ํ ์คํธํ ํ ์ต์ข ์ ์ผ๋ก ๋ฐฐํฌํด์ผ ํฉ๋๋ค.
- ๋๊ท๋ชจ ์น ์ฌ์ดํธ์ ๊ฒฝ์ฐ ๋น๋๊ฐ ์ค๋ ๊ฑธ๋ฆฌ๋ ๊ฒ์ ๋งํ ๊ฒ๋ ์๊ณ , ๊ด๋ฆฌํ๋ ๊ฒ๋ ๋งค์ฐ ๋ฒ๊ฑฐ๋กญ์ต๋๋ค.
SSG๋ ์ฅ์ ์ด ๋ง์ง๋ง ์ ํ ์ผ์ผ์ด์ค ์น์ฌ์ดํธ์ฒ๋ผ ๋ด์ฉ์ด ๊ฑฐ์ ๋ณํ์ง ์๋ ์น์ฌ์ดํธ์ธ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋ธ๋ก๊ทธ์ ๊ฒฝ์ฐ, ์์ ํ ๋๋ง๋ค ์ฌ์ดํธ๋ฅผ ๋ค์ ๋ฐฐํฌํด๋ ๊ด์ฐฎ๋ค๋ฉด SSG๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ฝ๊ฐ์ ๋์ ์ธ ์ฝํ
์ธ ๋ผ๋ ํฌํจํ๊ณ ์๋ ์ฌ์ดํธ๋ผ๋ฉด SSG๋ฅผ ์ ๋ ์ฌ์ฉํ์ง ๋ง์ธ์.
์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง (SSR, Server-Side Rendering)โ
์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR)์ ๋ธ๋ผ์ฐ์ ์์ ์น ํ์ด์ง๋ฅผ ๋ ๋๋งํ๋ ๋์ ์๋ฒ์์ ์น ํ์ด์ง๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์๋ฒ์์ ์์ ํ ๋ ๋๋ง ๋ ํ์ด์ง๋ฅผ ํด๋ผ์ด์ธํธ๋ก ๋ณด๋ ๋๋ค. ํด๋ผ์ด์ธํธ์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค์ด SPA ํ๋ ์์ํฌ์ ์๋์ ๋์ ํฉ๋๋ค.
SSR์์๋ ํ์ด์ง๊ฐ ์๋ฒ์์ ๋ ๋๋ง ๋์ด ํด๋ผ์ด์ธํธ๋ก ์ ์ก๋๊ธฐ ๋๋ฌธ์ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ฉด์๋ ์ฌ์ ํ ์ฐ์ํ SEO๋ฅผ ์ ์งํ ์ ์์ต๋๋ค.
์ฅ์
- ๋์ ์ฝํ ์ธ ๊ฐ ํฌํจ๋ ํ์ด์ง๋ฅผ ๋ง๋๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- SSR์ SSG๋งํผ ๋น ๋ฅด์ง๋ ์์ง๋ง ํ์ด์ง๊ฐ ๋ก๋๋๋ ์ฆ์ ์ฝํ ์ธ ๊ฐ ๋ํ๋๋ฏ๋ก ์ ์ ๊ฐ ๋น ๋ฅด๊ฒ ์ฝํ ์ธ ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
- ๊ฒ์ ์์ง ์ต์ ํ(SEO)์ ์ ๋ฆฌํฉ๋๋ค.
๋จ์
- SSR์ ๋ชจ๋ ์์ฒญ์ด ์๋ฒ์์ ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ์๋ฒ์ ๋์ ์ฐ์ฐ ๋ฅ๋ ฅ์ ํ์๋ก ํฉ๋๋ค.
- SSR ์ฌ์ดํธ๋ ๊ณต๊ฒฉํ ์ ์๋ ์ง์ ์ด ๋ ๋ง์ผ๋ฏ๋ก ๋ณด์์ ์ ์งํ๊ธฐ๊ฐ ๋ ์ด๋ ต์ต๋๋ค.
- ์บ์ฑ์ ๋ณต์กํ ๊ตฌ์ฑ์ด ๋ง์ด ํ์ํฉ๋๋ค.
SSR์ ์๋ฒ ๋น์ฉ์ ํฌ๊ฒ ์ฆ๊ฐ์ํฌ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋ฏ๋ก, ๋งค์ฐ ๋น๋ฒํ๊ฒ ๋ณ๊ฒฝ๋๊ณ SEO์ ํฌ๊ฒ ์์กดํ๋ ๋งค์ฐ ๋์ ์ธ ์ฝํ ์ธ ๋ฅผ ํฌํจํ๊ณ ์๋ ์ฌ์ดํธ์ธ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ค๊ฐ๋(organic) ๊ฒ์์์ ์ฌ์ฉ์๋ฅผ ๋ชจ์ผ๋ ์ฃผ์ ์์ธ ํ์๊ธฐ ์น์ฌ์ดํธ๋ผ๋ฉด SSR์ด ํ์ํฉ๋๋ค.
์ ์ง์ ์ ์ ์ฌ์์ฑ (ISR, Incremental Static Regeneration)โ
์ ์ง์ ์ ์ ์ฌ์์ฑ(ISR)์ ์ฌ์ฉํ๋ฉด ์ ์ฒด ์ฌ์ดํธ๋ฅผ ์ฌ๋น๋ํ ํ์ ์์ด ํ์ด์ง๋ณ๋ก ์ ์ ์์ฑ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ISR์ ์ฌ์ฉํ๋ฉด ์ ์ ์ฌ์ดํธ์ ์ด์ ์ ์ ์งํ๋ฉด์ ์๋ง์ ํ์ด์ง๋ก ํ์ฅํ ์ ์์ต๋๋ค.
ISR์ SSG์ SSR์ ์ฅ์ ์ด ํฉ์ณ์ ธ ๋ณด๋ค ํจ์จ์ ์ด๊ณ ํ์ฅ ๊ฐ๋ฅํ ์๋ฃจ์ ์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ํจ๊ณผ์ ์ ๋๋ค.
์ฅ์
- SSG์ ๋์ผํ๊ฒ ISR๋ ํ์ด์ง๋ฅผ ๋ฏธ๋ฆฌ ๋ ๋๋งํ๊ณ ์บ์ํ๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ๊ต์ฅํ ๋น ๋ฆ ๋๋ค.
- ๋ด์ฉ ๋ณ๊ฒฝ๋์ด๋ ์ฌ์ดํธ๋ฅผ ๋ค์ ๋ฐฐํฌ ํ ํ์๊ฐ ์์ต๋๋ค.
- ๊ฒ์ ์์ง ์ต์ ํ(SEO)์ ์ ๋ฆฌํฉ๋๋ค.
๋จ์
- ISR์๋ ํ ๊ฐ์ง ํฐ ๋จ์ ์ด ์๋๋ฐ, ์ฝํ ์ธ ๊ฐ ๋ณ๊ฒฝ๋ ํ์ ์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ๊ฒ ๋์ด๋ ์ด์ ์ ์ฝํ ์ธ ๋ฅผ ๋ณด๊ฒ ๋ฉ๋๋ค. ์ ๋ฒ์ ์ ์น์ฌ์ดํธ๋ ์์ง ํ์ธํ ์ ์์ต๋๋ค.
ISR์ ์ด์์ ์ผ๋ก๋ ์ฝํ ์ธ ๊ฐ ๋์ ์ด์ง๋ง ์์ฃผ ๋ณ๊ฒฝ๋์ง ์๋ ์ฌ์ดํธ์ธ ๊ฒฝ์ฐ ISR์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ทธ ์์๋ก๋ ๋ธ๋ก๊ทธ๋ ๊ฐ์ธ ์น์ฌ์ดํธ๊ฐ ์์ต๋๋ค.
ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ ๋๋ง (CSR, Client-Side Rendering)โ
ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ ๋๋ง(CSR)์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ธ๋ผ์ฐ์ ์์ ์ง์ ํ์ด์ง๋ฅผ ๋ ๋๋งํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๋ชจ๋ ๋ก์ง, ๋ฐ์ดํฐ ํ์นญ, ํ ํ๋ฆฟ ๋ฐ ๋ผ์ฐํ ์ ์๋ฒ๊ฐ ์๋ ํด๋ผ์ด์ธํธ์์ ์ฒ๋ฆฌ๋ฉ๋๋ค.
CSR์์ ์๋ฒ๋ ๋น HTML ํ์ด์ง์ ๋ชจ๋ ๋ก์ง์ ์ฒ๋ฆฌํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค์ ๋ฐํํฉ๋๋ค.
์ฅ์
- ๋์ ์ฝํ ์ธ ๊ฐ ํฌํจ๋ ํ์ด์ง๋ฅผ ๋ง๋๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- SSG์ ๋ฌ๋ฆฌ ์๋ฒ ๋น์ฉ์ด ๋์ง ์์ต๋๋ค.
- ์ฒ์ ๋ก๋ํ ํ ๋ค๋ฅธ ํ์ด์ง๋ฅผ ๋ก๋ํ๋ ์๋๊ฐ ๋งค์ฐ ๋น ๋ฆ ๋๋ค.
๋จ์
- ๊ฒ์ ์์ง ์ต์ ํ(SEO)๊ฐ ์๋์ง ์์ต๋๋ค.
- ๋๋ฆฐ ์ด๊ธฐ ๋ก๋ ์๊ฐ๊ณผ ์ํธ ์์ฉํ๊ธฐ ์ํ ์๊ฐ์ด ์ฑ๋ฅ ์ ํ๋ฅผ ์ผ์ผํต๋๋ค.
CSR์ SEO์ ํฌ๊ฒ ์์กดํ์ง ์๋ ๋ชจ๋ ์ฌ์ดํธ์ ์ด์์ ์ ๋๋ค. Tauri ๋๋ Electron๊ณผ ๊ฐ์ ๋ ๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ถํ ์ฌ์ดํธ ์ํธ์์ฉ๊ณผ ์น, ํฌ๋ก์ค ํ๋ซํผ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ง๋๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๐ Yarn Berry๋ฅผ ์ฌ์ฉํ๋ ์ด์ โ
Yarn Berry๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๊ธฐ์กด์ ์ฌ์ฉํ๋ npm, yarn v1์์ ๋ฐ์ํ๋ ๋ฌธ์ ์ ์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ธฐ์กด์ ์์กด์ฑ์ node_modules
๋ฅผ ํตํด ๊ด๋ฆฌํ์๋๋ฐ npm์ ํจํค์ง๋ฅผ ์ฐพ๊ธฐ ์ํด์ ๊ณ์ ์์ ๋๋ ํ ๋ฆฌ์ node_modules
ํด๋๋ฅผ ํ์ํฉ๋๋ค. ๋ฐ๋ผ์ ํจํค์ง๋ฅผ ๋ฐ๋ก ์ฐพ์ง ๋ชปํ ์๋ก readdir, stat๊ณผ ๊ฐ์ ๋๋ฆฐ I/O ํธ์ถ์ด ๋ฐ๋ณต๋ฉ๋๋ค. ๊ฒฝ์ฐ์ ๋ฐ๋ผ์๋ I/O ํธ์ถ์ด ์ค๊ฐ์ ์คํจํ๊ธฐ๋ ํฉ๋๋ค.
npm์ ํจํค์ง๋ฅผ ์ฐพ์ง ๋ชปํ๋ฉด ์์ ๋๋ ํ ๋ฆฌ์ node_modules
ํด๋๋ฅผ ๊ณ์ ๊ฒ์ํฉ๋๋ค. ์ด ํน์ฑ ๋๋ฌธ์ ์ด๋ค ์์กด์ฑ์ ์ฐพ์ ์ ์๋์ง๋ ํด๋น ํจํค์ง์ ์์ ๋๋ ํ ๋ฆฌ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
์๋ฅผ ๋ค์ด, ์์ ๋๋ ํ ๋ฆฌ๊ฐ ์ด๋ค node_modules
๋ฅผ ํฌํจํ๊ณ ์๋์ง์ ๋ฐ๋ผ ์์กด์ฑ์ ๋ถ๋ฌ์ฌ ์ ์๊ธฐ๋ ํ๊ณ , ์๊ธฐ๋ ํฉ๋๋ค. ๋ค๋ฅธ ๋ฒ์ ์ ์์กด์ฑ์ ์๋ชป ๋ถ๋ฌ์ฌ ์ ์๋ ์ฌ์ง๋ ์กด์ฌํฉ๋๋ค.
๋ํ npm์ ๊ตฌ์ฑํ๋ node_modules
๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ ๋งค์ฐ ํฐ ๊ณต๊ฐ์ ์ฐจ์งํฉ๋๋ค. node_modules
ํด๋๋ ๋ณต์กํ๊ธฐ ๋๋ฌธ์ ์ค์น๊ฐ ์ ํจํ์ง ๊ฒ์ฆํ๊ธฐ ์ด๋ ต์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์๋ฐฑ ๊ฐ์ ํจํค์ง๊ฐ ์๋ก๋ฅผ ์์กดํ๋ ๋ณต์กํ ์์กด์ฑ ํธ๋ฆฌ์์ node_modules
๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ ๊น์ด์ง๋๋ค. ์ด๋ ๊ฒ ๊น์ ํธ๋ฆฌ ๊ตฌ์กฐ์์ ์์กด์ฑ์ด ์ ์ค์น๋์ด ์๋์ง ๊ฒ์ฆํ ๋ ค๋ฉด ๋ง์ ์์ I/O ํธ์ถ์ด ํ์ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋์คํฌ I/O ํธ์ถ์ ๋ฉ๋ชจ๋ฆฌ์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ค๋ฃจ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋๋ฆฝ๋๋ค. ์ด๋ฐ ๋ฌธ์ ๋ก ์ธํด yarn v1์ด๋ npm์ ๊ธฐ๋ณธ์ ์ธ ์์กด์ฑ ํธ๋ฆฌ์ ์ ํจ์ฑ๊น์ง๋ง ๊ฒ์ฆํ๊ณ , ๊ฐ ํจํค์ง์ ๋ด์ฉ์ด ์ฌ๋ฐ๋ฅธ์ง๋ ํ์ธํ์ง ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ npm ๋ฐ yarn v1์์๋ ์ค๋ณตํด์ ์ค์น๋๋ node_modules
๋ฅผ ์๋ผ๊ธฐ ์ํด ๋์ด์ฌ๋ฆฌ๊ธฐ(Hoisting) ๊ธฐ๋ฒ์ ์ฌ์ฉํฉ๋๋ค. ๋์ด์ฌ๋ฆฌ๊ธฐ์ ๋ฐ๋ผ ์ง์ ์์กดํ๊ณ ์์ง ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ require() ํ ์ ์๋ ํ์์ ์ ๋ น ์์กด์ฑ(Phantom Dependency)์ด๋ผ๊ณ ๋ถ๋ฆ
๋๋ค. ์ ๋ น ์์กด์ฑ ํ์์ด ๋ฐ์ํ ๋, package.json์ ๋ช
์ํ์ง ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์กฐ์ฉํ ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค.
yarn berry๋ ์์์ ์ธ๊ธํ ๋ฌธ์ ๋ฅผ PlugโnโPlay (PnP) ๋ฐฉ๋ฒ์ ํตํด ํด๊ฒฐํฉ๋๋ค.
yarn berry๋ node_modules
๋ฅผ ์์ฑํ์ง ์์ต๋๋ค. ๋์ .yarn/cache
ํด๋์ ์์กด์ฑ์ ์ ๋ณด๊ฐ ์ ์ฅ๋๊ณ , .pnp.cjs
ํ์ผ์ ์์กด์ฑ์ ์ฐพ์ ์ ์๋ ์ ๋ณด๊ฐ ๊ธฐ๋ก๋ฉ๋๋ค. .pnp.cjs
๋ฅผ ์ด์ฉํ๋ฉด ๋์คํฌ I/O ์์ด ์ด๋ค ํจํค์ง๊ฐ ์ด๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กดํ๋์ง, ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด๋์ ์์นํ๋์ง๋ฅผ ๋ฐ๋ก ์ ์ ์์ต๋๋ค.
yarn berry์ PnP ์์คํ
์์ ๊ฐ ์์กด์ฑ์ zip ์์นด์ด๋ธ๋ก ๊ด๋ฆฌ๋ฉ๋๋ค. ์ดํ .pnp.cjs
ํ์ผ์ด ์ง์ ํ๋ ๋ฐ์ ๋ฐ๋ผ ๋์ ์ผ๋ก zip ์์นด์ด๋ธ์ ๋ด์ฉ์ด ์ฐธ์กฐ๋ฉ๋๋ค. zip ์์นด์ด๋ธ๋ก ์์กด์ฑ์ ๊ด๋ฆฌํ๋ฉด ๋ ์ด์ node_modules
๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์์ฑํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ค์น๊ฐ ์ ์ํ ์๋ฃ๋๊ณ , ๊ฐ ํจํค์ง๋ ๋ฒ์ ๋ง๋ค ํ๋์ zip ์์นด์ด๋ธ๋ง์ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ์ค๋ณตํด์ ์ค์น๋์ง ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์กด์ฑ์ ๊ตฌ์ฑํ๋ ํ์ผ์ ์๊ฐ ๋ง์ง ์์ผ๋ฏ๋ก, ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ์งํ๊ฑฐ๋ ์ ์ฒด ์์กด์ฑ์ ์ญ์ ํ๋ ์์
์ด ๋น ๋ฆ
๋๋ค.
yarn PnP๋ node_modules
์์์ ๊ฐ์ด ์์กด์ฑ์ ๋์ด์ฌ๋ฆฌ์ง ์์ต๋๋ค. ์ด๋ก์จ ๊ฐ ํจํค์ง๋ค์ ์์ ์ด package.json
์ ๊ธฐ์ ํ๋ ์์กด์ฑ์๋ง ์ ๊ทผํ ์ ์์ต๋๋ค. ๊ธฐ์กด์ ํ๊ฒฝ์ ๋ฐ๋ผ ์ฐ์ฐํ ์๋ํ ์ ์์๋ ์ฝ๋๋ค์ด ๋ณด๋ค ์๊ฒฉํ ๊ด๋ฆฌ๋๋ ๊ฒ์
๋๋ค. ์ด๋ก์จ ์๊ธฐ์น ๋ชปํ ๋ฒ๊ทธ๋ฅผ ์ฝ๊ฒ ์ผ์ผํค๋ ์ ๋ น ์์กด์ฑ ํ์์ ๊ทผ๋ณธ์ ์ผ๋ก ๋ง์ ์ ์์ต๋๋ค.
yarn PnP์ ์์กด์ฑ์ ์์ถ ํ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์์กด์ฑ์ ์ฉ๋์ด ์์ต๋๋ค. ๋ํ ๊ฐ ์์กด์ฑ์ ํ๋์ zip ํ์ผ๋ก๋ง ํํ๋๊ธฐ ๋๋ฌธ์ ์์กด์ฑ์ ๊ตฌ์ฑํ๋ ํ์ผ์ ์ซ์๊ฐ npm๋งํผ ๋ง์ง ์์ต๋๋ค. ์ด์ฒ๋ผ ์ฉ๋๊ณผ ํ์ผ์ ์ซ์๊ฐ ์ ๊ธฐ ๋๋ฌธ์ yarn berry๋ฅผ ์ฌ์ฉํ๋ฉด ์์กด์ฑ์ Git์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ yarn berry์์ ์์กด์ฑ์ ๋ฒ์ ๊ด๋ฆฌ์ ํฌํจํ๋ ๊ฒ์ Zero-Install์ด๋ผ๊ณ ํฉ๋๋ค.
์ด์ฒ๋ผ ์์กด์ฑ์ ๋ฒ์ ๊ด๋ฆฌ์ ํฌํจํ๋ฉด ์๋ก ์ ์ฅ์๋ฅผ ๋ณต์ ํ๊ฑฐ๋ ๋ธ๋์น๋ฅผ ๋ฐ๊พธ์๋ค๊ณ ํด์ yarn install์ ์คํํ์ง ์์๋ ๋๊ณ ์ด์ ๋ฐ๋ผ CI์์ ์์กด์ฑ ์ค์นํ๋ ์๊ฐ์ ํฌ๊ฒ ์ ์ฝํ ์ ์์ต๋๋ค.
๐ Next.js์ ์๋ ๋ฐฉ์โ
https://nextjs.org/learn/foundations/how-nextjs-works https://velog.io/@surim014/how-next.js-works
๐ Vercel Edge Functionโ
Vercel์ Edge Functions๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฒฝ๋ Edge Runtime์ผ๋ก ๋์ ์ด๊ณ ๊ฐ์ธํ๋ ์ฝํ ์ธ ๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
Vercel Edge Runtime์ ํ๊ท ์ ์ผ๋ก Serverless Functions๋ณด๋ค ์ฑ๋ฅ์ด ๋ฐ์ด๋๊ณ ๋น์ฉ ํจ์จ์ ์ ๋๋ค. Edge Functions๋ Edge Network์ ์ ์ธ๊ณ์ ์ผ๋ก ๋ฐฐํฌ๋๋ฉฐ ์ด๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ์ฌ์ฉ์์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ง์ญ์์ ์๋์ผ๋ก ์คํ๋ ์ ์์ต๋๋ค. ๋ํ cold boots๊ฐ ์์ผ๋ฏ๋ก ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ ์ ์์ํ๋ ๋ฐ ์ถ๊ฐ ์๊ฐ์ด ํ์ํ์ง ์์ต๋๋ค.
Edge Functions๋ OAuth ์ฝ๋ฐฑ ์คํ, ์นํํฌ ์์ฒญ ์๋ต ๋๋ ์งง์ ์๊ฐ ์ ํ ๋ด์ ์์ฒญ์ด ์๋ฃ๋์ง ์์ผ๋ฉด ์คํจํ๋ API์ ์ํธ ์์ฉ๊ณผ ๊ฐ์ด ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ๋คํธ์ํฌ๋ฅผ ํตํด ๋ฐ์ดํฐ์ ์ํธ ์์ฉํด์ผ ํ ๋ ์ ์ฉํฉ๋๋ค.
Edge Function์ ์๋ ๋ฐฉ์โ
Edge Functions๋ Chrome ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉ ํ๋ ๊ฒ๊ณผ ๋์ผํ ๊ณ ์ฑ๋ฅ V8 JavaScript ๋ฐ WebAssembly ์์ง์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ Vercel์ Edge Runtime์ ์ฌ์ฉํฉ๋๋ค.
V8 ์์ง์ ์ฌ์ฉํ๋ฉด ์ปจํ ์ด๋๋ ๊ฐ์ ๋จธ์ ์ด ํ์ํ์ง ์์ ๊ฒฉ๋ฆฌ๋ ์คํ ํ๊ฒฝ์์ Edge Functions๋ฅผ ์คํํ ์ ์์ต๋๋ค. ์ด๊ฒ์ Edge Runtime์ ์ฌ๋ฌ ๋ฉด์์ ์ ํํ์ง๋ง ๋์์ ๊ฒฝ๋ํํฉ๋๋ค. Edge Function ํ๋ก์ธ์ค๋ฅผ ์์ํ๋ ค๋ฉด ์๋ฒ๋ฆฌ์ค ๊ธฐ๋ฅ๋ณด๋ค ์ ์ ๋ฆฌ์์ค๊ฐ ํ์ํ๋ฏ๋ก cold boot ์๊ฐ์ ํจ๊ณผ์ ์ผ๋ก ์ ๊ฑฐํฉ๋๋ค.
Edge Functions์ ๋ณดํธ์ ์ด์ ์ Edge Runtime์ ๋๋ค. ๋น์ฉ ํจ์จ์ ์ด๊ณ ๋ฆฌ์์ค๋ฅผ ์ต์ํํฉ๋๋ค. ๊ทธ๋ฌ๋ Edge Functions๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ์ปจํ ์คํธ์์ ๋ฎ์ ๋๊ธฐ ์๊ฐ์ผ๋ก ๋์ ์ฝํ ์ธ ๋ฅผ ์ ๊ณตํ ์๋ ์์ต๋๋ค.
๋ชจ๋ Edge ๊ธฐ๋ฅ์ด ๋ณต์ ๋์ด Vercel์ Edge Network์ ์๋ ๋ฐ์ดํฐ ์ผํฐ์ ๊ธ๋ก๋ฒ ๋คํธ์ํฌ์ ๋ฐฐํฌ๋๊ธฐ ๋๋ฌธ์ ๋ฎ์ ๋๊ธฐ ์๊ฐ์ผ๋ก ๋์ ์ฝํ ์ธ ๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ฌ์ฉ์์๊ฒ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ฐ์ดํฐ ์ผํฐ ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ทผ์ฒ ์ง์ญ์์ ํธ์ถํ ์ ์์ต๋๋ค. ๋ํ ์ง์ญ์ ๋ฐ๋ผ ๊ฐ์ธํ๋ ์ฝํ ์ธ ๋ฅผ ๋น ๋ฅธ ์๋๋ก ์ ๊ณตํ ์ ์์ต๋๋ค.
Edge Functions๋ ์บ์ ์ดํ์๋ ์คํ๋๋ฉฐ ์๋ต์ ์บ์ํ๊ณ ๋ฐํํ ์ ์์ต๋๋ค.
์ฃ์ง ํจ์๋ฅผ ์ฌ์ฉํ๋ ์ด์ โ
Edge Functions๋ ์ ์ธ๊ณ์ ์ผ๋ก ๋ถ์ฐ๋ ์ฌ์ฉ์ ๊ธฐ๋ฐ์ ๋ํด ํ๊ท ์ ์ผ๋ก Serverless Functions๋ณด๋ค ๋ ๋น ๋ฅธ ์๋ต์ ์ ๊ณตํ ์ ์์ต๋๋ค. ๋ค์์ Edge Functions๊ฐ ์ ๊ณตํ๋ ๋ช ๊ฐ์ง ๊ตฌ์ฒด์ ์ธ ์ด์ ์ ๋๋ค.
- ๋คํธ์ํฌ ์ฌ์ฉ ๋น์ฉ ๊ฐ์
Edge Functions๋ ์ง๋ฆฌ์ ์ผ๋ก ์ฌ์ฉ์ ๊ทผ์ฒ ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ทผ์ฒ์์ ์คํํ ์ ์์ผ๋ฏ๋ก ๋คํธ์ํฌ ์์ฒญ์ serverless function๋ณด๋ค ๋ ์งง์ ๊ฑฐ๋ฆฌ๋ฅผ ์ด๋ํ๊ณ ๋ ๋ฎ์ ๋น์ฉ์ ๋ฐ์์ํฌ ์ ์์ต๋๋ค.
์๋ฒ๋ฆฌ์ค ํจ์๋ ์ผ๋ฐ์ ์ผ๋ก ํ ์ง์ญ์์ ๋ฐฐํฌ ๋ฐ ํธ์ถ๋๋ฏ๋ก ๋๋๋ก ์ฌ์ฉ์์๊ฒ ์๋ต์ ์ ๊ณตํ๊ธฐ ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด ์ค์ ๋๋ฌํ๊ธฐ ์ํด ๋ฉ๋ฆฌ ์ด๋ํฉ๋๋ค. - ๋๊ธฐ ์๊ฐ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ง๋ฆฌ์ ์ผ๋ก ๋ฉ๋ฆฌ ๋จ์ด์ง ์ข ์์ฑ์ ์์กดํ์ง ์๋ Edge Functions๋ ์ฌ์ฉ์ ๊ทผ์ฒ์์ ์คํ๋๋๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์ด๋ก ์ธํด Serverless Functions๋ณด๋ค ํจ์ฌ ์งง์ ๋๊ธฐ ์๊ฐ์ผ๋ก ์๋ต์ด ์ฌ์ฉ์์๊ฒ ์ ๋ฌ๋ ์ ์์ต๋๋ค.
- ๊ฐ์ธํ๋ ๋์ ์ฝํ ์ธ Edge Functions์์ ์ฌ์ฉ์ ์ง์ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์๊ฐ ํจ์๋ฅผ ํธ์ถํ๋ Edge ๋คํธ์ํฌ์ ๋ฐ์ดํฐ ์ผํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฝํ ์ธ ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.
- ์ ์์ค ์ธ์ด ์ง์ C ๋๋ Rust์ ๊ฐ์ ์ธ์ด๋ก ์์ฑ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ๋๊ตฌ๋ฅผ ์ปดํ์ผํ๊ณ Edge Functions์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ WebAssembly ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
Edge Function regionsโ
Edge Functions์ ์ฅ์ ์ค ํ๋๋ ๋ฐฉ๋ฌธ์์ ์ง๋ฆฌ์ ์ผ๋ก ๊ฐ๊น์ด ๋ฐ์ดํฐ ์ผํฐ์์ ์คํํ ์ ์์ด ๋คํธ์ํฌ ์์ฒญ ์๊ฐ์ด ๋จ์ถ๋๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ํจ์๊ฐ ๋ฐฉ๋ฌธ์๋ก๋ถํฐ ๋ฉ๋ฆฌ ๋จ์ด์ง ๋ฐ์ดํฐ ์์ค์ ์์กดํ๋ ๊ฒฝ์ฐ ์ด ์ด์ ์ด ์ํ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด ์ผ๋ณธ์ ๋ฐฉ๋ฌธ์๊ฐ ๋ฏธ๊ตญ์ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์กดํ๋ ํจ์๋ฅผ ํธ์ถํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ์์ง ๋คํธ์ํฌ์ ์ผ๋ณธ์ ์๋ ์์คํ ์์ ํธ์ถ ๋์ง๋ง ์ต์ข ์๋ต์๋ Japan -> US -> Japan ์๋ณต์ด ํ์ํ๋ฏ๋ก ๋ฐฉ๋ฌธ์์๊ฒ ์ ์ฒด ์๋ต ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค.
Edge Function์ ํจ์จ์ ์ธ ๋ผ์ฐํ ์ ๋ณด์ฅํ๊ธฐ ์ํด ํจ์๊ฐ ์คํ๋์ด์ผ ํ๋ ์ง์ญ์ ์ง์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ ๊ฒ ํ๋ ค๋ฉด configEdge Function์ด ๋ด๋ณด๋ด๋ ๊ฐ์ฒด๋ฅผ ํธ์งํ์ญ์์ค.
export const config = {
runtime: 'edge', // this is a pre-requisite
regions: ['iad1'], // only execute this function on iad1
};
์ ํ ์ฌํญโ
๋ชจ๋ ์๋ฃจ์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก Edge Functions๋ ๋ชจ๋ ์ฌ์ฉ ์ฌ๋ก์ ์ ํฉํ์ง ์์ ์ ์์ผ๋ฉฐ ์์์ผ ํ ๋ช ๊ฐ์ง ์ ํ ์ฌํญ์ด ์์ต๋๋ค.
- ๋ฐ์ดํฐ ์๋ณธ๊ณผ Edge Function์ด ์คํ๋๋ ์์น ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ก ์ธํด ์์ฒญ์ ์์น ์๋ ๋๊ธฐ ์๊ฐ์ด ์ถ๊ฐ๋ ์ ์์ต๋๋ค. ์ ์ฌ์ ์ผ๋ก ์ด ๋ฌธ์ ๋ฅผ ์ํํ๋ ค๋ฉด Vercel์์ ์ง์ญ Edge Function ์คํ์ ๋ํ ๊ฐ์ด๋๋ฅผ ์ฝ์ผ์ญ์์ค.
- Edge Function์ ์ต๋ ํฌ๊ธฐ๋ ํจ์์ ๋ฒ๋ค๋ก ์ ๊ณต๋๋ ๋ชจ๋ ์ฝ๋๋ฅผ ํฌํจํ์ฌ 4MB ์ ๋๋ค.
- ๋๋ถ๋ถ์ ๊ธฐ๋ณธ Node.js API๋ ์ง์๋์ง ์์ต๋๋ค. ์ฌ๊ธฐ์์ ์ง์๋๋ Node.js API ๋ชฉ๋ก์ ์ฐธ์กฐํ์ธ์.
- ์๋ฒ๋ฆฌ์ค ๊ธฐ๋ฅ๊ณผ์ ๋น๊ต
- edge function ์ฌ์ฉ์ Next.js์์ ํด๋น ํ์ด์ง์ ์ ์ ์์ฑ(Static Generation)์ด ๋นํ์ฑํ๋ฉ๋๋ค. Edge ๋ฐํ์์ ๊ฐ ์์ฒญ๋ง๋ค ์๋ก์ด ํ๊ฒฝ์์ ์ฝ๋๋ฅผ ์คํํฉ๋๋ค. ์ด๋ ์ ์ ์ผ๋ก ์์ฑ๋ ์ฝํ
์ธ ์ ๋ง์ง ์์ต๋๋ค. ์ฆ๋ถ ์ ์ ์ฌ์์ฑ(ISR)์ ์ฌ์ฉํ ๋, Edge ๋ฐํ์๊ณผ ISR์ ํจ๊ป ์ฌ์ฉํ ๋ ๋ค์๊ณผ ๊ฐ์ ์ํฉ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
- ์ค๋๋(stale) ํ์ด์ง ์ฌ์์ฑ: ํ์ด์ง๊ฐ ์ค๋๋์ด ์ฌ์์ฑ์ด ํ์ํ ๊ฒฝ์ฐ, HTML๊ณผ JSON ๋ฒ์ ์ ๋์์ ์์ฑํฉ๋๋ค.
- On-demand ISR with
fallback: 'blocking'
: ํ์ด์ง๋ ์์ฒญ ์ ๋๊ธฐ์ ์ผ๋ก HTML์ ๋ ๋๋งํฉ๋๋ค. ๊ทธ ํ ๋ฐฑ๊ทธ๋ผ์ด๋์์ HTML๊ณผ JSON ๋ฒ์ ๋ชจ๋์ ๋ํ ์ฌ๊ฒ์ฆ(revalidation)์ด ์ด๋ฃจ์ด์ง๋๋ค. - Edge ๋ฐํ์์ ์ฌ์ฉํ ๋ ์ ์ ์์ฑ์ด ๋นํ์ฑํ๋์ง๋ง, ISR๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ํตํด ์ฌ์ ํ ํจ์จ์ ์ธ ์ฝํ ์ธ ๊ฐฑ์ ๊ณผ ์ ๊ณต์ด ๊ฐ๋ฅํฉ๋๋ค. ๋ค๋ง, ์ด ๊ณผ์ ์์ ์ฌ๋ฌ ๋ก๊ทธ๊ฐ ๋ฐ์ํ ์ ์์์ ์๋ ค์ฃผ๋ ๊ฒ์ ๋๋ค.
์์ธํ ๋ด์ฉ์ Edge Functions ์ ํ ํ์ด์ง๋ฅผ ์ฐธ์กฐํ์ธ์.
๐ Edge Middlewareโ
Edge Middleware๋ ์์ฒญ์ด ์ฌ์ดํธ์์ ์ฒ๋ฆฌ ๋๊ธฐ ์ ์ ์คํ๋๋ ์ฝ๋์ ๋๋ค. ์์ฒญ์ ๋ฐ๋ผ ์๋ต์ ์์ ํ ์ ์์ต๋๋ค. ์บ์๋ณด๋ค ๋จผ์ ์คํ๋๊ธฐ ๋๋ฌธ์ ๋ฏธ๋ค์จ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ ์ ์ผ๋ก ์์ฑ๋ ์ฝํ ์ธ ์ ๊ฐ์ธํ๋ฅผ ์ ๊ณตํ๋ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์ ๋๋ค. ๋ค์ด์ค๋ ์์ฒญ์ ๋ฐ๋ผ ์๋ต์ ๋ฐํํ๊ธฐ ์ ์ ์ฌ์ฉ์ ์ง์ ๋ ผ๋ฆฌ๋ฅผ ์คํํ๊ณ ์ฌ์์ฑ, ๋ฆฌ๋๋ ์ , ํค๋ ์ถ๊ฐ ๋ฑ์ ์ํํ ์ ์์ต๋๋ค.
Edge ๋ฏธ๋ค์จ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์ดํธ ๋ฐฉ๋ฌธ์์๊ฒ ๋น ๋ฅด๊ณ ๊ฐ์ธํ๋ ์ฝํ ์ธ ๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค. Vercel์ Edge Network์ ์ ์ญ์ ์ผ๋ก ๋ฐฐํฌ๋๋ฉฐ ์๋ฒ ์ธก ๋ก์ง์ ๋ฐฉ๋ฌธ์์ ์ถ์ฒ์ ๊ฐ๊น์ด Edge๋ก ์ด๋ํ ์ ์์ต๋๋ค.
๋ฏธ๋ค์จ์ด๋ Chrome ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋์ผํ ๊ณ ์ฑ๋ฅ V8 JavaScript ๋ฐ WebAssembly ์์ง ์ ๊ตฌ์ถ๋ Vercel Edge Runtime์ ์ฌ์ฉํฉ๋๋ค. Edge Runtime์ ๋ค์๊ณผ ๊ฐ์ Web Standard API์ ํ์ ์งํฉ์ ๋ ธ์ถํ๊ณ ํ์ฅํฉ๋๋ค. FetchEvent, Response, ๊ทธ๋ฆฌ๊ณ Request, ๋ค์ด์ค๋ ์์ฒญ์ ๋ฐ๋ผ ์๋ต์ ์กฐ์ํ๊ณ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ ์ ์ ์ดํ ์ ์์ต๋๋ค. ๋ฏธ๋ค์จ์ด ์์ฑ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ฏธ๋ค์จ์ด API ๊ฐ์ด๋๋ฅผ ์ฐธ์กฐํ์ธ์.
๊ฐ๋ฐ์๋ Edge Middleware๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ ํฌ๊ธฐ๋ฅผ ์ถ๊ฐํ์ง ์๊ณ ๋ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ณด๋ค ํจ๊ณผ์ ์ผ๋ก ์ ์ดํ ์ ์์ผ๋ฏ๋ก ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค. ์ต์ข ์ฌ์ฉ์๋ edge์์ ์คํ๋๊ธฐ ๋๋ฌธ์ ๋๊ธฐ ์๊ฐ์ด ๋งค์ฐ ์งง์ ์ฌ์ ๋ ๋๋ง๋๊ณ ๊ฐ์ธํ๋ ์ฝํ ์ธ ๋ฅผ ๊ฒฝํํฉ๋๋ค.
๋ฏธ๋ค์จ์ด์ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ ์ฆ(Authentication)
- ์ง๋ฆฌ์ ์์น(Geolocation)
- ์ฟ ํค ์์ (Working with cookies)
- A/B ํ ์คํธ(A/B testing)
- ๋ด ๋ณดํธ(Bot protection)
- ์ฌ์์ฑ(Rewrites)
๐ ๋ชจ๋ ธ๋ ํฌ๋?โ
๋ชจ๋ ธ๋ ํฌ๋ ๋จ ํ๋์ ๋ฒ์ ์ผ๋ก ๊ด๋ฆฌ๋๋ ๋ชจ๋๋ฆฌ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฉ์๊ณผ ๊ฐ๊ฐ์ ๋ชจ๋์ด ๋ถ์ฐ๋ ๋ฉํฐ๋ ํฌ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํ์ํ์ต๋๋ค. ๋ชจ๋ ธ๋ ํฌ๋ ๋ ๊ฐ ์ด์์ ํ๋ก์ ํธ๊ฐ ๋์ผํ ์ ์ฅ์์ ์ ์ฅ๋๋ ์ํํธ์จ์ด ๊ฐ๋ฐ ์ ๋ต์ ๋๋ค. ๋ฉํฐ๋ ํฌ์ฒ๋ผ ๊ฐ๊ฐ์ ๋ชจ๋์ด ๋ถ๋ฆฌ๋์ด ์์ง๋ง ํ๋์ ๋์ผํ ์ ์ฅ์์ ์ ์ฅ๋๋ ์ ์ด ๋ค๋ฅธ ์ ์ ๋๋ค.
๋ชจ๋ ธ๋ ํฌ๋ ๋ฉํฐ๋ ํฌ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ค๋๋ค.
- ๋ ์ฌ์ด ํ๋ก์ ํธ ์์ฑ ๋ชจ๋ ธ๋ ํฌ์์๋ ์ ์ฅ์ ์์ฑ์ ์๋กญ๊ฒ ํ ํ์๊ฐ ์์ผ๋ฉฐ, ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ CI/CD, ๋น๋ ๋ฑ์ ๊ณผ์ ์ ๊ธฐ์กด DevOps๋ฅผ ์ด์ฉํ๋ฏ๋ก ์ ํ๋ก์ ํธ ์์ฑ์ ๋ํ ์ค๋ฒํค๋๊ฐ ์์ต๋๋ค.
- ๋ ์ฌ์ด ์์กด์ฑ ๊ด๋ฆฌ ๊ณตํต์ผ๋ก ์ฌ์ฉ๋๋ ์์กด์ฑ ํจํค์ง๊ฐ ๊ฐ์ ์ ์ฅ์์ ์์ผ๋ฏ๋ก ๋ฒ์ ์ด ์ง์ ๋ ํจํค์ง๋ฅผ npm registry์ ๊ฐ์ ๊ณณ์ publishํ ํ์๊ฐ ์์ต๋๋ค.
- ๋จ์ผํ๋ ๊ด๋ฆฌ ํฌ์ธํธ ๊ฐ๋ฐํ๊ฒฝ ๋ฐ DevOps์ ๋ํ ์ ๋ฐ์ดํธ๋ฅผ ํ ๋ฒ์ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ์ผ๊ด๋ ๊ฐ๋ฐ์ ๊ฒฝํ ์ ๊ณต ์ ํ๋ฆฌ์ผ์ด์ ์ ์ผ๊ด๋๊ฒ ๊ตฌ์ถํ๊ณ ํ ์คํธํ ์ ์์ผ๋ฉฐ, ๊ฐ๋ฐ์๋ ๋ค๋ฅธ ํ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ์๊ฒ ๊ธฐ์ฌํ๊ณ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ ํ์ง ํ์ธํ ์ ์๋ค.
- ํ๋ก์ ํธ๋ค์ ๊ฑธ์น ์์์ ์ปค๋ฐ ์ปค๋ฐํ ๋๋ง๋ค ๋ชจ๋ ๊ฒ์ด ํจ๊ป ์๋ํ๊ณ ๋ณ๊ฒฝ ์ฌํญ์ ์ํฅ์ ๋ฐ๋ ์กฐ์ง์์ ์ฝ๊ฒ ๋ณํ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
- ์๋ก ์์กดํ๋ ์ ์ฅ์๋ค์ ๋ฆฌํฉํฐ๋ง ๋น์ฉ ๊ฐ์ ๋ชจ๋ ธ๋ ํฌ๋ ๋๊ท๋ชจ ๋ณ๊ฒฝ์ ํจ์ฌ ๋ ๊ฐ๋จํ๊ฒ ๋ง๋ญ๋๋ค. 100๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ง๋ 10๊ฐ์ ์ฑ์ ๋ฆฌํฉํฐ๋งํ๊ณ ๋ณ๊ฒฝ์ ์ปค๋ฐํ๊ธฐ ์ ์ ๋ชจ๋ ์๋ํ๋์ง ํ์ธํ ์ ์์ต๋๋ค.
- ํ ์คํธ ๋ฐ ๋น๋ ๋ฒ์ ์ต์ํ ์์ค ๋ณ๊ฒฝ ์ ๋ชจ๋ ํ๋ก์ ํธ๋ฅผ ๋ค์ ๋น๋ํ๊ฑฐ๋ ๋ค์ ํ ์คํธํ์ง ์์ต๋๋ค. ๋์ ๋ณ๊ฒฝ ์ฌํญ์ ์ํฅ์ ๋ฐ๋ ํ๋ก์ ํธ๋ง ๋ค์ ํ ์คํธํ๊ณ ๋น๋ํฉ๋๋ค.
๊ทธ๋ ์ง๋ง ํญ์ ๋ชจ๋ ธ๋ ํฌ๋ฅผ ์ฌ์ฉํ๋๊ฒ ์ข์ ๊ฒ์ ์๋๋๋ค. ๋ค์๊ณผ ๊ฐ์ ์ํฉ์์ ์ฌ์ฉํ๋๊ฒ ์ข์ต๋๋ค.
- ์ ์ฌํ ์ ํ์ ์งํฉ
- ์ฌ๋ฌ ํ๋ก์ ํธ์ ๋ณํ๋ฅผ ํ๋์ ํ์ ํด์ผ ํ ๋
- ํธ์คํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋ฌ๊ทธ์ธ ๋ฑ์ผ๋ก ํ์ฅํ ๋
- ๊ณตํต ๊ธฐ๋ฅ์ ์ฌ์ฌ์ฉํ๋ ๊ด๋ จ๋ ํ๋ก์ ํธ์ ์งํฉ
- ์ ์ฌํ DevOps๋ก ๊ตฌ์ฑ๋ ํ๋ก์ ํธ์ ์งํฉ
๋ชจ๋ ธ๋ ํฌ๋ฅผ ๊ตฌ์ถํ๋ ค๊ณ ํ ๋ ๊ด๋ฆฌ ์ฉ์ด์ฑ, ์๋ ๊ทธ๋ฆฌ๊ณ ํ๋ก์ ํธ ๊ตฌ์กฐ ๊ด๋ฆฌ ์ธก๋ฉด์์ ๋ค์๊ณผ ๊ฐ์ ์ฌํญ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
- ๊ด๋ฆฌ ์ธก๋ฉด
- ์ฝ๋ ๊ณต์ : ์๋ก ๋ค๋ฅธ ํ๋ก์ ํธ ๊ฐ์ ์ฝ๊ฒ ์์ค ์ฝ๋๋ฅผ ๊ณต์
- ์ผ๊ด์ฑ ์๋ ๋๊ตฌ: ์๋ก ๋ค๋ฅธ ํ๋ก์ ํธ๋ค(์ฌ์ง์ด ์๋ก ๋ค๋ฅธ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋๋ผ๋)์์ ์ผ๊ด๋ ๊ฐ๋ฐ ๊ฒฝํ์ ์ ๊ณต
- ์ค์ผํด๋ฉ: ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ์์ฑํ ๋ ์ด๊ธฐ ์ฝ๋๋ฅผ ์ฝ๊ฒ ์์ฑ
- ํ๋ก์ ํธ ์ ์ฝ ๋ฐ ๊ฐ์์ฑ(visibility): ์ ์ฅ์ ๋ด์์ ์์กด ๊ด๊ณ๋ฅผ ์ ํํ๋ ๊ท์น ์ ์ ์ง์. ์๋ฅผ ๋ค์ด, ์ผ๋ถ ํ๋ก์ ํธ๋ฅผ ํ ์ ์ฉ์ผ๋ก ํ์ํ๊ฑฐ๋ ํน์ ํ๋ ์์ํฌ์ ์ฌ์ฉ ์ค์์ ๊ธฐ์ .
- ์๋ ์ธก๋ฉด
- ๋ก์ปฌ ์บ์ฑ: ๊ฐ์ ๋จธ์ ์์ ๊ฐ์ ๊ฒ์ ๋ ๋ฒ ๋น๋ํ๊ฑฐ๋ ํ ์คํธํ์ง ์์
- ๋ถ์ฐ ์บ์ฑ: ๋ค์ํ ํ๊ฒฝ์์ ์บ์ ์ํฐํฉํธ๋ฅผ ๊ณต์ . ์ฆ, ์กฐ์ง ๋จ์๋ก ์ฌ๋ฌ CI ํ๊ฒฝ์ ๊ฑธ์ณ ๊ฐ์ ๊ฒ์ ๋ ๋ฒ ๋น๋, ํ ์คํธํ์ง ์์
- ๋ก์ปฌ ์์ ์ค์ผ์คํธ๋ ์ด์ : ๋น๋ ๋ฐ ํ ์คํธ ๋ฑ์ ์์ ์ ์์์ ๋ง๊ฒ ๋ณ๋ ฌ๋ก ์งํ
- ๋ถ์ฐ ์์ ์งํ: ๋จ์ผ ์์คํ ์์ ์คํ๋์ด ์ฌ๋ฌ ์์คํ ์ ๋ช ๋ น์ ์ ๋ฌ
- ๋ณํ์ ์ํฅ์ ๋ฐ๋ ํ๋ก์ ํธ ๊ฐ์ง: ๋ณ๊ฒฝ์ ์ํฅ์ ๋ฐ์ ์ ์๋ ํญ๋ชฉ์ ๊ฒฐ์ ํ์ฌ ์ํฅ์ ๋ฐ๋ ํ๋ก์ ํธ๋ง ๋น๋/ํ ์คํธ
- ๊ตฌ์กฐ ํ์
์ธก๋ฉด
- ์ํฌ์คํ์ด์ค ๋ถ์: ์ถ๊ฐ ๊ตฌ์ฑ ์์ด ์ฃผ์ด์ง ์ํฌ์คํ์ด์ค์ ์์กด์ฑ ๊ด๊ณ๋ฅผ ๋ถ์
- ์์กด์ฑ ๊ทธ๋ํ ์๊ฐํ: ํ๋ก์ ํธ ๋ฐ ์์ ๊ฐ์ ์ข ์ ๊ด๊ณ๋ฅผ ์๊ฐํ
๋ชจ๋ ธ๋ ํฌ ๊ตฌ์ถ์ ๋์์ฃผ๋ ๋๊ตฌ๋ก๋ Lerna, yarn, nx, turborepo ๋ฑ์ด ์์ต๋๋ค.