2020-11 
๋งํฌ & ์ฝ์๊ฑฐ๋ฆฌ
Safari deopt with a large ESBuild bundle
ํ ์ฌ์ฉ์๊ฐ Go๋ก ์์ฑ๋ ๋ฒ๋ค๋ฌ์ธ esbuild ํ๋ก์ ํธ ์ด์๋ฅผ ํตํด, Safari์์ ์ปค๋ค๋ ํฌ๊ธฐ์ ๋ฒ๋ค ํ์ผ์ ์คํํ๋ฉด ํ ๋ธ๋ผ์ฐ์ ๋๋น 6~8x ๋ฐฐ ์ฑ๋ฅ์ด ๋๋ ค์ง๋ ํ์์ ๋ํด ์ฌํ ์ผ์ด์ค๋ค๊ณผ ํจ๊ป ๋ฌธ์ํ๋ ๋ด์ฉ์ ๊ธ์ด๋ค.
esbuild ํ๋ก์ ํธ ๋ฉ์ธํฐ๋ ์ค ํ ๋ช
์ธ, Evan Wallace๋ ๋ณ์ ์ ์ธ ์ let/const
๋์ var
๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๋ ๊ฒ์ ๋ฐ๊ฒฌํ๊ณ , ๊ด๋ จ ๋ด์ฉ์ JavaScriptCore์ ๋ฒ๊ทธ๋ก ๋ฆฌํฌํ
๋์๋ค.
MDN Browser Compatibility Report 2020
Mozilla์์ ํด๋ง๋ค ๋ฐํํ๋ ๋ธ๋ผ์ฐ์ ํธํ์ฑ ๋ฆฌํฌํธ๋ก ๊ณต๊ฐ ์ค๋ฌธ์กฐ์ฌ๋ฅผ ํตํด ์์ง๋ ์๊ฒฌ์ ํตํด ํ์ฌ ์น ๊ฐ๋ฐ์ ์ํ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ , ์ผ๋ถ ํญ๋ชฉ๋ค์ ๋ํ ๊ฐ๋ณ์ ์ธํฐ๋ทฐ๋ ํฌํจํ๊ณ ์์ด ์ค ์ฌ์ฉ ํ๊ฒฝ์์์ ์์ํ ๊ฒฝํ์ ์ฟ๋ณผ ์๋ ์๋ค.
๊ฒฐ๊ณผ๋ฅผ ํตํด ๋น๋จ IE๋ ๊ตญ๋ด๋ฟ๋ง ์๋๋ผ ํด์ธ ๊ฐ๋ฐ์๋ค์๊ฒ๋ ๊ฐ์ฅ ๊ณจ์นซ๊ฑฐ๋ฆฌ ์์ ํ์ธํ ์ ์๋ค.
How CommonJS is making your bundles larger
์ CommonJS ๋ชจ๋ ์์คํ ์ด ์ฌ๋ฌ๋ถ๋ค์ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ํ์ ์ด์์ผ๋ก ํฌ๊ฒ ๋ง๋ค ์ ์๋์ง์ ๋ํด ์ค๋ช ํ๋ ๊ธ๋ก ์ธ๊ธฐ ์๋ ๋ฒ๋ค๋ฌ์ธ Webpack์์ ModuleConcatenationPlugin์ ํตํด ๋ชจ๋์ด ๋ฒ๋ค๋ง ๋๋ ๊ณผ์ ์ ์์ ๋ฅผ ํตํด ์๊ฐํ๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก ๋ฒ๋ค๋ฌ๊ฐ ์ฑ๊ณต์ ์ธ ์ต์ ํ๋ฅผ ์ ์ฉํ๊ธฐ ์ํด์ CommonJS ๋์ ESM์ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ํ์คํ ๋ฐฉ๋ฒ์์ ์๊ธฐํ๋ค.
[์ฐธ๊ณ ] is-esm ํ๋ก์ ํธ๋ ํด๋น ํจํค์ง๊ฐ ESM ๋ชจ๋์ธ์ง ๊ฐ๋จํ๊ฒ ํ์ธํ ์ ์๊ฒ ๋์์ค๋ค.
Understanding client-side JavaScript frameworks
Mozilla ์ฌ๋จ์ด ์ด์ํ๋ MDN ๋ฌธ์ ์ฌ์ดํธ๋ ์ฌ์ค์ ์น ๊ธฐ์ ๋ค์ "๊ณต์" ๋ฌธ์์ ๋ค๋ฆ์๋ defacto ์ฌ์ดํธ๋ผ ํ ์ ์๋ค.
MDN์ ํ์ค ๊ธฐ์ ๋ค์ ์ฃผ๋ก ๋ค๋ฃจ์ง๋ง, ์ฃผ์ ํ๋ ์์ํฌ๋ค์ ๋ํ ๋ด์ฉ๋ ๋ค๋ฃจ๊ณ ์๋ค.
Faster Web App Delivery with PRPL
PRPL(Push, Render, Pre-cache, Lazy-load) ํจํด์ Polymer ํ์ด 2016๋ ์๊ฐํ๋ ๊ฐ๋ ์ผ๋ก ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์กฐํ์ ์ ๊ณต์ ๋ํ ๋ฐฉ๋ฒ๋ก ์ด๋ค.
์ด ๊ธ์์ PRPL ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ๊ตฌ์ฑ ์์์ ๊ตฌ์กฐ์ ๋ํด ๊ฐ๋ณ๊ฒ ์๊ฐํ๋ฉฐ, 2017๋ ๋ถํฐ PRPL์ ์ ์ฉํด ์๋น์คํ๊ณ ์๋ ํธ์ํฐ์ ์ฌ๋ก๋ฅผ ํตํด ์ฑ๋ฅ ์งํฅ์ ์ธ ์๋น์ค ๊ฐ๋ฐ ํจํด์ ์๊ฐํ๋ค.
React Summit Remote Edition 2020
์ง๋ 5์ ์งํ๋๋ React Summit Remote Edition 2020
์จ๋ผ์ธ ์ฝํผ๋ฐ์ค ์ธ์
๋ค์ ๋ํ ์ฌ์๋ชฉ๋ก์ผ๋ก, Next.js ๊ฐ๋ฐ์์ธ Guillermo Rauch, React Testing Library ๊ฐ๋ฐ์์ธ Kent C. Dodds ๋ฑ์ด ์ฐ์ฌ๋ก ์ฐธ์ฌํ ์ธ์
๋ค์ ๋ค์ด๋ณผ ์ ์๋ค.
Svelte Summit 2020
์ง๋ 10์ 18์ผ ์งํ๋ Svelte ์จ๋ผ์ธ ์ฝํผ๋ฐ์ค๋ก, ์ด 18๊ฐ์ ๋ค์ํ ์ฃผ์ ๋ก ๊ตฌ์ฑ๋ ์ธ์ ๋ค์ ํ์ธํด ๋ณผ์ ์๋ค.
Two years of micro-frontends: A retrospective
Create React App๊ณผ Stroybook ๋ฉ์ธํฐ๋๋ก ์ฐธ์ฌํ๊ณ ์๋ Brody McKee์ ๊ธ๋ก, ์ง๋ 2๋ ๊ฐ ๋ง์ดํฌ๋ก ํ๋ฐํธ์๋ ๋์ ์ ๋ํ ์ํ๋ฅผ ๋ฐํ๋ ๊ธ๋ก ์ค ์๋น์ค ๋์ ์ ํตํ ์ฅ๋จ์ ์ ๊ณต์ ํ๋ค.
Whats's New in Webpack 5

