# [[Frontend Performance Optimization]] ## ๐Ÿ“Œ Brief Summary ํ”„๋ก ํŠธ์—”๋“œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ Œ๋”๋ง ๊ฒฝ๋กœ๋ฅผ ๊ฐœ์„ ํ•˜๊ณ  ๋ถˆํ•„์š”ํ•œ ์žฌ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€ํ•˜๋ฉฐ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ํ•ต์‹ฌ ๊ณผ์ •์ž…๋‹ˆ๋‹ค [1, 2]. ์ด๋ฅผ ์œ„ํ•ด ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…, ์ง€์—ฐ ๋กœ๋”ฉ(Lazy Loading), ํšจ์œจ์ ์ธ ์ƒํƒœ ๊ด€๋ฆฌ, ์ปดํฌ๋„ŒํŠธ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ๋“ฑ์˜ ๊ธฐ๋ฒ•์„ ์ ์šฉํ•˜์—ฌ ์ดˆ๊ธฐ JavaScript ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ณ  ์‹คํ–‰ ์†๋„๋ฅผ ๋†’์ž…๋‹ˆ๋‹ค [3-5]. ํŠนํžˆ React ๋ฐ ์ตœ์‹  ์›น ํ™˜๊ฒฝ์—์„œ๋Š” ์„ฑ๋Šฅ ํ”„๋กœํŒŒ์ผ๋ง ๋„๊ตฌ๋ฅผ ํ†ตํ•œ ๋ณ‘๋ชฉ ์ง€์  ํŒŒ์•…๊ณผ Core Web Vitals(LCP, FID, CLS, INP) ์ง€ํ‘œ์˜ ์ง€์†์ ์ธ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๊ฐœ์„ ์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค [6, 7]. ## ๐Ÿ“– Core Content * **๋ Œ๋”๋ง ๋ฐ ์ƒํƒœ ๊ด€๋ฆฌ ์ตœ์ ํ™”** * React ์ปดํฌ๋„ŒํŠธ์˜ ๋ถˆํ•„์š”ํ•œ ์žฌ๋ Œ๋”๋ง์„ ๋ง‰๊ธฐ ์œ„ํ•ด `React.memo()`, `useMemo`, `useCallback`์„ ์ „๋žต์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [4, 8, 9]. ํ•˜์ง€๋งŒ ์žฆ์€ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ๋Š” ๋‹จ์ˆœ ์ปดํฌ๋„ŒํŠธ์— ๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ ์ ์šฉํ•˜๋ฉด ๋น„๊ต ์—ฐ์‚ฐ ์˜ค๋ฒ„ํ—ค๋“œ๋กœ ์ธํ•ด ์˜คํžˆ๋ ค ์„ฑ๋Šฅ์ด ์•…ํ™”๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ”„๋กœํŒŒ์ผ๋ง์„ ํ†ตํ•œ ์ธก์ •์ด ์„ ํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [10, 11]. * ์ƒˆ๋กญ๊ฒŒ ๋„์ž…๋œ React Compiler๋Š” ๋นŒ๋“œ ํƒ€์ž„์— ์ปดํฌ๋„ŒํŠธ ๋ฐ JSX ์š”์†Œ๋ฅผ ์ž๋™์œผ๋กœ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ํ•˜์—ฌ, ๋ณต์žกํ•œ ์ˆ˜๋™ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ๋กœ์ง์„ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋ Œ๋”๋ง ์„ฑ๋Šฅ(INP ๋“ฑ)์„ ๊ฐœ์„ ํ•ด ์ค๋‹ˆ๋‹ค [12-14]. * ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ ์‹œ Context API๋Š” ์ผ๋ถ€ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ ํ•˜์œ„์˜ ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋ฅผ ์žฌ๋ Œ๋”๋ง์‹œํ‚ค๋Š” ๋ฌธ์ œ๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [15, 16]. ๋”ฐ๋ผ์„œ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ณ€ํ•˜๋Š” ์ƒํƒœ์—๋Š” ์„ ํƒ๊ธฐ(selector)๋ฅผ ์‚ฌ์šฉํ•ด ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์—…๋ฐ์ดํŠธํ•˜๋„๋ก ๋•๋Š” Zustand ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค [17-19]. * **๋ฒˆ๋“ค ํฌ๊ธฐ ์ถ•์†Œ ๋ฐ ๋กœ๋”ฉ ์ „๋žต** * ๊ฑฐ๋Œ€ํ•œ JavaScript ๋ฒˆ๋“ค์€ ์ดˆ๊ธฐ ํŽ˜์ด์ง€ ๋กœ๋“œ์™€ TTI(Time to Interactive)๋ฅผ ํฌ๊ฒŒ ์ง€์—ฐ์‹œํ‚ต๋‹ˆ๋‹ค [3, 20]. `React.lazy()`์™€ `Suspense`๋ฅผ ํ™œ์šฉํ•ด ๋ผ์šฐํŠธ ๊ธฐ๋ฐ˜ ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…์ด๋‚˜ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„ ์ง€์—ฐ ๋กœ๋”ฉ์„ ์ ์šฉํ•˜๋ฉด ์ดˆ๊ธฐ ๋กœ๋”ฉ ์‹œ ํ•„์š”ํ•œ ์ฝ”๋“œ๋งŒ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [5, 21, 22]. * Vite์™€ ๊ฐ™์€ ๋นŒ๋“œ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, `manualChunks` ์„ค์ •์„ ํ†ตํ•ด ๋ณ€๊ฒฝ ๋นˆ๋„๊ฐ€ ๋‚ฎ์€ ๋ฌด๊ฑฐ์šด ๋ฒค๋” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(์˜ˆ: React ์ฝ”์–ด)๋ฅผ ๋ณ„๋„ ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €์˜ ์บ์‹ฑ ํšจ์œจ์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [22-24]. * Next.js ํ™˜๊ฒฝ์—์„œ๋Š” React Server Components (RSC)๋ฅผ ํ™œ์šฉํ•ด ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋ง์„ ์™„๋ฃŒํ•จ์œผ๋กœ์จ ํด๋ผ์ด์–ธํŠธ๋กœ ์ „์†ก๋˜๋Š” JavaScript์˜ ์–‘์„ ํš๊ธฐ์ ์œผ๋กœ ์ค„์ด๊ณ  ์ดˆ๊ธฐ ํŽ˜์ธํŠธ ์†๋„๋ฅผ ๋†’์ž…๋‹ˆ๋‹ค [25-27]. * **๋Ÿฐํƒ€์ž„ ์„ฑ๋Šฅ ๋ฐ ๋ฆฌ์†Œ์Šค ์ตœ์ ํ™”** * ์ˆ˜์ฒœ ๊ฐœ์˜ ํ•ญ๋ชฉ์ด ์žˆ๋Š” ๋Œ€์šฉ๋Ÿ‰ ๋ฆฌ์ŠคํŠธ๋Š” DOM ๋น„๋Œ€ํ™”๋ฅผ ์ดˆ๋ž˜ํ•˜๋ฏ€๋กœ ํ™”๋ฉด์— ๋ณด์ด๋Š” ํ•ญ๋ชฉ๋งŒ ๋ Œ๋”๋งํ•˜๋Š” ๊ฐ€์ƒํ™”(Virtualization ๋˜๋Š” Windowing) ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ, ๋ Œ๋”๋ง ์‹œ์—๋Š” ์•ˆ์ •์ ์ธ ๊ณ ์œ  `key` ์†์„ฑ์„ ๋ถ€์—ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [28-32]. * ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์ด๋‚˜ ์Šคํฌ๋กค ์ด๋ฒคํŠธ ์‹œ ๋ฌด๊ฑฐ์šด API ์—ฐ์‚ฐ ๋“ฑ์ด ๊ณผ๋„ํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ๋””๋ฐ”์šด์‹ฑ(Debouncing) ๋ฐ ์Šค๋กœํ‹€๋ง(Throttling) ๊ธฐ๋ฒ•์„ ์ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [6, 29]. * React 18 ์ดํ›„์˜ Concurrent ๋ Œ๋”๋ง ๊ธฐ๋Šฅ์ธ `useTransition` ๋ฐ `useDeferredValue`๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋œ ๊ธด๊ธ‰ํ•œ UI ์—…๋ฐ์ดํŠธ๋ฅผ ์ง€์—ฐ์‹œํ‚ด์œผ๋กœ์จ ์‚ฌ์šฉ์ž์˜ ์ฆ‰๊ฐ์ ์ธ ์ƒํ˜ธ์ž‘์šฉ(ํƒ€์ดํ•‘, ํด๋ฆญ ๋“ฑ)์ด ์ฐจ๋‹จ๋˜์ง€ ์•Š๋„๋ก ์šฐ์„ ์ˆœ์œ„๋ฅผ ์กฐ์œจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [33-35]. * **๋””๋ฒ„๊น… ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฐฉ์ง€** * ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์ด ์ ์ง„์ ์œผ๋กœ ์ €ํ•˜๋œ๋‹ค๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(Memory Leak)๋ฅผ ์˜์‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [36, 37]. Chrome DevTools์˜ Task Manager, Heap Snapshots, Allocation Timelines๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ œ๊ฑฐ๋˜์ง€ ์•Š์€ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋‚˜ ๋ถ„๋ฆฌ๋œ DOM ํŠธ๋ฆฌ(Detached DOM nodes)๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ํ•ด์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [38-41]. * ์ตœ์ ํ™” ์ „ํ›„์—๋Š” ๋ฐ˜๋“œ์‹œ React DevTools Profiler, why-did-you-render ํŒจํ‚ค์ง€, Chrome ์„ฑ๋Šฅ ํƒญ ๋“ฑ์„ ์กฐํ•ฉํ•˜์—ฌ ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ์ •ํ™•ํžˆ ํŒŒ์•…ํ•ด์•ผ ํ•˜๋ฉฐ ๋งน๋ชฉ์ ์ธ ์ตœ์ ํ™”๋Š” ํ”ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [42-45]. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** [[React Architecture]], [[State Management]], [[Clean Code Principles]], [[Debugging Methods]], [[Bundle Size Optimization]] - **Projects/Contexts:** [[Vite Build System]], [[Next.js App Router]], [[React 18 Concurrent Features]] - **Contradictions/Notes:** ์†Œ์Šค์— ๋”ฐ๋ฅด๋ฉด ์ˆ˜๋™ ๋ฉ”๋ชจ์ด์ œ์ด์…˜(`React.memo`, `useMemo`, `useCallback`)์€ ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง์„ ์ค„์ด๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ด์ง€๋งŒ, ๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ ์ ์šฉํ•  ๊ฒฝ์šฐ ๋น„๊ต ๋กœ์ง ์ž์ฒด๊ฐ€ ์˜ค๋ฒ„ํ—ค๋“œ๋กœ ์ž‘์šฉํ•˜์—ฌ ์˜คํžˆ๋ ค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์„ ์ €ํ•˜์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ชจ์ˆœ์ ์ธ ์ฃผ์˜์ ์ด ๊ฐ•์กฐ๋ฉ๋‹ˆ๋‹ค [10, 11]. ๋˜ํ•œ, Context API๋Š” ์™ธ๋ถ€ ์ข…์†์„ฑ ์—†์ด ์ •์  ์ƒํƒœ๋ฅผ ๊ณต์œ ํ•˜๊ธฐ์—” ํ›Œ๋ฅญํ•˜์ง€๋งŒ ๋™์ ์œผ๋กœ ์ž์ฃผ ๋ณ€ํ•˜๋Š” ์ƒํƒœ์— ์‚ฌ์šฉํ•˜๋ฉด ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ๋ชฉ์ ์— ๋งž๊ฒŒ Zustand ๋“ฑ๊ณผ ํ˜ผ์šฉํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค [15, 46-48]. --- *Last updated: 2026-04-26*