# [[React Frontend Development]] ## ๐Ÿ“Œ Brief Summary React๋Š” ๊ฐ€์ƒ DOM(Virtual DOM)๊ณผ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜(CBA)๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํšจ์œจ์ ์ด๊ณ  ์„ ์–ธ์ ์œผ๋กœ ๊ตฌ์ถ•ํ•˜๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค [1-3]. ๋ธŒ๋ผ์šฐ์ €์˜ ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” Reflow์™€ Repaint ์ž‘์—…์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด '์žฌ์กฐ์ •(Reconciliation)' ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ตœ์‹  ๋ฒ„์ „์—์„œ๋Š” Fiber ์•„ํ‚คํ…์ฒ˜์™€ ์ž๋™ ๋ฉ”๋ชจ์ด์ œ์ด์…˜(React Compiler)์„ ํ†ตํ•ด ๋ Œ๋”๋ง ์„ฑ๋Šฅ์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค [1, 3-5]. ๋˜ํ•œ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํŠน์„ฑ์— ๋งž์ถฐ CSR, SSR, SSG ๋ฐ React Server Components(RSC) ๋“ฑ ๋‹ค์–‘ํ•œ ๋ Œ๋”๋ง ์ „๋žต์„ ์ง€์›ํ•˜์—ฌ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„, SEO, ์ƒํ˜ธ์ž‘์šฉ(Interactivity)์˜ ๊ท ํ˜•์„ ๋งž์ถฅ๋‹ˆ๋‹ค [6-9]. ## ๐Ÿ“– Core Content * **๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ๊ณผ์ • (CRP) ๋ฐ ๋น„์šฉ ์ตœ์†Œํ™”** ๋ธŒ๋ผ์šฐ์ €์˜ ์ค‘์š” ๋ Œ๋”๋ง ๊ฒฝ๋กœ(Critical Rendering Path)๋Š” HTML๊ณผ CSS๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ DOM๊ณผ CSSOM ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ด๋ฅผ ๊ฒฐํ•ฉํ•ด ๋ Œ๋” ํŠธ๋ฆฌ(Render Tree)๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค [10, 11]. ์ดํ›„ ์š”์†Œ์˜ ์ •ํ™•ํ•œ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋ ˆ์ด์•„์›ƒ(Reflow) ๋‹จ๊ณ„์™€ ํ™”๋ฉด์— ํ”ฝ์…€์„ ๊ทธ๋ฆฌ๋Š” ํŽ˜์ธํŠธ(Repaint) ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นฉ๋‹ˆ๋‹ค [12, 13]. Reflow๋Š” ์—ฐ์‚ฐ ๋น„์šฉ์ด ๋งค์šฐ ๋†’์œผ๋ฉฐ, ์žฆ์€ Reflow์™€ Repaint๋Š” ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์œ ๋ฐœํ•˜๋ฏ€๋กœ DOM ์ ‘๊ทผ๊ณผ ์กฐ์ž‘์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค [14-16]. * **Virtual DOM ๋ฐ ์žฌ์กฐ์ • (Reconciliation)** ์‹ค์ œ DOM์˜ ์ง์ ‘์ ์ธ ์กฐ์ž‘์œผ๋กœ ์ธํ•œ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด, React๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ๊ฐ€๋ฒผ์šด UI ํ‘œํ˜„์ธ Virtual DOM์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค [1, 3]. ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์ƒˆ๋กœ์šด Virtual DOM์„ ์ƒ์„ฑํ•˜๊ณ  ์ด์ „ ํŠธ๋ฆฌ์™€ ๋น„๊ต(Diffing)ํ•˜์—ฌ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ์‹ค์ œ DOM์— ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค [1, 3]. ์ด ์žฌ์กฐ์ • ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์š”์†Œ์˜ ํƒ€์ž… ๋น„๊ต ๋ฐ ๋ฆฌ์ŠคํŠธ์˜ `key` ์†์„ฑ์„ ํ™œ์šฉํ•ด $O(n^3)$์˜ ๋ณต์žก๋„๋ฅผ $O(n)$์œผ๋กœ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค [17-20]. * **React Fiber ์•„ํ‚คํ…์ฒ˜์™€ ๋™์‹œ์„ฑ ๋ Œ๋”๋ง (Concurrent Rendering)** React 16์— ๋„์ž…๋œ Fiber ์•„ํ‚คํ…์ฒ˜๋Š” ๋ Œ๋”๋ง ์ž‘์—…์„ 'Fiber ๋…ธ๋“œ'๋ผ๋Š” ์ž‘์€ ์ž‘์—… ๋‹จ์œ„๋กœ ๋ถ„ํ• ํ•˜์—ฌ ๋™์‹œ์„ฑ ๋ Œ๋”๋ง์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค [21-23]. ์šฐ์„ ์ˆœ์œ„ ๊ธฐ๋ฐ˜ ๋ชจ๋ธ(Lane Model)๊ณผ ์‹œ๊ฐ„ ๋ถ„ํ• (Time-Slicing)์„ ์ ์šฉํ•˜์—ฌ, ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ(ํƒ€์ดํ•‘, ํด๋ฆญ ๋“ฑ)๊ณผ ๊ฐ™์€ ๊ธด๊ธ‰ํ•œ ์ž‘์—…์ด ๋“ค์–ด์˜ค๋ฉด ๋ฌด๊ฑฐ์šด ๋ Œ๋”๋ง ์ž‘์—…์„ ์ž ์‹œ ์ค‘๋‹จ(Yield)ํ•˜๊ณ  ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ๋น„์›Œ๋‘์–ด UI์˜ ๋ฐ˜์‘์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค [22, 24-26]. * **์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜ (Component-Based Architecture)** ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋…๋ฆฝ์ ์ด๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ๋ถ„ํ• ํ•˜์—ฌ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค [27-29]. ๊ฐ ์ปดํฌ๋„ŒํŠธ๋Š” ์ž์ฒด ๋กœ์ง๊ณผ UI ์ƒํƒœ๋ฅผ ์บก์Аํ™”ํ•˜์—ฌ ๋ Œ๋”๋งํ•˜๋ฏ€๋กœ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ™•์žฅ์„ฑ์ด ๋†’์œผ๋ฉฐ, ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์—์„œ๋„ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค [30-32]. * **๋ Œ๋”๋ง ์ „๋žต: CSR vs SSR vs SSG vs RSC** * **CSR (Client-Side Rendering):** ์„œ๋ฒ„์—์„œ ๋นˆ HTML์„ ๋ฐ›๊ณ  ๋ธŒ๋ผ์šฐ์ €๊ฐ€ JavaScript๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ UI๋ฅผ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค. ๋™์  ์ƒํ˜ธ์ž‘์šฉ์— ์œ ๋ฆฌํ•˜์ง€๋งŒ, JS ๋‹ค์šด๋กœ๋“œ ์ „๊นŒ์ง€ ํ™”๋ฉด์ด ๋ณด์ด์ง€ ์•Š์•„ ์ดˆ๊ธฐ ๋กœ๋”ฉ๊ณผ SEO์— ๋ถˆ๋ฆฌํ•ฉ๋‹ˆ๋‹ค [6, 33-35]. * **SSR (Server-Side Rendering):** ์„œ๋ฒ„์—์„œ HTML์„ ๋ฏธ๋ฆฌ ๋ Œ๋”๋งํ•˜์—ฌ ์ „์†กํ•˜๋ฏ€๋กœ ์ดˆ๊ธฐ ์ฝ˜ํ…์ธ  ํ‘œ์‹œ๊ฐ€ ๋น ๋ฅด๊ณ  SEO์— ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค [7, 36, 37]. ์ดํ›„ ๋ธŒ๋ผ์šฐ์ €์—์„œ JS๋ฅผ ์—ฐ๊ฒฐํ•ด ์ƒํ˜ธ์ž‘์šฉ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ์ˆ˜ํ™”(Hydration) ๊ณผ์ •์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค [7, 36, 38]. * **SSG (Static Site Generation):** ๋นŒ๋“œ ํƒ€์ž„์— HTML์„ ์ƒ์„ฑํ•˜์—ฌ CDN์œผ๋กœ ๋ฐฐํฌํ•˜๋ฏ€๋กœ ๋กœ๋”ฉ ์†๋„๊ฐ€ ๊ฐ€์žฅ ๋น ๋ฆ…๋‹ˆ๋‹ค [8, 39]. * **React Server Components (RSC):** ์„œ๋ฒ„์—์„œ๋งŒ ๋ Œ๋”๋ง๋˜๋ฉฐ ํด๋ผ์ด์–ธํŠธ๋กœ JavaScript ๋ฒˆ๋“ค์„ ์ „ํ˜€ ๋ณด๋‚ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค [9, 40]. ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ณ  ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ƒํ˜ธ์ž‘์šฉ์ด ํ•„์š”ํ•œ ๊ณณ์—๋งŒ Client Component๋ฅผ ํ˜ผํ•ฉํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [41-43]. * **์ตœ์‹  ๋ Œ๋”๋ง ์ตœ์ ํ™” ๊ธฐ๋ฒ• (React 18 & 19)** * **์ž๋™ ๋ฐฐ์นญ (Automatic Batching):** React 18๋ถ€ํ„ฐ๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Promise, setTimeout ๋“ฑ ๋น„๋™๊ธฐ ์ž‘์—… ๋‚ด์˜ ์—ฌ๋Ÿฌ ์ƒํƒœ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด(Batching) ๋‹จ์ผ ๋ฆฌ๋ Œ๋”๋ง๋งŒ ์œ ๋ฐœํ•ฉ๋‹ˆ๋‹ค [44-46]. * **React Compiler:** React 19์— ๋„์ž…๋œ ๋นŒ๋“œ ํƒ€์ž„ ์ตœ์ ํ™” ๋„๊ตฌ๋กœ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ˆ˜๋™์œผ๋กœ ์ž‘์„ฑํ•˜๋˜ `useMemo`, `useCallback`์„ ์ œ๊ฑฐํ•˜๊ณ  AST๋ฅผ ๋ถ„์„ํ•ด ์ž๋™์œผ๋กœ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ๊ฒฝ๊ณ„๋ฅผ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค [5, 47-49]. ์ด๋ฅผ ํ†ตํ•ด ๋ถˆํ•„์š”ํ•œ ์—ฐ์‚ฐ๊ณผ ๋ฆฌ๋ Œ๋”๋ง์„ ์ง€๋Šฅ์ ์œผ๋กœ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค [49, 50]. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** [[Virtual DOM]], [[Critical Rendering Path (CRP)]], [[React Fiber]], [[Component-Based Architecture]], [[Client-Side Rendering (CSR)]], [[Server-Side Rendering (SSR)]], [[React Server Components (RSC)]] - **Projects/Contexts:** [[Next.js]], [[Single-Page Applications (SPA)]] - **Contradictions/Notes:** React Compiler์˜ ๋„์ž…์œผ๋กœ `React.memo`, `useMemo`, `useCallback`๊ณผ ๊ฐ™์€ ์ˆ˜๋™ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์ด 90% ์ด์ƒ ๋ถˆํ•„์š”ํ•ด์กŒ์œผ๋‚˜, ์„œ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ถˆ์•ˆ์ •ํ•œ ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ๋‹ค๋ฃจ๊ฑฐ๋‚˜ ํŠน์ • Effect ์˜์กด์„ฑ์„ ๋ช…์‹œ์ ์œผ๋กœ ์ œ์–ดํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์—ฌ์ „ํžˆ ํƒˆ์ถœ๊ตฌ(Escape Hatch)๋กœ์จ ์ˆ˜๋™ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์˜ ์‚ฌ์šฉ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [51-53]. --- *Last updated: 2026-04-25*