์ง๋ 10์ Webpack 4๊ฐ ๋ฆด๋ฆฌ์ค๋ ์ง 2๋ ๋ง์ v5๊ฐ ์ถ์๋์๋ค. v5์์๋ ์ด์ ๋ฒ์ ์ ๋นํด ๋น๋ ์๋๊ฐ ํฅ์๋์์ผ๋ฉฐ, ๋ฒ๋ค ์ฌ์ด์ฆ๋ ๊ฐ์ํ๋ค.
v5์์ ์ฃผ๋ชฉํด ๋ณผ ๋งํ ๋ณ๊ฒฝ์ฌํญ์ Module Federation ๊ธฐ๋ฅ์ผ๋ก, ๋ค์์ Webpack ๋น๋๊ฐ ํจ๊ป ๋์ํ ์ ์์ผ๋ฉฐ ํ์์ ๋ฐ๋ผ ํฐ ์ ์ฝ ์์ด ๋ค๋ฅธ ๋ชจ๋๋ก๋ถํฐ ์ฝ๋๋ฅผ ๋์ ์ผ๋ก ๋ถ๋ฌ์ฌ ์๋ ์๋ค.
๊ฐ๋ฐ ํ๊ฒฝ์์ ๋ฒ๋ค๋ฌ์ ๋ฉ์ด์ ๋ฒ์ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ด์ฉ๋ฉด ๊ท์ฐฎ๊ณ ์ด๋ ค์ฐ๋ฉฐ ์์ด ๋ง์ด ๊ฐ๋ ์์ ์ผ ๊ฒ์ด๋ค. ํ์ง๋ง ๋ ์พ์ ํ๊ณ ์์ฐ์ ์ธ ๋น๋ ๋ฐ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ํด ๊ผญ ํ์ํ ์์ ์ด๊ธฐ๋ ํ๋ค. ์์ผ๋ก์ 2๋ ์ ์ํด ๊ฐ์ด๋๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ฐจ๊ทผ์ฐจ๊ทผ ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ์๊ฐ์ ๊ฐ์ ธ๋ณด๋ ๊ฒ์ ์ด๋จ๊น?
๋ณด๋ค ๋ ์์ธํ ์ฌํญ์ ๊ณต์ ๋ฌธ์์์ ์ฐธ๊ณ ํ ์ ์๋ค.
Next.js 10
React ์ ํ๋ฆฌ์ผ์ด์
ํ๋ ์์ํฌ์ธ Next.js์ ์๋ก์ด ๋ฉ์ด์ ๋ฆด๋ฆฌ์ค์ธ Next.js 10
์ด ๊ณต๊ฐ๋์๋ค.
๋นํธ์ธ ์ด๋ฏธ์ง ์ต์ ํ ๊ธฐ๋ฅ, ์ฑ๋ฅ ์ธก์ ์ ์ํ Analytics, ์ด์ปค๋จธ์ค ์ฌ์ดํธ๋ฅผ ์ํ Commerce ์คํํฐํท, ์ต์ React 17 ์ง์ ๋ฑ์ด ํฌํจ๋์๋ค.
Next.js CONF
์ง๋ 10์ 27์ผ, Next.js์ ์ฒซ ์จ๋ผ์ธ ์ฝํผ๋ฐ์ค๊ฐ ์งํ๋์๋ค. ์ด 4๊ฐ ํธ๋์ผ๋ก ๊ตฌ์ฑ๋ ํ๋ก๊ทธ๋จ์์๋ Next.js๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋ฌ ๋ถ์ผ์ ๊ธฐ์ ๋ค ์ฐ์ฌ๋ค์ด ์ฐธ์ฌํด ๋ค์ํ ์ฌ๋ก๋ค์ ๊ณต์ ํ๋ค.
Results of Authoring a JS Library with Rust and Wasm
์ค์จ๋ด ๊ฒ์ ๊ฐ๋ฐ์ฌ์ธ Paradox Development Studios์์ ๊ฐ๋ฐ๋ ๊ฒ์ ํ์ผ๋ค์ plaintext๋ฅผ ํ์ฑ ํ๊ฑฐ๋ ์ ์ฅํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ Jomini.js ํ๋ก์ ํธ์์ ์ฌ์ฉํ๋ ์์ JavaScript ํ์๋ฅผ Rust๋ก ์์ฑ๋ wasm ๋ชจ๋๋ก์ ์ ํ ๊ณผ์ ์ ๋ค๋ฃฌ๋ค.
์ ํ์ ํตํด ๋ ๋์ ์ฑ๋ฅ ํฅ์๊ณผ ๊ทธ์ ๋ฐ๋ฅธ ๊ฒฝํ์ ์ธก๋ฉด์ ์ดํด๋ณผ ์ ์๋ค.
What happened to Immutable.JS? And how can we react?
Immutable(๋ถ๋ณ์ฑ) ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋ํ์ ์ธ JS ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก๋ Immutable.js, immer ๋ฑ์ ๊ผฝ์ ์ ์๋ค. ํ์ง๋ง Immutable.js๋ ์ฝ 2๋ ์ ์ ๋ง์ง๋ง์ผ๋ก publish ๋ ๊ฒ์ ์๊ณ ์๋๊ฐ?
์ด ๊ธ์์๋ Immutable.js๊ฐ ํ์ฌ ์ ์ง ๋ณด์๊ฐ ๋์ง ์๊ณ ์์ผ๋ฉฐ ์ด๋ค ๋์์ ์ฐพ์ ์ ์๋์ง ์ค๋ช ํ๋ค.
Svelte for Sites, React for Apps
์น์ฌ์ดํธ๋ ์ฃผ๋ก ์ฝํ ์ธ ๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํ ์ฉ๋๋ก ์ ํ์ ์ธ ์ธํฐ๋ ์ ์ ํฌํจํ๋ฉฐ, ์ ํ์ ์ธ ์ํฉ(๋ฎ์ ์ฑ๋ฅ์ CPU, ์ ํ์ ๋ฐ์ดํฐ ์ฌ์ฉ ๋ฑ)์์๋ ์๋น๋ ์ ์์ด์ผ ํ๋ค.
๋ฐ๋ฉด, ์น์ฑ์ ์ฃผ๋ก ์ธํฐ๋ ์ ์ ํตํ ์ฌ์ฉ์ฑ์ ์ ๊ณตํ๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก ๋ฌด๊ฑฐ์ด ์์๋ค์ ํฌํจํ๋ 2MB ์ ๋์ JS ์น์ฑ์ ํฌ๊ธฐ๋ 200MB ์ฉ๋์ ๋ชจ๋ฐ์ผ ์ฑ๊ณผ ๋น๊ต ์ ์๋์ ์ผ๋ก ๋์์ง ์๋ค๊ณ ์๊ฐ๋ ์ ์๋ค.
์ด ๊ธ์์๋ ์น์ฌ์ดํธ์ ์น์ฑ์ ํน์ฑ์ ๋ฐ๋ผ ๊ฐ๊ฐ์ ํ๋ ์์ํฌ๋ค์ ๊ธฐ์ ์ ํน์ฑ๋ค์ ํตํด ์ ์น์ฌ์ดํธ๋ Svelte๊ฐ ๋ ์ ํฉํ๊ณ , ๊ทธ๋ฆฌ๊ณ React๋ ์น์ฑ์ ๋ ์ ํฉํ์ง๋ฅผ ์ค๋ช ํ๋ค.
ํํ ๋ฆฌ์ผ
Introducing: The Async Cookie Store API
Chrome 87+๋ถํฐ ์๋กญ๊ฒ ์ถ๊ฐ๋ ๊ธฐ์กด์ document.cookie
์ ์๋ก์ด ๊ฐ์ API์ธ Cookie Store API
๋ฅผ ์๊ฐํ๋ ๊ธ๋ก, Service Worker์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํตํด ์ฟ ํค๋ฅผ ์ค์ ํ๊ฑฐ๋ ๊ฐ์ ธ์ฌ ์ ์๋ ๋ฐฉ๋ฒ๋ค์ ๊ฐ๋จํ ์์ ๋ฅผ ํตํด ์ค๋ช
ํ๋ค.
// ๊ธฐ์กด ๋ฐฉ์
document.cookie.split(";").forEach(v => ...);
// Cookie Sotre API
await cookieStore.get("์ฟ ํค์ด๋ฆ");
30 Days Of React
30์ผ์ ๊ธฐ๊ฐ ๋์ ๋งค์ผ ๋ฐ๋ผ ํด ๋ณผ ์ ์๋ Step by step React ๊ฐ์ด๋๋ฅผ ํตํด React๋ฅผ ๋ง์คํฐํ ์ ์๋๋ก ๋์์ฃผ๋ ํ๋ก์ ํธ๋ค.
๊ผญ ์ผ์ ์ ๋ง์ถฐ ํ์ตํ์ง ์๋๋ผ๋, ๋ชฉ์ฐจ๋ฅผ ํตํด ์ ๊ณต๋๋ ๊ฐ๊ฐ์ ๊ฐ๋ ๋ค์ ๋ํ ์ค๋ช ์ ์ฝ์ด๋ณด๋ ๊ฒ๋ง์ผ๋ก๋ React์ ์ฃผ์ ๊ฐ๋ ๋ค์ ํ์ตํ ์ ์๋ค.
Build an Income Tracker in ReactJS ~ useState, useEffect, useRef
ํ ์ด ํ๋ก์ ํธ์ธ "Income Tracker" ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ฒ์๋ถํฐ ์์ฑ๊น์ง ๋ฐ๋ผ ํด ๋ณผ ์ ์๋ ํํ ๋ฆฌ์ผ ๋์์์ผ๋ก, React์ ๊ธฐ๋ณธ์ ๊ตฌ์ฑ์์์ ํจ๊ป ๋ค์ํ Hooks(useState, useRef, useEffect) ๋ฑ์ ํ์ฉ ๋ฐฉ๋ฒ ๋ฑ๋ ํจ๊ป ๋ฐฐ์๋ณผ ์ ์๋ค.
ํ๋ก์ ํธ ์ ์ฅ์: https://github.com/TylerPottsDev/income-tracker-rjs
Beginner's Series - Intro to JavaScript (Node.js)
MS์์ ๋ง๋ Node.js์์ ๋์ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ํ ์ด์ฌ์ ๋์ JavaScript ํํ ๋ฆฌ์ผ๋ก, ์ด๋ก ์ ์ธ ๊ฒ๋ณด๋จ ๋ฌธ๋ฒ์ ๋ณด๋ค ์ง์คํ๋ค.
๋๊ตฌ
Volta

