From d53665ae7a186033869b29a0c71ebe38a98dcedc Mon Sep 17 00:00:00 2001 From: Antigravity Agent Date: Sat, 25 Apr 2026 23:02:04 +0900 Subject: [PATCH] chore: clean up placeholders and wikify real-time incoming knowledge --- ...•„ํ‚คํ…์ฒ˜์™€ ๋™์‹œ์„ฑ (Concurrent Rendering).md | 0 .../Hydration ์„ฑ๋Šฅ ์ตœ์ ํ™”.md | 0 .../React Fiber ๋ฐ ๋™์‹œ์„ฑ ๋ Œ๋”๋ง.md | 32 +++++++++++++++++ ...M (Virtual DOM) ๋ฐ ์žฌ์กฐ์ •(Reconciliation).md | 30 ++++++++++++++++ .../๊ฐ€์ƒ DOM๊ณผ ์žฌ์กฐ์ • (Reconciliation).md | 0 .../๋‹จ์ผ ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ (SPA).md | 0 .../๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ํ”„๋กœ์„ธ์Šค (CRP).md | 0 .../์„ฑ๋Šฅ ๋ฐ SEO ์ตœ์ ํ™” ํ”„๋กœ์ ํŠธ.md | 0 .../์›น ํ”„๋ก ํŠธ์—”๋“œ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„.md | 0 ...์š” ๋ Œ๋”๋ง ๊ฒฝ๋กœ (Critical Rendering Path).md | 0 .../UI_UX_Assets/Hydration ์„ฑ๋Šฅ ์ตœ์ ํ™”.md | 34 +++++++++++++++++++ .../React Fiber ๋ฐ ๋™์‹œ์„ฑ ๋ Œ๋”๋ง.md | 32 +++++++++++++++++ .../๋‹จ์ผ ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ (SPA).md | 18 ++++++++++ .../๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ํ”„๋กœ์„ธ์Šค (CRP).md | 21 ++++++++++++ .../์„ฑ๋Šฅ ๋ฐ SEO ์ตœ์ ํ™” ํ”„๋กœ์ ํŠธ.md | 28 +++++++++++++++ ...์š” ๋ Œ๋”๋ง ๊ฒฝ๋กœ (Critical Rendering Path).md | 23 +++++++++++++ 16 files changed, 218 insertions(+) rename {00_Raw => 10_Wiki/Topics/Frontend_Mastery}/Fiber ์•„ํ‚คํ…์ฒ˜์™€ ๋™์‹œ์„ฑ (Concurrent Rendering).md (100%) rename {00_Raw => 10_Wiki/Topics/Frontend_Mastery}/Hydration ์„ฑ๋Šฅ ์ตœ์ ํ™”.md (100%) create mode 100644 10_Wiki/Topics/Frontend_Mastery/React Fiber ๋ฐ ๋™์‹œ์„ฑ ๋ Œ๋”๋ง.md create mode 100644 10_Wiki/Topics/Frontend_Mastery/๊ฐ€์ƒ DOM (Virtual DOM) ๋ฐ ์žฌ์กฐ์ •(Reconciliation).md rename {00_Raw => 10_Wiki/Topics/Frontend_Mastery}/๊ฐ€์ƒ DOM๊ณผ ์žฌ์กฐ์ • (Reconciliation).md (100%) rename {00_Raw => 10_Wiki/Topics/Frontend_Mastery}/๋‹จ์ผ ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ (SPA).md (100%) rename {00_Raw => 10_Wiki/Topics/Frontend_Mastery}/๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ํ”„๋กœ์„ธ์Šค (CRP).md (100%) rename {00_Raw => 10_Wiki/Topics/Frontend_Mastery}/์„ฑ๋Šฅ ๋ฐ SEO ์ตœ์ ํ™” ํ”„๋กœ์ ํŠธ.md (100%) rename {00_Raw => 10_Wiki/Topics/Frontend_Mastery}/์›น ํ”„๋ก ํŠธ์—”๋“œ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„.md (100%) rename {00_Raw => 10_Wiki/Topics/Frontend_Mastery}/์ค‘์š” ๋ Œ๋”๋ง ๊ฒฝ๋กœ (Critical Rendering Path).md (100%) create mode 100644 10_Wiki/Topics_Art/UI_UX_Assets/Hydration ์„ฑ๋Šฅ ์ตœ์ ํ™”.md create mode 100644 10_Wiki/Topics_Art/UI_UX_Assets/React Fiber ๋ฐ ๋™์‹œ์„ฑ ๋ Œ๋”๋ง.md create mode 100644 10_Wiki/Topics_Art/UI_UX_Assets/๋‹จ์ผ ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ (SPA).md create mode 100644 10_Wiki/Topics_Art/UI_UX_Assets/๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ํ”„๋กœ์„ธ์Šค (CRP).md create mode 100644 10_Wiki/Topics_Art/UI_UX_Assets/์„ฑ๋Šฅ ๋ฐ SEO ์ตœ์ ํ™” ํ”„๋กœ์ ํŠธ.md create mode 100644 10_Wiki/Topics_Art/UI_UX_Assets/์ค‘์š” ๋ Œ๋”๋ง ๊ฒฝ๋กœ (Critical Rendering Path).md diff --git a/00_Raw/Fiber ์•„ํ‚คํ…์ฒ˜์™€ ๋™์‹œ์„ฑ (Concurrent Rendering).md b/10_Wiki/Topics/Frontend_Mastery/Fiber ์•„ํ‚คํ…์ฒ˜์™€ ๋™์‹œ์„ฑ (Concurrent Rendering).md similarity index 100% rename from 00_Raw/Fiber ์•„ํ‚คํ…์ฒ˜์™€ ๋™์‹œ์„ฑ (Concurrent Rendering).md rename to 10_Wiki/Topics/Frontend_Mastery/Fiber ์•„ํ‚คํ…์ฒ˜์™€ ๋™์‹œ์„ฑ (Concurrent Rendering).md diff --git a/00_Raw/Hydration ์„ฑ๋Šฅ ์ตœ์ ํ™”.md b/10_Wiki/Topics/Frontend_Mastery/Hydration ์„ฑ๋Šฅ ์ตœ์ ํ™”.md similarity index 100% rename from 00_Raw/Hydration ์„ฑ๋Šฅ ์ตœ์ ํ™”.md rename to 10_Wiki/Topics/Frontend_Mastery/Hydration ์„ฑ๋Šฅ ์ตœ์ ํ™”.md diff --git a/10_Wiki/Topics/Frontend_Mastery/React Fiber ๋ฐ ๋™์‹œ์„ฑ ๋ Œ๋”๋ง.md b/10_Wiki/Topics/Frontend_Mastery/React Fiber ๋ฐ ๋™์‹œ์„ฑ ๋ Œ๋”๋ง.md new file mode 100644 index 00000000..511cf74e --- /dev/null +++ b/10_Wiki/Topics/Frontend_Mastery/React Fiber ๋ฐ ๋™์‹œ์„ฑ ๋ Œ๋”๋ง.md @@ -0,0 +1,32 @@ +# [[React Fiber ๋ฐ ๋™์‹œ์„ฑ ๋ Œ๋”๋ง]] + +## ๐Ÿ“Œ Brief ์‹œ Summary +React Fiber๋Š” ๋™๊ธฐ์‹ ๋ Œ๋”๋ง์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ณ  ๋™์‹œ์„ฑ ๋ Œ๋”๋ง(Concurrent rendering)์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…๋œ React์˜ ์žฌ์กฐ์ •(Reconciliation) ์—”์ง„ ์•„ํ‚คํ…์ฒ˜์ด๋‹ค [1, 2]. ์ „์ฒด ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ๋ฅผ ๋‹จ์ผ ํ˜ธ์ถœ๋กœ ์ฒ˜๋ฆฌํ•˜๋˜ ๊ธฐ์กด ๋ฐฉ์‹๊ณผ ๋‹ฌ๋ฆฌ, ๋ Œ๋”๋ง ์ž‘์—…์„ 'ํŒŒ์ด๋ฒ„ ๋…ธ๋“œ(Fiber node)'๋ผ๋Š” ์ž‘์€ ๋‹จ์œ„๋กœ ์ชผ๊ฐœ์–ด ์Šค์ผ€์ค„๋งํ•œ๋‹ค [3, 4]. ์ด๋ฅผ ํ†ตํ•ด ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์ฐจ๋‹จํ•˜์ง€ ์•Š๊ณ  ๋ Œ๋”๋ง์„ ์ผ์‹œ ์ •์ง€ํ•˜๊ฑฐ๋‚˜ ์žฌ๊ฐœํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํƒ€์ž ์ž…๋ ฅ์ด๋‚˜ ํด๋ฆญ๊ณผ ๊ฐ™์€ ๊ธด๊ธ‰ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋ฐ˜์‘์„ฑ ๋†’์€ UI๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค [3, 5, 6]. + +## ๐Ÿ“– Core Content +**๋„์ž… ๋ฐฐ๊ฒฝ ๋ฐ ๋ฌธ์ œ์  ํ•ด๊ฒฐ** +Fiber ์•„ํ‚คํ…์ฒ˜ ์ด์ „์˜ React๋Š” '์Šคํƒ ์žฌ์กฐ์ •์ž(Stack reconciler)'๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์ฒด ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ๋ฅผ ํ•œ ๋ฒˆ์˜ ์žฌ๊ท€ ํ˜ธ์ถœ๋กœ ์ฒ˜๋ฆฌํ–ˆ๋‹ค [3]. ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ 16.6ms ์ด์ƒ ์ฐจ๋‹จํ•˜์—ฌ UI์˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด๋‚˜ ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๋ฐ˜์‘์„ ์ง€์—ฐ์‹œํ‚ค๋Š” ๋ฌธ์ œ๋ฅผ ๋ฐœ์ƒ์‹œ์ผฐ๋‹ค [3]. React 16๋ถ€ํ„ฐ ๋„์ž…๋œ Fiber๋Š” ๋ Œ๋”๋ง์„ ์™„์ „ํžˆ ์žฌ์ž‘์„ฑํ•˜์—ฌ, ์ž‘์—…์„ ๋” ์ž‘์€ ์ฒญํฌ๋กœ ๋‚˜๋ˆ„๊ณ  ์—ฌ๋Ÿฌ ํ”„๋ ˆ์ž„์— ๊ฑธ์ณ ๋ถ„์‚ฐํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค [1, 4]. + +**์ž‘์—… ๋ฃจํ”„(Work Loop)์™€ ๋ Œ๋”๋ง์˜ ๋‘ ๋‹จ๊ณ„** +React Fiber๋Š” ์ž‘์—… ๋ฃจํ”„๋ฅผ ํ†ตํ•ด ๋ Œ๋”๋ง ๋‹จ์œ„๋ฅผ ์ ์ง„์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ์ „์ฒด ๊ณผ์ •์€ ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ๋‹จ๊ณ„๋กœ ๋‚˜๋‰œ๋‹ค [4, 7]. +* **๋ Œ๋” ๋‹จ๊ณ„(Render Phase):** ์ด ๋‹จ๊ณ„๋Š” ์ค‘๋‹จํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ(Interruptible), DOM ๋ณ€๊ฒฝ ์—†์ด ์ˆœ์ˆ˜ํ•œ ์—ฐ์‚ฐ๋งŒ ์ˆ˜ํ–‰๋œ๋‹ค [7]. React๋Š” Fiber ํŠธ๋ฆฌ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ(`beginWork`, `completeWork`) ์ด์ „ ์ƒํƒœ์™€ ์ƒˆ๋กœ์šด ์ƒํƒœ๋ฅผ ๋น„๊ตํ•œ๋‹ค [7, 8]. ์ด๋•Œ, ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฐ”์˜๊ฑฐ๋‚˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์ƒํ˜ธ์ž‘์šฉ์ด ๋“ค์–ด์˜ค๋ฉด ์ž‘์—…์„ ์ผ์‹œ ์ •์ง€, ์žฌ๊ฐœ ๋˜๋Š” ํ๊ธฐ(WIP, Work-In-Progress ๊ด€๋ฆฌ)ํ•  ์ˆ˜ ์žˆ๋‹ค [9]. ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•œ ๋…ธ๋“œ์—๋Š” ์ดํŽ™ํŠธ ํƒœ๊ทธ(Placement, Update, Deletion ๋“ฑ)๊ฐ€ ์ง€์ •๋˜๋ฉฐ ์ดํŽ™ํŠธ ๋ชฉ๋ก(Effect list)์ด ๋งŒ๋“ค์–ด์ง„๋‹ค [7, 10, 11]. +* **์ปค๋ฐ‹ ๋‹จ๊ณ„(Commit Phase):** ์ด ๋‹จ๊ณ„๋Š” ๋™๊ธฐ์ ์ด๊ณ  ์ค‘๋‹จ ๋ถˆ๊ฐ€๋Šฅ(Uninterruptible)ํ•˜๋‹ค [12]. ๋ Œ๋” ๋‹จ๊ณ„์—์„œ ์ƒ์„ฑ๋œ ์ดํŽ™ํŠธ ๋ชฉ๋ก์„ ๋ฐ”ํƒ•์œผ๋กœ ์‹ค์ œ DOM ๋ณ€ํ˜•์ด ์ด๋ฃจ์–ด์ง„๋‹ค [10, 12]. ์ด ๋‹จ๊ณ„๋Š” DOM ๋ณ€ํ˜• ์ „(Before Mutation), ๋ณ€ํ˜•(Mutation), ๋ ˆ์ด์•„์›ƒ ์ดํŽ™ํŠธ(`useLayoutEffect` ์‹คํ–‰), ํŒจ์‹œ๋ธŒ ์ดํŽ™ํŠธ(`useEffect` ์‹คํ–‰) ์ˆœ์œผ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค [13]. + +**์šฐ์„ ์ˆœ์œ„ ์Šค์ผ€์ค„๋ง๊ณผ ์ฐจ์„ (Lane) ๋ชจ๋ธ** +Fiber๋Š” '์ฐจ์„ (Lanes)'์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๋น„ํŠธ๋งˆ์Šคํฌ(Bitmask) ๊ธฐ๋ฐ˜์˜ ์šฐ์„ ์ˆœ์œ„ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋™์‹œ์„ฑ ์ž‘์—…์„ ๊ด€๋ฆฌํ•œ๋‹ค [11, 14]. +* **์šฐ์„ ์ˆœ์œ„ ๋ ˆ๋ฒจ:** ํด๋ฆญ์ด๋‚˜ ํƒ€์ดํ•‘ ๋“ฑ ์ฆ‰๊ฐ ๋ฐ˜์‘์ด ํ•„์š”ํ•œ ์ž‘์—…์€ Sync ๋ ˆ๋ฒจ, ์Šคํฌ๋กค์ด๋‚˜ ํ˜ธ๋ฒ„๋Š” InputContinuous, ๋„คํŠธ์›Œํฌ ์‘๋‹ต ๋“ฑ์€ Default, ์˜คํ”„์Šคํฌ๋ฆฐ ๋ Œ๋”๋ง์€ Idle ๋ ˆ๋ฒจ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค [5, 15]. +* ์ด๋ฅผ ํ†ตํ•ด ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„์˜ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ค‘์—๋„ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์ƒํ˜ธ์ž‘์šฉ์ด ๋“ค์–ด์˜ค๋ฉด ์‹คํ–‰ ์ค‘์ธ ์ž‘์—…์„ ๋ฉˆ์ถ”๊ณ  ์ค‘์š”ํ•œ ์ž‘์—…์„ ๋จผ์ € ๋ Œ๋”๋งํ•˜๊ฒŒ ๋œ๋‹ค [6]. + +**React 18 ์ดํ›„์˜ ๋™์‹œ์„ฑ ๊ธฐ๋Šฅ ํ™œ์šฉ** +์ด๋Ÿฌํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ React 18 ๋ฐ 19์—์„œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ Œ๋”๋ง ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ง์ ‘ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋™์‹œ์„ฑ ํ›…์„ ์ œ๊ณตํ•œ๋‹ค. +* `useTransition`: ํŠน์ • ์ƒํƒœ ์—…๋ฐ์ดํŠธ๋ฅผ ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„๋กœ ์ง€์ •ํ•˜์—ฌ, ๋ฌด๊ฑฐ์šด ํ•„ํ„ฐ๋ง ์ž‘์—…์ด ์ง„ํ–‰๋˜๋Š” ๋™์•ˆ์—๋„ ํƒ€์ดํ•‘ ๋“ฑ์˜ ๊ธด๊ธ‰ํ•œ ์ž…๋ ฅ์ด ์ง€์—ฐ๋˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค [16, 17]. +* `useDeferredValue`: ์™ธ๋ถ€์—์„œ ์ „๋‹ฌ๋ฐ›์€ ๊ฐ’์˜ ์†Œ๋น„๋ฅผ ์ง€์—ฐ์‹œ์ผœ ๋ฌด๊ฑฐ์šด ๋ Œ๋”๋ง ์ค‘์— UI๊ฐ€ ๋™๊ฒฐ๋˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š”๋‹ค [17, 18]. +* ๋˜ํ•œ ๋™์‹œ์„ฑ ๋ Œ๋”๋ง์€ ํด๋ผ์ด์–ธํŠธ์˜ Hydration ๊ณผ์ •์—์„œ๋„ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์‹ฌํ•˜๊ฒŒ ๋ง‰์ง€ ์•Š๊ณ  ์ž‘์€ ์ฒญํฌ๋กœ ์ชผ๊ฐœ์–ด ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š”๋‹ค [19]. + +## ๐Ÿ”— Knowledge Connections +- **Related Topics:** [[Reconciliation]], [[Virtual DOM]], [[Time-Slicing]], [[Hydration]] +- **Projects/Contexts:** [[React 18 Concurrent Features]], [[useTransition ๋ฐ useDeferredValue]] +- **Contradictions/Notes:** ์ œ๊ณต๋œ ์†Œ์Šค ์ „๋ฐ˜์— ๊ฑธ์ณ Fiber ์•„ํ‚คํ…์ฒ˜์™€ ๋™์‹œ์„ฑ ๋ Œ๋”๋ง์˜ ๋งค์ปค๋‹ˆ์ฆ˜, ์žฅ์ ์— ๋Œ€ํ•ด ์ผ๊ด€๋œ ์„ค๋ช…์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ƒ์ถฉ๋˜๋Š” ์˜๊ฒฌ์€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. + +--- +*Last updated: 2026-04-25* \ No newline at end of file diff --git a/10_Wiki/Topics/Frontend_Mastery/๊ฐ€์ƒ DOM (Virtual DOM) ๋ฐ ์žฌ์กฐ์ •(Reconciliation).md b/10_Wiki/Topics/Frontend_Mastery/๊ฐ€์ƒ DOM (Virtual DOM) ๋ฐ ์žฌ์กฐ์ •(Reconciliation).md new file mode 100644 index 00000000..f590f355 --- /dev/null +++ b/10_Wiki/Topics/Frontend_Mastery/๊ฐ€์ƒ DOM (Virtual DOM) ๋ฐ ์žฌ์กฐ์ •(Reconciliation).md @@ -0,0 +1,30 @@ +# [[๊ฐ€์ƒ DOM (Virtual DOM) ๋ฐ ์žฌ์กฐ์ •(Reconciliation)]] + +## ๐Ÿ“Œ Brief Summary +๊ฐ€์ƒ DOM(Virtual DOM)์€ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI) ์š”์†Œ๋“ค์„ ์ผ๋ฐ˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ๊ฐ€๋ณ๊ฒŒ ํ‘œํ˜„ํ•œ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค [1, 2]. ์žฌ์กฐ์ •(Reconciliation)์€ React๊ฐ€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๊ฐ€์ƒ DOM๊ณผ ์ด์ „ ๋ฒ„์ „์˜ ๊ฐ€์ƒ DOM์„ ๋น„๊ต(diff)ํ•˜์—ฌ, ์‹ค์ œ DOM์„ ๊ฐ€์žฅ ํšจ์œจ์ ์ธ ๋ฐฉ์‹์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค [1-3]. ์ด ๋ฐฉ์‹์„ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ์„ ์–ธ์  API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ UI์˜ ์ƒํƒœ๋งŒ ์ •์˜ํ•˜๋ฉด ๋˜๋ฉฐ, ์ˆ˜๋™์ ์ธ DOM ์กฐ์ž‘๊ณผ ์ด๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ๋ Œ๋”๋ง ๋น„ํšจ์œจ์„ฑ์„ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค [1, 3, 4]. + +## ๐Ÿ“– Core Content + +* **๊ฐ€์ƒ DOM์˜ ํ•„์š”์„ฑ๊ณผ ์—ญํ• ** + ์‹ค์ œ DOM์„ ์ง์ ‘ ์ˆ˜์ •ํ•˜๋Š” ์ž‘์—…์€ ๋ธŒ๋ผ์šฐ์ €์˜ ๋ ˆ์ด์•„์›ƒ(Reflow) ๋ฐ ํŽ˜์ธํŠธ(Repaint) ๋‹จ๊ณ„๋ฅผ ๋งค๋ฒˆ ์œ ๋ฐœํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณธ์งˆ์ ์œผ๋กœ ๋А๋ฆฝ๋‹ˆ๋‹ค [1, 5]. React๋Š” ๊ฐ€์ƒ DOM์ด๋ผ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ƒ์˜ ์ด์ƒ์ ์ธ UI ํ‘œํ˜„์„ ์œ ์ง€ํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์„ ์–ธ๋œ ์ƒํƒœ์™€ ์‹ค์ œ DOM์ด ์ผ์น˜ํ•˜๋„๋ก ์ตœ์†Œํ•œ์˜ ์—…๋ฐ์ดํŠธ๋งŒ ์ˆ˜ํ–‰ํ•˜์—ฌ ๋ Œ๋”๋ง์„ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค [1, 3]. ์„ค๊ณ„์ƒ ๊ฐ€์ƒ DOM ํŠธ๋ฆฌ๋Š” ๋ถˆ๋ณ€(immutable) ๊ฐ์ฒด๋กœ ์ทจ๊ธ‰๋ฉ๋‹ˆ๋‹ค [6]. + +* **ํœด๋ฆฌ์Šคํ‹ฑ Diff ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ $O(n)$ ์ตœ์ ํ™”** + ๋‘ ๊ฐœ์˜ ํŠธ๋ฆฌ๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ตœ์†Œํ•œ์˜ ์—ฐ์‚ฐ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ $O(n^3)$์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ, ์š”์†Œ๊ฐ€ ๋งŽ์€ ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ์šฉํ•˜๊ธฐ์—๋Š” ๋น„์šฉ์ด ๋„ˆ๋ฌด ํฝ๋‹ˆ๋‹ค [7, 8]. ์ด์— React๋Š” ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ๊ฐ€์ •์„ ๋ฐ”ํƒ•์œผ๋กœ $O(n)$ ๋ณต์žก๋„๋กœ ๋™์ž‘ํ•˜๋Š” ํœด๋ฆฌ์Šคํ‹ฑ ๊ธฐ๋ฐ˜์˜ diff ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค [7, 8]. + 1. **๋‹ค๋ฅธ ํƒ€์ž…์˜ ์š”์†Œ**: ๋ฃจํŠธ ์š”์†Œ์˜ ํƒ€์ž…์ด ๋‹ค๋ฅด๋ฉด(์˜ˆ: ``์—์„œ ``๋กœ ๋ณ€๊ฒฝ), React๋Š” ์ด์ „ ํŠธ๋ฆฌ๋ฅผ ์™„์ „ํžˆ ํŒŒ๊ดดํ•˜๊ณ  ์ƒˆ๋กœ์šด ํŠธ๋ฆฌ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค [7, 9]. ๋ฐ˜๋ฉด, ๊ฐ™์€ ํƒ€์ž…์˜ DOM ์š”์†Œ์ธ ๊ฒฝ์šฐ์—๋Š” ์œ ์ง€ํ•˜๋ฉด์„œ ๋ณ€๊ฒฝ๋œ ์†์„ฑ(์˜ˆ: className์ด๋‚˜ ํŠน์ • style)๋งŒ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค [10]. + 2. **Key ์†์„ฑ**: ์—ฌ๋Ÿฌ ๋ฒˆ์˜ ๋ Œ๋”๋ง ์‚ฌ์ด์—์„œ ๋ฆฌ์ŠคํŠธ ๋‚ด์˜ ์–ด๋–ค ์ž์‹ ์š”์†Œ๊ฐ€ ์•ˆ์ •์ ์œผ๋กœ ์œ ์ง€๋˜๋Š”์ง€ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด `key` ์†์„ฑ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค [7, 8]. ์ž์‹ ์š”์†Œ์˜ ์ˆœ์„œ๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€๋  ๋•Œ `key`๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๊ธฐ์กด ํ•˜์œ„ ํŠธ๋ฆฌ๋ฅผ ํŒŒ๊ดดํ•˜์ง€ ์•Š๊ณ  ์š”์†Œ์˜ ์ด๋™๋งŒ์œผ๋กœ ํŠธ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์žฌ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [11, 12]. + +* **React Fiber์™€ ์ ์ง„์  ์žฌ์กฐ์ •(Incremental Reconciliation)** + React 16๋ถ€ํ„ฐ๋Š” ๊ธฐ์กด์˜ ๋™๊ธฐ์‹ ์ฐจ๋‹จ(synchronous blocking) ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ๋™์‹œ์„ฑ ๋ Œ๋”๋ง(concurrent rendering)์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด, ์žฌ์กฐ์ • ์—”์ง„์„ ์™„์ „ํžˆ ์žฌ์ž‘์„ฑํ•œ 'Fiber ์•„ํ‚คํ…์ฒ˜'๋ฅผ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค [13-15]. Fiber ๊ธฐ๋ฐ˜์˜ ์žฌ์กฐ์ • ๊ณผ์ •์€ ํฌ๊ฒŒ ๋‘ ๋‹จ๊ณ„๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค. + 1. **๋ Œ๋” ๋‹จ๊ณ„(Render phase)**: DOM์„ ์กฐ์ž‘ํ•˜์ง€ ์•Š๋Š” ์ˆœ์ˆ˜ํ•œ ์—ฐ์‚ฐ ๊ณผ์ •์œผ๋กœ, ์ค‘๋‹จ์ด๋‚˜ ์ทจ์†Œ, ์žฌ์‹œ์ž‘์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ๋Š” Fiber ํŠธ๋ฆฌ๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ์ด์ „ ์ƒํƒœ์™€ ์ƒˆ๋กœ์šด ์ƒํƒœ์˜ ์ฐจ์ด๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , ์—…๋ฐ์ดํŠธ๋‚˜ ์‚ฝ์ž… ๋“ฑ ๋ณ€ํ™”๊ฐ€ ํ•„์š”ํ•œ ์š”์†Œ๋“ค์˜ ํšจ๊ณผ ๋ชฉ๋ก(effect list)์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค [16]. + 2. **์ปค๋ฐ‹ ๋‹จ๊ณ„(Commit phase)**: ๋ Œ๋” ๋‹จ๊ณ„์™€ ๋‹ฌ๋ฆฌ ๋™๊ธฐ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋ฉฐ ์ค‘๋‹จํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ตฌ์ถ•๋œ ํšจ๊ณผ ๋ชฉ๋ก์„ ๋ฐ”ํƒ•์œผ๋กœ ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ๊ณผ ์‹ค์ œ DOM ์กฐ์ž‘(์‚ฝ์ž…, ์‚ญ์ œ, ์†์„ฑ ์—…๋ฐ์ดํŠธ)์„ ํ•œ ๋ฒˆ์— ์ ์šฉํ•ฉ๋‹ˆ๋‹ค [17]. + +* **์žฌ์กฐ์ • ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„** + ์žฌ์กฐ์ • ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํœด๋ฆฌ์Šคํ‹ฑ์— ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์–ด์ง„ ๊ฐ€์ •์ด ์ถฉ์กฑ๋˜์ง€ ์•Š์œผ๋ฉด ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [18]. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•˜์œ„ ํŠธ๋ฆฌ๊ฐ€ ํ˜•์ œ ์š”์†Œ ์‚ฌ์ด์—์„œ ์ด๋™ํ•œ ๊ฒƒ์€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํŠธ๋ฆฌ ๋‚ด์˜ ์™„์ „ํžˆ ๋‹ค๋ฅธ ์œ„์น˜๋กœ ์ด๋™ํ•œ ๊ฒƒ์€ ์ธ์‹ํ•˜์ง€ ๋ชปํ•ด ์ „์ฒด ํ•˜์œ„ ํŠธ๋ฆฌ๋ฅผ ๋‹ค์‹œ ๋ Œ๋”๋งํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค [19]. ๋˜ํ•œ ์ธ๋ฑ์Šค๋ฅผ `key`๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์˜ˆ์ธก ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ถˆ์•ˆ์ •ํ•œ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ๋ถˆํ•„์š”ํ•œ DOM ๋…ธ๋“œ ๋ฐ ์ปดํฌ๋„ŒํŠธ ์žฌ์ƒ์„ฑ์œผ๋กœ ์ธํ•ด ์„ฑ๋Šฅ ์ €ํ•˜์™€ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ ์†์‹ค์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [18, 20]. + +## ๐Ÿ”— Knowledge Connections +- **Related Topics:** [[React Fiber ์•„ํ‚คํ…์ฒ˜]], [[๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ๊ณผ์ • (Critical Rendering Path)]], [[Reflow ๋ฐ Repaint]] +- **Projects/Contexts:** [[ํ”„๋ก ํŠธ์—”๋“œ ๊ธฐ์ดˆ ๊ตฌ์กฐ ์ดํ•ด ํ•ต์‹ฌ ๋ชฉ์ ]] +- **Contradictions/Notes:** ์†Œ์Šค ์ž๋ฃŒ์— ๋”ฐ๋ฅด๋ฉด, ๋‘ ํŠธ๋ฆฌ๋ฅผ ๋น„๊ตํ•˜๋Š” ์™„๋ฒฝํ•œ ํŠธ๋ฆฌ ๋ณ€ํ™˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ด๋ก ์ ์œผ๋กœ $O(n^3)$์˜ ๋ณต์žก๋„๋ฅผ ์š”๊ตฌํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ React๋Š” 'ํƒ€์ž…(Type)'๊ณผ 'ํ‚ค(Key)'๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ๋‹จ์ˆœํ•˜๊ณ  ๊ฐ•๋ ฅํ•œ ๊ฐ€์ •๋งŒ์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ณต์žก๋„๋ฅผ $O(n)$์œผ๋กœ ๊ทน์ ์œผ๋กœ ์ค„์ž„์œผ๋กœ์จ ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ํ™•๋ณดํ–ˆ์Šต๋‹ˆ๋‹ค [7, 8, 21]. + +--- +*Last updated: 2026-04-25* \ No newline at end of file diff --git a/00_Raw/๊ฐ€์ƒ DOM๊ณผ ์žฌ์กฐ์ • (Reconciliation).md b/10_Wiki/Topics/Frontend_Mastery/๊ฐ€์ƒ DOM๊ณผ ์žฌ์กฐ์ • (Reconciliation).md similarity index 100% rename from 00_Raw/๊ฐ€์ƒ DOM๊ณผ ์žฌ์กฐ์ • (Reconciliation).md rename to 10_Wiki/Topics/Frontend_Mastery/๊ฐ€์ƒ DOM๊ณผ ์žฌ์กฐ์ • (Reconciliation).md diff --git a/00_Raw/๋‹จ์ผ ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ (SPA).md b/10_Wiki/Topics/Frontend_Mastery/๋‹จ์ผ ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ (SPA).md similarity index 100% rename from 00_Raw/๋‹จ์ผ ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ (SPA).md rename to 10_Wiki/Topics/Frontend_Mastery/๋‹จ์ผ ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ (SPA).md diff --git a/00_Raw/๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ํ”„๋กœ์„ธ์Šค (CRP).md b/10_Wiki/Topics/Frontend_Mastery/๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ํ”„๋กœ์„ธ์Šค (CRP).md similarity index 100% rename from 00_Raw/๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ํ”„๋กœ์„ธ์Šค (CRP).md rename to 10_Wiki/Topics/Frontend_Mastery/๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ํ”„๋กœ์„ธ์Šค (CRP).md diff --git a/00_Raw/์„ฑ๋Šฅ ๋ฐ SEO ์ตœ์ ํ™” ํ”„๋กœ์ ํŠธ.md b/10_Wiki/Topics/Frontend_Mastery/์„ฑ๋Šฅ ๋ฐ SEO ์ตœ์ ํ™” ํ”„๋กœ์ ํŠธ.md similarity index 100% rename from 00_Raw/์„ฑ๋Šฅ ๋ฐ SEO ์ตœ์ ํ™” ํ”„๋กœ์ ํŠธ.md rename to 10_Wiki/Topics/Frontend_Mastery/์„ฑ๋Šฅ ๋ฐ SEO ์ตœ์ ํ™” ํ”„๋กœ์ ํŠธ.md diff --git a/00_Raw/์›น ํ”„๋ก ํŠธ์—”๋“œ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„.md b/10_Wiki/Topics/Frontend_Mastery/์›น ํ”„๋ก ํŠธ์—”๋“œ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„.md similarity index 100% rename from 00_Raw/์›น ํ”„๋ก ํŠธ์—”๋“œ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„.md rename to 10_Wiki/Topics/Frontend_Mastery/์›น ํ”„๋ก ํŠธ์—”๋“œ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„.md diff --git a/00_Raw/์ค‘์š” ๋ Œ๋”๋ง ๊ฒฝ๋กœ (Critical Rendering Path).md b/10_Wiki/Topics/Frontend_Mastery/์ค‘์š” ๋ Œ๋”๋ง ๊ฒฝ๋กœ (Critical Rendering Path).md similarity index 100% rename from 00_Raw/์ค‘์š” ๋ Œ๋”๋ง ๊ฒฝ๋กœ (Critical Rendering Path).md rename to 10_Wiki/Topics/Frontend_Mastery/์ค‘์š” ๋ Œ๋”๋ง ๊ฒฝ๋กœ (Critical Rendering Path).md diff --git a/10_Wiki/Topics_Art/UI_UX_Assets/Hydration ์„ฑ๋Šฅ ์ตœ์ ํ™”.md b/10_Wiki/Topics_Art/UI_UX_Assets/Hydration ์„ฑ๋Šฅ ์ตœ์ ํ™”.md new file mode 100644 index 00000000..05a683d4 --- /dev/null +++ b/10_Wiki/Topics_Art/UI_UX_Assets/Hydration ์„ฑ๋Šฅ ์ตœ์ ํ™”.md @@ -0,0 +1,34 @@ +# [[Hydration ์„ฑ๋Šฅ ์ตœ์ ํ™”]] + +## ๐Ÿ“Œ Brief Summary +Hydration์€ ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋ง๋œ ์ •์  HTML ๋ผˆ๋Œ€์— JavaScript๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ์™„์ „ํ•œ ์ƒํ˜ธ์ž‘์šฉ์ด ๊ฐ€๋Šฅํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค [1, 2]. ๊ธฐ๋ณธ์ ์œผ๋กœ React๋Š” ํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ํ•œ ๋ฒˆ์— Hydrationํ•˜๋ฉด์„œ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์ฐจ๋‹จํ•˜์—ฌ TBT(Total Blocking Time)์™€ TTI(Time to Interactive) ์ง€ํ‘œ๋ฅผ ์•…ํ™”์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3]. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์„ ํƒ์  Hydration, ์ง€์—ฐ ๋กœ๋”ฉ, React Server Components(RSC) ๋“ฑ์˜ ์ตœ์ ํ™” ๊ธฐ๋ฒ•์„ ๋„์ž…ํ•˜์—ฌ ์ดˆ๊ธฐ ๋กœ๋“œ ์„ฑ๋Šฅ๊ณผ ์ƒํ˜ธ์ž‘์šฉ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [4-6]. + +## ๐Ÿ“– Core Content +* **Hydration์˜ ๊ฐœ๋… ๋ฐ ์ฃผ์š” ์„ฑ๋Šฅ ๋ณ‘๋ชฉ ํ˜„์ƒ:** + * Hydration์€ SSR(Server-Side Rendering) ํ™˜๊ฒฝ์—์„œ ์„œ๋ฒ„๊ฐ€ ์ƒ์„ฑํ•œ HTML์„ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋„˜๊ฒจ๋ฐ›์•„ ์ƒํ˜ธ์ž‘์šฉ์„ ๋ถ€์—ฌํ•˜๋Š” ํ•„์ˆ˜์ ์ธ ๊ณผ์ •์ž…๋‹ˆ๋‹ค [2, 3]. + * ๋ฌธ์ œ๋Š” React๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹œ์•ผ์— ๋ณด์ด์ง€ ์•Š๋Š” ์ปดํฌ๋„ŒํŠธ๊นŒ์ง€ ํฌํ•จํ•˜์—ฌ ํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ํ•œ ๋ฒˆ์— Hydration ํ•˜๋ ค ํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค [3]. ์ด๋กœ ์ธํ•ด JavaScript ์‹คํ–‰์ด ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์žฅ์‹œ๊ฐ„ ์ ์œ ํ•˜๊ฒŒ ๋˜๊ณ , ๊ฒฐ๊ณผ์ ์œผ๋กœ TBT(Total Blocking Time), FID(First Input Delay), TTI(Time to Interactive) ๋“ฑ์˜ ํ•ต์‹ฌ ์›น ์„ฑ๋Šฅ ์ง€ํ‘œ๊ฐ€ ํฌ๊ฒŒ ์ €ํ•˜๋˜๋ฉฐ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ ์ง€์—ฐ์„ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค [3, 7]. + * ๋˜ํ•œ ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋ง๋œ HTML๊ณผ ํด๋ผ์ด์–ธํŠธ์˜ ๋ Œ๋”๋ง ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค๋ฅผ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” 'Hydration Mismatch' ์˜ค๋ฅ˜์™€, ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋ฅผ ์œ„ํ•œ ์ „์ฒด JavaScript๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ด์•ผ ํ•ด์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฒˆ๋“ค ํฌ๊ธฐ ๋น„๋Œ€ํ™”(Bundle Size Bloat) ๋ฌธ์ œ๋„ ๊ฒช์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [4, 8]. + +* **์ ์ง„์  ๋ฐ ์„ ํƒ์  Hydration (Selective & Progressive Hydration):** + * ํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ์ผ๊ด„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋Œ€์‹  ์Šคํฌ๋กค ์œ„์ชฝ(Above-the-fold)์˜ ์ค‘์š”ํ•œ ์ฝ˜ํ…์ธ ๋ฅผ ์šฐ์„  ์ฒ˜๋ฆฌํ•˜๊ณ , ๋œ ์ค‘์š”ํ•œ ์ปดํฌ๋„ŒํŠธ๋Š” Hydration์„ ์ง€์—ฐ์‹œํ‚ต๋‹ˆ๋‹ค [4]. + * Next.js ํ™˜๊ฒฝ์—์„œ๋Š” `next/dynamic`์„ ํ™œ์šฉํ•œ ๋™์  ์ž„ํฌํŠธ(Dynamic Imports)๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜, IntersectionObserver API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์š”์†Œ๊ฐ€ ๋ทฐํฌํŠธ์— ๋“ค์–ด์˜ฌ ๋•Œ๋งŒ Hydration์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ง€์—ฐ(Lazy) ๋ฐฉ์‹์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [5, 9]. ์ด๋ฅผ ํ†ตํ•ด ๋ฉ”์ธ ์Šค๋ ˆ๋“œ ์ฐจ๋‹จ์„ ๋ถ„์‚ฐ์‹œ์ผœ TBT๋ฅผ ์ตœ๋Œ€ 40%๊นŒ์ง€ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [5]. + +* **React Server Components (RSC)์˜ ํ™œ์šฉ:** + * Next.js App Router ๋“ฑ์—์„œ ์ง€์›ํ•˜๋Š” React Server Components๋Š” ์˜ค์ง ์„œ๋ฒ„์—์„œ๋งŒ ์‹คํ–‰๋˜๋ฉฐ ํด๋ผ์ด์–ธํŠธ๋กœ JavaScript ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ „ํ˜€ ๋ณด๋‚ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค [5, 10, 11]. + * ์ •์ ์ด๊ฑฐ๋‚˜ ์ƒํ˜ธ์ž‘์šฉ์ด ํ•„์š” ์—†๋Š” UI(์˜ˆ: ํ…์ŠคํŠธ, ์‚ฌ์ด๋“œ๋ฐ” ๋“ฑ)๋ฅผ RSC๋กœ ๊ตฌ์„ฑํ•˜๋ฉด ํ•ด๋‹น ์˜์—ญ์€ Hydration ํ”„๋กœ์„ธ์Šค ์ž์ฒด๊ฐ€ ํ•„์š” ์—†์–ด์ง€๋ฏ€๋กœ ํด๋ผ์ด์–ธํŠธ์˜ ๋ถ€๋‹ด๊ณผ ๋ฒˆ๋“ค ํฌ๊ธฐ๊ฐ€ ๋น„์•ฝ์ ์œผ๋กœ ๊ฐ์†Œํ•ฉ๋‹ˆ๋‹ค [6, 12, 13]. + +* **Streaming ๋ฐ Suspense ์ ์šฉ:** + * React์˜ Suspense API๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์„œ๋ฒ„์—์„œ HTML์„ ์ ์ง„์ ์œผ๋กœ ์ŠคํŠธ๋ฆฌ๋ฐ(Streaming)ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [6]. + * ์ด๋ฅผ ํ†ตํ•ด ๋ Œ๋”๋ง์ด ์™„๋ฃŒ๋œ ์ผ๋ถ€ ํ™”๋ฉด์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋” ๋น ๋ฅด๊ฒŒ ๋ณด์—ฌ์ฃผ๋ฉด์„œ(FCP ๊ฐœ์„ ), ๋ณต์žกํ•œ ๋ถ€๋ถ„์— ๋Œ€ํ•œ Hydration ์ž‘์—…์€ ๋‚˜์ค‘์œผ๋กœ ๋ฏธ๋ฃจ์–ด ์ฒด๊ฐ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [6, 14]. React 18์˜ ๋™์‹œ์„ฑ ๋ Œ๋”๋ง(Concurrent Rendering)์€ Hydration ์ž‘์—…์„ ์ž‘์€ ์ฒญํฌ๋กœ ์ชผ๊ฐœ์–ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์–‘๋ณด(yield)ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [15]. + +* **๋ถ€๋ถ„ Hydration (Partial Hydration) ๋ฐ ๊ธฐํƒ€ ํŒ:** + * ์ •์ ์ธ ์ฝ˜ํ…์ธ  ์˜์—ญ์„ ๊ณ ๋ฆฝ์‹œํ‚ค๊ณ  ์ƒํ˜ธ์ž‘์šฉ์ด ํ•„์š”ํ•œ ํŠน์ • ๋ถ€๋ถ„๋งŒ Hydrationํ•˜๋Š” ์„ฌ ์•„ํ‚คํ…์ฒ˜(Island Architecture)๋ฅผ ๋„์ž…ํ•˜๊ฑฐ๋‚˜, ์ ˆ๋Œ€์ ์œผ๋กœ ์ •์ ์ธ ์ฝ˜ํ…์ธ ์˜ ๊ฒฝ์šฐ `dangerouslySetInnerHTML`์„ ์‚ฌ์šฉํ•˜์—ฌ ํ†ต์งธ๋กœ Hydration ๊ณผ์ •์—์„œ ๋ฐฐ์ œํ•˜๋Š” ๊ฒƒ๋„ ์œ ์šฉํ•œ ์ „๋žต์ž…๋‹ˆ๋‹ค [16-18]. + * ๋ถˆ๊ฐ€ํ”ผํ•˜๊ฒŒ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ๋ Œ๋”๋ง ๋ถˆ์ผ์น˜๊ฐ€ ์˜ˆ์ƒ๋˜๋Š” ๊ณณ์—๋Š” `suppressHydrationWarning`์„ ์ œํ•œ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, Hydration ์™„๋ฃŒ ์ดํ›„์— ๋™์ž‘ํ•ด์•ผ ํ•˜๋Š” ๋กœ์ง์„ ์˜์กด์„ฑ ๋ฐฐ์—ด์ด ๋นˆ `useEffect` ๋‚ด์— ๋ฐฐ์น˜ํ•˜์—ฌ ๋ถˆ์ผ์น˜ ์—๋Ÿฌ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [17, 19]. + +## ๐Ÿ”— Knowledge Connections +- **Related Topics:** [[Server-Side Rendering (SSR)]], [[React Server Components (RSC)]], [[Total Blocking Time (TBT)]], [[Concurrent Rendering]] +- **Projects/Contexts:** [[Next.js App Router]], [[Island Architecture]] +- **Contradictions/Notes:** SSR์€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์™„์„ฑ๋œ HTML์„ ์ฆ‰์‹œ ์ œ๊ณตํ•˜์—ฌ FCP(First Contentful Paint)์™€ SEO๋ฅผ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ค์ง€๋งŒ, JavaScript ๋ฒˆ๋“ค์ด ๋‹ค์šด๋กœ๋“œ๋˜๊ณ  Hydration์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์‚ฌ์šฉ์ž๊ฐ€ ํŽ˜์ด์ง€์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ TTI(Time to Interactive)๊ฐ€ ์˜คํžˆ๋ ค ์ง€์—ฐ๋˜๋Š” ์„ฑ๋Šฅ์  ํŠธ๋ ˆ์ด๋“œ์˜คํ”„(Trade-off)๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค [20, 21]. + +--- +*Last updated: 2026-04-25* \ No newline at end of file diff --git a/10_Wiki/Topics_Art/UI_UX_Assets/React Fiber ๋ฐ ๋™์‹œ์„ฑ ๋ Œ๋”๋ง.md b/10_Wiki/Topics_Art/UI_UX_Assets/React Fiber ๋ฐ ๋™์‹œ์„ฑ ๋ Œ๋”๋ง.md new file mode 100644 index 00000000..511cf74e --- /dev/null +++ b/10_Wiki/Topics_Art/UI_UX_Assets/React Fiber ๋ฐ ๋™์‹œ์„ฑ ๋ Œ๋”๋ง.md @@ -0,0 +1,32 @@ +# [[React Fiber ๋ฐ ๋™์‹œ์„ฑ ๋ Œ๋”๋ง]] + +## ๐Ÿ“Œ Brief ์‹œ Summary +React Fiber๋Š” ๋™๊ธฐ์‹ ๋ Œ๋”๋ง์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ณ  ๋™์‹œ์„ฑ ๋ Œ๋”๋ง(Concurrent rendering)์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…๋œ React์˜ ์žฌ์กฐ์ •(Reconciliation) ์—”์ง„ ์•„ํ‚คํ…์ฒ˜์ด๋‹ค [1, 2]. ์ „์ฒด ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ๋ฅผ ๋‹จ์ผ ํ˜ธ์ถœ๋กœ ์ฒ˜๋ฆฌํ•˜๋˜ ๊ธฐ์กด ๋ฐฉ์‹๊ณผ ๋‹ฌ๋ฆฌ, ๋ Œ๋”๋ง ์ž‘์—…์„ 'ํŒŒ์ด๋ฒ„ ๋…ธ๋“œ(Fiber node)'๋ผ๋Š” ์ž‘์€ ๋‹จ์œ„๋กœ ์ชผ๊ฐœ์–ด ์Šค์ผ€์ค„๋งํ•œ๋‹ค [3, 4]. ์ด๋ฅผ ํ†ตํ•ด ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์ฐจ๋‹จํ•˜์ง€ ์•Š๊ณ  ๋ Œ๋”๋ง์„ ์ผ์‹œ ์ •์ง€ํ•˜๊ฑฐ๋‚˜ ์žฌ๊ฐœํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํƒ€์ž ์ž…๋ ฅ์ด๋‚˜ ํด๋ฆญ๊ณผ ๊ฐ™์€ ๊ธด๊ธ‰ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋ฐ˜์‘์„ฑ ๋†’์€ UI๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค [3, 5, 6]. + +## ๐Ÿ“– Core Content +**๋„์ž… ๋ฐฐ๊ฒฝ ๋ฐ ๋ฌธ์ œ์  ํ•ด๊ฒฐ** +Fiber ์•„ํ‚คํ…์ฒ˜ ์ด์ „์˜ React๋Š” '์Šคํƒ ์žฌ์กฐ์ •์ž(Stack reconciler)'๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์ฒด ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ๋ฅผ ํ•œ ๋ฒˆ์˜ ์žฌ๊ท€ ํ˜ธ์ถœ๋กœ ์ฒ˜๋ฆฌํ–ˆ๋‹ค [3]. ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ 16.6ms ์ด์ƒ ์ฐจ๋‹จํ•˜์—ฌ UI์˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด๋‚˜ ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๋ฐ˜์‘์„ ์ง€์—ฐ์‹œํ‚ค๋Š” ๋ฌธ์ œ๋ฅผ ๋ฐœ์ƒ์‹œ์ผฐ๋‹ค [3]. React 16๋ถ€ํ„ฐ ๋„์ž…๋œ Fiber๋Š” ๋ Œ๋”๋ง์„ ์™„์ „ํžˆ ์žฌ์ž‘์„ฑํ•˜์—ฌ, ์ž‘์—…์„ ๋” ์ž‘์€ ์ฒญํฌ๋กœ ๋‚˜๋ˆ„๊ณ  ์—ฌ๋Ÿฌ ํ”„๋ ˆ์ž„์— ๊ฑธ์ณ ๋ถ„์‚ฐํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค [1, 4]. + +**์ž‘์—… ๋ฃจํ”„(Work Loop)์™€ ๋ Œ๋”๋ง์˜ ๋‘ ๋‹จ๊ณ„** +React Fiber๋Š” ์ž‘์—… ๋ฃจํ”„๋ฅผ ํ†ตํ•ด ๋ Œ๋”๋ง ๋‹จ์œ„๋ฅผ ์ ์ง„์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ์ „์ฒด ๊ณผ์ •์€ ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ๋‹จ๊ณ„๋กœ ๋‚˜๋‰œ๋‹ค [4, 7]. +* **๋ Œ๋” ๋‹จ๊ณ„(Render Phase):** ์ด ๋‹จ๊ณ„๋Š” ์ค‘๋‹จํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ(Interruptible), DOM ๋ณ€๊ฒฝ ์—†์ด ์ˆœ์ˆ˜ํ•œ ์—ฐ์‚ฐ๋งŒ ์ˆ˜ํ–‰๋œ๋‹ค [7]. React๋Š” Fiber ํŠธ๋ฆฌ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ(`beginWork`, `completeWork`) ์ด์ „ ์ƒํƒœ์™€ ์ƒˆ๋กœ์šด ์ƒํƒœ๋ฅผ ๋น„๊ตํ•œ๋‹ค [7, 8]. ์ด๋•Œ, ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฐ”์˜๊ฑฐ๋‚˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์ƒํ˜ธ์ž‘์šฉ์ด ๋“ค์–ด์˜ค๋ฉด ์ž‘์—…์„ ์ผ์‹œ ์ •์ง€, ์žฌ๊ฐœ ๋˜๋Š” ํ๊ธฐ(WIP, Work-In-Progress ๊ด€๋ฆฌ)ํ•  ์ˆ˜ ์žˆ๋‹ค [9]. ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•œ ๋…ธ๋“œ์—๋Š” ์ดํŽ™ํŠธ ํƒœ๊ทธ(Placement, Update, Deletion ๋“ฑ)๊ฐ€ ์ง€์ •๋˜๋ฉฐ ์ดํŽ™ํŠธ ๋ชฉ๋ก(Effect list)์ด ๋งŒ๋“ค์–ด์ง„๋‹ค [7, 10, 11]. +* **์ปค๋ฐ‹ ๋‹จ๊ณ„(Commit Phase):** ์ด ๋‹จ๊ณ„๋Š” ๋™๊ธฐ์ ์ด๊ณ  ์ค‘๋‹จ ๋ถˆ๊ฐ€๋Šฅ(Uninterruptible)ํ•˜๋‹ค [12]. ๋ Œ๋” ๋‹จ๊ณ„์—์„œ ์ƒ์„ฑ๋œ ์ดํŽ™ํŠธ ๋ชฉ๋ก์„ ๋ฐ”ํƒ•์œผ๋กœ ์‹ค์ œ DOM ๋ณ€ํ˜•์ด ์ด๋ฃจ์–ด์ง„๋‹ค [10, 12]. ์ด ๋‹จ๊ณ„๋Š” DOM ๋ณ€ํ˜• ์ „(Before Mutation), ๋ณ€ํ˜•(Mutation), ๋ ˆ์ด์•„์›ƒ ์ดํŽ™ํŠธ(`useLayoutEffect` ์‹คํ–‰), ํŒจ์‹œ๋ธŒ ์ดํŽ™ํŠธ(`useEffect` ์‹คํ–‰) ์ˆœ์œผ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค [13]. + +**์šฐ์„ ์ˆœ์œ„ ์Šค์ผ€์ค„๋ง๊ณผ ์ฐจ์„ (Lane) ๋ชจ๋ธ** +Fiber๋Š” '์ฐจ์„ (Lanes)'์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๋น„ํŠธ๋งˆ์Šคํฌ(Bitmask) ๊ธฐ๋ฐ˜์˜ ์šฐ์„ ์ˆœ์œ„ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋™์‹œ์„ฑ ์ž‘์—…์„ ๊ด€๋ฆฌํ•œ๋‹ค [11, 14]. +* **์šฐ์„ ์ˆœ์œ„ ๋ ˆ๋ฒจ:** ํด๋ฆญ์ด๋‚˜ ํƒ€์ดํ•‘ ๋“ฑ ์ฆ‰๊ฐ ๋ฐ˜์‘์ด ํ•„์š”ํ•œ ์ž‘์—…์€ Sync ๋ ˆ๋ฒจ, ์Šคํฌ๋กค์ด๋‚˜ ํ˜ธ๋ฒ„๋Š” InputContinuous, ๋„คํŠธ์›Œํฌ ์‘๋‹ต ๋“ฑ์€ Default, ์˜คํ”„์Šคํฌ๋ฆฐ ๋ Œ๋”๋ง์€ Idle ๋ ˆ๋ฒจ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค [5, 15]. +* ์ด๋ฅผ ํ†ตํ•ด ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„์˜ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ค‘์—๋„ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์ƒํ˜ธ์ž‘์šฉ์ด ๋“ค์–ด์˜ค๋ฉด ์‹คํ–‰ ์ค‘์ธ ์ž‘์—…์„ ๋ฉˆ์ถ”๊ณ  ์ค‘์š”ํ•œ ์ž‘์—…์„ ๋จผ์ € ๋ Œ๋”๋งํ•˜๊ฒŒ ๋œ๋‹ค [6]. + +**React 18 ์ดํ›„์˜ ๋™์‹œ์„ฑ ๊ธฐ๋Šฅ ํ™œ์šฉ** +์ด๋Ÿฌํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ React 18 ๋ฐ 19์—์„œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ Œ๋”๋ง ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ง์ ‘ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋™์‹œ์„ฑ ํ›…์„ ์ œ๊ณตํ•œ๋‹ค. +* `useTransition`: ํŠน์ • ์ƒํƒœ ์—…๋ฐ์ดํŠธ๋ฅผ ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„๋กœ ์ง€์ •ํ•˜์—ฌ, ๋ฌด๊ฑฐ์šด ํ•„ํ„ฐ๋ง ์ž‘์—…์ด ์ง„ํ–‰๋˜๋Š” ๋™์•ˆ์—๋„ ํƒ€์ดํ•‘ ๋“ฑ์˜ ๊ธด๊ธ‰ํ•œ ์ž…๋ ฅ์ด ์ง€์—ฐ๋˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค [16, 17]. +* `useDeferredValue`: ์™ธ๋ถ€์—์„œ ์ „๋‹ฌ๋ฐ›์€ ๊ฐ’์˜ ์†Œ๋น„๋ฅผ ์ง€์—ฐ์‹œ์ผœ ๋ฌด๊ฑฐ์šด ๋ Œ๋”๋ง ์ค‘์— UI๊ฐ€ ๋™๊ฒฐ๋˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š”๋‹ค [17, 18]. +* ๋˜ํ•œ ๋™์‹œ์„ฑ ๋ Œ๋”๋ง์€ ํด๋ผ์ด์–ธํŠธ์˜ Hydration ๊ณผ์ •์—์„œ๋„ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์‹ฌํ•˜๊ฒŒ ๋ง‰์ง€ ์•Š๊ณ  ์ž‘์€ ์ฒญํฌ๋กœ ์ชผ๊ฐœ์–ด ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š”๋‹ค [19]. + +## ๐Ÿ”— Knowledge Connections +- **Related Topics:** [[Reconciliation]], [[Virtual DOM]], [[Time-Slicing]], [[Hydration]] +- **Projects/Contexts:** [[React 18 Concurrent Features]], [[useTransition ๋ฐ useDeferredValue]] +- **Contradictions/Notes:** ์ œ๊ณต๋œ ์†Œ์Šค ์ „๋ฐ˜์— ๊ฑธ์ณ Fiber ์•„ํ‚คํ…์ฒ˜์™€ ๋™์‹œ์„ฑ ๋ Œ๋”๋ง์˜ ๋งค์ปค๋‹ˆ์ฆ˜, ์žฅ์ ์— ๋Œ€ํ•ด ์ผ๊ด€๋œ ์„ค๋ช…์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ƒ์ถฉ๋˜๋Š” ์˜๊ฒฌ์€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. + +--- +*Last updated: 2026-04-25* \ No newline at end of file diff --git a/10_Wiki/Topics_Art/UI_UX_Assets/๋‹จ์ผ ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ (SPA).md b/10_Wiki/Topics_Art/UI_UX_Assets/๋‹จ์ผ ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ (SPA).md new file mode 100644 index 00000000..f74ae4c6 --- /dev/null +++ b/10_Wiki/Topics_Art/UI_UX_Assets/๋‹จ์ผ ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ (SPA).md @@ -0,0 +1,18 @@ +# [[๋‹จ์ผ ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ (SPA)]] + +## ๐Ÿ“Œ Brief Summary +๋‹จ์ผ ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(SPA)์€ ์„œ๋ฒ„์—์„œ ๋ผ์šฐํŠธ๋งˆ๋‹ค ์™„์ „ํ•œ HTML์„ ๋ฐ›์•„์˜ค๋Š” ๋Œ€์‹ , ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(CSR)์„ ํ™œ์šฉํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ € ๋‚ด์—์„œ ์ฝ˜ํ…์ธ ๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ž…๋‹ˆ๋‹ค [1-3]. ์ดˆ๊ธฐ ๋กœ๋“œ ์‹œ ํ•„์š”ํ•œ ๋ชจ๋“  HTML, CSS ๋ฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜๋ฉฐ, ๊ทธ ์ดํ›„๋ถ€ํ„ฐ๋Š” ์„œ๋ฒ„๋ฅผ ํ†ตํ•œ ์ „์ฒด ํŽ˜์ด์ง€ ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด ์‚ฌ์šฉ์ž์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค [4]. ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ํŽ˜์ด์ง€ ์ „ํ™˜์ด ์ฆ‰๊ฐ์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋Š” ๋งค๋„๋Ÿฌ์šด '์•ฑ๊ณผ ๊ฐ™์€(app-like)' ๊ฒฝํ—˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [1, 4]. + +## ๐Ÿ“– Core Content +* **์ž‘๋™ ๋ฐฉ์‹:** SPA๋Š” ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋งŒ ๊ฐ–์ถ˜ ์ตœ์†Œํ•œ์˜ HTML ํ…œํ”Œ๋ฆฟ๊ณผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฒˆ๋“ค์„ ์ „๋‹ฌ๋ฐ›์Šต๋‹ˆ๋‹ค [1-3]. ์ดํ›„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ฌธ์„œ์˜ ์ œ์–ด๊ถŒ์„ ๋„˜๊ฒจ๋ฐ›์•„ ๋ธŒ๋ผ์šฐ์ € ๋‚ด์—์„œ ๊ฐ ๋ผ์šฐํŠธ๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ฑ„์›Œ ๋„ฃ์Šต๋‹ˆ๋‹ค [2, 3]. +* **์„ฑ๋Šฅ ๋ฐ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์ธก๋ฉด์˜ ์žฅ์ :** SPA๋Š” ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋Š๊น€ ํ˜„์ƒ์„ ์ œ๊ฑฐํ•˜์—ฌ ๋งค์šฐ ์œ ๋™์ ์ด๊ณ  ๋ฐ˜์‘์„ฑ์ด ๋›ฐ์–ด๋‚œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [4, 5]. ๋˜ํ•œ ๋ Œ๋”๋ง ์ž‘์—…์„ ํด๋ผ์ด์–ธํŠธ๋กœ ๋„˜๊ธฐ๋ฏ€๋กœ ์„œ๋ฒ„ ๋ถ€ํ•˜๊ฐ€ ๊ฐ์†Œํ•˜๋ฉฐ, ๋ณต์žกํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋Ÿฐํƒ€์ž„ ์„œ๋ฒ„ ์—†์ด ์ •์  ์„œ๋ฒ„(Amazon S3, Netlify ๋“ฑ)์— ํ˜ธ์ŠคํŒ…ํ•  ์ˆ˜ ์žˆ์–ด ๋น„์šฉ ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค [5, 6]. +* **์ดˆ๊ธฐ ๋กœ๋”ฉ ๋ฐ SEO์˜ ํ•œ๊ณ„:** ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ชจ๋‘ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ๊ตฌ๋ฌธ ๋ถ„์„ ๋ฐ ์‹คํ–‰์„ ์™„๋ฃŒํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ์˜๋ฏธ ์žˆ๋Š” ์ฝ˜ํ…์ธ ๊ฐ€ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ดˆ๊ธฐ ๋กœ๋“œ ์‹œ๊ฐ„(First Contentful Paint)์ด ๋А๋ฆฌ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค [1, 7]. ๋˜ํ•œ, ๋นˆ HTML ๊ป๋ฐ๊ธฐ๋งŒ ๋จผ์ € ์ „์†ก๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ถ€ ๊ฒ€์ƒ‰ ์—”์ง„ ํฌ๋กค๋Ÿฌ๊ฐ€ ์ฝ˜ํ…์ธ ๋ฅผ ์ œ๋Œ€๋กœ ์ฝ์ง€ ๋ชปํ•ด ๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™”(SEO)์— ๋ถˆ๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1, 7, 8]. ์‚ฌ์šฉ์ž ๊ธฐ๊ธฐ์˜ ์ปดํ“จํŒ… ์„ฑ๋Šฅ์— ๋”ฐ๋ผ ๋ Œ๋”๋ง ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ์ขŒ์šฐ๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค [9]. +* **์ด์ƒ์ ์ธ ํ™œ์šฉ ์‚ฌ๋ก€:** SEO๊ฐ€ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์•„๋‹ˆ๋ฉฐ ๋ณต์žกํ•˜๊ณ  ํ’๋ถ€ํ•œ ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ์ด ํ•„์ˆ˜์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋งค์šฐ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค [10]. ์ฃผ๋กœ ๋กœ๊ทธ์ธ ์žฅ๋ฒฝ ๋’ค์— ์žˆ๋Š” ๋‚ด๋ถ€ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๊ตฌ, ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๋Š” ์‚ฌ์šฉ์ž ๋Œ€์‹œ๋ณด๋“œ, SaaS ํ”Œ๋žซํผ ๋“ฑ์—์„œ ์ด์ƒ์ ์œผ๋กœ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค [5, 10]. + +## ๐Ÿ”— Knowledge Connections +- **Related Topics:** [[ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง (CSR)]], [[๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™” (SEO)]], [[์ดˆ๊ธฐ ๋กœ๋“œ ์‹œ๊ฐ„ (Initial Load Time)]] +- **Projects/Contexts:** [[SaaS ํ”Œ๋žซํผ ๋ฐ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๋Œ€์‹œ๋ณด๋“œ ๊ฐœ๋ฐœ]] +- **Contradictions/Notes:** ์†Œ์Šค์— ๋”ฐ๋ฅด๋ฉด SPA์˜ ํ•ต์‹ฌ์ธ CSR ๋ฐฉ์‹์€ ์ƒํ˜ธ์ž‘์šฉ์„ฑ๊ณผ ๊ฐœ๋ฐœ ์†๋„ ๋ฉด์—์„œ ๋›ฐ์–ด๋‚˜์ง€๋งŒ SEO์™€ ์ดˆ๊ธฐ ๋กœ๋“œ ์‹œ๊ฐ„์—์„œ๋Š” ๋šœ๋ ทํ•œ ํ•œ๊ณ„๋ฅผ ๋ณด์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋‹จ์ ์€ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR)์ด๋‚˜ ์ •์  ์‚ฌ์ดํŠธ ์ƒ์„ฑ(SSG)์ด ๊ฐ–๋Š” ์žฅ์ (๋น ๋ฅธ ์ดˆ๊ธฐ ํ™”๋ฉด ๋ฐ SEO ์ตœ์ ํ™”)๊ณผ ์ •ํ™•ํžˆ ๋Œ€์กฐ๋ฉ๋‹ˆ๋‹ค [1, 7, 8, 11]. + +--- +*Last updated: 2026-04-25* \ No newline at end of file diff --git a/10_Wiki/Topics_Art/UI_UX_Assets/๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ํ”„๋กœ์„ธ์Šค (CRP).md b/10_Wiki/Topics_Art/UI_UX_Assets/๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ํ”„๋กœ์„ธ์Šค (CRP).md new file mode 100644 index 00000000..7fb91638 --- /dev/null +++ b/10_Wiki/Topics_Art/UI_UX_Assets/๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ํ”„๋กœ์„ธ์Šค (CRP).md @@ -0,0 +1,21 @@ +# [[๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ํ”„๋กœ์„ธ์Šค (CRP)]] + +## ๐Ÿ“Œ Brief Summary +๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ํ”„๋กœ์„ธ์Šค, ์ฆ‰ ์ค‘์š” ๋ Œ๋”๋ง ๊ฒฝ๋กœ(Critical Rendering Path, CRP)๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML, CSS, JavaScript๋ฅผ ํ™”๋ฉด์˜ ํ”ฝ์…€๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ์‹คํ–‰ํ•˜๋Š” ์ผ๋ จ์˜ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค [1, 2]. ์ด ๊ณผ์ •์€ DOM ๋ฐ CSSOM ํŠธ๋ฆฌ ์ƒ์„ฑ, ๋ Œ๋” ํŠธ๋ฆฌ ํ•ฉ์„ฑ, ๋ ˆ์ด์•„์›ƒ(Reflow) ๊ณ„์‚ฐ, ๊ทธ๋ฆฌ๊ณ  ํ™”๋ฉด์— ํ”ฝ์…€์„ ๊ทธ๋ฆฌ๋Š” ํŽ˜์ธํŠธ(Paint) ๋ฐ ํ•ฉ์„ฑ(Composite) ๋‹จ๊ณ„๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค [2, 3]. ์ด ๊ฒฝ๋กœ๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ๊ฒƒ์€ ์ฒซ ๋ Œ๋”๋ง ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•˜๊ณ , ์›ํ™œํ•œ ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ์„ ๋ณด์žฅํ•˜๋ฉฐ ์„ฑ๋Šฅ ๋ณ‘๋ชฉํ˜„์ƒ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋ก ํŠธ์—”๋“œ ์—”์ง€๋‹ˆ์–ด๋ง์˜ ํ•ต์‹ฌ ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค [1, 4]. + +## ๐Ÿ“– Core Content +๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ํ”„๋กœ์„ธ์Šค๋Š” ์ฝ”๋“œ๊ฐ€ ํ™”๋ฉด์˜ ์‹œ๊ฐ์  ์š”์†Œ๋กœ ๋ณ€ํ™˜๋˜๋Š” ๊ณผ์ •์œผ๋กœ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•ต์‹ฌ ๋‹จ๊ณ„๋“ค์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค: + +* **๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ(DOM) ๊ตฌ์ถ•:** ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ HTML ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•˜๋ฉด, ๋ฐ”์ดํŠธ๋ฅผ ๋ฌธ์ž, ํ† ํฐ, ๋…ธ๋“œ๋กœ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๊ณ„์ธต์ ์ธ DOM ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค [1, 5]. ์ด DOM ๊ตฌ์ถ•์€ ์ ์ง„์ ์œผ๋กœ ์ง„ํ–‰๋˜๋ฏ€๋กœ ๋ธŒ๋ผ์šฐ์ €๋Š” ๋„คํŠธ์›Œํฌ ์š”์ฒญ์ด ํ™œ์„ฑํ™”๋œ ์ƒํƒœ์—์„œ๋„ ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1, 6]. ๊ทธ๋Ÿฌ๋‚˜ ๋…ธ๋“œ ์ˆ˜๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์ดํ›„์˜ ๋ Œ๋”๋ง ๋‹จ๊ณ„์—์„œ ๋” ๋งŽ์€ ๊ณ„์‚ฐ ์‹œ๊ฐ„์ด ์†Œ์š”๋ฉ๋‹ˆ๋‹ค [6, 7]. +* **CSS ๊ฐ์ฒด ๋ชจ๋ธ(CSSOM) ๊ตฌ์ถ•:** CSS๋Š” ์ฝ˜ํ…์ธ ๊ฐ€ ์–ด๋–ป๊ฒŒ ์Šคํƒ€์ผ๋ง๋ ์ง€ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. DOM ๊ตฌ์ถ•๊ณผ ๋‹ฌ๋ฆฌ CSSOM ๊ตฌ์ถ•์€ ์ ์ง„์ ์ด์ง€ ์•Š์œผ๋ฉฐ ๋ Œ๋”๋ง์„ ์ฐจ๋‹จ(render-blocking)ํ•˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค [6, 7]. ๋ธŒ๋ผ์šฐ์ €๋Š” ์Šคํƒ€์ผ์ด ์ ์šฉ๋˜์ง€ ์•Š์€ ์ฝ˜ํ…์ธ ๊ฐ€ ํ™”๋ฉด์— ๋…ธ์ถœ๋˜๋Š” ํ˜„์ƒ(FOUC)์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ์Šคํƒ€์ผ์‹œํŠธ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ํŒŒ์‹ฑํ•  ๋•Œ๊นŒ์ง€ ๋ Œ๋” ํŠธ๋ฆฌ๋ฅผ ๋นŒ๋“œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค [6, 7]. +* **๋ Œ๋” ํŠธ๋ฆฌ(Render Tree) ํ•ฉ์„ฑ:** DOM๊ณผ CSSOM์ด ๋ชจ๋‘ ์ค€๋น„๋˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๋Š” ๋‘ ํŠธ๋ฆฌ๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ๋ Œ๋” ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค [8, 9]. ์ด ํŠธ๋ฆฌ๋Š” ํ™”๋ฉด์— ๋ Œ๋”๋งํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋…ธ๋“œ๋งŒ ํฌํ•จํ•˜๋ฏ€๋กœ, `