2021-07 
๋งํฌ & ์ฝ์๊ฑฐ๋ฆฌ
React 18 ๋ณ๊ฒฝ์
2021.6.8 React ๊ณต์ ํ์ด์ง์์ React 18์ ๋ํ ๊ณํ์ ๊ณต์ ํ์๋ค. ์ด ๊ธ์ React 18์์ ๋ณ๊ฒฝ๋ Suspense ssr architecture, State batch update, Transition ์ ๋ํด ์ค๋ช ํ ๊ธ์ด๋ค.
๊ธฐ์กด์๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ ์ดํด์ผํ๊ฑฐ๋ ์ ์ฝ์ด ์๋ SSR ๋๋๋ง ๋ถ๋ถ์ด pipeToNodeWritable, Suspense์ Lazy๋ฅผ ํตํด React ๋จ์์์ ํจ๊ณผ์ ์ผ๋ก ์ ์ฉํ ์ ์๊ฒ ๋๋ค.

๊ธฐ์กด์ ๋ถ๋ถ ์ ์ฉ๋์๋ State batch update๋ api ์์ฒญ, timeout๊ณผ ๊ฐ์ ๋น๋๊ธฐ ์์ ๋ด์์๋ ์๋ ์ ์ฉ๋๋ค. ๋ฟ๋ง์๋๋ผ ์ํ ์ ๋ฐ์ดํธ์ ์ฐ์ ์์๋ฅผ ์ ํ ์ ์๋ startTransition ์ธํฐํ์ด์ค๋ ์ ๊ณตํ๋ค.
React 18์ ๊ธฐ์กด Major ๋ฒ์ ์ ๊ทธ๋ ์ด๋์ ๋์ผํ๊ฒ ์ดํ๋ฆฌ์ผ์ด์ ์ฝ๋ ๋ณ๊ฒฝ ์์ด ์์ฝ๊ฒ ์ ์ฉํ ์ ์๊ธฐ์ ์ ์ ๋ฆด๋ฆฌ์ฆ๊ฐ ๋๋ฉด ๋ถ๋ด์์ด ์ ์ฉํด ๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
[์ฐธ๊ณ ]
๋ฌธ์ ์ ์ฒด๋ฅผ ์ดํด๋ณด๊ธฐ ๋ถ๋ด์ค๋ฝ๋ค๋ฉด, ๋ค์์ 12๊ฐ ํธ์์ผ๋ก ์ ๋ฆฌ๋ ์์ฝ๋ณธ์ ํ์ธํ๋ผ.
https://twitter.com/ProvablyFlarnie/status/1406729279317045248Project React 18 ๋ฆด๋ฆฌ์ฆ ์ผ์ ์ ๋ค์์ ์ฐธ๊ณ ํ๊ธฐ ๋ฐ๋๋ค.
https://reactjs.org/blog/2021/06/08/the-plan-for-react-18.html#projected-react-18-release-timeline
React โ 5 Things That Might Surprise You
React์ ๋ํด ์๋ชป ์ฌ์ฉํ๊ณ ์์ ๋งํ 5๊ฐ์ง ๋ด์ฉ์ ๋ค๋ฃจ๊ณ ์๋ค. ์ด ๊ธ์ ๋์จ ์์๋ฅผ ํตํด ์กฐ๊ธ ๋ React๋ฅผ ์ ์ดํดํ๊ธธ ๋ฐ๋๋ค.
5 Advanced React Patterns
๋จ์ํ Counter ์์ ๋ฅผ ๋ฐํ์ผ๋ก 5๊ฐ์ง React ํจํด์ ์ ์ด์ ์ญ์ , ๊ตฌํ ๋ณต์ก๋ ๊ธฐ์ค์ผ๋ก ์ค๋ช ํ๋ค.

