# [[React Performance Optimization|React Performance Optimization]] ## ๐Ÿ“Œ Brief Summary React ์„ฑ๋Šฅ ์ตœ์ ํ™”๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ ˆ์ด์•„์›ƒ ๊ณ„์‚ฐ๊ณผ ํŽ˜์ธํŒ… ๋น„์šฉ์„ ์ตœ์†Œํ™”ํ•˜๊ณ , ํšจ๊ณผ์ ์ธ ๋ Œ๋”๋ง ์ „๋žต์„ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ˜์‘์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค [1, 2]. ์ด๋ฅผ ์œ„ํ•ด React๋Š” ๊ฐ€์ƒ DOM([[Virtual DOM|Virtual DOM]])๊ณผ ํœด๋ฆฌ์Šคํ‹ฑ Diffing ์•Œ๊ณ ๋ฆฌ์ฆ˜, ๊ทธ๋ฆฌ๊ณ  Fiber ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋„์ž…ํ•˜์—ฌ UI ์—…๋ฐ์ดํŠธ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค [3-5]. ๊ถ๊ทน์ ์œผ๋กœ ๊ฐœ๋ฐœ์ž๋Š” CSR, SSR, SSG์™€ ๊ฐ™์€ ๋ Œ๋”๋ง ๋ฐฉ์‹์„ ์„œ๋น„์Šค์˜ ํŠน์„ฑ์— ๋งž๊ฒŒ ์„ ํƒํ•˜๊ณ , ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์„ค๊ณ„์™€ ์ตœ์ ํ™” ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํš๊ธฐ์ ์œผ๋กœ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [6, 7]. ## ๐Ÿ“– Core Content * **๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ๊ณผ์ • ๋ฐ Reflow/Repaint ์ตœ์†Œํ™”:** ๋ธŒ๋ผ์šฐ์ €๋Š” HTML๊ณผ CSS๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ DOM๊ณผ [[CSSOM|CSSOM]]์„ ๊ฐ๊ฐ ์ƒ์„ฑํ•˜๊ณ , ์ด๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ํ™”๋ฉด์— ํ‘œ์‹œ๋  ์š”์†Œ๋งŒ ๋‹ด์€ [[Render Tree|Render Tree]]๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค [8-11]. ์ดํ›„ ๊ฐ ์š”์†Œ์˜ ์ •ํ™•ํ•œ ํฌ๊ธฐ์™€ ์œ„์น˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” Layout(Reflow) ๋‹จ๊ณ„์™€ ํ™”๋ฉด์— ํ”ฝ์…€๋กœ ๋ณ€ํ™˜ํ•ด ๊ทธ๋ฆฌ๋Š” Paint(Repaint) ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นฉ๋‹ˆ๋‹ค [12-15]. ์ง์ ‘์ ์ธ DOM ์กฐ์ž‘์€ ์—ฐ์‚ฐ ๋น„์šฉ์ด ๋†’์€ Reflow์™€ Repaint๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ์œ ๋ฐœํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ์„ ์ €ํ•˜์‹œํ‚ต๋‹ˆ๋‹ค [1, 16, 17]. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด CSS transform ์†์„ฑ์„ ํ™œ์šฉํ•˜๊ฑฐ๋‚˜ ๋ถˆํ•„์š”ํ•œ DOM ๊นŠ์ด๋ฅผ ์ค„์ด๊ณ , ๋ฆฌ์ŠคํŠธ ๋ Œ๋”๋ง ์‹œ ๊ฐ€์ƒํ™” ๊ธฐ๋ฒ•์„ ์ ์šฉํ•˜๋Š” ์ตœ์ ํ™” ๋ฐฉ๋ฒ•์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [13, 18-20]. * **[[DOM vs Virtual DOM|DOM vs Virtual DOM]]๊ณผ React์˜ ์†๋„ ํ–ฅ์ƒ ๋ฉ”์ปค๋‹ˆ์ฆ˜:** React๋Š” ์‹ค์ œ DOM์„ ์ง์ ‘ ์ˆ˜์ •ํ•˜๋Š” ๋Œ€์‹ , ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์— ๊ฐ€๋ฒผ์šด ๊ฐ์ฒด ํ˜•ํƒœ์ธ Virtual DOM์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค [1, 5, 21, 22]. ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์ƒˆ๋กœ์šด Virtual DOM์„ ๋งŒ๋“ค๊ณ , ํœด๋ฆฌ์Šคํ‹ฑ ๊ธฐ๋ฐ˜์˜ O(n) Diffing ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ์ด์ „ ํŠธ๋ฆฌ์™€ ๋น„๊ต([[Reconciliation|Reconciliation]])ํ•ฉ๋‹ˆ๋‹ค [3, 5, 23]. ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์š”์†Œ์˜ ํƒ€์ž…๊ณผ Key ์†์„ฑ์„ ๋ฐ”ํƒ•์œผ๋กœ ๋ณ€๊ฒฝ๋œ ์ตœ์†Œํ•œ์˜ ๋…ธ๋“œ๋งŒ ์‹๋ณ„ํ•œ ๋’ค ์‹ค์ œ DOM์— ์ผ๊ด„ ์ ์šฉํ•˜๋ฏ€๋กœ, ๋ถˆํ•„์š”ํ•œ Reflow๋ฅผ ๋ง‰๊ณ  ๋ Œ๋”๋ง ์„ฑ๋Šฅ์„ ํฌ๊ฒŒ ๋†’์ž…๋‹ˆ๋‹ค [3, 24, 25]. * **React ์—”์ง„ ์ตœ์ ํ™” (Fiber ์•„ํ‚คํ…์ฒ˜ ๋ฐ ์ตœ๊ทผ ๊ธฐ๋Šฅ):** React 16๋ถ€ํ„ฐ ๋„์ž…๋œ Fiber ์•„ํ‚คํ…์ฒ˜๋Š” ๋ Œ๋”๋ง ์ž‘์—…์„ ์ค‘๋‹จ ๋ฐ ์žฌ๊ฐœ ๊ฐ€๋Šฅํ•œ ์ž‘์€ '์ž‘์—… ๋‹จ์œ„'๋กœ ๋‚˜๋ˆ„๊ณ , ์šฐ์„ ์ˆœ์œ„(Lane ๋ชจ๋ธ)์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋™์‹œ์„ฑ ๋ Œ๋”๋ง([[Concurrent Rendering|Concurrent Rendering]])์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค [4, 26-30]. ๋˜ํ•œ React 18์— ๋„์ž…๋œ ์ž๋™ ์ผ๊ด„ ์ฒ˜๋ฆฌ(Automatic Batching)๋Š” Promise, setTimeout ๋“ฑ์˜ ๋น„๋™๊ธฐ ์ž‘์—… ๋‚ด ์—ฌ๋Ÿฌ ์ƒํƒœ ์—…๋ฐ์ดํŠธ๋ฅผ ๋‹จ์ผ ๋ฆฌ๋ Œ๋”๋ง์œผ๋กœ ๋ฌถ์–ด ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค [31-34]. ์ตœ๊ทผ ๋„์ž…๋œ [[React Compiler|React Compiler]]๋Š” ๋นŒ๋“œ ๋‹จ๊ณ„์—์„œ ๊ตฌ๋ฌธ ํŠธ๋ฆฌ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ์ˆ˜๋™ ์ฒ˜๋ฆฌ ์—†์ด ์ž๋™์œผ๋กœ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ์‚ฝ์ž…ํ•ด ๊ฐœ๋ฐœ์ž์˜ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ถ€๋‹ด์„ ์ค„์—ฌ์ค๋‹ˆ๋‹ค [35-38]. * **[[CSR vs SSR vs SSG|CSR vs SSR vs SSG]] ์ „๋žต์  ๋ Œ๋”๋ง:** * **CSR (Client-Side Rendering):** ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋นˆ HTML๊ณผ [[JavaScript|JavaScript]]๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ด UI๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉฐ, ์ดˆ๊ธฐ ๋กœ๋”ฉ๊ณผ SEO์—๋Š” ๋ถˆ๋ฆฌํ•˜์ง€๋งŒ ์ดํ›„ ๋น ๋ฅด๊ณ  ๋งค๋„๋Ÿฌ์šด ์ƒํ˜ธ์ž‘์šฉ์„ ์ œ๊ณตํ•˜์—ฌ ๋‹จ์ผ ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(SPA)์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค [39-42]. * **SSR (Server-Side Rendering):** ์„œ๋ฒ„์—์„œ ์™„์ „ํ•œ HTML์„ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €์— ์ „๋‹ฌํ•˜๋ฏ€๋กœ ์ดˆ๊ธฐ ์ฝ˜ํ…์ธ  ๋ Œ๋”๋ง(FCP)์ด ๋น ๋ฅด๊ณ  SEO์— ๋งค์šฐ ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค [43-46]. * **SSG (Static Site Generation):** ๋นŒ๋“œ ์‹œ์ ์— ๋ชจ๋“  HTML์„ ๋ฏธ๋ฆฌ ๋ Œ๋”๋งํ•˜์—ฌ CDN์„ ํ†ตํ•ด ์ฆ‰์‹œ ์ œ๊ณตํ•˜๋ฏ€๋กœ ๊ฐ€์žฅ ๋น ๋ฅด์ง€๋งŒ, ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๋ฐ˜์˜์ด ์–ด๋ ต์Šต๋‹ˆ๋‹ค [47-50]. * **[[React Server Components (RSC)|React Server Components (RSC]]:** ์˜ค์ง ์„œ๋ฒ„์—์„œ๋งŒ ์‹คํ–‰๋˜์–ด ํด๋ผ์ด์–ธํŠธ์— JavaScript ๋ฒˆ๋“ค์„ ์ „ํ˜€ ์ „์†กํ•˜์ง€ ์•Š๋Š” ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ๋กœ, ํด๋ผ์ด์–ธํŠธ ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ ๋Œ€ํญ ์ค„์ด๊ณ  ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค์— ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [51-54]. * **์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜ (CBA):** React์˜ ํ•ต์‹ฌ ์„ค๊ณ„ ์›์น™์œผ๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋…๋ฆฝ์ ์ด๊ณ  ์บก์Аํ™”๋œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค [55-58]. ์ด๋Š” ์‹œ์Šคํ…œ์˜ ๋ณต์žก์„ฑ์„ ๋‚ฎ์ถ”๊ณ , ๋ณ‘๋ ฌ ๊ฐœ๋ฐœ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋ฉฐ, ํŠน์ • ์ปดํฌ๋„ŒํŠธ์˜ ๋ Œ๋”๋ง ์ฃผ๊ธฐ๋งŒ์„ ๋…๋ฆฝ์ ์œผ๋กœ ๊ด€๋ฆฌ ๋ฐ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค [59-64]. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** [[Critical Rendering Path|Critical Rendering Path]], Virtual DOM, React Fiber Architecture, [[React Compiler|React Compiler]], [[Hydration|Hydration]] - **Projects/Contexts:** [[SPA (Single Page Application)|SPA (Single Page Application]], [[Next.js|Next.js]] - **Contradictions/Notes:** SSR์€ ๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™”(SEO) ๋ฐ ๋น ๋ฅธ ์ดˆ๊ธฐ ์ฝ˜ํ…์ธ  ๋ Œ๋”๋ง(FCP) ์ธก๋ฉด์—์„œ ์œ ๋ฆฌํ•˜์ง€๋งŒ [43, 65], ์‚ฌ์šฉ์ž๊ฐ€ ์‹œ๊ฐ์ ์œผ๋กœ ์™„์„ฑ๋œ ํŽ˜์ด์ง€๋ฅผ ๋ณด๋”๋ผ๋„ ํด๋ผ์ด์–ธํŠธ๊ฐ€ JavaScript ๋ฒˆ๋“ค์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” [[Hydration|Hydration]](์ˆ˜ํ™”) ๊ณผ์ •์ด ์™„๋ฃŒ๋˜๊ธฐ ์ „๊นŒ์ง€๋Š” ์ƒํ˜ธ์ž‘์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ, TTI(Time to Interactive) ์ง€ํ‘œ์—์„œ๋Š” CSR๋ณด๋‹ค ์ˆ˜์น˜๊ฐ€ ๋‚ฎ๊ฒŒ ๋‚˜ํƒ€๋‚˜๋Š” ๋ Œ๋”๋ง ๋ณ‘๋ชฉ ํ˜„์ƒ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค [66-69]. --- *Last updated: 2026-04-25*