2021-12 
๋งํฌ & ์ฝ์๊ฑฐ๋ฆฌ
DEVIEW 2021
๊ตญ๋ด ๊ฐ๋ฐ์ ์ฝํผ๋ฐ์ค์ธ DEVIEW 2021์ด ์ง๋ 11์ 24์ผ ~ 26์ผ 3์ผ๊ฐ ์งํ๋์๋ค.
ํค๋ ธํธ๋ฅผ ํฌํจํ ๋ชจ๋ ์ธ์ ์์์ด ๊ณต๊ฐ๋์ด ํ์ธํด ๋ด๋ ์ข์ ๋ฏํ๋ค.
[์ฐธ๊ณ ] DEVIEW 2021 Front-end ์ธ์
- Inside React (๋์์ฑ์ ๊ตฌํํ๋ ๊ธฐ์ )
React์ ๋ฐฉํฅ์ฑ์ ํจ๊ป ์ดํด๋ณด๋ฉฐ Concurrent Rendering๊ณผ ๊ทธ ๊ธฐ๋ฐ ๊ธฐ์ ์ ๋ํด ์ฐ๊ตฌํ ๋ด์ฉ์ ๊ณต์ ํ๋ค.- Next.js, Apollo์ ํจ๊ป ๋ฆฌ์กํธ ๊ฐ๋ฐ์ Next Level๋ก ๊ฐ์!
์ด์ ์ ์ฌ์ฉํ๋ ๊ธฐ์ ์คํ๊ณผ Next.js์ Apollo Client๋ฅผ ๋น๊ตํด ๋ณด๊ณ , ์ ๊ธฐ์ ์ ๋์ ํ๋ฉฐ ๊ฒช์ ๊ฒฝํ์ ๊ณต์ ํ๋ค.- React, Vue, Svelteโฆ ๋ณํํ๋ ํ๋ ์์ํฌ ์์์ ์ปดํฌ๋ํธ ๋ฐ์ ํ๊ธฐ
๋ค์ํ ํ๋ ์์ํฌ์์ ๋์ํ๋ Cross Framework Component์ 2๋ ๊ฐ ์ด์ํ๋ฉด์ ๊ฒช์๋ ๋ค์ํ ๊ณ ๋ฏผ๋ค๊ณผ ๊ฒฝํ๋ค์ ๊ณต์ ํ๋ค.- The state of JavaScript & FE, 2021 Edition (2021๋ FE ๋ํฅ, ํ๋ฐฉ์ ๋๋ด๊ธฐ)
2021๋ Front-end๋ ์ด๋ ๋ฐฉํฅ์ผ๋ก ๋์๊ฐ๊ณ ์์๊น? 2021๋ ํ ํด์ ๋ณํ๋ค์ ํ์ธํด ๋ณธ๋ค.- WhateverBuilder - HomeBuilder๋ก ๋ง๋๋ ์น์ ๋ชจ๋ ๊ฒ
์ฌ์ดํธ ์ ์ ํ๋ซํผ HomeBuilder์์ ์ฐ๊ฒฐ, ํธ์ง, ํ์ฅ์ด๋ผ๋ ๋ฌธ์ ์ ๋ํด Front-end, Back-end์์ ์ด๋ค ๊ณ ๋ฏผ๋ค์ ํ๊ณ ์ด๋ป๊ฒ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋์ง ๊ณต์ ํ๋ค.- ๊ทธ์น๋ง...์ด๋ ๊ฒ ํ์ง ์์ผ๋ฉด ๋ทํ๋ฆญ์ค๊ฐ ๊ด์ฌ์ ์ฃผ์ง ์๋๊ฑธ (์๋ฆฌ์ฆ์จ TV App ๊ฐ๋ฐ๊ธฐ)
๋ค์ด๋ฒ ์นํฐ์ OTT ์๋น์ค์ธ ์๋ฆฌ์ฆ์จ TV App์ ์คํํ๋ฉฐ ๊ฒช์ ๊ฐ๋ฐ ๊ฒฝํ์ ๊ณต์ ํ๋ค.- ๋ค์ด๋ฒ ๊ฒ์์ Server Driven UI - LAPIN
๊ธฐ์กด Front-end ์ ๋ฌด ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ ํ์ฌ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ธฐ ์ํด ์ค์ ๊ฒฝํ์ ๋ฐํ์ผ๋ก ์๊ฒ ๋ ๋ ธํ์ฐ์ ํ์ ์ค๋ช ํ๋ค.- ๋ฐ์ดํฐ ์๊ฐํ์ ๊ฝ APM FE ๊ฐ๋ฐ ์ด์ผ๊ธฐ
APM์์ Front-end ๊ฐ๋ฐ์ ์ด๋ค์ง ์๊ฐํ๊ณ , APM์์ ์ฌ์ฉ๋๋ ๋ค์ํ UI ์ปดํฌ๋ํธ๋ค์ ๋์ ์ ์ด๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ๊ณ ์๋์ง ๋ ธํ์ฐ์ ํ์ ๊ณต์ ํ๋ค.- ์ฌ๊ธฐ๋ก์ด ์จ์ผ์ฑ ๊ฐ๋ฐ
์จ์ผ ํ๋ซํผ์์ ์ฌ์ฉํ ์ ์๋ ์จ์ผ์ฑ์ ๋ง๋๋ ๊ณผ์ ๊ณผ ๋ฐฐํฌ, ์ ์ง ๋ณด์ํ๋ ๋ฐฉ๋ฒ์ ์ด์ผ๊ธฐํ๋ค.- ์น๊ณผ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ํ ํ๋กํ์ผ๋ง๊ณผ ์ฑ๋ฅ ๊ฐ์
์จ์ผ ๋ธ๋ผ์ฐ์ ์ ์นํ์ด์ง ์ฑ๋ฅ์ ๊ฐ์ ํ๋ ๊ฒฝํ์ ๊ณต์ ํ๋ฉฐ ํ๋กํ์ผ๋ง ๋ฐฉ๋ฒ์ ๋ํด ์๊ฐํ๋ค.- ํผ๊ทธ๋ง API๋ก ํ๋ ๋๋ ์ฐ๋ฆฌ : ํผ๊ทธ๋ง API๋ฅผ ํ์ฉํด ํ์ ํจ์จ์ฑ ์ฌ๋ฆฌ๊ธฐ
Figma์ Figma API์ ํน์ฑ์ ์ดํดํ๊ณ ์ค์ ๋ก ํ์ ์์ ํ์ ์ ํจ์จ์ฑ์ ๋์ด๊ธฐ ์ํด Figma API๋ฅผ ํ์ฉํ ์ฌ๋ก์ ํ์ ์๊ฐํ๋ค.
React Split Components: A new way of Function Components without Hooks
React 16.8์์ Hook์ด ๋ฑ์ฅํ ์ดํ๋ก ์ด์ ๋๋ถ๋ถ์ React ๊ฐ๋ฐ์ ํด๋์ค ์ปดํฌ๋ํธ์์ ํจ์ ์ปดํฌ๋ํธ๋ก ๋์ด๊ฐ๋ ์ถ์ธ์ด๋ค. ํ์ง๋ง Hook์ ์ด์ฌ์์๊ฒ React๋ฅผ ๋์ฑ ์ด๋ ต๊ฒ ๋ง๋๋ ์์์ด๊ธฐ๋ ํ๋ค.
์ด ๊ธ์์๋ ์ด๋ฌํ Hook๋ค์ ๋ํ ํ์ฌ ์ข ๋ ์ฝ๊ฒ ๊ฐ๋ฐํ ์ ์๋๋ก ํ๋ RiC
(React Split Component)๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋๋ ๊ณผ์ ์ ๋ณด์ฌ์ค๋ค.
๊ฐ ๊ตฌํ ๊ณผ์ ์ ํ ๋จ๊ณ์ฉ ์์ธํ ์ค๋ช ํ๋ฉฐ ์งํํ๋๋ฐ, ๋ฌด์๋ณด๋ค ๊ตฌํ ๋ฐฉ์์ด ์ฌ๋ฏธ์์ผ๋ ํ๋ฒ ์ฝ์ด๋ณด๊ธธ ์ถ์ฒํ๋ค.
Record, replay and measure user flows
Chrome 97์ ์๋ก์ด ๊ธฐ๋ฅ์ผ๋ก recorder ํจ๋์ด ์ถ๊ฐ๋์๋ค. ์ฌ์ฉ์์ ์ก์ ์ ๋ นํํ๊ณ ์ด๋ฅผ ๋ค์ ํ์ธํด ๋ณผ ์ ์๋ ๊ธฐ๋ฅ์ด๋ค. ๋จ์ ๋ นํ๋ฟ๋ง ์๋๋ผ ์ ์ฅํ ์ฌ์ฉ์์ ์ก์ ์ ์์ ํ ์๋ ์๊ธฐ์ ๋ค์ํ ์ฉ๋๋ก ์ฌ์ฉ๋ ์ ์๋ ๊ธฐ๋ฅ์ด๋ผ ์๊ฐํ๋ค.
Suspense for Data Fetching์ ์๋ ์๋ฆฌ์ ์ปจ์ (feat.๋์์ ํจ๊ณผ)
๊ธฐ์กด์ ๋ช ๋ น์ ์ธ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋จ์ด๋จ๋ฆฌ๊ธฐ ์ฝ๋ค. ๊ทธ๋์ Suspense์ ErrorBoundary๋ฅผ ์ด์ฉํ์ฌ ์ ์ธ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฐฉ์์ผ๋ก ์ฝ๋๋ฅผ ์ฌ์ฉํ๊ธฐ๋ ํ๋ค. ์ด ๊ธ์์๋ Suspense๋ฅผ ์ด์ฉํ data fetching์ ๋์ ์๋ฆฌ๋ฅผ ์ดํด๋ณด๊ณ ์ด๋ฅผ ํตํด ๋์์ ํจ๊ณผ์ ๋ํด ์ดํดํ ์๊ฐ์ ๋ฉํ ๋ชจ๋ธ์ ์ค๋ช ํ๋ค.
CS Visualized: Useful Git Commands
Git์ ๋ช ๋ น์ด๋ฅผ ์๊ฐ์ ์ผ๋ก ์ ์ค๋ช ํ ๊ธ์ด๋ค. Git์ ์ต์ํ ์ฌ์ฉ์๋ ์ต์ํ์ง ์์ ์ฌ์ฉ์๋ Git ๋ช ๋ น์ด๋ฅผ ๋ณด๋ค ์ ์ดํดํ๋ ๋ฐ ๋์ ๋๋ ๊ธ์ด๋ค.
์ค๋ฒจํธ vs ๋ฆฌ์กํธ, ๋๊ฐ ๋ ๋ฐ์ด๋ ๊น?
๋ค์ ์๊ทน์ ์ธ ์ ๋ชฉ์ผ๋ก, ๊ฐ๋จํ๊ฒ Svelte์ React๋ฅผ ๋น๊ตํ ๊ธ์ด๋ค. React์๋ ์ต์ํ์ง๋ง Svelte๋ ์์ํ ๊ฐ๋ฐ์๋ค์ด React์ ๋น๊ต๋ฅผ ํตํด Svelte์ ๋ํ ๋๋ต์ ์ธ ์ดํด๋ฅผ ์ป์ ์ ์์ ๊ฑฐ๋ผ ์๊ฐํ๋ค.
proposals.es
ECMAScript proposal๋ค์ ํ๋์ ๋ณผ ์ ์๋ ์ฌ์ดํธ์ด๋ค.
๊ฐ stage ๋ณ๋ก ์งํ ์ค์ธ proposal๋ค์ ๋ณผ ์ ์์ผ๋ฉฐ ์ํ๋ proposal์ ๊ฒ์ํด ๋ณผ ์๋ ์๋ค.
Rust Is The Future of JavaScript Infrastructure
Mozilla์์ ๋ง๋ ์ ์์ค ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ธ Rust๊ฐ JavaScript ์ธ์ด๋ฅผ ๋์ ํด์ JavaScript ๋๊ตฌ ์ํ๊ณ์ ๋ง์ ๋ถ๋ถ์ ๋์ฒดํ๊ณ ์๋ค. ๊ทธ ๋ํ์ ์ธ ์๋ SWC, Deno ๋ฑ์ด ์๋ค.
์ด ๊ธ์์๋ Rust๊ฐ JavaScript ๋๊ตฌ ์ํ๊ณ์ ๋ง์ ๋ถ๋ถ์ ์ฐจ์งํ๊ณ ์๋ ์ด์ ๋ฅผ ์ค๋ช ํ๋ค.
Under-the-hood-ReactJS
์๊ฐ์ ๋ธ๋ก ๋ฐฉ์์ผ๋ก React ๋ด๋ถ์์ ์ด๋ป๊ฒ ๋์ํ๋์ง ์ฝ๋ ๊ธฐ๋ฐ์ผ๋ก ์ค๋ช ํ๋ค. ์ด 15๊ฐ์ ์น์ ์ผ๋ก ๊ตฌ๋ถ๋์ด ์์ผ๋ฉฐ, ๋ฌธ์๋ Stack Reconciler๋ฅผ ์ฌ์ฉํ๋ React 15.4.2์ ๊ธฐ๋ฐํด ์ค๋ช ํ๋ค. ์ต์ ๋ฒ์ ์ React๋ ์๋์ง๋ง, React ๋ด๋ถ ๋์ ๋ฐฉ์์ ๋ํ ๊ถ๊ธ์ฆ์ ํด๊ฒฐํด ์ค ๊ฒ์ด๋ค.
์ถ๊ฐ์ ์ผ๋ก React์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ๊ณผ ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ค๋ช ํ๋ ๋ค์์ ๊ธ๋ ์ ์ฉํ๋ค. ๋๋ง์ ๋ฆฌ์กํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ง๋ค๊ธฐ
ํํ ๋ฆฌ์ผ
Canvas StarCraft
HTML canvas element๋ฅผ ์ด์ฉํด ์คํํฌ๋ํํธ ์ ๋ ์ ํ ๋ฐ ์ด๋์ ํ๋ด ๋ด์ด ๊ตฌํํ ๊ธ์ด๋ค.
GIF์ ํจ๊ป ์์ธํ ๊ตฌํ ๋ด์ฉ์ด ๋ด๊ฒจ ์์ผ๋ ์ฐธ๊ณ ํด ๋ณด๋ฉด ์ข์ ๋ฏํ๋ค.
How to Create and Publish a React Component Library
Custom React Component๋ฅผ ๋ง๋ค๊ณ NPM์ ํตํด ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ธ์ด๋ค.
ํ ๋จ๊ณ์ฉ ์์ธํ ์ค๋ช ํ์ฌ Custom React Component๋ฅผ ๋ง๋ค์ด ๋ณด๊ณ ์ถ์ ์ฌ๋์ด๋ผ๋ฉด ๋๊ตฌ๋ผ๋ ์ฝ๊ฒ ๋ฐ๋ผ ํ ์ ์์ ๊ฒ์ด๋ค.
RegexLearn
์ ๊ท ํํ์์ interactive ํ๊ฒ ๋ฐฐ์ธ ์ ์๋ ์ฌ์ดํธ์ด๋ค. ์ด 55๊ฐ์ ๋ฌธ์ ๋ฅผ ๊ฐ๋จํ ์ค๋ช ์ ํตํด ํ์ตํ๊ณ ํ์ด ๋ณผ ์ ์๋ค. Playground๋ ์ค๋น ์ค์ด๋ค.
Using WebAssembly (created in Rust) for Fast React Components
๋ณด๋ค ๋น ๋ฅธ React ์ปดํฌ๋ํธ ๊ฐ๋ฐ์ ์ํด wasm(Rust๋ก ์์ฑ๋)์ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๋ฉฐ, Rust๋ฅผ ์ฌ์ฉํด wasm ์ปดํ์ผ ๋ฐฉ๋ฒ๊ณผ ์ดํ ํ๋ก์ ํธ์์ wasm์ ๋ค๋ฃจ๊ธฐ ์ํ ์ค์ ๋ฐฉ๋ฒ ๋ฑ ๊ฐ ๋จ๊ณ๋ณ ํ์ํ ์์ ๋ค์ ์๊ฐํ๋ค.
import React, { useState } from "react";
import ReactDOM from "react-dom";
const wasm = import("../build/rusty_react");
wasm.then(m => {
const App = () => {
const [name, setName] = useState("");
...
return (
<> ... </>
};
ReactDOM.render(<App />, document.getElementById("root"));
});
์ฝ๋์ ๋๊ตฌ
Hasty: A JavaScript Snippet Perfomance Comparison Tool

JavaScript์ ํน์ ํจ์์ ๋ํด ๊ฐ๋จํ๊ณ ๋น ๋ฅด๊ฒ ์ฑ๋ฅ์ ์ธก์ ํ ์ ์๋๋ก ๋์์ฃผ๋ ์น์ฌ์ดํธ๋ค. ๋น์ทํ ๋๊ตฌ๋ก๋ perf.link์ jsBench๊ฐ ์๋ค.
FxTS
๊ตญ๋ด ํ์ฌ์ธ Marpple์์ ๊ณต๊ฐํ TypeScript ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. ์์ง Beta ๋ฒ์ ์ด๊ธด ํ์ง๋ง ์ง์ฐ ํ๊ฐ, ๋์์ฑ ์ ์ด, ํ์ ์ถ๋ก , ์๋ฌ ์ฒ๋ฆฌ ๋ฑ์์ ๊ฐ์ ์ ๊ฐ์ง๋ค๊ณ ํ๋ค.
React Spectrum Libraries
Adobe์์ ๋ง๋ React UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
Netlify Drop
์ ์ ์น ์ฌ์ดํธ ๋ฐฐํฌ๋ก ์ ๋ช ํ Netlify์์ Netlify Drop์ด๋ ์๋น์ค๋ฅผ ๊ณต๊ฐํ๋ค.
์ด๋ฅผ ํตํด HTML, CSS, JavaScript๋ก ๊ตฌ์ฑ๋ ํด๋๋ฅผ drag and dropํ์ฌ ์ฌ๋ฆฌ๋ฉด ๊ฐ๋จํ ๋ฐฐํฌ๊ฐ ์งํ๋๊ณ URL์ ํตํด ์ ๊ทผํด ํ์ธํด ๋ณผ ์ ์๋ค.
Remix
Remix๋ ์ง๋ 1๋ ์ฌ ์ "sponsorware" ํํ๋ก ์์ํด ์คํฐ์์ญ ์ฐธ์ฌ์๋ค๋ง ์ ํ์ ์ฌ์ฉ ๋ผ์ด์ ์ค๊ฐ ๋ถ์ฌ๋์๋ SSR์ ์ง์ํ๋ ์๋ก์ด React ๊ธฐ๋ฐ ํ๋ ์์ํฌ๋ค. React ์ํ๊ณ์์ ๋ผ์ฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ ๋ช ํ React Router๋ฅผ ๊ฐ๋ฐํ Michael Jackson์ด ์ฐธ์ฌํ๊ณ ์์ด, ์ํ๊ณ์์ ๋์ ๊ด์ฌ๊ณผ ์ฃผ๋ชฉ์ ๋ฐ๊ณ ์์๊ณ ์ต๊ทผ์ 3๋ฐฑ๋ง ๋ฌ๋ฌ์ ์๋ ํ๋ฉ ํฌ์๋ฅผ ํตํด ๋ชจ๋ ์ด๋ค์ด ์ฌ์ฉํ ์ ์๋๋ก MIT ๋ผ์ด์ ์ค๋ก ๋ณ๊ฒฝ๋์๋ค.
Remix์ ๋ํ ๋ณด๋ค ์์ธํ ๋ด์ฉ์ ๋ค์ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ๋ผ.
puppeteer-extra
puppeteer-extra๋ Puppeteer์ drop-in replacement ๋ํผ๋ก ๋ค์ํ๊ณ ์ ์ฉํ ํ๋ฌ๊ทธ์ธ์ ํ์ฉํ ์ ์๋ค.
const puppeteer = require("puppeteer-extra");
// puppeteer-extra-plugin-stealth ํ๋ฌ๊ทธ์ธ์ ๋ค์ํ ํํผ ๊ธฐ์ ์ ํตํด puppeteer(headless)์ ํ์ง๋ฅผ ์ด๋ ต๊ฒ ๋ง๋ ๋ค.
const StealthPlugin = require("puppeteer-extra-plugin-stealth");
puppeteer.use(StealthPlugin());
Doom Nukem CSS
์ผ๋ฐ์ ์ผ๋ก ์น์์์ ๊ฒ์์ Canvas๋ฅผ ์ฌ์ฉํด ๊ตฌํํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค. ์ด ํ๋ก์ ํธ๋ 4๋ ์ ์์๋์ด FPS ๊ฒ์์ ์์ด๋ผ ํ ์ ์๋ Doom์ Canvas๊ฐ ์๋ HTML/CSS/TypeScript๋ง์ ํ์ฉํด ๊ตฌํํ ๊ฒ์ด ํน์ง์ด๋ค. ์ง์ ๊ฐ๋ฐํ ReactCasting HTML ๊ด์ ํฌ์ฌ(Ray Casting) ์์ง์ ์ฌ์ฉํ๋ค.
Type<Challenge[]>
TypeScript์ ์ต์ํด์ง๊ณ ์ถ์ ๋ถ๋ค์ ์ํ ์ฌ์ดํธ. ํด๊ฒฐํด์ผ ํ ํ์ ๋ฌธ์ ๋ฅผ ์ฃผ๊ณ TypeScript Playground์์ ๋์ ํด ๋ณผ ์ ์๋ค. TypeScript๋ฅผ ์ตํ๋๋ฐ ๋ง์ ๋์์ด ๋๋ ์ฌ์ดํธ์ด๋ค.