Why React Hooks cannot be conditioned
React hooks์ ํจ๊ป eslint-plugin-react-hooks์ ์ฌ์ฉํด๋ดค๋ค๋ฉด, React Hook "useState" is called conditionally.
์ ๊ฐ์ ์๊ธฐ์น ์์ ๊ฒฝ๊ณ ๋ฉ์ธ์ง์ ๋ง๋ฅ๋จ๋ฆฐ ๊ฒฝํ์ด ์์ ๊ฒ์ด๋ค.
function Component({ doEffect }) {
// {value: 0, next: {value: 0, next: null}}
const [first, setFirst] = useState(0);
if (doEffect) {
// {value: 0, next: null}
useEffect(/*...*/); // โ ๏ธ Wrong hook here
}
// null
const [second, setSecond] = useState(0); // โ ๏ธ No hook left!!
}
์ด ๊ธ์ Hooks๊ฐ ์ ์กฐ๊ฑด์์ ํตํด ์ฌ์ฉ๋ ์ ์๋์ง๋ฅผ ์ค๋ช ํ๋ค.
Next.js 11 ์ ์ ๋ฆด๋ฆฌ์ฆ
Next.js 11์ด 2021.6.16 ์ ์ ๋ฆด๋ฆฌ์ฆ ๋์๋ค. 11 ๋ฒ์ ์์๋ React Fast Refresh ๋ฅผ ๊ฐ์ ํ์ฌ ์์ ์๊ฐ์ ์ต๋ 24% ๊ฐ์ ํ์๊ณ , ๋ณ๊ฒฝ ์ฒ๋ฆฌ์๊ฐ์ 40% ๋จ์ถ ์์ผฐ๋ค. ๋ฟ๋ง์๋๋ผ ๊ธฐ๋ณธ ๋ฒ๋ค๋ฌ ๋๊ตฌ๋ก Webpack5๋ฅผ ์ ๊ณตํจ์ผ๋ก์จ Webpack5์ ์ฅ์ ์ Next.js 11์์๋ ์ฒด๊ฐํ ์ ์๋ค.
๋ํ next/script
, next/image
์ ๊ฐ์ ๋ชจ๋๋ ์ ๊ณตํ์ฌ ์์ฝ๊ฒ ์คํฌ๋ฆฝํธ ์ ์ด์ ์ด๋ฏธ์ง ํ๋ ์ด์ค ํ๋ ์ ์ด๋ฅผ ํ ์ ์๊ฒ ๋์๋ค.
๊ทธ ์ธ์ Create React App Migration, Next.js Live ๊ธฐ๋ฅ์ ์คํ์ ์ผ๋ก ์ด์ฉํ ์ ์๊ฒ ๋์๋ค.
ES2021
2021.6.22 ES2021 ์คํ์ด ์ ์ ์น์ธ ๋์๋ค.
- Logical Assignment Operators (&&= ||= ??=)
- Numeric Separators (1_000)
- Promise.any & AggregateError
- String.prototype.replaceAll
- WeakRefs & FinalizationRegistry
ES2021 ์คํ์ ๊ฐ๋จํ ์์ ๋ ๋ค์ ๋งํฌ๋ฅผ ํตํด ์ดํด๋ณผ ์ ์๋ค.
https://h3manth.com/ES2021/
How To Fix Cumulative Layout Shift (CLS) Issues
์ด๋ฏธ์ง ํฌ๊ธฐ ๋ถํฐ ํฐํธ, JavaScript ์ ์ฉ๋ฑ ๋ค์ํ ์์ญ์์ ๋ฐ์ ํ ์ ์๋ CLS ์ด์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์กฐ๋ชฉ ์กฐ๋ชฉ ์ค๋ช ํ๊ณ ์๋ค. ๊ฐ๋ฐํ๊ณ ์๋ ์๋น์ค์ ์ฐจ๊ทผ์ฐจ๊ทผ ์ ์ฉํด๋ณด๊ธฐ ์ข์ ๊ธ์ด๋ค.
CSS For Web Vitals ๊ธ๋ ํจ๊ป ์ฐธ๊ณ ํ๊ธฐ ๋ฐ๋๋ค.
Towards a better responsiveness metric
์ฌ์ฉ์ ๋ฐ์์ฑ์ ์ํฅ์ ๋ฏธ์น ์ ์๋ metric๋ก FID(First Input Delay)๋ฅผ ์ดํด๋ณด๊ณ ์ฌ์ฉ์ ๋ฐ์์ฑ์ ๋์ผ ์ ์๋ ๋ช๊ฐ์ง ์์ด๋์ด๋ฅผ ๊ธฐ์ ํ๊ณ ์๋ค.

