๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

React

(14)
[ React 18+ ] RSC(React Server Componen) ํŒŒํ—ค์น˜๊ธฐ. RSC๋Š” React Server Components์˜ ์•ฝ์ž๋กœ, React18 ๋ฒ„์ „๋ถ€ํ„ฐ ๋“ฑ์žฅํ•œ ๊ฐœ๋…์ด๋‹ค.์„œ๋ฒ„์—์„œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋ง ํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์—์„œ ์ด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์œผ๋กœ, ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์˜ ์—ญํ• ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ํ–ฅ์ƒ์„ ์œ„ํ•ด ๋“ฑ์žฅํ•œ ๊ธฐ๋Šฅ์ด๋‹ค. RSC๋Š” React์˜ ์ž์ฒด์ ์ธ ๊ธฐ๋Šฅ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ผญ Next.js๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, RSC๋Š” ์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํ˜ธ์ž‘์šฉ์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Node.js๊ธฐ๋ฐ˜์˜ ์„œ๋ฒ„ ํ™˜๊ฒฝ์ด ํ•„์š”ํ•˜๋‹ค. ๊ทธ๋ž˜์„œ Next.js๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด Express.js ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ HTTP ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค๊ณ , ์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ ์ŠคํŠธ๋ฆฌ๋ฐ,  Webpack ๋ฒˆ๋“ค๋ง(์„œ๋ฒ„ / ํด๋ผ์ด์–ธํŠธ), ๋ฐ์ดํ„ฐ ํ†ต์‹ , ์„ฑ๋Šฅ ์ตœ์ ํ™”(์บ์‹ฑ) ๋“ฑ์˜ ์ถ”๊ฐ€์ ์ธ ์„ค..
React 18 ๋ณ€๊ฒฝ์  ์ •๋ฆฌ ์˜ค๋Š˜์€ React19 release version์ด ๋‚˜์˜ค๊ธฐ ์ „์— React 18์˜ ํฐ ๋ณ€๊ฒฝ์ ์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.ํ˜„์žฌ ๊ธฐ์ค€ React ๊ฐ€์žฅ ์ตœ์‹  ๋ฒ„์ „์€ 18.3.1 ์ด๋‹ค.(2024๋…„ 4์›” 26์ผ) ๊ทธ๋ฆฌ๊ณ  React18์€ 2022๋…„ 3์›” 29์ผ์— ์ •์‹ ๋ฆด๋ฆฌ์ฆˆ ๋˜์—ˆ๋‹ค.        1. ๋™์‹œ ๋ Œ๋”๋ง(Concurrent Rendering) ๋™์‹œ ๋ Œ๋”๋ง(Concurrent Rendering)์€ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI)๋ฅผ ๋” ์œ ์—ฐํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์œผ๋กœ, ์ „ํ†ต์ ์ธ ๋ Œ๋”๋ง ๋ฐฉ์‹์—์„œ๋Š” ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ, ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํ•œ ๋ฒˆ์— ๋ Œ๋”๋ง๋˜๋ฉด์„œ ์˜ค๋žœ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๋ฉฐ UI๊ฐ€ ๋ฉˆ์ถ”๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค. ๋™์‹œ ๋ Œ๋”๋ง(Concurrent Rendering)์€ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜..
React์˜ ์ƒํƒœ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, Zustand์— ๋Œ€ํ•œ ๊ฐ„๋žต ์ •๋ฆฌ๊ธ€. ๋…์ผ์–ด๋กœ "์ƒํƒœ"๋ฅผ ์˜๋ฏธํ•˜๋Š” Zustand๋Š” React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋‹จ์ˆœํ™”๋œ Flux ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋Š” ์ž‘๊ณ  ๋น ๋ฅธ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.hook์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ„ํŽธํ•œ API๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ์ตœ์†Œํ•œ์˜ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์ง๊ด€์ ์ด๊ณ  ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.     ์ฃผ์š” ๊ธฐ๋Šฅ ๋ฐ ํŠน์ง• 1. ์‹ฌํ”Œํ•œ API:   Zustand์˜ API๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•˜๋‹ค. ๋ณดํ†ต 1~2๊ฐœ์˜ hook๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํƒœ๋ฅผ ์ •์˜ํ•˜๊ณ , ์ด๋ฅผ ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฃผ๋กœ `create` ํ•จ์ˆ˜์™€ `useStore` ํ›…์„ ์‚ฌ์šฉํ•œ๋‹ค.2. ์ดˆ๊ฒฝ๋Ÿ‰:   Zustand๋Š” ๊ฒฝ๋Ÿ‰ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ํฌ๊ธฐ๊ฐ€ ์ž‘๊ณ  ๋น ๋ฅด๋‹ค. React Context API ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๋‹ค๋ฅธ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋น„..
[ React ] Suspense๋ž€ ๋ฌด์—‡์ผ๊นŒ? React์˜ Suspense๋Š” React 18์—์„œ ์ •์‹์œผ๋กœ ์ง€์›๋œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์ง€์›ํ•˜๋Š” React์˜ ๋‚ด์žฅ ์ปดํฌ๋„ŒํŠธ๋กœ, ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ์ง„ํ–‰๋˜๋Š” ๋™์•ˆ, ์‚ฌ์šฉ์ž์—๊ฒŒ ๋กœ๋”ฉ์— ๋Œ€ํ•œ ์ƒํƒœ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. Suspense๋Š” Suspense์˜ ๊ฒฝ๊ณ„๋ฅผ ์„ค์ •ํ•˜๊ณ , ๊ฒฝ๊ณ„ ๋‚ด์—์„œ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋กœ๋“œ๋˜๋Š” ์ปดํฌ๋„ŒํŠธ๋‚˜ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. ์ด๋Ÿฐ ๋กœ๋”ฉ ์ƒํƒœ๋Š” fallbackํ”„๋กœํผํ‹ฐ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ํ‘œ์‹œ๋œ๋‹ค. Suspense์˜ ์ž์‹ ์ปดํฌ๋„ŒํŠธ(children)๊ฐ€ ์‹ค์ œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์ดํ›„์— ๋ Œ๋”๋ง ๋˜๋Š” ์ปดํฌ๋„ŒํŠธ์ด๋‹ค. ์œ„์™€ ๊ฐ™์ด {children}๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, React Suspense๋Š” ์ฃผ๋กœ React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ์„ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” React.lazy์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋œ๋‹ค.(React.lazy..
[ React ] ์ƒํƒœ ๊ด€๋ฆฌ ํˆด ๋น„๊ต ๋ถ„์„ Recoil vs Zustand ํšŒ์‚ฌ์—์„œ ์ƒˆ๋กœ์šด React ํ”„๋กœ์ ํŠธ๋ฅผ ์„ธํŒ…์ค‘์ธ๋ฐ, ์ „์—ญ ์ƒํƒœ๊ด€๋ฆฌ ํˆด ์ค‘์—์„œ ํŒ€์›๋“ค์ด ๋น ๋ฅด๊ฒŒ ๋ฐฐ์šฐ๊ณ  ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์‰ฝ๊ฒŒ React ํ”„๋กœ์ ํŠธ์˜ ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ ํˆด 2๊ฐ€์ง€๋ฅผ ๋น„๊ตํ•ด ๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค. Recoil (v0.7.7 ๊ธฐ์ค€) ์ „์ฒด ์นด์šดํ„ฐ ์ฝ”๋“œ counter sample code Recoil์€ ์•„๋ž˜์ฒ˜๋Ÿผ ์“ฐ์ธ๋‹ค. (ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ผ๋ถ€) import "./App.css"; import { countState } from "./state/countState"; import { useRecoilValue, useSetRecoilState, useResetRecoilState } from "recoil"; function App() { const count = useRecoilValue(countState); ..
[ GitHub Action ] GitHub Action์„ ์ด์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ CI/CD ์„ธํŒ…ํ•˜๊ธฐ. GitHub Action GitHub Action์€ ๋นŒ๋“œ์™€ ํ…Œ์ŠคํŠธ, ๊ฐœ๋ฐœ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” CI/CD(์ง€์†์ ์ธ ํ†ตํ•ฉ/์ง€์†์ ์ธ ๋ฐฐํฌ) ํ”Œ๋žซํผ์œผ๋กœ, Git ์ €์žฅ์†Œ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์ž๋™ํ™”๋œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ์ด๋Ÿฌํ•œ ์ž‘์—…์€ Git ์ €์žฅ์†Œ์˜ ์ƒํƒœ ๋ณ€๊ฒฝ, ์ƒˆ ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ, ์ฝ”๋“œ ํ‘ธ์‹œ, ์ด์Šˆ ๋“ฑ๋ก, Pull Request ๋“ฑ์„ ๋Œ€์ƒ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ชจ๋“  ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ PR ๋˜๋Š” ์ƒ์šฉ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ merged PR ๋นŒ๋“œ์™€ ํ…Œ์ŠคํŠธ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. Git Action์„ ์‚ฌ์šฉํ•˜๋ฉด ์ €์žฅ์†Œ์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ง€์ •๋œ ์ž‘์—…์ด ์‹คํ–‰๋˜์–ด ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ๋ฐ ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ฝ”๋“œ ํ‘ธ์‹œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ์ž๋™์œผ๋กœ ์ฝ”๋“œ ํ…Œ์ŠคํŠธ, ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ๋ฅผ ์ˆ˜ํ–‰ํ• ..
[ React ] React Props ์•Œ์•„๋ณด๊ธฐ. React๋ฅผ ์ฒ˜์Œ ์‹œ์ž‘ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค ๋˜๋Š” React์˜ ๊ฒฝํ—˜์ด ๋งŽ์ง€ ์•Š์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋น„์Šทํ•ด๋ณด์—ฌ์„œ ์–ด๋ ต๊ฒŒ ๋Š๊ปด์งˆ ์ˆ˜ ์žˆ๋Š” React Props์™€ React State์— ๋Œ€ํ•ด ์ฐจ์ด์ ์— ๋Œ€ํ•œ ํฌ์ŠคํŒ…์„ ํ•˜๋ ค๊ณ  ํ–ˆ์ง€๋งŒ React์˜ Props๋ฅผ ๋จผ์ € ์ดํ•ดํ•ด์•ผ state์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๊ธฐ ๋”์šฑ ์‰ฌ์šธ ๊ฒƒ ๊ฐ™์•„, props์— ๋Œ€ํ•ด ๋จผ์ € ์•Œ์•„๋ณด๋ ค ํ•œ๋‹ค. props์™€ state๋Š” React์˜ ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์™€ ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ชจ๋‘ ์‚ฌ์šฉ๋œ๋‹ค. Props React์—์„œ props๋ž€ "properties"์˜ ์ค„์ž„๋ง๋กœ, ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ, ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ ์ „๋‹ฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” props๋ผ๋Š” ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ์ „๋‹ฌ๋˜๋ฉฐ, ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋Š” ์ด props ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ• ..
[ webpack ] React(๋ฆฌ์•กํŠธ)์™€ webpack(์›นํŒฉ) React.js๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜น์€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋ฉด ํ•ญ์ƒ webpack๊ณผ ๊ฐ™์€ ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ ํˆด์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. ์›นํŒฉ ๊ณต์‹ ์‚ฌ์ดํŠธ์—์„œ ์†Œ๊ฐœํ•˜๋Š” ์ปจ์…‰์€ ํ˜„๋Œ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์œ„ํ•œ ์ •์  ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๋ผ๊ณ  ๋งํ•œ๋‹ค. ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๋Š” ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ํŒŒ์ผ๋“ค(JavaScript, LESS, CSS, JSX, ESNext ๋“ฑ)์„ ๋ฐ›์•„์„œ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ๋ฌถ์–ด์ค€๋‹ค. ์ด๋ ‡๊ฒŒ ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ํŒŒ์ผ๋“ค์„ ๋ฐ›์•„ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ๋ฌถ์–ด์ฃผ์–ด ์ƒ๊ธฐ๋Š” ์ด์ ์€ ํฌ๊ฒŒ ๋ชจ๋“ˆ์„ฑ๊ณผ ๋„คํŠธ์›Œํฌ ์„ฑ๋Šฅ์ด ์žˆ๋Š”๋ฐ, ๋ชจ๋“ˆ์„ฑ์€ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ž‘์—…ํ•˜๊ธฐ ์‰ฝ๊ฒŒ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์ด๋‚˜ ๋ชจ๋“ˆ๋กœ ๋‚˜๋ˆ ์„œ ๋‹ค๋ฃฐ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ์–ด ํŒ€ ์ž‘์—…๋“ฑ์˜ ํ˜‘์—…์— ์œ ๋ฆฌํ•˜๋‹ค. ๋˜ ๋„คํŠธ์›Œํฌ ์„ฑ๋Šฅ์˜ ์ธก๋ฉด์—์„œ๋Š” ์˜์กด ๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ์—ฌ๋Ÿฌ ํŒŒ์ผ์„ ๋ฌถ์€ ๋ฒˆ๋“ค์„ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ 1๋ฒˆ๋งŒ ์ฝ๊ธฐ ๋•Œ๋ฌธ์— ๋„คํŠธ์›Œ..