--- id: wiki-2026-0508-hydration title: Hydration category: Architecture status: needs_review canonical_id: self aliases: [] duplicate_of: none source_trust_level: A confidence_score: 0.92 tags: [auto-wikified, technical-documentation, merged, architecture] raw_sources: [] last_reinforced: 2026-05-08 github_commit: pending inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08) tech_stack: language: unspecified framework: unspecified --- # React Hydration ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) React Hydration은 μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§(SSR)을 톡해 μƒμ„±λœ 정적인 HTML λ¬Έμ„œμ— ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ Reactκ°€ 이벀트 ν•Έλ“€λŸ¬μ™€ μƒν˜Έμž‘μš©μ„±μ„ μ£Όμž…ν•˜λŠ” 과정이닀 [1]. 빈 ν™”λ©΄(White Screen)을 λ³΄μ—¬μ£ΌλŠ” λŒ€μ‹  μ™„μ „νžˆ ν˜•νƒœλ₯Ό κ°–μΆ˜ HTML을 μ‚¬μš©μžμ—κ²Œ λ¨Όμ € μ œκ³΅ν•˜μ—¬ 초기 체감 λ‘œλ”© 속도λ₯Ό ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ μ‚¬μš©λœλ‹€ [1, 2]. React μ½”μ–΄ νŒ€μ˜ λŒ„ μ•„λΈŒλΌλͺ¨ν”„(Dan Abramov)λŠ” 이λ₯Ό "마λ₯Έ(dry) HTML에 μƒν˜Έμž‘μš©μ„±μ΄λΌλŠ” 물을 μ£ΌλŠ” 것"이라고 λΉ„μœ ν–ˆλ‹€ [1]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) * **μž‘λ™ λ©”μ»€λ‹ˆμ¦˜**: ν•˜μ΄λ“œλ ˆμ΄μ…˜μ€ DOM을 μ²˜μŒλΆ€ν„° λ‹€μ‹œ 생성(Re-rendering)ν•˜λŠ” 것이 μ•„λ‹ˆλ‹€ [3]. ReactλŠ” μ„œλ²„μ—μ„œ 이미 λ Œλ”λ§λœ DOM 트리λ₯Ό μˆœνšŒν•˜λ©΄μ„œ, μžμ‹ μ΄ ꡬ좕 쀑인 Fiber νŠΈλ¦¬μ™€ λ³‘λ ¬λ‘œ λΉ„κ΅ν•œλ‹€ [3]. 각 Fiberλ₯Ό κΈ°μ‘΄ DOM λ…Έλ“œμ— λ§€μΉ­μ‹œμΌœ `fiber.stateNode`에 μ°Έμ‘°λ₯Ό μ €μž₯ν•œ λ’€, 이벀트 λ¦¬μŠ€λ„ˆλ₯Ό λΆ€μ°©ν•˜κ³  DOM을 μž¬μ‚¬μš©ν•¨μœΌλ‘œμ¨ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ ν™œμ„±ν™”ν•œλ‹€ [1, 3]. * **선택적 ν•˜μ΄λ“œλ ˆμ΄μ…˜ (Selective Hydration)**: κ³Όκ±°μ—λŠ” 전체 νŠΈλ¦¬κ°€ ν•˜μ΄λ“œλ ˆμ΄μ…˜λ  λ•ŒκΉŒμ§€ κΈ°λ‹€λ €μ•Ό ν–ˆμ§€λ§Œ, React 18은 Lanes μš°μ„ μˆœμœ„ μ‹œμŠ€ν…œμ„ 톡해 이 과정을 κ°œμ„ ν–ˆλ‹€ [4]. μ‚¬μš©μžκ°€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ νŠΉμ • μš”μ†Œμ™€ μƒν˜Έμž‘μš©μ„ μ‹œλ„ν•˜λ©΄, ReactλŠ” μ§„ν–‰ μ€‘μ΄λ˜ ν•˜μ΄λ“œλ ˆμ΄μ…˜μ„ μ€‘λ‹¨ν•˜κ³  `SyncLane`을 μ‚¬μš©ν•΄ μ‚¬μš©μžκ°€ μƒν˜Έμž‘μš©ν•œ κ²½κ³„λ‘œ μ ν”„ν•˜μ—¬ ν•΄λ‹Ή λΆ€λΆ„λ§Œ μš°μ„ μ μœΌλ‘œ ν•˜μ΄λ“œλ ˆμ΄μ…˜ν•œ λ’€ λ‚˜λ¨Έμ§€ μž‘μ—…μ„ μž¬κ°œν•œλ‹€ [4]. * **슀트리밍과 점진적 적용 (Streaming)**: μ„œλ²„λŠ” 데이터가 λͺ¨λ‘ 쀀비될 λ•ŒκΉŒμ§€ 기닀리지 μ•Šκ³  μ…Έ(Shell)을 μ¦‰μ‹œ ν΄λΌμ΄μ–ΈνŠΈλ‘œ μ „μ†‘ν•˜λ©°, Suspense 경계 λ‹¨μœ„λ‘œ 데이터가 ν•΄κ²°λ˜λŠ” λŒ€λ‘œ μŠ€νŠΈλ¦¬λ°ν•œλ‹€ [4]. ν΄λΌμ΄μ–ΈνŠΈλŠ” λ‚˜λ¨Έμ§€ 데이터가 λ„μ°©ν•˜λŠ” λ™μ•ˆ 이미 μˆ˜μ‹ λœ λΆ€λΆ„λΆ€ν„° μ μ§„μ μœΌλ‘œ ν•˜μ΄λ“œλ ˆμ΄μ…˜μ„ μ‹œμž‘ν•  수 μžˆλ‹€ [4]. * **ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈμ™€ μ„œλ²„ μ»΄ν¬λ„ŒνŠΈμ˜ 차이**: ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈ(Client Components)λŠ” μ„œλ²„μ—μ„œ λ¨Όμ € μ‹€ν–‰λœ ν›„ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ ν•˜μ΄λ“œλ ˆμ΄μ…˜μ„ μœ„ν•΄ λ‹€μ‹œ ν•œ 번 μ‹€ν–‰λœλ‹€ [5, 6]. 반면, React μ„œλ²„ μ»΄ν¬λ„ŒνŠΈ(RSC)λŠ” 였직 μ„œλ²„μ—μ„œλ§Œ μ‹€ν–‰λ˜λ―€λ‘œ ν΄λΌμ΄μ–ΈνŠΈ 츑의 ν•˜μ΄λ“œλ ˆμ΄μ…˜ 단계 μžμ²΄κ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€ [6]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & Updates) * **ν•˜μ΄λ“œλ ˆμ΄μ…˜ κ°­ (The Hydration Gap)**: SSRκ³Ό ν•˜μ΄λ“œλ ˆμ΄μ…˜μ€ μ‚¬μš©μžκ°€ νŽ˜μ΄μ§€λ₯Ό 더 빨리 λ³Ό 수 있게 ν•˜μ§€λ§Œ, **화면이 μ™„μ„±λ˜μ–΄ λ³΄μž„μ—λ„ μ‹€μ œλ‘œλŠ” μƒν˜Έμž‘μš©ν•  수 μ—†λŠ” 'μ°©μ‹œ ꡬ간'**을 λ§Œλ“€μ–΄λ‚Έλ‹€ [3, 7]. 이벀트 λ¦¬μŠ€λ„ˆκ°€ λΆ€μ°©λ˜κΈ° μ „κΉŒμ§€λŠ” λ²„νŠΌμ„ ν΄λ¦­ν•˜κ±°λ‚˜ λ“œλ‘­λ‹€μš΄μ„ λˆŒλŸ¬λ„ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ•„λ¬΄λŸ° λ°˜μ‘μ„ ν•˜μ§€ μ•ŠλŠ”λ‹€ [7]. * **전체 트리 μˆœνšŒμ— λ”°λ₯Έ λΈ”λ‘œν‚Ή**: 기본적으둜 ReactλŠ” 트리λ₯Ό 순차적으둜 μˆœνšŒν•˜λ©° ν•˜μ΄λ“œλ ˆμ΄μ…˜μ„ μ§„ν–‰ν•˜κΈ° λ•Œλ¬Έμ—, 트리 상단에 처리 속도가 느린 μ»΄ν¬λ„ŒνŠΈκ°€ ν•˜λ‚˜λΌλ„ 있으면 ν•˜λ‹¨ μš”μ†Œμ˜ 클릭 ν•Έλ“€λŸ¬ λΆ€μ°©κΉŒμ§€ μ „μ²΄μ μœΌλ‘œ μ§€μ—°λ˜λŠ” 병λͺ© ν˜„μƒμ΄ λ°œμƒν•œλ‹€ [3]. * **이쀑 μž‘μ—…κ³Ό μžλ°”μŠ€ν¬λ¦½νŠΈ λ²ˆλ“€ λΉ„μš© (The Two-Trip Lie)**: μ„œλ²„μ—μ„œ HTML을 λ¨Όμ € λ Œλ”λ§ν•˜λ”λΌλ„, κ²°κ΅­ μƒν˜Έμž‘μš©μ„ μœ„ν•΄ ν΄λΌμ΄μ–ΈνŠΈλŠ” 전체 μžλ°”μŠ€ν¬λ¦½νŠΈ λ²ˆλ“€μ„ κ·ΈλŒ€λ‘œ λ‹€μš΄λ‘œλ“œν•˜κ³  νŒŒμ‹±ν•΄μ•Ό ν•œλ‹€ [8, 9]. μ„œλ²„μ—μ„œ 데이터λ₯Ό νŽ˜μΉ­ν•˜μ—¬ HTML을 μ™„μ„±ν–ˆμŒμ—λ„ λΆˆκ΅¬ν•˜κ³ , ν΄λΌμ΄μ–ΈνŠΈκ°€ λ‹€μ‹œ λ™μΌν•œ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‹€ν–‰ν•˜κ²Œ λ˜λ―€λ‘œ 전체적인 ν΄λΌμ΄μ–ΈνŠΈ μž‘μ—…λŸ‰μ΄λ‚˜ JavaScript λ²ˆλ“€ ν¬κΈ°λŠ” κ°μ†Œν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 근본적인 ν•œκ³„κ°€ μžˆλ‹€ [8]. (μ΄λŸ¬ν•œ 단점을 ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ“±μž₯ν•œ 것이 React μ„œλ²„ μ»΄ν¬λ„ŒνŠΈμ΄λ‹€ [9].) --- *Last updated: 2026-05-03* ## πŸ“š Legacy Insights & Additional Context > [!NOTE] > Below is content merged from previous versions of this documentation. ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) μ§€μ—° ν•˜μ΄λ“œλ ˆμ΄μ…˜(Lazy Hydration)은 Vue 3.5μ—μ„œ μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§(SSR)을 μœ„ν•΄ λ„μž…λœ μ„±λŠ₯ μ΅œμ ν™” κΈ°λŠ₯μž…λ‹ˆλ‹€ [1]. 이 κΈ°λŠ₯은 μ»΄ν¬λ„ŒνŠΈκ°€ ν™”λ©΄(뷰포트)에 ν‘œμ‹œλ  λ•Œλ§Œ ν•˜μ΄λ“œλ ˆμ΄μ…˜μ΄ μˆ˜ν–‰λ˜λ„λ‘ ν™œμ„±ν™”λ₯Ό μ§€μ—°μ‹œν‚΅λ‹ˆλ‹€ [1, 2]. 이λ₯Ό 톡해 λΆˆν•„μš”ν•œ 초기 연산을 λ°©μ§€ν•˜μ—¬ 초기 λ‘œλ“œ μ‹œκ°„μ„ λ‹¨μΆ•ν•˜κ³  μ „λ°˜μ μΈ μ‚¬μš©μž κ²½ν—˜μ„ ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€ [1, 3]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) * **λ™μž‘ λ©”μ»€λ‹ˆμ¦˜ 및 μ„±λŠ₯ ν–₯상:** μ§€μ—° ν•˜μ΄λ“œλ ˆμ΄μ…˜μ€ SSR ν™˜κ²½μ—μ„œ μ»΄ν¬λ„ŒνŠΈκ°€ μ‚¬μš©μžμ˜ 뷰포트 내에 λ“€μ–΄μ˜€κΈ° μ „κΉŒμ§€λŠ” ν™œμ„±ν™”(ν•˜μ΄λ“œλ ˆμ΄μ…˜)λ₯Ό λ―Έλ£¨λŠ” λ°©μ‹μœΌλ‘œ μž‘λ™ν•©λ‹ˆλ‹€ [1, 2]. 이 μ „λž΅μ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 초기 νŽ˜μ΄μ§€ λ‘œλ“œ μ‹œκ°„μ„ κ°μ†Œμ‹œν‚€κ³  Vue.js의 λ Œλ”λ§ μ„±λŠ₯을 ν–₯μƒμ‹œν‚€λŠ” 데 μ§μ ‘μ μœΌλ‘œ κΈ°μ—¬ν•©λ‹ˆλ‹€ [1, 2]. * **μ£Όμš” 적용 λΆ„μ•Ό:** 이 νŒ¨ν„΄μ€ λΉ λ₯Έ λ‘œλ”© μ‹œκ°„κ³Ό 검색 μ—”μ§„ μ΅œμ ν™”(SEO)κ°€ λΉ„μ¦ˆλ‹ˆμŠ€ 성곡에 ν•„μˆ˜μ μΈ μ½˜ν…μΈ  관리 μ‹œμŠ€ν…œ(CMS), 이컀머슀 μ‚¬μ΄νŠΈ, λ―Έλ””μ–΄ ν”Œλž«νΌ λ“± μ½˜ν…μΈ κ°€ ν’λΆ€ν•œ λŒ€κ·œλͺ¨ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ 맀우 μœ μš©ν•©λ‹ˆλ‹€ [4]. * **μ‚¬μš©μž κ²½ν—˜(UX) κ°œμ„ :** μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‹€μ œλ‘œ ν•„μš”ν•œ μ‹œμ μ—λ§Œ ν™œμ„±ν™”ν•¨μœΌλ‘œμ¨ λŒ€κ·œλͺ¨ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ν™˜κ²½μ—μ„œλ„ μ‚¬μš©μžμ—κ²Œ 훨씬 더 λΆ€λ“œλŸ¬μš΄ μƒν˜Έμž‘μš©(Interaction) κ²½ν—˜μ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [3]. λΉ λ₯Έ 초기 ν™”λ©΄ λ‘œλ”©μ„ λ‹¬μ„±ν•˜λ©΄μ„œλ„ λŒ€ν™”ν˜• κΈ°λŠ₯듀을 무리 없이 μœ μ§€ν•  수 μžˆλ„λ‘ λ•μŠ΅λ‹ˆλ‹€ [4]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & Updates) μ†ŒμŠ€μ— κ΄€λ ¨ 정보가 λΆ€μ‘±ν•©λ‹ˆλ‹€. (제곡된 μ†ŒμŠ€ 데이터 λ‚΄μ—λŠ” 'Lazy Hydration' 기법 μ μš©μ— λ”°λ₯Έ ꡬ체적인 기술적 λΆ€μž‘μš©, μ œμ•½ 사항 λ˜λŠ” λ°˜λŒ€ 급뢀에 λŒ€ν•œ λ‚΄μš©μ΄ ν¬ν•¨λ˜μ–΄ μžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€.) --- *Last updated: 2026-05-03* ## πŸ“š Legacy Insights & Additional Context > [!NOTE] > Below is content merged from previous versions of this documentation. ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) ν•˜μ΄λ“œλ ˆμ΄μ…˜(Hydration)은 ν”„λ‘ νŠΈμ—”λ“œ ν”„λ ˆμž„μ›Œν¬κ°€ μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§(SSR)을 톡해 μƒμ„±λœ 정적 HTML을 ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ λ„˜κ²¨λ°›μ•„ 이벀트 ν•Έλ“€λŸ¬λ₯Ό μ—°κ²°ν•˜κ³  μƒν˜Έμž‘μš©μ„±(Interactivity)을 λΆ€μ—¬ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€ [1]. μ΄λŠ” 'κ±΄μ‘°ν•œ(dry)' HTML에 μƒν˜Έμž‘μš©μ„±μ΄λΌλŠ” 'λ¬Ό(water)'을 μ£ΌλŠ” 것에 λΉ„μœ λ©λ‹ˆλ‹€ [1]. μ‚¬μš©μžμ—κ²Œ 화면을 더 빨리 보여쀄 수 μžˆλ‹€λŠ” μž₯점이 μžˆμ§€λ§Œ, μ΅œμ ν™”λ˜μ§€ μ•Šμ„ 경우 νŽ˜μ΄μ§€κ°€ λ Œλ”λ§λœ ν›„ μƒν˜Έμž‘μš©μ΄ κ°€λŠ₯ν•΄μ§ˆ λ•ŒκΉŒμ§€μ˜ μ§€μ—°(ν•˜μ΄λ“œλ ˆμ΄μ…˜ κ°­)이 λ°œμƒν•˜λŠ” ν•œκ³„λ„ μ§€λ‹ˆκ³  μžˆμŠ΅λ‹ˆλ‹€ [2]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) * **ν•˜μ΄λ“œλ ˆμ΄μ…˜μ˜ λ™μž‘ 원리** ν•˜μ΄λ“œλ ˆμ΄μ…˜μ€ μ²˜μŒλΆ€ν„° DOM을 λ‹€μ‹œ μƒμ„±ν•˜λŠ” μž¬λ Œλ”λ§(re-rendering) μž‘μ—…μ΄ μ•„λ‹™λ‹ˆλ‹€ [3]. 예λ₯Ό λ“€μ–΄ ReactλŠ” 기쑴에 μ„œλ²„κ°€ λ Œλ”λ§ν•œ DOM 트리λ₯Ό μˆœνšŒν•˜λ©΄μ„œ 생성 쀑인 Fiber νŠΈλ¦¬μ™€ λŒ€μ‘°(matching)ν•˜μ—¬ κΈ°μ‘΄ DOM을 μž¬μ‚¬μš©ν•˜κ³  이벀트 λ¦¬μŠ€λ„ˆλ§Œ μ—°κ²°ν•˜λŠ” λ°©μ‹μœΌλ‘œ μž‘λ™ν•˜λ―€λ‘œ, μ™„μ „νžˆ μƒˆλ‘œ λ Œλ”λ§ν•˜λŠ” 것보닀 λΉ λ¦…λ‹ˆλ‹€ [1, 3]. * **ν”„λ ˆμž„μ›Œν¬λ³„ ν•˜μ΄λ“œλ ˆμ΄μ…˜ μ΅œμ ν™” μ „λž΅** * **React 18의 선택적 ν•˜μ΄λ“œλ ˆμ΄μ…˜(Selective Hydration)**: 기쑴의 ν•˜μ΄λ“œλ ˆμ΄μ…˜μ€ 순차적으둜 μ§„ν–‰λ˜μ—ˆμœΌλ‚˜, React 18λΆ€ν„°λŠ” μš°μ„ μˆœμœ„(Lanes) μ‹œμŠ€ν…œμ„ λ„μž…ν•˜μ—¬ μ‚¬μš©μžκ°€ 클릭 λ“± μƒν˜Έμž‘μš©μ„ μ‹œλ„ν•˜λ©΄ ν•΄λ‹Ή λΆ€λΆ„μ˜ ν•˜μ΄λ“œλ ˆμ΄μ…˜μ„ μš°μ„ μ μœΌλ‘œ μ²˜λ¦¬ν•œ λ’€ λ‚˜λ¨Έμ§€ 트리의 μž‘μ—…μ„ μž¬κ°œν•  수 μžˆμŠ΅λ‹ˆλ‹€ [4]. * **슀트리밍(Streaming)과의 κ²°ν•©**: μ„œλ²„κ°€ λͺ¨λ“  데이터λ₯Ό 기닀리지 μ•Šκ³  UI μ…Έ(Shell)을 λ¨Όμ € 보낸 λ’€ 데이터가 ν•΄κ²°λ˜λŠ” λŒ€λ‘œ 청크 λ‹¨μœ„λ‘œ μŠ€νŠΈλ¦¬λ°ν•˜λ©΄, ν΄λΌμ΄μ–ΈνŠΈλŠ” λ‚˜λ¨Έμ§€ 데이터가 λ„μ°©ν•˜λŠ” 쀑에도 이미 λ„μ°©ν•œ λΆ€λΆ„λΆ€ν„° ν•˜μ΄λ“œλ ˆμ΄μ…˜μ„ μ‹œμž‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [4]. * **Vue 3.5의 μ§€μ—° ν•˜μ΄λ“œλ ˆμ΄μ…˜(Lazy Hydration)**: Vue 3.5λŠ” μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§ μ‹œ μ»΄ν¬λ„ŒνŠΈκ°€ λ·°ν¬νŠΈμ— ν‘œμ‹œλ  λ•Œλ§Œ ν•˜μ΄λ“œλ ˆμ΄μ…˜λ˜λ„λ‘ μ§€μ—°μ‹œν‚€λŠ” κΈ°λŠ₯을 λ„μž…ν–ˆμŠ΅λ‹ˆλ‹€ [5]. 이λ₯Ό 톡해 초기 λ‘œλ“œ μ‹œκ°„μ„ 쀄이고 λΆˆν•„μš”ν•œ ν™œμ„±ν™”λ₯Ό μ§€μ—°μ‹œμΌœ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ„±λŠ₯을 ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€ [5, 6]. * **μ„œλ²„ μ»΄ν¬λ„ŒνŠΈ(RSC)λ₯Ό ν†΅ν•œ ν•˜μ΄λ“œλ ˆμ΄μ…˜ 제거** React μ„œλ²„ μ»΄ν¬λ„ŒνŠΈ(RSC)λŠ” 였직 μ„œλ²„μ—μ„œλ§Œ μ‹€ν–‰λ˜λ©° ν΄λΌμ΄μ–ΈνŠΈλ‘œ μ „μ†‘λ˜λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ λ²ˆλ“€μ— ν¬ν•¨λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ [7, 8]. λ”°λΌμ„œ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ λ‹€μ‹œ μ‹€ν–‰λ˜κ±°λ‚˜ ν•˜μ΄λ“œλ ˆμ΄μ…˜ν•  ν•„μš”κ°€ μ—†μ–΄ ν•˜μ΄λ“œλ ˆμ΄μ…˜ λΉ„μš© 자체λ₯Ό μ™„μ „νžˆ μ œκ±°ν•˜κ³  초기 λ‘œλ”© 및 μƒν˜Έμž‘μš© 속도λ₯Ό ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€ [7, 9]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & Updates) * **ν•˜μ΄λ“œλ ˆμ΄μ…˜ κ°­(Hydration Gap)** 전톡적인 SSRκ³Ό ν•˜μ΄λ“œλ ˆμ΄μ…˜ λ°©μ‹μ—μ„œλŠ” μ„œλ²„κ°€ λ Œλ”λ§ν•œ HTML이 ν΄λΌμ΄μ–ΈνŠΈμ— ν‘œμ‹œλ  λ•Œ "νŽ˜μ΄μ§€κ°€ μ€€λΉ„λœ κ²ƒμ²˜λŸΌ λ³΄μ΄μ§€λ§Œ μ‹€μ œλ‘œλŠ” κ·Έλ ‡μ§€ μ•Šμ€" μƒνƒœκ°€ μ‘΄μž¬ν•©λ‹ˆλ‹€ [2]. Reactκ°€ 이벀트 λ¦¬μŠ€λ„ˆλ₯Ό μ™„μ „νžˆ λΆ€μ°©ν•˜κΈ° μ „κΉŒμ§€λŠ” μ‚¬μš©μžκ°€ λ²„νŠΌμ„ ν΄λ¦­ν•˜κ±°λ‚˜ 폼을 μ œμΆœν•˜λ €κ³  해도 μ•„λ¬΄λŸ° λ°˜μ‘μ΄ μ—†λŠ” ν˜„μƒμ΄ λ°œμƒν•©λ‹ˆλ‹€ [2]. * **전체 트리 λΈ”λ‘œν‚Ή(Blocking) 문제** 기본적인 ν•˜μ΄λ“œλ ˆμ΄μ…˜ κ³Όμ •μ—μ„œλŠ” 전체 트리의 ν•˜μ΄λ“œλ ˆμ΄μ…˜μ΄ μ™„λ£Œλ˜κΈ° μ „κΉŒμ§€λŠ” UI의 μ–΄λ–€ 뢀뢄도 μƒν˜Έμž‘μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€ [3]. λ§Œμ•½ 트리 상단에 처리 속도가 느린 μ»΄ν¬λ„ŒνŠΈκ°€ μ‘΄μž¬ν•œλ‹€λ©΄, 트리 ν•˜λ‹¨μ— μžˆλŠ” λ‹¨μˆœν•œ λ²„νŠΌμ˜ 클릭 ν•Έλ“€λŸ¬μ‘°μ°¨ μž‘λ™ν•˜μ§€ λͺ»ν•˜κ²Œ λ§‰λŠ” 병λͺ© ν˜„μƒμ„ μ΄ˆλž˜ν•©λ‹ˆλ‹€ [3]. * **μžλ°”μŠ€ν¬λ¦½νŠΈ λ²ˆλ“€ 크기 문제 μœ μ§€** SSRκ³Ό ν•˜μ΄λ“œλ ˆμ΄μ…˜μ˜ 쑰합은 초기 빈 화면을 ν•΄κ²°ν•΄ μ£Όμ§€λ§Œ, κ²°κ΅­ μ„œλ²„μ—μ„œ λ Œλ”λ§λœ λͺ¨λ“  μ»΄ν¬λ„ŒνŠΈμ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œλ₯Ό ν΄λΌμ΄μ–ΈνŠΈκ°€ λ‹€μš΄λ‘œλ“œν•˜κ³  μ‹€ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€ [10]. 결과적으둜 μ„œλ²„ μž‘μ—…μ΄ ν΄λΌμ΄μ–ΈνŠΈμ˜ μ—°μ‚°λŸ‰μ΄λ‚˜ μžλ°”μŠ€ν¬λ¦½νŠΈ λ²ˆλ“€ 크기λ₯Ό μ€„μ—¬μ£Όμ§€λŠ” λͺ»ν•œλ‹€λŠ” 근본적인 μ œμ•½μ΄ μžˆμŠ΅λ‹ˆλ‹€ [10, 11]. --- *Last updated: 2026-05-03* ## πŸ“š Legacy Insights & Additional Context > [!NOTE] > Below is content merged from previous versions of this documentation. ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) [[Hydration|Hydration]]은 μ„œλ²„μ—μ„œ λ Œλ”λ§λœ 정적 HTML λΌˆλŒ€μ— JavaScriptλ₯Ό μ‹€ν–‰ν•˜κ³  이벀트 λ¦¬μŠ€λ„ˆλ₯Ό μ—°κ²°ν•˜μ—¬ μ™„μ „ν•œ μƒν˜Έμž‘μš©μ΄ κ°€λŠ₯ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μœΌλ‘œ λ³€ν™˜ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€ [1, 2]. 기본적으둜 ReactλŠ” νŽ˜μ΄μ§€ 전체λ₯Ό ν•œ λ²ˆμ— Hydrationν•˜λ©΄μ„œ 메인 μŠ€λ ˆλ“œλ₯Ό μ°¨λ‹¨ν•˜μ—¬ TBT(Total Blocking Time)와 TTI(Time to Interactive) μ§€ν‘œλ₯Ό μ•…ν™”μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€ [3]. 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 선택적 Hydration, μ§€μ—° λ‘œλ”©, [[React Server Components|React Server Components]](RSC) λ“±μ˜ μ΅œμ ν™” 기법을 λ„μž…ν•˜μ—¬ 초기 λ‘œλ“œ μ„±λŠ₯κ³Ό μƒν˜Έμž‘μš©μ„±μ„ κ·ΉλŒ€ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [4-6]. --- Hydration(ν•˜μ΄λ“œλ ˆμ΄μ…˜)은 Reactκ°€ μ„œλ²„μ—μ„œ λ Œλ”λ§λœ 정적 HTML에 이벀트 λ¦¬μŠ€λ„ˆμ™€ μƒνƒœλ₯Ό μ—°κ²°ν•˜μ—¬ μƒν˜Έμž‘μš©μ΄ κ°€λŠ₯ν•˜λ„λ‘ λ§Œλ“œλŠ” κ³Όμ •μž…λ‹ˆλ‹€ [1]. [[Next.js 15|Next.js 15]] ν™˜κ²½μ—μ„œλŠ” μ΄λŸ¬ν•œ ν•˜μ΄λ“œλ ˆμ΄μ…˜ 과정이 였직 ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈ(Client Components)μ—μ„œλ§Œ λ°œμƒν•©λ‹ˆλ‹€ [1]. [[CSS-in-JS|CSS-in-JS]]와 같은 μŠ€νƒ€μΌλ§ 방식을 μ‚¬μš©ν•  λ•Œ, μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ κ°„μ˜ 생성 결과물이 λ‹€λ₯΄λ©΄ 'ν•˜μ΄λ“œλ ˆμ΄μ…˜ 뢈일치(hydration mismatch)'κ°€ λ°œμƒν•  수 μžˆμœΌλ―€λ‘œ μ„Έμ‹¬ν•œ 관리가 ν•„μš”ν•©λ‹ˆλ‹€ [2-4]. --- ν•˜μ΄λ“œλ ˆμ΄μ…˜(Hydration)은 μ„œλ²„μ—μ„œ 사전 λ Œλ”λ§λœ 정적 HTML을 ν΄λΌμ΄μ–ΈνŠΈκ°€ 전달받은 ν›„, [[JavaScript|JavaScript]]λ₯Ό μ‹€ν–‰ν•˜μ—¬ 이벀트 λ¦¬μŠ€λ„ˆμ™€ μƒνƒœλ₯Ό μ—°κ²°ν•¨μœΌλ‘œμ¨ μ™„μ „ν•œ μƒν˜Έμž‘μš©μ΄ κ°€λŠ₯ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μœΌλ‘œ λ³€ν™˜ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€ [1]. SSR(Server-Side Rendering)의 λΉ λ₯Έ μ½˜ν…μΈ  ν‘œμ‹œ μž₯점과 CSR(Client-Side Rendering)의 μƒν˜Έμž‘μš©μ„±μ„ κ²°ν•©ν•˜μ§€λ§Œ, ν•˜μ΄λ“œλ ˆμ΄μ…˜μ΄ μ™„λ£Œλ˜κΈ° μ „κΉŒμ§€λŠ” μ‚¬μš©μžμ˜ μž…λ ₯에 μ‘λ‹΅ν•˜μ§€ μ•Šμ•„ 지연이 λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€ [1-5]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized 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.js]] ν™˜κ²½μ—μ„œλŠ” `next/dynamic`을 ν™œμš©ν•œ 동적 μž„ν¬νŠΈ(Dynamic Imports)λ₯Ό 톡해 κ΅¬ν˜„ν•˜κ±°λ‚˜, IntersectionObserver APIλ₯Ό μ‚¬μš©ν•˜μ—¬ μš”μ†Œκ°€ λ·°ν¬νŠΈμ— λ“€μ–΄μ˜¬ λ•Œλ§Œ Hydration을 μˆ˜ν–‰ν•˜λŠ” μ§€μ—°(Lazy) 방식을 μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [5, 9]. 이λ₯Ό 톡해 메인 μŠ€λ ˆλ“œ 차단을 λΆ„μ‚°μ‹œμΌœ TBTλ₯Ό μ΅œλŒ€ 40%κΉŒμ§€ 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€ [5]. * **[[React Server Components (RSC)|React Server Components (RSC]]의 ν™œμš©:** * [[Next.js App Router|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|React 18]]의 λ™μ‹œμ„± λ Œλ”λ§([[Concurrent Rendering|Concurrent Rendering]])은 Hydration μž‘μ—…μ„ μž‘μ€ 청크둜 μͺΌκ°œμ–΄ λΈŒλΌμš°μ €κ°€ μ‚¬μš©μž μž…λ ₯을 μ²˜λ¦¬ν•  수 μžˆλ„λ‘ 양보(yield)ν•˜λŠ” κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€ [15]. * **λΆ€λΆ„ Hydration (Partial Hydration) 및 기타 팁:** * 정적인 μ½˜ν…μΈ  μ˜μ—­μ„ κ³ λ¦½μ‹œν‚€κ³  μƒν˜Έμž‘μš©μ΄ ν•„μš”ν•œ νŠΉμ • λΆ€λΆ„λ§Œ Hydrationν•˜λŠ” 섬 μ•„ν‚€ν…μ²˜([[Island Architecture|Island Architecture]])λ₯Ό λ„μž…ν•˜κ±°λ‚˜, μ ˆλŒ€μ μœΌλ‘œ 정적인 μ½˜ν…μΈ μ˜ 경우 `dangerouslySetInnerHTML`을 μ‚¬μš©ν•˜μ—¬ ν†΅μ§Έλ‘œ Hydration κ³Όμ •μ—μ„œ λ°°μ œν•˜λŠ” 것도 μœ μš©ν•œ μ „λž΅μž…λ‹ˆλ‹€ [16-18]. * λΆˆκ°€ν”Όν•˜κ²Œ ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ κ°„μ˜ λ Œλ”λ§ λΆˆμΌμΉ˜κ°€ μ˜ˆμƒλ˜λŠ” κ³³μ—λŠ” `suppressHydrationWarning`을 μ œν•œμ μœΌλ‘œ μ‚¬μš©ν•˜κ±°λ‚˜, Hydration μ™„λ£Œ 이후에 λ™μž‘ν•΄μ•Ό ν•˜λŠ” λ‘œμ§μ„ μ˜μ‘΄μ„± 배열이 빈 `useEffect` 내에 λ°°μΉ˜ν•˜μ—¬ 뢈일치 μ—λŸ¬λ₯Ό λ°©μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [17, 19]. --- * **ν•˜μ΄λ“œλ ˆμ΄μ…˜μ˜ μž‘λ™ 원리:** React μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ ν•˜μ΄λ“œλ ˆμ΄μ…˜μ€ μ„œλ²„κ°€ μ™„μ „ν•œ 초기 HTML을 μƒμ„±ν•˜κ³ , λΈŒλΌμš°μ €κ°€ ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈμš© [[JavaScript|JavaScript]]λ₯Ό λ‹€μš΄λ‘œλ“œν•œ ν›„, Reactκ°€ ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈμ— μƒν˜Έμž‘μš©(μΈν„°λž™ν‹°λΉ„ν‹°)을 λΆ€μ—¬ν•˜λŠ” μˆœμ„œλ‘œ μ§„ν–‰λ©λ‹ˆλ‹€ [1, 4]. * **ν•˜μ΄λ“œλ ˆμ΄μ…˜ 뢈일치(Hydration Mismatch):** μ„œλ²„μ—μ„œ μƒμ„±ν•œ μ½˜ν…μΈ μ™€ ν΄λΌμ΄μ–ΈνŠΈκ°€ κΈ°λŒ€ν•˜λŠ” μ½˜ν…μΈ κ°€ λ‹€λ₯Ό λ•Œ λ°œμƒν•©λ‹ˆλ‹€ [4]. 예λ₯Ό λ“€μ–΄, μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ‘œ λ‹€λ₯Έ νƒ€μž„μŠ€νƒ¬ν”„λ₯Ό μƒμ„±ν•˜κ±°λ‚˜ λ™μ μœΌλ‘œ λ‹€λ₯Έ CSS 클래슀λͺ…을 생성할 λ•Œ 이 λ¬Έμ œκ°€ μΌμ–΄λ‚©λ‹ˆλ‹€ [3, 4]. * **[[styled-components|styled-components]]와 ν•˜μ΄λ“œλ ˆμ΄μ…˜ 문제 ν•΄κ²°:** [[Next.js App Router|Next.js App Router]] 및 μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§(SSR) ν™˜κ²½μ—μ„œ styled-componentsλ₯Ό μ‚¬μš©ν•  λ•Œ μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈκ°€ λ‹€λ₯Έ 클래슀λͺ…을 μƒμ„±ν•˜μ—¬ ν•˜μ΄λ“œλ ˆμ΄μ…˜ 뢈일치 μœ„ν—˜μ΄ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€ [3]. 이λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ κ°œλ°œμžλŠ” `next.config.js`μ—μ„œ `styledComponents` 컴파일러 μ˜΅μ…˜μ„ ν™œμ„±ν™”ν•˜μ—¬ μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ κ²½κ³„μ—μ„œ μΌκ΄€λœ 클래슀λͺ…이 μƒμ„±λ˜λ„λ‘ 보μž₯ν•΄μ•Ό ν•©λ‹ˆλ‹€ [3]. * **ν…Œλ§ˆ μ „ν™˜ μ‹œμ˜ ν•˜μ΄λ“œλ ˆμ΄μ…˜ 관리:** 라이트 λͺ¨λ“œμ™€ 닀크 λͺ¨λ“œ 같은 ν…Œλ§ˆλ₯Ό μ „ν™˜ν•  λ•Œ, μΌκ΄€λœ 클래슀λͺ… ν•΄μ‹œλ₯Ό μœ μ§€ν•˜μ—¬ ν•˜μ΄λ“œλ ˆμ΄μ…˜ 뢈일치λ₯Ό λ°©μ§€ν•˜λ €λ©΄ ν…Œλ§ˆ 객체λ₯Ό `ThemeProvider`에 μ˜¬λ°”λ₯΄κ²Œ μ „λ‹¬ν•˜μ—¬ 클래슀λͺ…을 μ•ˆμ •ν™”ν•΄μ•Ό ν•©λ‹ˆλ‹€ [2, 5]. --- * **μž‘λ™ 방식 및 μ—­ν• :** * μ„œλ²„λŠ” 데이터가 ν¬ν•¨λœ HTML을 μƒμ„±ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈ(λΈŒλΌμš°μ €)둜 μ „μ†‘ν•©λ‹ˆλ‹€ [3, 5]. * λΈŒλΌμš°μ €λŠ” 이 HTML을 μ¦‰μ‹œ ν‘œμ‹œν•˜λ―€λ‘œ μ‚¬μš©μžλŠ” μ½˜ν…μΈ λ₯Ό λ°”λ‘œ λ³Ό 수 μžˆμ§€λ§Œ, 이 μ‹œμ μ—μ„œλŠ” μƒν˜Έμž‘μš©ν•  수 μ—†λŠ” 정적인 μƒνƒœμž…λ‹ˆλ‹€ [2, 3]. * 이후 λΈŒλΌμš°μ €κ°€ JavaScript λ²ˆλ“€μ„ λ‹€μš΄λ‘œλ“œν•˜κ³  μ‹€ν–‰ν•˜λ©΄, Reactκ°€ 가상 DOM을 λ Œλ”λ§λœ HTML에 "μ—°κ²°(attach)"ν•˜μ—¬ λ²„νŠΌ 클릭 λ“± 각쒅 이벀트 ν•Έλ“€λŸ¬μ™€ μƒνƒœ 관리λ₯Ό ν™œμ„±ν™”ν•©λ‹ˆλ‹€. 이 과정이 λ°”λ‘œ ν•˜μ΄λ“œλ ˆμ΄μ…˜μž…λ‹ˆλ‹€ [1, 2, 5]. * **μ„±λŠ₯에 λ―ΈμΉ˜λŠ” 영ν–₯ 및 μ£Όμš” 과제:** * ν•˜μ΄λ“œλ ˆμ΄μ…˜μ€ TBT(총 차단 μ‹œκ°„), FID(졜초 μž…λ ₯ μ§€μ—°), TTI(μƒν˜Έμž‘μš©κΉŒμ§€μ˜ μ‹œκ°„) λ“± 핡심 μ„±λŠ₯ μ§€ν‘œ([[Core Web Vitals|Core Web Vitals]])에 직접적인 영ν–₯을 λ―ΈμΉ©λ‹ˆλ‹€ [6]. * 기본적으둜 ReactλŠ” 전체 νŽ˜μ΄μ§€λ₯Ό ν•œ λ²ˆμ— ν•˜μ΄λ“œλ ˆμ΄μ…˜ν•˜λ € ν•˜κΈ° λ•Œλ¬Έμ— 메인 μŠ€λ ˆλ“œλ₯Ό μ°¨λ‹¨ν•˜λŠ” λΆˆν•„μš”ν•œ JavaScript 싀행이 λ°œμƒν•˜κ³ , 이둜 인해 μ‚¬μš©μžκ°€ 클릭해도 μ¦‰κ°μ μœΌλ‘œ λ°˜μ‘ν•˜μ§€ μ•ŠλŠ” μž…λ ₯ μ§€μ—°(Input lag)을 μ΄ˆλž˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [5, 7]. * μ„œλ²„ λ Œλ”λ§ 결과와 ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ λ Œλ”λ§μ΄ μΌμΉ˜ν•˜μ§€ μ•Šμ„ λ•Œ λ°œμƒν•˜λŠ” 'ν•˜μ΄λ“œλ ˆμ΄μ…˜ 뢈일치 μ—λŸ¬(Mismatch errors)'와 λͺ¨λ“  μ»΄ν¬λ„ŒνŠΈμ˜ JavaScript λ²ˆλ“€μ„ λ‘œλ“œν•΄μ•Ό ν•΄μ„œ λ°œμƒν•˜λŠ” λ²ˆλ“€ 크기 λΉ„λŒ€ν™”(Bundle size bloat) λ¬Έμ œλ„ 자주 κ²ͺλŠ” κ³Όμ œμž…λ‹ˆλ‹€ [7-9]. * **ν•˜μ΄λ“œλ ˆμ΄μ…˜ μ΅œμ ν™” μ „λž΅:** * **점진적/선택적 ν•˜μ΄λ“œλ ˆμ΄μ…˜ (Selective Hydration):** 동적 μž„ν¬νŠΈ(`next/dynamic`)λ₯Ό μ‚¬μš©ν•΄ ν™”λ©΄ 상단(Above-the-fold)의 μ€‘μš”ν•œ μ½˜ν…μΈ λ₯Ό λ¨Όμ € μ²˜λ¦¬ν•˜κ³  λ‚˜λ¨Έμ§€ 덜 μ€‘μš”ν•œ μ»΄ν¬λ„ŒνŠΈμ˜ ν•˜μ΄λ“œλ ˆμ΄μ…˜μ„ λΆ„μ‚°μ‹œν‚΅λ‹ˆλ‹€ [8, 10, 11]. * **κ°€μ‹œμ„± 기반 μ§€μ—° ν•˜μ΄λ“œλ ˆμ΄μ…˜ (Lazy Hydration):** `IntersectionObserver` API 등을 ν™œμš©ν•˜μ—¬ μ»΄ν¬λ„ŒνŠΈκ°€ λ·°ν¬νŠΈμ— λ“€μ–΄μ˜¬ λ•Œλ§Œ ν•˜μ΄λ“œλ ˆμ΄μ…˜μ„ μ‹€ν–‰ν•©λ‹ˆλ‹€ [10, 11]. * **λΆ€λΆ„ ν•˜μ΄λ“œλ ˆμ΄μ…˜ (Partial Hydration) 및 μ•„μΌλžœλ“œ μ•„ν‚€ν…μ²˜:** μƒν˜Έμž‘μš©μ΄ ν•„μš”ν•œ νŠΉμ • λΆ€λΆ„λ§Œ ν•˜μ΄λ“œλ ˆμ΄μ…˜ν•˜κ³  λ‚˜λ¨Έμ§€λŠ” 정적 HTML둜 λ‚¨κ²¨λ‘‘λ‹ˆλ‹€ [12, 13]. * **슀트리밍 및 Suspense:** React의 Suspense APIλ₯Ό μ‚¬μš©ν•˜μ—¬ μ„œλ²„μ—μ„œ HTML을 μ μ§„μ μœΌλ‘œ 슀트리밍 μ²˜λ¦¬ν•©λ‹ˆλ‹€ [14]. * **[[React Server Components (RSC)|React Server Components (RSC]]:** ν΄λΌμ΄μ–ΈνŠΈ 츑으둜 μ „μ†‘λ˜λŠ” JavaScriptλ₯Ό μ™„μ „νžˆ μ—†μ• κ³  였직 μ„œλ²„μ—μ„œλ§Œ μ‹€ν–‰λ˜κ²Œ ν•¨μœΌλ‘œμ¨, ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈλ“€μ— λŒ€ν•΄μ„œλŠ” ν•˜μ΄λ“œλ ˆμ΄μ…˜ κ³Όμ • 자체λ₯Ό μƒλž΅ν•©λ‹ˆλ‹€ [15-23]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & Updates) No trade-offs available. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[Server-Side Rendering (SSR)|Server-Side Rendering (SSR]], React Server Components (RSC), Total Blocking Time (TBT), [[Concurrent Rendering|Concurrent Rendering]] - **Projects/Contexts:** [[Next.js App Router|Next.js App Router]], [[Island Architecture|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* --- - **Related Topics:** [[React Server Components (RSC)|React Server Components (RSC]], Client Components, CSS-in-JS, [[styled-components|styled-components]] - **Projects/Contexts:** [[Next.js App Router|Next.js App Router]], [[Server-Side Rendering (SSR)|Server-Side Rendering (SSR]] - **Contradictions/Notes:** μ†ŒμŠ€μ— κ΄€λ ¨ 정보가 λΆ€μ‘±ν•©λ‹ˆλ‹€. --- *Last updated: 2026-04-26* --- - **Related Topics:** [[Server-Side Rendering (SSR)|Server-Side Rendering (SSR]], Client-Side Rendering (CSR), React Server Components (RSC), [[Time to Interactive (TTI)|Time to Interactive (TTI]], Total Blocking Time (TBT - **Projects/Contexts:** [[Next.js|Next.js]], [[React 18|React 18]] - **Contradictions/Notes:** SSR은 초기 μ½˜ν…μΈ  λ Œλ”λ§(FCP)이 λΉ λ₯΄κ³  SEO에 μœ λ¦¬ν•˜λ‹€λŠ” 큰 μž₯점이 μžˆμ§€λ§Œ, ν•˜μ΄λ“œλ ˆμ΄μ…˜ 단계가 μ™„λ£Œλ˜κΈ° μ „κΉŒμ§€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μƒν˜Έμž‘μš©μ΄ μ§€μ—°λœλ‹€λŠ” λšœλ ·ν•œ ν•œκ³„(νŠΈλ ˆμ΄λ“œμ˜€ν”„)κ°€ μžˆμŠ΅λ‹ˆλ‹€ [4, 24, 25]. 이 문제λ₯Ό 근본적으둜 ν•΄κ²°ν•˜κΈ° μœ„ν•΄ [[React 18|React 18]]은 λ™μ‹œμ„± λ Œλ”λ§μ„ ν†΅ν•œ ν•˜μ΄λ“œλ ˆμ΄μ…˜ 청크 λΆ„ν•  및 μ‚¬μš©μžκ°€ μƒν˜Έμž‘μš©ν•˜λŠ” 뢀뢄을 μš°μ„ μˆœμœ„λ‘œ λ‘λŠ” 선택적 ν•˜μ΄λ“œλ ˆμ΄μ…˜μ„ λ„μž…ν•˜μ˜€κ³  [26], [[React Server Components|React Server Components]]λŠ” ν•˜μ΄λ“œλ ˆμ΄μ…˜ 단계λ₯Ό μ™„μ „νžˆ μ œκ±°ν•˜λŠ” ꡬ쑰λ₯Ό μ œμ‹œν•©λ‹ˆλ‹€ [21, 23]. --- *Last updated: 2026-04-25* ## πŸ€– LLM ν™œμš© 힌트 (How to Use This Knowledge) **μ–Έμ œ 이 지식을 μ“°λŠ”κ°€:** - *(TODO)* **μ–Έμ œ μ“°λ©΄ μ•ˆ λ˜λŠ”κ°€:** - *(TODO)* ## πŸ§ͺ 검증 μƒνƒœ (Validation) - **정보 μƒνƒœ:** needs_review - **좜처 신뒰도:** A - **κ²€ν†  이유:** *(P-Reinforce Phase 1 μžλ™ μ •κ·œν™”. λ³Έλ¬Έ 검증 ν•„μš”.)* ## 🧬 쀑볡 검사 (Duplicate Check) - **κΈ°μ‘΄ μœ μ‚¬ λ¬Έμ„œ:** *(TODO: μΈλ±μ„œ ν΄λŸ¬μŠ€ν„° 리포트 μ°Έμ‘°)* - **처리 방식:** UPDATE (μžλ™ μ •κ·œν™”) - **처리 이유:** Phase 1 μ •κ·œν™” β€” μ˜› ν…œν”Œλ¦Ώ/λˆ„λ½ ν•„λ“œ 보강. ## πŸ•“ λ³€κ²½ 이λ ₯ (Changelog) | λ‚ μ§œ | λ³€κ²½ λ‚΄μš© | 처리 방식 | 신뒰도 | |------|-----------|-----------|--------| | 2026-05-08 | P-Reinforce Phase 1 μ •κ·œν™” (frontmatter + 헀더 ν‘œμ€€ν™”) | UPDATE | A | ## πŸ’» μ½”λ“œ νŒ¨ν„΄ (Code Patterns) **νŒ¨ν„΄ 1:** *(TODO: 이 ν”„λ‘œμ νŠΈ μ»¨λ²€μ…˜ λ°˜μ˜ν•œ ꡬ쑰 μŠ€μΌˆλ ˆν†€)* ```text # TODO ``` ## πŸ€” μ˜μ‚¬κ²°μ • κΈ°μ€€ (Decision Criteria) **선택 Aλ₯Ό 써야 ν•  λ•Œ:** - *(TODO)* **선택 Bλ₯Ό 써야 ν•  λ•Œ:** - *(TODO)* **κΈ°λ³Έκ°’:** > *(TODO)* ## ❌ μ•ˆν‹°νŒ¨ν„΄ (Anti-Patterns) - **[μ•ˆν‹°νŒ¨ν„΄]:** *(TODO: 무엇을 ν•˜λ©΄ μ•ˆ λ˜λŠ”κ°€ + 이유 + λŒ€μ‹  무엇을)*