Introducing Aurora
ํฌ๋กฌ ์์ง๋์ด(๋ด๋ถ ์ฝ๋๋ช WebSDK)ํ ์ ์ง๋ 2๋ ๊ฐ ์ฃผ์ ์คํ์์ค ํ๋ ์์ํฌ/๋๊ตฌ๋ค๊ณผ์ ํ์ ์ ํตํด ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๊ธฐ ์ํ ๋ ธ๋ ฅ์ ํด์์ผ๋ฉฐ, ์ง๋ 6์ 15์ผ ์ด๋ฅผ "Aurora"๋ผ ๋ช ๋ช ํ๋ค.
๋ชฉํ๋ ๋จ์ํ๋ค. ์ฑ์ด ์ด๋ค ๋ธ๋ผ์ฐ์ ์์ ๋ ๋๋ง ๋๋ ๊ฒ์ธ์ง ์๊ด์์ด, ๊ฐ์ฅ ๋ฐ์ด๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๊ฒ์ด๋ฉฐ, ์์ผ๋ก ๋ช ๊ฐ์๊ฐ ๋ณด๋ค ์์ธํ ๋ด์ฉ๋ค์ ๊ณต๊ฐํ ์์ ์์ ๋ฐํ๋ค.

Aurora์ ์ฒซ ๋ฒ์งธ ์์ ์ "Comformance"๋ผ ๋ถ๋ฆฌ๋ฉฐ, JavaScript ํ๋ ์์ํฌ ์ํ๊ณ์ ์ง์คํด ์์ธก ๊ฐ๋ฅํ ๋ก๋ฉ ์ฑ๋ฅ๊ณผ Core Web Vitals ์ ์๋ฅผ ๋์ผ ์ ์๋๋ก ์ฝ๋ฉ ๋ชจ๋ฒ์ฌ๋ก๋ฅผ ๊ตฌํํ ์ ์๋๋ก ๋์์ ์ฃผ๋ ๊ฒ์ ๋ชฉํ๋ฅผ ๋๊ณ ์๋ค.
Forming the WebExtensions Community Group
์ง๋ ์๋ ๊ฐ ๋ธ๋ผ์ฐ์ ํ์ฅ ์ต์คํ ์ (ํ๋ฌ๊ทธ์ธ)๋ค์ ์ฌ์ฉ์ ์ฆ๊ฐ์ ํจ๊ป ๋ค์ ๋ธ๋ผ์ฐ์ ๋ค์์์ ์ํธ ํธํ ๋ชจ๋ธ ์ฑํ ๋ฑ์ ์์ง์์ ๋ฐ๋ผ ํ์ฅ ์ต์คํ ์ ์ ํ์คํ๋ ์ ๊ทผ์ ํ์์ฑ์ด ๋๋๋์๊ณ , ์ด๋ฅผ ์ํด W3C ์ฐํ WebExtenstions Community Group(WECG)๊ฐ ์ง๋ 6์ 4์ผ ์ฃผ์ ๋ธ๋ผ์ฐ์ ๋ฒค๋๋ค์ธ Apple, Google, MS ๊ทธ๋ฆฌ๊ณ Mozilla๊ฐ ์ฐธ์ฌ๋ฅผ ํตํด ๋ง๋ค์ด์ก๋ค.
History of the Web: Part 1
์ ์์ ์ง๋ 20๋ ๊ฐ ์น ์์ญ์์์ ๊ธฐ์ ์ ๊ฒฝํ์ ๋ฐํ์ ํตํด ์น์ ์ญ์ฌ๋ฅผ ๊ฐ๋ตํ๊ฒ ์ ๋ฆฌํ ๋ด์ฉ์ ๊ธ์ด๋ค.
์น์ ๊ตฌ์ฑํ๋ ์์๋ค์ด ์ด๋์์๋ถํฐ ์์๋์๋์ง๋ฅผ ์๊ฒ ๋๋ฉด, ์ด๋๋ก ๊ฐ์ผ ํ๋์ง ์ ์ ์๊ธฐ ๋๋ฌธ์ ์ง๋ ์ญ์ฌ์ ๋ํ ๋ฌธ๋งฅ์ ์๋ ๊ฒ์ด ์ค์ํ๋ค๊ณ ์๊ฐํด ๊ธ์ ์์ฑํ๊ฒ ๋์๋ค๊ณ ๊ทธ ์ด์ ๋ฅผ ๋ฐํ๊ณ ์๋ค.
MDN Plus
MDN์์๋ ์ ๊ณ์ ์ ๋ฌธ๊ฐ๋ค์ด ์ฐธ์ฌํ๋ ์๊ฐ ์ฌ์ธต ๊ธฐ์ ์ ๋ฌธ์๋ฅผ ์ ๊ณตํ๋ ์๋ก์ด ์ ๋ฃ(์ $10 ๋๋ ์ฐ $100 ์ ๋์) ํ๋ฆฌ๋ฏธ์ ์๋น์ค์ธ "MDN Plus"๋ฅผ ๊ณํํ๊ณ ์๋ค. ๊ธฐ์กด์ MDN Web Docs๋ ์ด๋ ํ ๋ณํ๋ ์์ด ๊ธฐ์กด๊ณผ ๊ฐ์ด ๋ฌด๋ฃ๋ก ์ ๊ณต๋ ๊ฒ์์ ๋ฐํ๊ณ ์๋ค.
ํํ ๋ฆฌ์ผ
Anyone Can Learn CSS Grid
CSS Grid์ ํต์ฌ ์์๋ค์ ๋ฐฐ์ธ ์ ์๋ค. ์ง์ Grid ์์ฑ๋ค์ ๋ํ ๊ฐ์ ์ ๋ ฅํด ๋ ๋๋ง ๊ฒฐ๊ณผ๋ฅผ ์ฆ์ ํ์ธํ ์ ์์ด, ๋งค์ฐ ์ง๊ด์ ์ธ ํ์ต์ ์งํํ ์ ์๋ค.
Generating (and Solving!) Sudokus in CSS
JavaScript ํ ์ค ์์ด ์ค๋์ฟ ๋ฅผ ๊ตฌํํ ํํ ๋ฆฌ์ผ์ด๋ค. CSS๋ฅผ ์ด์ฉํ ํ๋ก๊ทธ๋๋ฐ์ ๊ฒฝํํด ๋ณด๊ธฐ์๋ ์ถฉ๋ถํ ํํ ๋ฆฌ์ผ์ด๋ค.

