From df122503e1970ad048b43656089e84b324403def Mon Sep 17 00:00:00 2001 From: brgndy Date: Mon, 5 Aug 2024 12:29:53 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20=EC=95=84=ED=8B=B0=ED=81=B4=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...de-Exploring-Key-Features-and-Use-Cases.md | 324 ++++++++++++++++++ 1 file changed, 324 insertions(+) create mode 100644 Aug/article/Deep-Dive-into-React-Concurrent-Mode-Exploring-Key-Features-and-Use-Cases.md diff --git a/Aug/article/Deep-Dive-into-React-Concurrent-Mode-Exploring-Key-Features-and-Use-Cases.md b/Aug/article/Deep-Dive-into-React-Concurrent-Mode-Exploring-Key-Features-and-Use-Cases.md new file mode 100644 index 0000000..37e217a --- /dev/null +++ b/Aug/article/Deep-Dive-into-React-Concurrent-Mode-Exploring-Key-Features-and-Use-Cases.md @@ -0,0 +1,324 @@ +# [Deep Dive into React Concurrent Mode: Exploring Key Features and Use Cases](https://www.dhiwise.com/post/deep-dive-into-react-concurrent-mode-exploring-key-features-and-use-cases) + +### ๐Ÿ—“๏ธ ๋ฒˆ์—ญ ๋‚ ์งœ: 2024.08.04 + +### ๐Ÿงš ๋ฒˆ์—ญํ•œ ํฌ๋ฃจ: ๋ฒ„๊ฑด๋””(์ „ํƒœํ—Œ) + +--- + +์•ˆ๋…•ํ•˜์„ธ์š”, React ์—ด์„ฑ ํŒฌ ์—ฌ๋Ÿฌ๋ถ„! + +React Concurrent Mode์˜ ๋ฏธ์Šคํ„ฐ๋ฆฌ๋ฅผ ํ’€์–ด๋‚ด๋Š” ์งœ๋ฆฟํ•œ ์—ฌ์ •์„ ์ค€๋น„ํ•˜์„ธ์š”. React 18์—์„œ ๋„์ž…๋œ ์ด ๊ฐ•๋ ฅํ•œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์€ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ์‹์„ ํ˜์‹ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งˆ์น˜ React ์•ฑ์ด ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์ฐจ๋‹จํ•˜์ง€ ์•Š๊ณ  ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ์ฐจ์›์œผ๋กœ ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. + +๋ฌด๊ฑฐ์šด ๊ณ„์‚ฐ์ด๋‚˜ ๋„คํŠธ์›Œํฌ ์š”์ฒญ ์ค‘์—๋„ ์•ฑ์ด ์‘๋‹ต์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ์„ธ๊ณ„๋ฅผ ์ƒ์ƒํ•ด ๋ณด์„ธ์š”. ์‚ฌ์šฉ์ž๊ฐ€ ์ƒํ˜ธ์ž‘์šฉํ•  ๋•Œ UI๊ฐ€ ๋ฉˆ์ถ”์ง€ ์•Š๋Š” ์„ธ๊ณ„๋ฅผ ๋ง์ด์ฃ . ์ด๊ฒƒ์ด Concurrent ๊ธฐ๋Šฅ์˜ ์•ฝ์†์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹จ์ˆœํ•œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ์•„๋‹ˆ๋ผ React์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ์‚ฌ๊ณ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. + +๊ทธ๋Ÿผ, ์•ˆ์ „๋ฒจํŠธ๋ฅผ ๋งค๊ณ  React์˜ ๋™์‹œ์„ฑ ์„ธ๊ณ„๋กœ ๋›ฐ์–ด๋“ค ์ค€๋น„๋ฅผ ํ•ฉ์‹œ๋‹ค! + +```tsx +import { unstable_createRoot } from "react-dom"; + +const root = unstable_createRoot(document.getElementById("root")); + +root.render(); +``` + +์ด ์ฝ”๋“œ ์Šค๋‹ˆํŽซ์—์„œ ์šฐ๋ฆฌ๋Š” react-dom์˜ unstable_createRoot ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ์ „์ฒด ์•ฑ์— ๋Œ€ํ•ด ๋™์‹œ ๋ Œ๋”๋ง์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. + +๋™์‹œ ๋ Œ๋”๋ง์˜ ์•„๋ฆ„๋‹ค์›€์€ React๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ UI์˜ ์—ฌ๋Ÿฌ ๋ฒ„์ „์„ ์ค€๋น„ํ•œ ๋‹ค์Œ ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ ๋ฐ ๋„คํŠธ์›Œํฌ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋น ๋ฅด๊ฒŒ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋ฌด๊ฑฐ์šด ๊ณ„์‚ฐ์ด๋‚˜ ๋„คํŠธ์›Œํฌ ์š”์ฒญ์ด ์žˆ๋Š” ๋ณต์žกํ•œ ์•ฑ์—์„œ๋„ ๋” ์‘๋‹ต์„ฑ์ด ์ข‹๊ณ  ์œ ๋™์ ์ธ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. + +๊ทธ๋Ÿฌ๋‚˜ ๋™์‹œ ๋ Œ๋”๋ง์ด ๋งŒ๋ณ‘ํ†ต์น˜์•ฝ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด๋Š” ์ƒˆ๋กœ์šด ์ˆ˜์ค€์˜ ๋ณต์žก์„ฑ์„ ๋„์ž…ํ•˜๋ฉฐ ์•ฑ์ด ์—…๋ฐ์ดํŠธ๋˜๊ณ  ๋ Œ๋”๋ง๋˜๋Š” ๋ฐฉ์‹์„ ๋‹ค๋ฅด๊ฒŒ ์ƒ๊ฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋ฅผ ์ตํžˆ๊ฒŒ ๋˜๋ฉด, React ์•ฑ์ด ํ•œ ๋‹จ๊ณ„ ๋” ๋ฐœ์ „ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. + +## ๋ฆฌ์•กํŠธ 16์— ๋น„ํ•ด์„œ ๋™์‹œ์„ฑ ๋ชจ๋“œ๋Š” ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ๊ฐ€ + +React 18์˜ ๋“ฑ์žฅ๊ณผ ํ•จ๊ป˜ React ํŒ€์€ ์ด์ „ ๋ฒ„์ „์ธ React 16 ๋ฐ ์ด์ „ ๋ฒ„์ „์—์„œ ์‚ฌ์šฉ๋œ ๋™๊ธฐ ๋ Œ๋”๋Ÿฌ์™€ ๊ทผ๋ณธ์ ์œผ๋กœ ๋‹ค๋ฅธ ์ƒˆ๋กœ์šด ๋™์‹œ ๋ Œ๋”๋Ÿฌ๋ฅผ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ •ํ™•ํžˆ ๋ฌด์—‡์ด ๋ณ€๊ฒฝ๋˜์—ˆ์„๊นŒ์š”? + +React 16์—์„œ๋Š” ๋ Œ๋”๋ง์ด ํ•ญ์ƒ ๋™๊ธฐ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” React๊ฐ€ ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ์˜ ๋ Œ๋”๋ง์„ ์‹œ์ž‘ํ•˜๋ฉด ์ „์ฒด ํŠธ๋ฆฌ๊ฐ€ ๋ Œ๋”๋ง๋  ๋•Œ๊นŒ์ง€ ์ค‘์ง€ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํฐ ๋ Œ๋”๋ง ์ž‘์—…์ด ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์ฐจ๋‹จํ•˜์—ฌ UI๊ฐ€ ๋ฉˆ์ถ”๊ณ  ์‘๋‹ตํ•˜์ง€ ์•Š๊ฒŒ ๋˜๋Š” ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. + +๋ฐ˜๋ฉด, React 18์€ ๋™์‹œ ๋ Œ๋”๋ง์„ ๋„์ž…ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ƒˆ๋กœ์šด ๋ชจ๋“œ๋Š” React๊ฐ€ ๋ Œ๋”๋ง ํ”„๋กœ์„ธ์Šค๋ฅผ ์ค‘๋‹จํ•˜๊ณ  ์‚ฌ์šฉ์ž ์ž…๋ ฅ๊ณผ ๊ฐ™์€ ๋” ๊ธด๊ธ‰ํ•œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋งˆ์น˜ React๊ฐ€ ๋™์‹œ์— ์—ฌ๋Ÿฌ ๊ณณ์— ์žˆ์„ ์ˆ˜ ์žˆ๋Š” ์ดˆ๋Šฅ๋ ฅ์„ ๊ฐ€์ง„ ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. + +```ts +// React 16 + ReactDOM.render(, document.getElementById('root')); + +// React 18 + const root = ReactDOM.createRoot(document.getElementById('root')); + root.render() +``` + +React 16์—์„œ๋Š” ReactDOM.render๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ฑ์„ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ React 18์—์„œ๋Š” ReactDOM.createRoot๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ํ•ด๋‹น ๋ฃจํŠธ ๋…ธ๋“œ์—์„œ render๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์•ฑ ์ „์ฒด์—์„œ ๋™์‹œ ๋ Œ๋”๋ง์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค. + +ํ•˜์ง€๋งŒ ์ฐจ์ด์ ์€ ๋‹จ์ˆœํžˆ ์•ฑ์„ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐฉ์‹์— ๊ทธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋™์‹œ ๋ชจ๋“œ๋ฅผ ํ†ตํ•ด React 18์€ ์—ฌ๋Ÿฌ ์ƒํƒœ ์—…๋ฐ์ดํŠธ์˜ ์ž๋™ ์ผ๊ด„ ์ฒ˜๋ฆฌ, ์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋ฒ„ ๋ Œ๋”๋ง, ๊ทธ๋ฆฌ๊ณ  ์ปดํฌ๋„ŒํŠธ์˜ ๋ถ€๋“œ๋Ÿฌ์šด ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” React Suspense์™€ ๊ฐ™์€ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ๋“ค์„ ๋„์ž…ํ•ฉ๋‹ˆ๋‹ค. + +๋ณธ์งˆ์ ์œผ๋กœ, React 18์˜ ๋™์‹œ ๋ชจ๋“œ๋Š” React์—์„œ ๋ Œ๋”๋ง์— ๋Œ€ํ•œ ์‚ฌ๊ณ ๋ฐฉ์‹์„ ๋ณ€ํ™”์‹œํ‚ค๋Š” ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ์ „ํ™˜์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋‹จ์ˆœํžˆ ์•ฑ์„ ๋” ๋น ๋ฅด๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋” ์‘๋‹ต์„ฑ์ด ์ข‹๊ณ  ์‚ฌ์šฉ์ž ์นœํ™”์ ์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค. + +## ๋ฆฌ์•กํŠธ 18์—์„œ์˜ ๋™์‹œ์„ฑ ๊ธฐ๋Šฅ๋“ค : ๊นŠ์ด ํŒŒํ—ค์น˜๊ธฐ + +React 18์—๋Š” ์•ฑ์„ ๋” ์‘๋‹ต์„ฑ ์žˆ๊ณ  ์‚ฌ์šฉ์ž ์นœํ™”์ ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๋™์‹œ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ ์ค‘ ์ผ๋ถ€๋ฅผ ๊นŠ์ด ์‚ดํŽด๋ณด๊ณ  ์–ด๋–ป๊ฒŒ React ์•ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. + +1. ์ž๋™ ๋ฐฐ์นญ: + +์ด์ „ ๋ฒ„์ „์˜ React์—์„œ๋Š” React ์ด๋ฒคํŠธ ์™ธ๋ถ€์—์„œ ํŠธ๋ฆฌ๊ฑฐ๋œ ์ƒํƒœ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•จ๊ป˜ ๋ฐฐ์นญ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ถˆํ•„์š”ํ•œ ์žฌ๋ Œ๋”๋ง๊ณผ ๋น„ํšจ์œจ์ ์ธ ์•ฑ์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. React 18์€ ์—ฌ๋Ÿฌ ์ƒํƒœ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•จ๊ป˜ ๋ฐฐ์นญํ•˜์—ฌ ๋‹จ์ผ ์žฌ๋ Œ๋”๋ง์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž๋™ ๋ฐฐ์นญ์„ ๋„์ž…ํ•ฉ๋‹ˆ๋‹ค. + +๋‹ค์Œ์€ ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค: + +```tsx +const [count, setCount] = useState(0); + +// In React 16, these would cause two re-renders +setCount(count + 1); +setCount(count + 1); + +// In React 18, these are batched together and cause a single re-render +``` + +2. ์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋ฒ„ ๋ Œ๋”๋ง: + +React 18์€ ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ HTML์„ ์ŠคํŠธ๋ฆฌ๋ฐํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ์„œ๋ฒ„ ๋ Œ๋”๋ง API๋ฅผ ๋„์ž…ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ „์ฒด ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ์ฒซ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ ์ฒญํฌ๋ฅผ ๋ฐ›์ž๋งˆ์ž HTML ๋ Œ๋”๋ง์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์•ฑ์˜ ์ธ์‹๋œ ๋กœ๋“œ ์‹œ๊ฐ„์„ ํฌ๊ฒŒ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +3. React Suspense: + +React Suspense๋Š” ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•ด ๋ถ€๋“œ๋Ÿฌ์šด ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” React 18์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. Suspense๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ผ๋ถ€ ์ฝ”๋“œ๊ฐ€ ๋กœ๋“œ๋  ๋•Œ๊นŒ์ง€ "๋Œ€๊ธฐ"ํ•˜๊ณ  ์„ ์–ธ์ ์œผ๋กœ ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ฝ”๋“œ ๋ถ„ํ•  ๋˜๋Š” ๋ฐ์ดํ„ฐ ํŽ˜์นญ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ํŠนํžˆ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +```tsx +Loading...}> + + +``` + +์ด ์˜ˆ์ œ์—์„œ ์ปดํฌ๋„ŒํŠธ๋Š” MyComponent๋ฅผ ๊ฐ์‹ธ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. MyComponent๊ฐ€ ์•„์ง ์ค€๋น„๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ(์˜ˆ: ๋ฐ์ดํ„ฐ๋ฅผ ํŽ˜์นญํ•˜๊ฑฐ๋‚˜ ์ฝ”๋“œ ๋ถ„ํ•  ์ฒญํฌ๋ฅผ ๋กœ๋“œํ•˜๋Š” ์ค‘์ผ ๋•Œ), React๋Š” fallback ์†์„ฑ์œผ๋กœ ์ง€์ •๋œ ๋‚ด์šฉ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๊ฐ„๋‹จํ•œ "Loading..." div๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. + +์ด๊ฒƒ์€ React 18์˜ ๋™์‹œ ๊ธฐ๋Šฅ ์ค‘ ์ผ๋ถ€์— ๋ถˆ๊ณผํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ startTransition ๊ธฐ๋Šฅ์ด ์žˆ์–ด ํŠน์ • ์—…๋ฐ์ดํŠธ๋ฅผ "์ „ํ™˜"์œผ๋กœ ํ‘œ์‹œํ•˜๊ณ  ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋‚ฎ์ถ”์–ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, useDeferredValue ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋Š๋ฆฐ ์ƒํƒœ ์—…๋ฐ์ดํŠธ๋ฅผ ๋น ๋ฅธ ์—…๋ฐ์ดํŠธ๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์—ฐ๊ธฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +์ด๋Ÿฌํ•œ ๋™์‹œ ๊ธฐ๋Šฅ๋“ค์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด React๋Š” ๋ณต์žกํ•œ ๋ Œ๋”๋ง ์ž‘์—…์„ ๋” ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋” ๋ถ€๋“œ๋Ÿฝ๊ณ  ์‘๋‹ต์„ฑ์ด ๋›ฐ์–ด๋‚œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +## ๋™์‹œ์„ฑ ๋ชจ๋“œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋กํ•˜๊ธฐ : ์ฐจ๊ทผ์น˜๊ทผ ํ•ด๋ณด๊ธฐ + +์ด์ œ ๋™์‹œ ๋ Œ๋”๋ง๊ณผ ๊ทธ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜์œผ๋‹ˆ, ์‹ค์ œ๋กœ React ์•ฑ์—์„œ ๋™์‹œ ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. + +๋‹จ๊ณ„ 1: React 18๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ + +์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋Š” ์•ฑ์„ React 18๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ํ„ฐ๋ฏธ๋„์—์„œ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค: + +์ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด React์™€ ReactDOM ํŒจํ‚ค์ง€๊ฐ€ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค. + +``` +npm install react@18 react-dom@18 +``` + +๋‹จ๊ณ„ 2: Strict Mode ํ™œ์„ฑํ™” + +๋‹ค์Œ์œผ๋กœ, ์•ฑ์—์„œ Strict Mode๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋™์‹œ ๋ชจ๋“œ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ์ž ์žฌ์ ์ธ ์ด์Šˆ๋ฅผ ์žก์•„๋‚ด๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์•ฑ์˜ ๋ฃจํŠธ ์ปดํฌ๋„ŒํŠธ๋ฅผ StrictMode๋กœ ๊ฐ์‹ธ๋ฉด ๋ฉ๋‹ˆ๋‹ค. + +```tsx +import React, { StrictMode } from "react"; + + + +; +``` + +๋‹จ๊ณ„ 3: ๋™์‹œ ๋ชจ๋“œ ํ™œ์„ฑํ™” + +์ด์ œ ๋™์‹œ ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•  ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค. ReactDOM.render๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ReactDOM.createRoot๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. + +```tsx +import { createRoot } from "react-dom"; + +const root = createRoot(document.getElementById("root")); +root.render(); +``` + +๊ทธ๋ฆฌ๊ณ  ๋ณด์„ธ์š”! ์ด์ œ React ์•ฑ์—์„œ ๋™์‹œ ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ž๋™ ๋ฐฐ์นญ, ์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋ฒ„ ๋ Œ๋”๋ง ๋ฐ React Suspense์™€ ๊ฐ™์€ React 18์˜ ๋™์‹œ ๊ธฐ๋Šฅ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +๊ธฐ์–ตํ•˜์„ธ์š”, ๋™์‹œ ๋ชจ๋“œ๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ด์ง€๋งŒ ํฐ ํž˜์—๋Š” ํฐ ์ฑ…์ž„์ด ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ์ด๋Š” ์ƒˆ๋กœ์šด ์ˆ˜์ค€์˜ ๋ณต์žก์„ฑ์„ ๋„์ž…ํ•˜๋ฉฐ ์•ฑ์˜ ์—…๋ฐ์ดํŠธ์™€ ๋ Œ๋”๋ง ๋ฐฉ์‹์„ ๋‹ค๋ฅด๊ฒŒ ์ƒ๊ฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋ฅผ ์ตํžˆ๊ฒŒ ๋˜๋ฉด, React ์•ฑ์ด ํ•œ ๋‹จ๊ณ„ ๋” ๋ฐœ์ „ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. + +## ๋™์‹œ React: ์‹ค์ œ ์˜ˆ์ œ + +์ด์ œ ๋™์‹œ ๋ชจ๋“œ์˜ ์ด๋ก ๊ณผ ์„ค์ •์— ๋Œ€ํ•ด ๋‹ค๋ฃจ์—ˆ์œผ๋‹ˆ, ์‹ค์ œ๋กœ ๋™์‹œ React๊ฐ€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์–ด๋–ป๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š”์ง€ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ์ œ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. + +### ์˜ˆ์ œ 1: ์‚ฌ์šฉ์ž ์ž…๋ ฅ ์šฐ์„  ์ฒ˜๋ฆฌ + +๋™์‹œ ๋ชจ๋“œ์˜ ์ฃผ์š” ์ด์  ์ค‘ ํ•˜๋‚˜๋Š” ํŠน์ • ์ž‘์—…์„ ๋‹ค๋ฅธ ์ž‘์—…๋ณด๋‹ค ์šฐ์„  ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์•ฑ์— ๊ฒ€์ƒ‰์ฐฝ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒ€์ƒ‰์ฐฝ์— ์ž…๋ ฅํ•˜๋ฉด ์•ฑ์€ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ญ๋ชฉ ๋ชฉ๋ก์„ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค. + +์ „ํ†ต์ ์ธ ๋™๊ธฐ ๋ Œ๋”๋ง ๋ชจ๋ธ์—์„œ๋Š” ํ•ญ๋ชฉ ๋ชฉ๋ก์ด ํฌ๋‹ค๋ฉด, ๋ชฉ๋ก์„ ํ•„ํ„ฐ๋งํ•˜๋Š” ์ž‘์—…์ด ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์ฐจ๋‹จํ•˜์—ฌ ์ž…๋ ฅ์ด ์‚ฌ์šฉ์ž์˜ ํƒ€์ดํ•‘ ์†๋„์— ๋’ค์ฒ˜์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์‚ฌ์šฉ์ž๋ฅผ ๋ถˆํŽธํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +๋™์‹œ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, React๋Š” ํ•„ํ„ฐ๋ง ํ”„๋กœ์„ธ์Šค๋ฅผ ์ค‘๋‹จํ•˜๊ณ  ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ž…๋ ฅ์ด ํ•ญ์ƒ ์‘๋‹ต์„ฑ์„ ์œ ์ง€ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +### ์˜ˆ์ œ 2: Suspense๋ฅผ ํ†ตํ•œ ๋ถ€๋“œ๋Ÿฌ์šด ๋กœ๋”ฉ ์ƒํƒœ + +๋™์‹œ ๋ชจ๋“œ์˜ ๋˜ ๋‹ค๋ฅธ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์€ React Suspense์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ปดํฌ๋„ŒํŠธ์˜ ๋ถ€๋“œ๋Ÿฌ์šด ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +์˜ˆ๋ฅผ ๋“ค์–ด, API์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค. ์ „ํ†ต์ ์ธ ๋ชจ๋ธ์—์„œ๋Š” ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ์ˆ˜๋™์œผ๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋ฉฐ, ์ œ๋Œ€๋กœ ๊ด€๋ฆฌ๋˜์ง€ ์•Š์œผ๋ฉด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ๋ถˆํŽธํ•ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +Suspense๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์„ ์–ธ์ ์œผ๋กœ ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ์ง€์ •ํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” React๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด React๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•˜๋Š” ๋™์•ˆ "๊ธฐ๋‹ค๋ฆฌ๊ณ " ๊ทธ ์‚ฌ์ด์— ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ๋ณด์—ฌ์คŒ์œผ๋กœ์จ ํ›จ์”ฌ ๋” ๋ถ€๋“œ๋Ÿฌ์šด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +```tsx +Loading...}> + + +``` + +์ด ์˜ˆ์ œ์—์„œ DataFetchingComponent๊ฐ€ ์—ฌ์ „ํžˆ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ค‘์ด๋ผ๋ฉด, React๋Š” fallback ์†์„ฑ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๊ฐ„๋‹จํ•œ "Loading..." div๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. + +์ด๊ฒƒ์€ ๋™์‹œ React๊ฐ€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ์— ๋ถˆ๊ณผํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€๋Šฅ์„ฑ์€ ๋ฌด๊ถ๋ฌด์ง„ํ•˜๋ฉฐ, ์ด๋Ÿฌํ•œ ๊ฐ•๋ ฅํ•œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์œผ๋กœ ์—ฌ๋Ÿฌ๋ถ„์ด ๋ฌด์—‡์„ ๋งŒ๋“ค์ง€ ๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค! + +## React 18: ์†์‰ฝ๊ฒŒ ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ + +React 18์˜ ๋™์‹œ ๋ชจ๋“œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋™์‹œ์„ฑ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์— ํฐ ๋ณ€ํ™”๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. +์ด๋Š” ์ƒˆ๋กœ์šด ๋™์‹œ ๋ Œ๋”๋Ÿฌ๋ฅผ ๋„์ž…ํ•˜์—ฌ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์ฐจ๋‹จํ•˜์ง€ ์•Š๊ณ  ๋™์‹œ์— ์—ฌ๋Ÿฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ž‘์—…๋งŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ์ด์ „์˜ ๋™๊ธฐ ๋ Œ๋”๋Ÿฌ์— ๋น„ํ•ด ์ƒ๋‹นํ•œ ๊ฐœ์„ ์ž…๋‹ˆ๋‹ค. + +ํ•˜์ง€๋งŒ React๋Š” ๋™์‹œ์„ฑ์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ๊นŒ์š”? ๊ทธ ๋น„๋ฐ€์€ React๊ฐ€ ์—…๋ฐ์ดํŠธ๋ฅผ ์Šค์ผ€์ค„๋งํ•˜๋Š” ๋ฐฉ์‹์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์‹œ ๋ชจ๋“œ์—์„œ๋Š” React๊ฐ€ ์ง„ํ–‰ ์ค‘์ธ ๋ Œ๋”๋ง ํ”„๋กœ์„ธ์Šค๋ฅผ ์ค‘๋‹จํ•˜๊ณ  ์‚ฌ์šฉ์ž ์ž…๋ ฅ๊ณผ ๊ฐ™์€ ๋” ๊ธด๊ธ‰ํ•œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์•ฑ์ด ๋ฌด๊ฑฐ์šด ๊ณ„์‚ฐ์ด๋‚˜ ๋„คํŠธ์›Œํฌ ์š”์ฒญ ์ค‘์—๋„ ํ•ญ์ƒ ์‘๋‹ต์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +์ด๊ฒƒ์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•œ ์˜ˆ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค: + +```tsx +import { startTransition } from "react"; + +function MyComponent() { + const [state, setState] = useState(initialState); + + function handleClick() { + startTransition(() => { + setState(newState); + }); + } + + // ... +} +``` + +์ด ์˜ˆ์ œ์—์„œ๋Š” startTransition ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํƒœ ์—…๋ฐ์ดํŠธ๋ฅผ "์ „ํ™˜"์œผ๋กœ ํ‘œ์‹œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” React์—๊ฒŒ ์ด ์—…๋ฐ์ดํŠธ๊ฐ€ ๊ธด๊ธ‰ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋” ๊ธด๊ธ‰ํ•œ ์ž‘์—…์ด ์žˆ์„ ๊ฒฝ์šฐ ์ค‘๋‹จ๋  ์ˆ˜ ์žˆ์Œ์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค. + +์ž‘์—…์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์ด ๊ธฐ๋Šฅ์ด ๋™์‹œ ๋ชจ๋“œ๋ฅผ ๋งค์šฐ ๊ฐ•๋ ฅํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด React๋Š” ๋ณต์žกํ•œ ๋ Œ๋”๋ง ์ž‘์—…์„ ๋” ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋” ๋ถ€๋“œ๋Ÿฝ๊ณ  ์‘๋‹ต์„ฑ์ด ์ข‹์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. + +๊ทธ๋Ÿฌ๋‚˜ ํฐ ํž˜์—๋Š” ํฐ ์ฑ…์ž„์ด ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ๋™์‹œ ๋ชจ๋“œ๋Š” ์ƒˆ๋กœ์šด ์ˆ˜์ค€์˜ ๋ณต์žก์„ฑ์„ ๋„์ž…ํ•˜๋ฉฐ, ์•ฑ์ด ์—…๋ฐ์ดํŠธ๋˜๊ณ  ๋ Œ๋”๋ง๋˜๋Š” ๋ฐฉ์‹์„ ๋‹ค๋ฅด๊ฒŒ ์ƒ๊ฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋™์‹œ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๊ฐœ๋…์„ ์ฒ ์ €ํžˆ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. + +## React 18: ๋”๋ธ” ๋ Œ๋” ๋ฏธ์Šคํ„ฐ๋ฆฌ ์„ค๋ช… + +React 18์˜ ๋™์‹œ ๋ชจ๋“œ์—์„œ ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์šด ์ธก๋ฉด ์ค‘ ํ•˜๋‚˜๋Š” ์†Œ์œ„ "๋”๋ธ” ๋ Œ๋”" ํ˜„์ƒ์ž…๋‹ˆ๋‹ค. React 18์„ ์‹คํ—˜ํ•ด๋ณด์…จ๋‹ค๋ฉด ์ผ๋ถ€ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ•œ ๋ฒˆ๋งŒ ๋ Œ๋”๋ง๋˜์–ด์•ผ ํ•˜๋Š”๋ฐ ๋‘ ๋ฒˆ ๋ Œ๋”๋ง๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์„์ง€๋„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ๋„๋Œ€์ฒด ๋ฌด์Šจ ์ผ์ด ๋ฒŒ์–ด์ง€๊ณ  ์žˆ๋Š” ๊ฑธ๊นŒ์š”? + +๋”๋ธ” ๋ Œ๋”๋Š” ์‚ฌ์‹ค ๋ฒ„๊ทธ๊ฐ€ ์•„๋‹ˆ๋ผ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ƒˆ๋กœ์šด ๋™์‹œ ๋ Œ๋”๋Ÿฌ์˜ ์ž‘๋™ ๋ฐฉ์‹์—์„œ ๋น„๋กฏ๋ฉ๋‹ˆ๋‹ค. ๋™์‹œ ๋ชจ๋“œ์—์„œ๋Š” React๊ฐ€ DOM์„ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์ „์— ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ƒˆ๋กœ์šด ํ™”๋ฉด(๋˜๋Š” ์—…๋ฐ์ดํŠธ๋œ ์ปดํฌ๋„ŒํŠธ ์ƒํƒœ)์„ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ "๋ฉ”๋ชจ๋ฆฌ ๋‚ด ๋ Œ๋”๋ง" ๋˜๋Š” "์˜คํ”„์Šคํฌ๋ฆฐ ๋ Œ๋”๋ง"์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. + +์ด ๋‹จ๊ณ„์—์„œ React๋Š” ์ผ๋ถ€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์ด์ง€ ์•Š๋”๋ผ๋„ ํ•œ ๋ฒˆ ์ด์ƒ ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด "๋”๋ธ” ๋ Œ๋”"๋ฅผ ์ดˆ๋ž˜ํ•˜๋Š” ์›์ธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ์ถ”๊ฐ€ ๋ Œ๋”๋ง์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋น ๋ฅด๊ฒŒ ์ด๋ฃจ์–ด์ง€๋ฉฐ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์ฐจ๋‹จํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์•ฑ์˜ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. + +์ด๋ฅผ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•œ ์˜ˆ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค: + +```tsx +function MyComponent() { + const [state, setState] = useState(initialState); + + console.log("Render"); + + // ... +} +``` + +์ด ์˜ˆ์ œ์—์„œ ์ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋™์‹œ ๋ชจ๋“œ์—์„œ ์‹คํ–‰ํ•˜๋ฉด, ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ•œ ๋ฒˆ๋งŒ ์—…๋ฐ์ดํŠธ๋˜๋”๋ผ๋„ ์ฝ˜์†”์— "Render"๊ฐ€ ๋‘ ๋ฒˆ ๊ธฐ๋ก๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ "๋”๋ธ” ๋ Œ๋”" ํ˜„์ƒ์ž…๋‹ˆ๋‹ค. + +๋”ฐ๋ผ์„œ ๋™์‹œ ๋ชจ๋“œ์—์„œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‘ ๋ฒˆ ๋ Œ๋”๋ง๋˜๋Š” ๊ฒƒ์„ ๋ณด๋”๋ผ๋„ ๋†€๋ผ์ง€ ๋งˆ์„ธ์š”. ์ด๋Š” React๊ฐ€ ์ƒˆ๋กœ์šด ํ™”๋ฉด์„ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ค€๋น„ํ•˜์—ฌ ๋” ๋ถ€๋“œ๋Ÿฌ์šด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ๊ณผ์ •์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. + +## React Experimental: ๋ฌด์—‡์— ๊ด€ํ•œ ๊ฒƒ์ผ๊นŒ? + +React ๊ฐœ๋ฐœ์„ ์ฃผ์‹œํ•˜๊ณ  ์žˆ๋‹ค๋ฉด "React Experimental"์ด๋ผ๋Š” ์šฉ์–ด๋ฅผ ์ ‘ํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๊ฒƒ์ด ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋ฉฐ ๋™์‹œ ๋ชจ๋“œ์™€ ์–ด๋–ค ๊ด€๋ จ์ด ์žˆ์„๊นŒ์š”? + +"React Experimental"์€ ์•ˆ์ •์ ์ธ ๋ฆด๋ฆฌ์Šค์—์„œ๋Š” ์•„์ง ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜๋Š” ์‹คํ—˜์ ์ธ React ๋นŒ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์šฉ์–ด์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์‹คํ—˜ ๋นŒ๋“œ๋Š” React ํŒ€์ด ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ , ์ปค๋ฎค๋‹ˆํ‹ฐ๋กœ๋ถ€ํ„ฐ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๊ณ , ์•ˆ์ •์ ์ธ ๋ฆด๋ฆฌ์Šค์— ํฌํ•จํ•˜๊ธฐ ์ „์— ๋””์ž์ธ์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ฐœ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. + +๋™์‹œ ๋ชจ๋“œ๋Š” ์ฒ˜์Œ์— React Experimental์—์„œ ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ด‘๋ฒ”์œ„ํ•œ ํ…Œ์ŠคํŠธ์™€ ํ”ผ๋“œ๋ฐฑ์ด ํ•„์š”ํ•œ ๊ธ‰์ง„์ ์ธ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. React Experimental์—์„œ ๋จผ์ € ์ถœ์‹œํ•จ์œผ๋กœ์จ, React ํŒ€์€ ์ปค๋ฎค๋‹ˆํ‹ฐ๋กœ๋ถ€ํ„ฐ ๊ท€์ค‘ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์ˆ˜์ง‘ํ•˜๊ณ  ๋™์‹œ ๋ชจ๋“œ์˜ ๋””์ž์ธ๊ณผ ๊ตฌํ˜„์— ํ•„์š”ํ•œ ์กฐ์ •์„ ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. + +๋”ฐ๋ผ์„œ ์ตœ์‹ ์˜ React ๊ธฐ๋Šฅ์„ ๊ณต์‹ ์ถœ์‹œ ์ „์— ์‚ฌ์šฉํ•ด๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด React Experimental์„ ์ฃผ๋ชฉํ•˜์„ธ์š”. ํ•˜์ง€๋งŒ React Experimental์˜ ๊ธฐ๋Šฅ์€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. + +๊ทธ๋ฆฌ๊ณ  React ๊ฐœ๋ฐœ์— ๊ธฐ์—ฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, React Experimental์„ ์‹œ๋„ํ•ด๋ณด๊ณ  React ํŒ€์— ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ์‹œ์ž‘์ ์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์˜ ํ”ผ๋“œ๋ฐฑ์€ React์˜ ๋ฏธ๋ž˜๋ฅผ ํ˜•์„ฑํ•˜๊ณ  ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ๋” ๋‚˜์€ React๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +## React์˜ ์ง€์†์ ์ธ ๊ฐœ๋ฐœ: ๋ฏธ๋ž˜ ์ „๋ง + +React๋Š” ์ง€์†์ ์œผ๋กœ ๊ฐœ๋ฐœ๋˜๊ณ  ๊ฐœ์„ ๋˜๋Š” ์‚ด์•„ ์ˆจ์‰ฌ๋Š” ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. React ํŒ€๊ณผ ์˜คํ”ˆ ์†Œ์Šค ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์˜ํ•ด ๋Š์ž„์—†์ด ๋ฐœ์ „ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, React 18์˜ ์ถœ์‹œ๋กœ React์˜ ๋ฏธ๋ž˜๋Š” ๋ฐ๊ณ  ํฅ๋ฏธ๋กœ์šด ๊ฐ€๋Šฅ์„ฑ๋“ค๋กœ ๊ฐ€๋“ ์ฐจ ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +React์˜ ์ง€์†์ ์ธ ๊ฐœ๋ฐœ์—์„œ ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์šด ์ธก๋ฉด ์ค‘ ํ•˜๋‚˜๋Š” ๋™์‹œ์„ฑ์— ๋Œ€ํ•œ ์ง‘์ค‘์ž…๋‹ˆ๋‹ค. React 18์—์„œ ๋™์‹œ ๋ชจ๋“œ์˜ ๋„์ž…์œผ๋กœ React๋Š” ๋” ์‘๋‹ต์„ฑ์ด ์ข‹๊ณ  ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ๋ฏธ๋ž˜๋ฅผ ํ–ฅํ•œ ํฐ ๋ฐœ๊ฑธ์Œ์„ ๋‚ด๋””๋Ž ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Š” ์‹œ์ž‘์— ๋ถˆ๊ณผํ•ฉ๋‹ˆ๋‹ค. React ํŒ€์€ ์ด๋ฏธ ๋™์‹œ ๋ Œ๋”๋ง์˜ ๊ฐ•๋ ฅํ•จ์„ ํ•œ์ธต ๋” ๋ฐœ์ „์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์ƒˆ๋กœ์šด ๋™์‹œ ๊ธฐ๋Šฅ๊ณผ ๊ฐœ์„  ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. + +๋˜ ๋‹ค๋ฅธ ํฅ๋ฏธ๋กœ์šด ๊ฐœ๋ฐœ ์˜์—ญ์€ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋ง๋˜๊ณ  HTML๋กœ ํด๋ผ์ด์–ธํŠธ์— ์ „์†ก๋  ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ์œ ํ˜•์˜ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋Š” API ๊ณ„์ธต ์—†์ด๋„ ์„œ๋ฒ„ ์ธก ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์–ด, ์•ฑ์˜ ๋ฐ์ดํ„ฐ ํŽ˜์นญ ๋กœ์ง์„ ํฌ๊ฒŒ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +๊ทธ๋ฆฌ๊ณ  React Suspense๋„ ์žŠ์ง€ ๋ง์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ์˜ ๋ถ€๋“œ๋Ÿฌ์šด ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. Suspense๋Š” ์ด๋ฏธ React 18์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, React ํŒ€์€ ์ด๋ฅผ ๋”์šฑ ๊ฐ•๋ ฅํ•˜๊ณ  ์œ ์—ฐํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์ƒˆ๋กœ์šด API์™€ ์ถ”๊ฐ€ ๊ฐœ์„  ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. + +๋”ฐ๋ผ์„œ React ๊ฐœ๋ฐœ์ž๋กœ์„œ ์•ž์œผ๋กœ ๊ธฐ๋Œ€ํ•  ๊ฒƒ์ด ๋งŽ์Šต๋‹ˆ๋‹ค. React์˜ ๋ฏธ๋ž˜๋Š” ์•ฑ์„ ๋” ์‘๋‹ต์„ฑ ๋†’๊ณ  ์‚ฌ์šฉ์ž ์นœํ™”์ ์ด๋ฉฐ, ๊ฐœ๋ฐœํ•˜๊ธฐ ์žฌ๋ฏธ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” ํฅ๋ฏธ๋กœ์šด ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ๊ณผ ๊ฐœ์„ ์œผ๋กœ ๊ฐ€๋“ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. React ํŒ€์ด ์šฐ๋ฆฌ์—๊ฒŒ ์–ด๋–ค ๊ฒƒ์„ ์ค€๋น„ํ•˜๊ณ  ์žˆ์„์ง€ ์ •๋ง ๊ธฐ๋Œ€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค! + +## ์™œ React๊ฐ€ ๊ฐœ๋ฐœ์ž๋“ค ์‚ฌ์ด์—์„œ ์ธ๊ธฐ๊ฐ€ ๋งŽ์€๊ฐ€ + +React๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์˜ ์„ธ๊ณ„๋ฅผ ๊ฐ•ํƒ€ํ–ˆ์Šต๋‹ˆ๋‹ค. 2013๋…„ Facebook์— ์˜ํ•ด ์ถœ์‹œ๋œ ์ดํ›„, React๋Š” ๊ฐœ๋ฐœ์ž๋“ค ์‚ฌ์ด์—์„œ ์—„์ฒญ๋‚œ ์ธ๊ธฐ๋ฅผ ์–ป์—ˆ์œผ๋ฉฐ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์™œ React๊ฐ€ ์ด๋ ‡๊ฒŒ ์ธ๊ธฐ๊ฐ€ ๋งŽ์„๊นŒ์š”? + +์ฃผ์š” ์ด์œ  ์ค‘ ํ•˜๋‚˜๋Š” ๊ทธ ๋‹จ์ˆœํ•จ๊ณผ ์œ ์—ฐ์„ฑ์ž…๋‹ˆ๋‹ค. React๋Š” ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ์กฐ๊ฐ์ธ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ด๋Ÿฌํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ๋ณต์žกํ•œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๋Š” ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. + +๋˜ ๋‹ค๋ฅธ ์ด์œ ๋Š” ์„ฑ๋Šฅ์ž…๋‹ˆ๋‹ค. React๋Š” ๊ฐ€์ƒ DOM๊ณผ ๋””ํ•‘(diffing) ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์ œ DOM์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ ์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์‹ค์ œ DOM ์—…๋ฐ์ดํŠธ๊ฐ€ ๋Š๋ฆด ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ณต์žกํ•œ UI๋ฅผ ๊ฐ€์ง„ ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋„ ๋น ๋ฅด๊ณ  ์‘๋‹ต์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. + +React 18์—์„œ ๋„์ž…๋œ ๋™์‹œ ๋ชจ๋“œ๋Š” ์ด๋Ÿฌํ•œ ์„ฑ๋Šฅ์„ ํ•œ ๋‹จ๊ณ„ ๋” ๋Œ์–ด์˜ฌ๋ฆฝ๋‹ˆ๋‹ค. React๊ฐ€ ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ทธ ์ค‘์š”๋„์— ๋”ฐ๋ผ ์šฐ์„  ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ์œผ๋กœ์จ, ๋™์‹œ ๋ชจ๋“œ๋Š” React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋”์šฑ ์‘๋‹ต์„ฑ์ด ๋†’๊ณ  ์‚ฌ์šฉ์ž ์นœํ™”์ ์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค. + +ํ•˜์ง€๋งŒ ์•„๋งˆ๋„ React์˜ ์ธ๊ธฐ๊ฐ€ ๋งŽ์€ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ด์œ ๋Š” ๊ทธ ํ™œ๊ธฐ์ฐฌ ์ปค๋ฎค๋‹ˆํ‹ฐ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ „ ์„ธ๊ณ„ ์ˆ˜๋ฐฑ๋งŒ ๋ช…์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ React๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์–ด, ์–ธ์ œ๋‚˜ ๋„์›€์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ ํ•ด๊ฒฐ, ๊ฐœ๋ฐœ์„ ๋‹จ์ˆœํ™”ํ•  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ๋˜๋Š” ์˜๊ฐ์ด ํ•„์š”ํ•  ๋•Œ, React ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ํ•ญ์ƒ ๋„์™€์ค„ ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. + +๊ทธ๋ฆฌ๊ณ  ๋™์‹œ ๋ชจ๋“œ, ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ, React Suspense์™€ ๊ฐ™์€ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์˜ ๋„์ž…์œผ๋กœ, React๋Š” ํ˜„์žฌ์— ์•ˆ์ฃผํ•˜์ง€ ์•Š๊ณ  ๊ณ„์†ํ•ด์„œ ์ง„ํ™”ํ•˜๊ณ  ๊ฐœ์„ ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” React๊ฐ€ ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ํฅ๋ฏธ๋กญ๊ณ  ๋ณด๋žŒ ์žˆ๋Š” ์„ ํƒ์ด ๋˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. + +## React Suspense: ํ”„๋กœ๋•์…˜ ์ค€๋น„๊ฐ€ ๋˜์—ˆ์„๊นŒ? ๋ถ„์„ + +React Suspense๋Š” React 18์—์„œ ๋„์ž…๋œ ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์šด ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ์„ ์–ธ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜์—ฌ ๋ถ€๋“œ๋Ÿฝ๊ณ  ์‘๋‹ต์„ฑ ์ข‹์€ ๋กœ๋”ฉ ๊ฒฝํ—˜์„ ๋งŒ๋“ค๊ธฐ ์‰ฝ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๊ฒƒ์ด ํ”„๋กœ๋•์…˜์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ์— ์ค€๋น„๊ฐ€ ๋˜์—ˆ์„๊นŒ์š”? + +๋‹ต์€ "์˜ˆ"์ด์ง€๋งŒ ์ฃผ์˜ํ•  ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. React Suspense๋Š” React 18์— ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ ํ”„๋กœ๋•์…˜์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์—ฌ์ „ํžˆ ์‹คํ—˜์ ์ธ ๊ธฐ๋Šฅ์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์•ˆ์ •์ ์ด๊ณ  ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, React ํŒ€์ด ํ•ด๊ฒฐํ•ด์•ผ ํ•  ๋ช‡ ๊ฐ€์ง€ ์—ฃ์ง€ ์ผ€์ด์Šค์™€ ๋ฒ„๊ทธ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. + +Suspense๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์—ผ๋‘์— ๋‘์–ด์•ผ ํ•  ์ฃผ์š” ์‚ฌํ•ญ ์ค‘ ํ•˜๋‚˜๋Š” ๋กœ๋”ฉ ์ƒํƒœ์— ๋Œ€ํ•œ ์‚ฌ๊ณ ๋ฐฉ์‹์˜ ๋ณ€ํ™”๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ์—์„œ ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ์ˆ˜๋™์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋Œ€์‹ , Suspense๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์„ ์–ธ์ ์œผ๋กœ ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ์ง€์ •ํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” React๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๊ฐ„์†Œํ™”๋˜๊ณ  ๋กœ๋”ฉ ์ƒํƒœ๊ฐ€ ์ผ๊ด€๋˜๊ฒŒ ์œ ์ง€๋  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ผ๋ถ€ ๋ฆฌํŒฉํ† ๋งํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Suspense๋ฅผ ๋Œ€๊ทœ๋ชจ ๊ธฐ์กด ์ฝ”๋“œ๋ฒ ์ด์Šค์— ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•œ๋‹ค๋ฉด, ์–ด๋Š ์ •๋„์˜ ์ž‘์—…์„ ์ค€๋น„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. + +๊ฒฐ๋ก ์ ์œผ๋กœ, React Suspense๋Š” ๋ถ€๋“œ๋Ÿฌ์šด ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ด์ง€๋งŒ, ์—ฌ์ „ํžˆ ์‹คํ—˜์ ์ธ ๊ธฐ๋Šฅ์ด๋ฉฐ ๊ธฐ์กด ์ฝ”๋“œ์— ํ†ตํ•ฉํ•˜๋Š” ๋ฐ ์•ฝ๊ฐ„์˜ ์ž‘์—…์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•  ์˜์ง€๊ฐ€ ์žˆ๋‹ค๋ฉด, ๋กœ๋”ฉ ๊ฒฝํ—˜์„ ํฌ๊ฒŒ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒŒ์ž„ ์ฒด์ธ์ €๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +## React 18: ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ๊ณผ ๋Œ€์ฒ˜ ๋ฐฉ๋ฒ• + +๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ฃผ์š” ๋ฆด๋ฆฌ์Šค๋งˆ๋‹ค ํ•ญ์ƒ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. React 18๋„ ์˜ˆ์™ธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. React ํŒ€์€ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋งŽ์€ ๋…ธ๋ ฅ์„ ๊ธฐ์šธ์˜€์ง€๋งŒ, ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ž ์žฌ์ ์œผ๋กœ ์ค‘๋‹จ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. + +๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ค‘ ํ•˜๋‚˜๋Š” ๋™์‹œ ๋ชจ๋“œ์˜ ๋„์ž…์ž…๋‹ˆ๋‹ค. ๋™์‹œ ๋ชจ๋“œ๋Š” ๋งŽ์€ ์ด์ ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, React์—์„œ ๋ Œ๋”๋ง๊ณผ ์ƒํƒœ ์—…๋ฐ์ดํŠธ์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ์‚ฌ๊ณ ๋ฐฉ์‹์„ ๋„์ž…ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ธฐ์กด ์ฝ”๋“œ์—์„œ ๊ฐ€์ •ํ•œ ๋‚ด์šฉ์„ ์ž ์žฌ์ ์œผ๋กœ ์ค‘๋‹จ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +์˜ˆ๋ฅผ ๋“ค์–ด, ๋™์‹œ ๋ชจ๋“œ์—์„œ๋Š” React๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์ด์ง€ ์•Š๋”๋ผ๋„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ด์ „ ๋ฒ„์ „์˜ React์—์„œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ •ํ™•ํžˆ ํ•œ ๋ฒˆ ๋ Œ๋”๋ง๋˜๋Š” ๋™๊ธฐ ๋ Œ๋”๋ง ๋ชจ๋ธ๊ณผ๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค. + +๋˜ ๋‹ค๋ฅธ ์ž ์žฌ์ ์ธ ๋ฌธ์ œ๋Š” ์ž๋™ ๋ฐฐ์นญ์˜ ๋„์ž…์ž…๋‹ˆ๋‹ค. React 18์—์„œ๋Š” ์—ฌ๋Ÿฌ ์ƒํƒœ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋ฐฐ์น˜๋˜์–ด ๋‹จ์ผ ์žฌ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ƒํƒœ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ฆ‰๊ฐ์ ์ธ ์žฌ๋ Œ๋”๋ง์„ ์œ ๋ฐœํ•˜๋Š” ๊ธฐ์กด ์ฝ”๋“œ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ์–ด๋–ป๊ฒŒ ๋Œ€์ฒ˜ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”? ๋‹ค์Œ ๋ช‡ ๊ฐ€์ง€ ํŒ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”: + +1. ์•ฑ ํ…Œ์ŠคํŠธํ•˜๊ธฐ: ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€์ฒ˜ํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋Š” ์•ฑ์„ ์ฒ ์ €ํžˆ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ์˜ํ–ฅ์„ ๋ฐ›์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐ๋˜๋Š” ๋ถ€๋ถ„๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์•ฑ์˜ ๋ชจ๋“  ๋ถ€๋ถ„์„ ํ…Œ์ŠคํŠธํ•˜์„ธ์š”. + +2. ์—„๊ฒฉ ๋ชจ๋“œ ์‚ฌ์šฉํ•˜๊ธฐ: ์—„๊ฒฉ ๋ชจ๋“œ๋Š” ์•ฑ์—์„œ ์ž ์žฌ์ ์ธ ๋ฌธ์ œ๋ฅผ ์žก์•„๋‚ด๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” React ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. React์˜ ์ƒˆ๋กœ์šด ๋ฒ„์ „์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ๋•Œ ํŠนํžˆ ์œ ์šฉํ•˜๋ฉฐ, ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์ „์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +3. ํ•„์š”์— ๋”ฐ๋ผ ๋ฆฌํŒฉํ† ๋งํ•˜๊ธฐ: React 18์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์œผ๋กœ ์ธํ•ด ์•ฑ์˜ ์ผ๋ถ€๊ฐ€ ๊นจ์ง€๋Š” ๊ฒฝ์šฐ, ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ƒํƒœ ์—…๋ฐ์ดํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์•ฑ์—์„œ ๋ Œ๋”๋ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์„ ์žฌ๊ณ ํ•˜๋Š” ๊ฒƒ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +4. ๋„์›€ ๊ตฌํ•˜๊ธฐ: ๋ง‰ํžˆ๋ฉด ์ฃผ์ €ํ•˜์ง€ ๋ง๊ณ  ๋„์›€์„ ๊ตฌํ•˜์„ธ์š”. React ์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” ํ™œ๊ธฐ์ฐจ๊ณ  ์ง€์›์ ์ด๋ฉฐ, React 18์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๋งŽ์€ ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. + +๊ธฐ์–ตํ•˜์„ธ์š”, ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋Š” ๋„์ „์ ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด๋Š” ์ฝ”๋“œ๋ฅผ ๊ฐœ์„ ํ•˜๊ณ  React์— ๋Œ€ํ•ด ๋” ๋งŽ์ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๋„์ „์„ ๋ฐ›์•„๋“ค์ด๊ณ  ์ฆ๊ฒ๊ฒŒ ์ฝ”๋”ฉํ•˜์„ธ์š”! + +## React 18: ๋™์‹œ ๊ธฐ๋Šฅ์˜ ํž˜ + +React 18๊ณผ ๊ทธ ๋™์‹œ ๋ชจ๋“œ๋ฅผ ํƒํ—˜ํ•˜๋ฉด์„œ React์—์„œ ๋ Œ๋”๋ง์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ์‚ฌ๊ณ ๋ฐฉ์‹์„ ์–ด๋–ป๊ฒŒ ๋„์ž…ํ–ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋‹จ์ˆœํžˆ ์•ฑ์„ ๋” ๋น ๋ฅด๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋” ์‘๋‹ต์„ฑ ์žˆ๊ณ  ์‚ฌ์šฉ์ž ์นœํ™”์ ์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. React 18์˜ ๋™์‹œ ๊ธฐ๋Šฅ์˜ ํž˜์€ ๊ณผ์žฅํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. + +์ž๋™ ๋ฐฐ์นญ: ์ด ๊ธฐ๋Šฅ์€ ์—ฌ๋Ÿฌ ์ƒํƒœ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•จ๊ป˜ ๋ฐฐ์น˜ํ•˜์—ฌ ๋‹จ์ผ ์žฌ๋ Œ๋”๋ง์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ƒํƒœ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋นˆ๋ฒˆํ•œ ์•ฑ์˜ ์„ฑ๋Šฅ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +**์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋ฒ„ ๋ Œ๋”๋ง:** ์ด ๊ธฐ๋Šฅ์€ ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ HTML์„ ์ŠคํŠธ๋ฆฌ๋ฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์—ฌ ์•ฑ์˜ ์ธ์‹๋œ ๋กœ๋“œ ์‹œ๊ฐ„์„ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” ์ „์ฒด ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ์ฒซ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ ์ฒญํฌ๋ฅผ ๋ฐ›์ž๋งˆ์ž HTML ๋ Œ๋”๋ง์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +**React Suspense:** ์ด ๊ธฐ๋Šฅ์€ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์„ ์–ธ์ ์ธ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Suspense๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ผ๋ถ€ ์ฝ”๋“œ๊ฐ€ ๋กœ๋“œ๋  ๋•Œ๊นŒ์ง€ "๊ธฐ๋‹ค๋ฆฌ๊ณ " ์„ ์–ธ์ ์œผ๋กœ ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ๊ฐ€ ๊ฐ„์†Œํ™”๋˜๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ถ€๋“œ๋Ÿฌ์šด ๋กœ๋”ฉ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +**StartTransition:** ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • ์—…๋ฐ์ดํŠธ๋ฅผ "์ „ํ™˜"์œผ๋กœ ํ‘œ์‹œํ•˜๊ณ  ์šฐ์„  ์ˆœ์œ„๋ฅผ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ธด๊ธ‰ํ•˜์ง€ ์•Š๊ณ  ๋” ๊ธด๊ธ‰ํ•œ ์ž‘์—…์ด ์žˆ์„ ๋•Œ ์ค‘๋‹จํ•  ์ˆ˜ ์žˆ๋Š” ์—…๋ฐ์ดํŠธ์— ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +**UseDeferredValue:** ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋Š๋ฆฐ ์ƒํƒœ ์—…๋ฐ์ดํŠธ๋ฅผ ๋” ๋น ๋ฅธ ์ƒํƒœ ์—…๋ฐ์ดํŠธ๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์—ฐ๊ธฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ฌด๊ฑฐ์šด ๊ณ„์‚ฐ์ด๋‚˜ ๋„คํŠธ์›Œํฌ ์š”์ฒญ ์ค‘์—๋„ UI์˜ ์‘๋‹ต์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +์ด๋Ÿฌํ•œ ๋™์‹œ ๊ธฐ๋Šฅ๋“ค์€ React 18์˜ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค. ์ด๋“ค์€ ์‘๋‹ต์„ฑ์ด ๋›ฐ์–ด๋‚˜๊ณ  ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ์•ฑ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ์ƒˆ๋กœ์šด ๋„๊ตฌ์™€ ๊ธฐ์ˆ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํฐ ํž˜์—๋Š” ํฐ ์ฑ…์ž„์ด ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ๋“ค์€ ์ƒˆ๋กœ์šด ์ˆ˜์ค€์˜ ๋ณต์žก์„ฑ์„ ๋„์ž…ํ•˜๋ฉฐ ์•ฑ์ด ์—…๋ฐ์ดํŠธ๋˜๊ณ  ๋ Œ๋”๋ง๋˜๋Š” ๋ฐฉ์‹์„ ๋‹ค๋ฅด๊ฒŒ ์ƒ๊ฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋Ÿฌํ•œ ๊ฐœ๋…์„ ์ฒ ์ €ํžˆ ์ดํ•ดํ•œ ํ›„์— ์‚ฌ์šฉํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. + +## ๋™์‹œ ๋ชจ๋“œ์™€ ํ•จ๊ป˜ํ•˜๋Š” React์˜ ๋ฏธ๋ž˜ + +React ๋™์‹œ ๋ชจ๋“œ์— ๋Œ€ํ•œ ํƒํ—˜์„ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” ๋งŽ์€ ๊ฒƒ์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ๋™์‹œ ๋ Œ๋”๋ง์˜ ๊ธฐ๋ณธ์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ๋ถ€ํ„ฐ React 18์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๊นŠ์ด ํŒŒ๊ณ ๋“œ๋Š” ๊ฒƒ๊นŒ์ง€, ๋™์‹œ ๋ชจ๋“œ๊ฐ€ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์ถ• ๋ฐฉ์‹์„ ํ˜์‹ ํ•  ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. + +๋™์‹œ ๋ชจ๋“œ๋Š” ๋‹จ์ˆœํ•œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ์•„๋‹ˆ๋ผ React์— ๋Œ€ํ•œ ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ์‚ฌ๊ณ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด React๋Š” ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์ฐจ๋‹จํ•˜์ง€ ์•Š๊ณ  ๋™์‹œ์— ์—ฌ๋Ÿฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž๋™ ๋ฐฐ์นญ, ์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋ฒ„ ๋ Œ๋”๋ง, React Suspense์™€ ๊ฐ™์€ ๊ฐ•๋ ฅํ•œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๋„์ž…ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  React์—์„œ ๋ Œ๋”๋ง ๋ฐ ์ƒํƒœ ์—…๋ฐ์ดํŠธ์— ๋Œ€ํ•œ ์‚ฌ๊ณ ๋ฐฉ์‹์„ ๋ณ€ํ™”์‹œํ‚ต๋‹ˆ๋‹ค. + +ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ์ƒˆ๋กœ์šด ํž˜์—๋Š” ์ƒˆ๋กœ์šด ๋„์ „ ๊ณผ์ œ๊ฐ€ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ๋™์‹œ ๋ชจ๋“œ๋Š” ์ƒˆ๋กœ์šด ์ˆ˜์ค€์˜ ๋ณต์žก์„ฑ์„ ๋„์ž…ํ•˜๋ฉฐ ์•ฑ์ด ์—…๋ฐ์ดํŠธ๋˜๊ณ  ๋ Œ๋”๋ง๋˜๋Š” ๋ฐฉ์‹์„ ๋‹ค๋ฅด๊ฒŒ ์ƒ๊ฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด์˜ ๊ฐ€์ •์„ ์žฌ๊ณ ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  React ๊ฐœ๋ฐœ์ž๋กœ์„œ ๊ณ„์† ๋ฐฐ์šฐ๊ณ  ์„ฑ์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. + +ํ•˜์ง€๋งŒ ์ด๊ฒƒ์ด ๋ฐ”๋กœ React์˜ ๋งค๋ ฅ์ž…๋‹ˆ๋‹ค. React๋Š” ์ง€์†์ ์œผ๋กœ ์ง„ํ™”ํ•˜๊ณ  ๊ฐœ์„ ๋˜๋Š” ์‚ด์•„์žˆ๋Š” ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. ๋” ๋‚˜์€ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด ์—ด์ •์„ ๊ฐ€์ง„ ์ˆ˜๋ฐฑ๋งŒ ๋ช…์˜ ๊ฐœ๋ฐœ์ž๋กœ ๊ตฌ์„ฑ๋œ ์ปค๋ฎค๋‹ˆํ‹ฐ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•™์Šต, ์„ฑ์žฅ, ๋ฐœ๊ฒฌ์˜ ์—ฌ์ •์ž…๋‹ˆ๋‹ค. + +๋”ฐ๋ผ์„œ ๋™์‹œ ๋ชจ๋“œ์™€ ํ•จ๊ป˜ํ•˜๋Š” React์˜ ๋ฏธ๋ž˜๋ฅผ ๋ฐ”๋ผ๋ณด๋ฉฐ, ์—ฌ๋Ÿฌ๋ถ„์ด ๋ฌด์—‡์„ ๊ตฌ์ถ•ํ• ์ง€ ๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋” ์‘๋‹ต์„ฑ์ด ๋›ฐ์–ด๋‚˜๊ณ  ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ์•ฑ์„ ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์ง€ ๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ์—ฌ์ •์„ ์—ฌ๋Ÿฌ๋ถ„๊ณผ ํ•จ๊ป˜ ๊ณ„์†ํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. + +React ๊ฐœ๋ฐœ์˜ ๋ชจ๋“  ์ž ์žฌ๋ ฅ์„ ๋ฐœํœ˜ํ•  ์ค€๋น„๊ฐ€ ๋˜์…จ๋‚˜์š”? + +React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์€ ํฅ๋ฏธ๋กญ์ง€๋งŒ ์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ์š”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. [DhiWise React Builder](https://app.dhiwise.com/sign-up?utm_campaign=blog&utm_source=seo&utm_medium=website&utm_term=education&utm_content=deep-dive-into-react-concurrent-mode-exploring-key-features)๋Š” ๋” ์ ์€ ์‹œ๊ฐ„์— ๋” ๋งŽ์€ ๊ฒƒ์„ ์ด๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค. + +์˜ค๋Š˜ DhiWise ๊ณ„์ •์„ ๋“ฑ๋กํ•˜๊ณ  React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์ถ•์˜ ๋ฏธ๋ž˜๋ฅผ ๊ฒฝํ—˜ํ•ด๋ณด์„ธ์š”.