2024-04-27.md
๐กDIL: ๋ชจ๋ ๋ฆฌ์กํธ ๋ฅ ๋ค์ด๋ธ, 8์ฃผ์ฐจ-4
์คํฐ๋: ์๊ฐ CS, https://github.com/monthly-cs/2024-03-modern-react-deep-dive
์ค๋ ์งํ: ๊ฐ์ธ๊ณต๋ถ
DIL-week6-4_2024-04-27
| DIL ์ฃผ์ฐจ | ๋ฒ์ | ๋ด์ฉ | ์ค๋์ฐจ ์ง๋ | | -------- | ---------- | -------------------------------------------------------- | ----------- | | 8์ฃผ์ฐจ | 14์ฅ, 15์ฅ | ์น์ฌ์ดํธ ๋ณด์์ ์ํ ๋ฆฌ์กํธ์ ์นํ์ด์ง ๋ณด์ ์ด์, ๋ง์น๋ฉฐ | 903~917p |
์ค๋ ์ฝ์ ๋ด์ฉ์ markdown์ผ๋ก ๊ฐ๋จํ ๋ฉ๋ชจ
๋ง์น๋ฉฐ
๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ๊ณ ๋ ค์ฌํญ
๋ ๊ฑฐ์ ์ ์ง๋ณด์ ์
- ์ต์ 16.8.6์์ ๊ฐ๋ฅํ๋ค๋ฉด 17 ๋ฒ์
- ๋ ๊ฑฐ์ ํด๋์ค ์ปดํฌ๋ํธ๋?
- ๊ธฐ์กด ์ฝ๋์ ํจ๊ป ๋์ํ๋ฏ๋ก Hooks์ ์ ์ง์ ์ฑํ / ๋๊ท๋ชจ ์ฌ์์ฑ์ ํผํ์
- ๋ฆฌ์กํธ๋ ํด๋์ค ์ปดํฌ๋ํธ๋ฅผ ๊ณ์ ์ง์ํ ์์ https://legacy.reactjs.org/docs/hooks-intro.html#gradual-adoption-strategy
์ธํฐ๋ท ์ต์คํ๋ก๋ฌ 11 ์ง์ ์
- ์ธํฐ๋ท ์ต์คํ๋ก๋ฌ 11์ ์ง์ํ์ง ์๋ ๋ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ๋ฆฌ์กํธ 18 ์ดํ
- Next.js 13 ์ดํ
- query-string 6.x ๋ฒ์ ์ดํ
- ๋ฌธ์ ๊ฐ ์๋์ง ํ๋จ ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น ํ์
์๋ฒ ์ฌ์ด๋ ๋๋๋ง ์ ํ๋ฆฌ์ผ์ด์ ๊ณ ๋ คํ๊ธฐ
- ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์ ์คํ ์๋์ ์์กด์ ์ผ์๋ก, ํ๊ท ์ ์ผ๋ก ์ฐ์ํ ์ฑ๋ฅ์ ์ง๋ ์น์ฌ์ดํธ๋ฅผ ์ ๊ณตํ๊ธฐ ์ด๋ ต๋ค.
- ์ฌ์ฉ์๋ณ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์ ์ฑ๋ฅ์ ์ฒ์ฐจ๋ง๋ณ
- ๋๋ถ๋ถ์ ์ฑ๊ธ ํ์ด์ง ์ดํ๋ฆฌ์ผ์ด์
์ Lighthouse, WebPageTest, Chrome Devtools์์ ์ข์ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ธฐ ์ด๋ ต๋ค.
- ๊ด๋ฆฌ์ ํ์ด์ง, ์ด๋ฒคํธ ํ์ด์ง, ํน์ ์๋ฒ ์ค๋น๊ฐ ์ฌ์์น ์์ ์ํฉ์ ์ ์ธํ๋ฉด (์ฌ์ ๊ฐ ๋๋ค๋ฉด) ์์๋ถํฐ ์๋ฒ ์ฌ์ด๋ ๋๋๋ง์ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ข๋ค.
- Next.js, Remix, Hydrogen(Shopify์์ ๋ง๋ฆ)
์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ์ํ ๋๋ง
- ์ถ์ธ
- ์๋ ์ ๋ฆฌ์กํธ+๋ฆฌ๋์ค๋ฅผ ์ธํธ๋ก ์ธ ๋๊ฐ ์์์
- ํ์ฌ ๋ค์ํ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๊ณ , Context API๋ก ์ํ ์ฃผ์ ๋ ๊ฐ๋ฅ
- ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์ํ๊ฐ?
- ์ ํ๋ฆฌ์ผ์ด์
์์ ๊ด๋ฆฌํด์ผํ ์ํ๊ฐ ๋ง์๊ฐ?
- ๋ฌธ์ ํธ์ง๊ธฐ, ์ํ ํฉ์ฑ
- ์ ํ๋ฆฌ์ผ์ด์
์์ ๊ด๋ฆฌํด์ผํ ์ํ๊ฐ ๋ง์๊ฐ?
๋ฆฌ์กํธ ์์กด์ฑ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น ์กฐ์ฌ
- react-**
- peerDependencies์ ๋ฆฌ์กํธ ๋ฒ์ ์ ํ์ธํด์ผ ํ๋ค.
- ๋ฆฌ์กํธ 16.8๋ฒ์ ์ด์(ํ ), ๋ฆฌ์กํธ 18(์ธ๋ถ ์ํ๊ด๋ฆฌ ๋ฐฉ๋ฒ ๋ณ๊ฒฝ)
๋ฆฌ์กํธ
-
๋ฆฌ์กํธ๋ ์ง๊ธ ๊ฐ์ฅ ๋๋ฆฌ ์ฐ์ด๋ ํ๋ฐํธ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์๋ฒฝํ์ง ์์
- ํด๋์ค ์ปดํฌ๋ํธ -> ํจ์ ์ปดํฌ๋ํธ ์งฌ๋ฝ ์๋ฃ๋ค
- Svelte, Vue ๊ณต์๋ฌธ์๊ฐ ๊น๋ํจ
- ํด๋์ค ์ปดํฌ๋ํธ -> ํจ์ ์ปดํฌ๋ํธ ์งฌ๋ฝ ์๋ฃ๋ค
-
๋ฆฌ์กํธ ๊ท์น๋ค(useEffect ์ฝ๋ฐฑ์ async ์๋จ, ๋ณ์์ useState, ์์กด์ฑ ๋ฐฐ์ด, ํด๋ฆฐ์ )
- Svelte ์ฝ๋ ์์: ๋ ์ง๊ด์ ์ผ๋ก ์ดํดํ ์ ์์
<script> import {getFruits} from './service'; import {onMount, onDestory} from 'svelte'; let fruits = [] let interval onMount(async () => { fruits = await getFruits() interval = setInterval(() => { fruits = [...fruits, 'banana'] }) }) onDestory(() => clearInterval(interval)) </script> <ul> {#each fruits as fruit} <li>{fruit}</li> {/each} </ul>
๋ฐฉ๋ํ ์์ : ํํธํ๋ ๋ฆฌ์กํธ ๊ธฐ์
- ํํธํ
- ์คํ์ผ: ์ธ๋ถ ์คํ์ผ ์ํธ Import, inline, CSS Module, styled-components, emotion
- ์ํ๊ด๋ฆฌ: Redux, MobX, Jotai, Zustand, React Tracked, Valtio
- ๋ฐ์ดํฐ fetch
- ๋จ์
- ๋น์ง๊ด์ ์ธ JSX
- ๊ธ์ง์ ์ผ๋ก ๋ณํํ๋ API
- ๋ฆฌ์กํธ๋ฅผ
De facto standard
๋ก ์ฌ๊ธด๋ค๋ฉด, ๊ธ์ง์ ์ผ๋ก ๋ณํํ๋ ํ๋ก ํธ์๋ ์ํ๊ณ์ ์๋ก์ด ๋ณํ๋ฅผ ๋ฐ์๋ค์ด๊ณ ์ ์ฐํ๊ฒ ์ ์ํ๊ธฐ ์ด๋ ค์์ง ๊ฒ
์คํ์์ค ์ํ๊ณ์ ๋ช ์
ํ์ด์ค๋ถ ๋ผ์ด์ ์ค ์ด์
- ์คํ์์ค ๋ผ์ด์ผ์ค ์ค ๊ฐ์ฅ ๋๋ฆฌ๋ ๋ผ์ด์ผ์ค MIT
- ์์ ์ ์ด์ฉ, ๋ฐฐํฌ, ๊ฐ์ธ์ ์ด์ฉ์ ๋ํ ์ ์ฝ ์์ด ์ํํธ์จ์ด๋ฅผ ์ทจ๊ธํ ์ ์๋ ์์ ๋ก์ด ๋ผ์ด์ผ์ค
- ์ด์
- ํ์ด์ค๋ถ์ React, Immutable, Jest ๋ฑ์ BSD+Patents ์ฌ์ฉ
- https://github.com/facebook/react/blob/d63249d03488fec1ea92a81ba29f0e87a82feeae/PATENTS#L14-L26
์ฌ๊ธฐ์ ๋ถ์ฌ๋ ๋ผ์ด์ ์ค๋ ์๋์ผ๋ก ๊ทธ๋ฆฌ๊ณ ํต์ง ์์ด ์ข ๋ฃ๋ ๊ฒ์ ๋๋ค. ๋น์ ์ด๋ ๋น์ ์ ๊ณ์ด์ฌ, ๋ฒ์ธ ๊ณ์ด์ฌ ๋๋ ๋๋ฆฌ์ธ ์ค ์ด๋ ํ๋๊ฐ ํนํ ์ฃผ์ฅ์ ์ง์ ๋๋ ๊ฐ์ ์ ์ผ๋ก ๊ฐ์ํ๊ฑฐ๋ ์ง์ ์ ์ธ ๊ธ์ ์ ์ดํด๋ฅผ ๊ฐ๋ ๊ฒฝ์ฐ: (i) ํ์ด์ค๋ถ์ด๋ ๊ทธ ๊ณ์ด์ฌ ์ค ์ด๋ ํ๋์ ๋ํ ํนํ ์ฃผ์ฅ, (ii) ํนํ ์ฃผ์ฅ์ด ์ ์ฒด ๋๋ ์ผ๋ถ๊ฐ ํ์ด์ค๋ถ์ด๋ ๊ทธ ๊ณ์ด์ฌ์ ์ํํธ์จ์ด, ๊ธฐ์ , ์ ํ ๋๋ ์๋น์ค์์ ๋ฐ์ํ ๊ฒฝ์ฐ, ๋๋ (iii) ์ํํธ์จ์ด์ ๊ด๋ จ๋ ์ด๋ ํ ๋น์ฌ์์ ๋ํ ํนํ ์ฃผ์ฅ. ๊ทธ๋ฌ๋ ํ์ด์ค๋ถ์ด๋ ๊ทธ ๊ณ์ด์ฌ ์ค ์ด๋ ํ๋๊ฐ ์ฒ์์ ๋น์ ์ ๋ํ ํนํ ์นจํด๋ฅผ ์ฃผ์ฅํ๋ ์์ก์ ์ ๊ธฐํ๊ณ , ๋น์ ์ด ๊ทธ ์ํํธ์จ์ด์ ๊ด๋ จ์ด ์๋ ๊ทธ ๋น์ฌ์์ ๋ํด ๊ทธ ์์ก์์ ํนํ ์นจํด ๋ฐ์์ก์ ์ ๊ธฐํ๋ ๊ฒฝ์ฐ, ๋ณธ ๋จ๋ฝ์ (i)์ ๋ฐ๋ผ ์ด๋ฌํ ๋ฐ์์ก์ผ๋ก ์ธํด ์ฌ๊ธฐ์ ๋ถ์ฌ๋ ๋ผ์ด์ ์ค๋ ์ข ๋ฃ๋์ง ์์ ๊ฒ์ ๋๋ค.
- 2017๋ 7์ ์ํ์น ์ฌ๋จ์์ BSD+Patents ๊ธ์ง
- ํ์ด์ค๋ถ์ BSD+Patents ๋ผ์ด์ผ์ค ์ ์ง
- ์ฐฌ๋ฐ ๋ ผ๋
- ์๋ํ๋ ์ค ์ง์์์ 3์ ์ด์ ๋ก ์์ฌ ์ํํธ์จ์ด์ ๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํ์ง ์์ ๊ฒ์ผ๋ก ๋ฐํ
- ํ์ด์ค๋ถ์ด MIT ๋ผ์ด์ผ์ค๋ก ๋ฐ๊ฟ
- ์คํ์์ค๋ก ๋ง๋ ์ํํธ์จ์ด์ ๊ถ๋ฆฌ๋ฅผ ์์ด๋ฒ๋ฆด ์ ์๋ค๋ ๊ฒฝ๊ฐ์ฌ์ ๊ฐ๊ฒ ํ๋ ์ฌ๋ก
์คํ์์ค๋ ๋ฌด๋ฃ๋ก ๊ณ์ ์ ๊ณต๋๋๊ฐ?
- ๋ฐ๋ฒจ
- ์คํ์์ค๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , ํํ์ ๊ฐ๋ฐ์๋ฅผ ๊ณ ์ฉํ๊ณ ์์ง๋ง, ์ฌ์ ๋์ ๊ฒช๊ณ ์๋ค
- ์ฐ๊ฐ 330,000๋ฌ๋ฌ๊ฐ ํ์ํ๋ฉฐ ์ด๋ฅผ ์ํ ๋ชจ๊ธ ์งํ
- ์คํ์์ค๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , ํํ์ ๊ฐ๋ฐ์๋ฅผ ๊ณ ์ฉํ๊ณ ์์ง๋ง, ์ฌ์ ๋์ ๊ฒช๊ณ ์๋ค
- colors.js => 1.4.1 ๊ณ ์์ ๋ฌดํ ๋ฃจํ ์ฝ์
- faker.js => 6.6.6 ๋น ์์ค์ฝ๋
- Pay Me or Fork This
- ์คํ์์ค๋ฅผ ๋น์ฐํ ๋ฌด๋ฃ๋ก ์ฐ๋ ํ์์ ๋ํ ๋นํ ์ง์
- color.js ์ฌํ๋ ์๋ง์กด ์น์๋น์ค CLI๊น์ง ์ํฅ์ ์ฃผ์์ ๋งํฌ
- ๋ง์ฝ ๋ฐ๋ฒจ์ด ํจํค์ง ๊ด๋ฆฌ๋ฅผ ์ค๋จํ๋ค๋ฉด...?
- ์คํ ์์ค๊ฐ ๋ฌด์จ ์ผ์ ํ๊ณ ์๋ ์ง ์ ํ์๊ฐ ์๋ค
์ ์ด์ฟผ๋ฆฌ, AngularJS, ๋ฆฌ์กํธ, ...
- ์น ํ๋ ์์ํฌ์ ์ญ์ฌ
- state of js 2022
- usages: React, Angular, Vue.js
- interest: Svelte Ember Vue React
์น ๊ฐ๋ฐ
- WASM: https://tech.kakao.com/2021/05/17/frontend-growth-08/
- Rome: https://biomejs.dev/blog/annoucing-biome/
- Programming idiom
- ํ๋ก๊ทธ๋๋ฐ ๊ด์ฉ๊ตฌ(Programming idiom)๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐฉ์์ด๋ ์ฝ๋๋ฅผ ๊ตฌ์ฑํ๋ ํจํด