์ฝ๋์ ๋๊ตฌ
Utopia
๋์์ธ๊ณผ ๊ฐ๋ฐ ํ๊ฒฝ(VSCode)์ด ํตํฉ๋ ์จ๋ผ์ธ React ๊ฐ๋ฐ ํ๊ฒฝ ๋๊ตฌ๋ก ์ ๊ณต๋๋ ๋์์ธ ๋๊ตฌ์ ์์ฑ๋ ์ฝ๋๋ฅผ ํตํด ์ค์๊ฐ ํธ์ง๊ณผ ์์ฑ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ๋ฅผ ํตํด ํ์ธํ ์ ์๋ค.
์์ง ๊ฐ๋ฐ ์ด๊ธฐ ๋จ๊ณ์ง๋ง, ์ง์ ์ฌ์ฉํด ๋ณผ์ ์๋ค. ๋ณด๋ค ์์ธํ ๋ด์ฉ์ Introducing Utopia๋ฅผ ํตํด ํ์ธํ ์ ์๋ค.
The DOM Event Visualizer
ํ๋ ์์ํฌ์ ์ฌ์ฉ์ด ๋ณดํธํ๋๋ฉด์, DOM ์ด๋ฒคํธ๊ฐ ์ด๋ป๊ฒ ํ๋ฅด๋์ง ์ธ๋ถ์ ์ธ ๋ด์ฉ์ ์ดํดํ์ง ๋ชปํ ์ฑ ์ด๋ฒคํธ๋ฅผ ๋ค๋ฃจ๊ณ ์๋ ๊ฒ์ด ํ์ค์ด๋ค. ์ง์ ์ ์ผ๋ก ๋ค๋ฃจ์ง๋ ์๋๋ผ๋, ์ด๋ฒคํธ ์ฒ๋ฆฌ์ ๋ณธ์ง์ ์ธ ๊ฒ์ ๋ฌ๋ผ์ง์ง ์๊ธฐ ๋๋ฌธ์ ๋ณด๋ค ๊น์ ์ดํด๋ฅผ ์ํด์ DOM์์ ์ด๋ฒคํธ๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง๋ฅผ ์๋ ๊ฒ์ ์ค์ํ๋ฉฐ, ๋งํฌ๋ฅผ ํตํด ์ ๊ณต๋๋ ๋๊ตฌ๋ฅผ ํตํด ์๊ฐ์ ์ธ ์ด๋ฒคํธ ํ๋ฆ์ ์ฝ๊ฒ ํ์ธํด ๋ณผ ์ ์๋ค.
DOM ์ด๋ฒคํธ์ ๋ํด ๋ณด๋ค ๊น๊ฒ ์ดํดํ๊ณ ์ถ๋ค๋ฉด, ๋ค์์ ๋ฌด๋ฃ ์จ๋ผ์ธ ๊ฐ์ ๋์์์ ์ฐธ๊ณ ํ๋ผ.
Your Ultimate Guide to Understanding DOM Events
yare.io
JavaScript ์ฝ๋ ์์ฑ์ ํตํด ์ ๋์ ์ ์ดํ๋ ์ค์๊ฐ ์ ๋ต ๊ฒ์์ด๋ค.