Node.js ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ์ํ ๋ํ์ ์ธ ๋๊ตฌ๋ก๋ nvm๊ณผ n์ด ์์ง๋ง, ๋ช๊ฐ์ง ์ด์๋ค(Windows ๋ฏธ์ง์, ์ฑ๋ฅ, ์ง๊ด์ ์ด์ง ์์ ์ค์ ๋ฐฉ๋ฒ ๋ฑ)์ด ์กด์ฌํ๋ค.
Rust๋ก ๊ฐ๋ฐ๋ Volta๋ Node.js์ธ, npm, yarn ๋ฑ FE ๊ฐ๋ฐ์ ํ์ํ ๋ค์ํ ํด์ฒด์ธ ๋๊ตฌ๋ค์ ๋น ๋ฅด๊ณ ์ฝ๊ฒ ์ค์นํ๊ณ , ํ๋ก์ ํธ๋ณ ๋ค๋ฅธ ๋ฒ์ ์ฌ์ฉ ๋ฑ์ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํ๋ค.
๋๋ค์์ Unix(MacOS) ์์คํ ์์ ๊ฐ๋จํ๊ฒ ๋ค์๊ณผ ๊ฐ์ด ์ค์นํ ์ ์๊ณ , Windows๋ ๋ค์์ ์ค์นํ์ผ์ ๋ฐ์ ์ค์นํ๋ฉด ๋๋ค.
# Unix ํ๊ฒฝ์์ ์ค์น
curl https://get.volta.sh | bash
volta install node
volta install node@12
ํ๋ก์ ํธ์ ๋ฐ๋ผ ์๋ก ๋ค๋ฅธ Node.js(๋๋ ๋ค๋ฅธ ํด์ฒด์ธ) ๋ฒ์ ์ผ๋ก ์๋ ์ ํ๋๊ฒ ํ๊ณ ์ถ๋ค๋ฉด, package.json ํ์ผ์ engines
ํ๋ ๋๋ volta pin ํจํค์ง๋ช
@๋ฒ์
๋ช
๋ น์ด๋ฅผ ํตํด ๊ด๋ฆฌํ ์ ์๋ค.
// "volta pin node@10.15.3" ๋ช
๋ น์ด๋ package.json ํ์ผ์ ์๋์ ๊ฐ์ ์ค์ ์ ์ถ๊ฐํด ๊ด๋ฆฌํ๋ค.
"volta": {
"node": "10.15.3",
"yarn": "1.14.0"
}
๋ํ ๋ค์ํ CLI ๋๊ตฌ๋ค์ ๋ํ ๋ฒ์ ์ ํ ๊ธฐ๋ฅ๋ ์ ๊ณตํ๋ค. ํด๋น ํ๋ก์ ํธ ๋ด์์ ์๋ก ๋ค๋ฅธ typescript ํจํค์ง๋ฅผ ์ฌ์ฉ(devDependency๋ dependency๋ก ์ค์ ๋ ๊ฒฝ์ฐ)ํ๊ณ ์๋ค๋ฉด commend line์์ ํด๋น ๋ฒ์ ์ ์ฌ์ฉํ๋๋ก ์ค์ ํ ์๋ ์๋ค.
cd /dev/project-using-typescript-2.9.2
tsc --version # 2.9.2
cd /dev/project-using-typescript-3.4.5
tsc --version # 3.4.5
Verdaccio
Verdaccio๋ ๋ฌด์ค์ ๋ก์ปฌ ํ๋ผ์ด๋น npm ๋ ์ง์คํธ๋ฆฌ๋ฅผ ๊ตฌ์ถํ ์ ์๊ฒ ๋์์ฃผ๋ ๋๊ตฌ๋ก, ์์ฒด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํฌํจํ๊ณ ์์ด ์ฌ์ฉ์ ์ํด ๋ณ๋ ๋ฐ์ด๋ฒ ์ด์ค๋ฅผ ๊ตฌ์ถ ํ์๊ฐ ์๋ค. ๋ํ ์ธ๋ถ์ ๋ค๋ฅธ ๋ ์ง์คํธ๋ฆฌ๋ค(ex. npmjs.org)์ ๋ํ ํ๋ก์ ๊ธฐ๋ฅ๋ ์ ๊ณต๋๋ค.
Reactime
Chrome ํ์ฅ ๊ธฐ๋ฅ์ผ๋ก, React ์ ํ๋ฆฌ์ผ์ด์ ์ปดํฌ๋ํธ๋ค์ ์ํ๋ฅผ ์ค๋ ์ท์ผ๋ก ์ ์ฅํด Time Travel Debugging์ ํตํด ํน์ ์ํ ์ด๋์ ํตํ ๋๋ฒ๊น ์ ๋์์ค๋ค.
ํ์ด์ค๋ถ์ ์๋ก์ด ์ํ ๊ด๋ฆฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ Recoil์ ํฌํจ, Context API, ๋ฑ์ ์ง์ํ๋ค.
ConsoleChat.io
์ด์ ๋ง ์์ํ ์ง ์ผ๋ง ๋์ง ์์ ํ๋ก์ ํธ๋ก, ๋ธ๋ผ์ฐ์ ์ฝ์์ ํตํ ์ค์๊ฐ ์ฑํ ๋ฃธ์ ๋ง๋ค ์ ์๋๋ก ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค. ์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ก๋ฉ๋ ํ์ด์ง์ ์ ์ ํ, ์ฝ์์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๊ธฐํ์ ์ฌ์ฉํ ์ฌ์ฉ์๋ช ์ ์ค์ ํ๊ณ ๋ฐ๋ก ๋ํ๋ฅผ ์์ํ ์ ์๋ค.
์์ง ๋ช ๋ น์ด๋ฅผ ํตํ ์ฌ์ฉ๋ฐฉ๋ฒ ๋ฑ์์ ๊ฐ์ ๋ ์ฌ์ง๊ฐ ๋ง์ ๋ณด์ด์ง๋ง, ์ฐธ์ ํ ์ ๊ทผ ๋ฐฉ๋ฒ์ด ์ฌ๋ฏธ์์ด ๋ณด์ด๋ ํ๋ก์ ํธ๋ค.
Turbolinks
Turbolinks๋ ๋ณ๋์ ๋ณต์กํ ํด๋ผ์ด์ธํธ JavaScript ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ SPA์์ ๋ด๋น๊ฒ์ด์ ํ์ด์ง๋ค๋ก์ ๋น ๋ฅธ ์ด๋(๋ ๋๋ง)์ ๊ฐ๋ฅ์ผ ํ๋ค.
๋์ผ ๋๋ฉ์ธ ๋ด์ ๋ชจ๋ <a href>
ํด๋ฆญ์ ์ธํฐ์
ํธํ๊ณ History API๋ก ๊ธฐ์กด link๋ฅผ ์
๋ฐ์ดํธํ ํ, XHR์ ํตํด ๋งํฌ ๋์ ํ์ด์ง๋ฅผ ๋ก๋ฉํ๋ค.
์ดํ <body>
์์ญ์ ๋ชจ๋ ์ฝํ
์ธ ๋ฅผ ์๋ก์ด ํ์ด์ง์ ๊ฒ์ผ๋ก ๋์ฒดํ๊ณ , <head>
๋ ๋จธ์ง ํ๋ ํํ๋ก ๋์ํ๋ค.
HTML5 History API์ requestAnimationFrame์ด ์ง์๋๋ ๋ธ๋ผ์ฐ์ ๋ผ๋ฉด ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.