CyberChef
์ฌ์ด๋ฒ์์ "์ค์์ค ์๋ฏธ ๋์ดํ"๋ฅผ ํ๋ฐฉํด, ์ ๋ ฅ๊ฐ์ ๋ํ ๋ค์ํ ๋ณํ์์ (์ํธํ, ์ธ์ฝ๋ฉ, ๋ฑ)์ ์์ฝ๊ฒ ์ํํ ์ ์๋ ์น ๋๊ตฌ๋ค.
n8n

Node ๊ธฐ๋ฐ์ ์ํฌํ๋ก์ฐ ์๋ํ ๋๊ตฌ๋ค.
์๋์ ๋ฐ๋ชจ ๋์์์์ , GitHub Star์ ๋ํ Slack ์๋ฆผ์ ๋ฐ๋ ์๋ํ ๊ตฌ์ฑ๋ฐฉ๋ฒ์ ํ์ธํ ์ ์๋ค. n8n.io - Slack Notification on Github Star
Lighthouse Metrics
๊ฐ๋จํ๊ฒ ์ฌ์ดํธ์ Lighthouse Metrics๋ฅผ ์ง์ญ๋ณ๋ก ํ์ธํด ๋ณผ ์ ์๋ค. ๋ด๊ฐ ๊ฐ๋ฐ ์ค์ธ ์๋น์ค์ ์ฑ๋ฅ ์งํ๋ฅผ ์์ฝ๊ฒ ํ์ธํด๋ณด์.
Google Map React
Google Map React๋ฅผ ์ฌ์ฉํ๋ฉด, ๊ตฌ๊ธ ์ง๋ ์์ ์ด๋ ํ React ์ปดํฌ๋ํธ๋ผ๋ ๋ ๋๋ง ํ ์ ์๋๋ก ๊ตฌ์ฑํ ์ ์๋ค.
Wu Tang Lorem Ipsum Text Generator
Vanilla JavaScript๋ก ์์ฑ๋ ํ ์คํธ ์์ฑ๊ธฐ๋ก ํ ์คํธ ์ฉ๋๋ก ๊ฐํธํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
Better Comments
VS Code Extension์ผ๋ก Alerts, Query, TODO, Highlight์ ๊ฐ์ ๋ค์ํ ์ข ๋ฅ์ ์ปค๋ฉํธ๋ฅผ ํธ์ง๊ธฐ์์ ํํํ ์ ์๋ค.
Highlight Matching Tag
HTML ํ๊ทธ ์ง์ ์๊ฐ์ ์ผ๋ก ํ์ํด์ฃผ๋ VS Code Extension ์ด๋ค.

depcheck
depcheck๋ฅผ ํตํด ์ค์ ์ฌ์ฉํ์ง ์๊ฑฐ๋ ๋๋ฝ๋ npm ๋ชจ๋์ ํ์ธ ํ ์ ์๋ค. CI์ ๋์ ํ๋ฉด ์ข์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
$> depcheck /path/to/my/project
Unused dependencies
* underscore
Unused devDependencies
* jasmine
Missing dependencies
* lodash