# [[Hydration]] ## πŸ“Œ Brief Summary Hydration은 μ„œλ²„μ—μ„œ μƒμ„±λœ 정적 HTML을 ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ JavaScriptλ₯Ό 톡해 μ™„μ „νžˆ μƒν˜Έμž‘μš© κ°€λŠ₯ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μœΌλ‘œ λ³€ν™˜ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€ [1]. λΈŒλΌμš°μ €κ°€ μ„œλ²„λ‘œλΆ€ν„° 미리 λ Œλ”λ§λœ HTML을 λ°›μ•„ 화면에 ν‘œμ‹œν•œ ν›„, λ‹€μš΄λ‘œλ“œν•œ JavaScript λ²ˆλ“€μ„ μ‹€ν–‰ν•˜μ—¬ 이벀트 λ¦¬μŠ€λ„ˆλ₯Ό μ—°κ²°ν•˜κ³  μƒνƒœ(state)λ₯Ό λ™κΈ°ν™”ν•©λ‹ˆλ‹€ [2, 3]. 이 과정을 κ±°μ³μ•Όλ§Œ μ‚¬μš©μžκ°€ 정적인 λΌˆλŒ€(Skeleton) 화면을 λ„˜μ–΄ λ²„νŠΌ ν΄λ¦­μ΄λ‚˜ 폼 μž…λ ₯ λ“±μ˜ 동적 μƒν˜Έμž‘μš©μ„ μˆ˜ν–‰ν•  수 있게 λ©λ‹ˆλ‹€ [1, 4]. ## πŸ“– Core Content * **Hydration의 μž‘λ™ 원리 및 μ—­ν• :** SSR(Server-Side Rendering) ν™˜κ²½μ—μ„œ μ„œλ²„λŠ” 데이터가 ν¬ν•¨λœ μ™„μ „ν•œ HTML을 λΈŒλΌμš°μ €λ‘œ μ „μ†‘ν•©λ‹ˆλ‹€ [2]. λΈŒλΌμš°μ €λŠ” 이λ₯Ό μ¦‰μ‹œ 화면에 λ Œλ”λ§ν•˜μ—¬ μ‚¬μš©μžμ—κ²Œ λ³΄μ—¬μ£Όμ§€λ§Œ(λΉ λ₯Έ μ½˜ν…μΈ  ν‘œμ‹œ), JavaScript λ²ˆλ“€μ΄ λ‹€μš΄λ‘œλ“œ, νŒŒμ‹± 및 Hydration 되기 μ „κΉŒμ§€λŠ” νŽ˜μ΄μ§€κ°€ μƒν˜Έμž‘μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ [2, 5]. 즉, Hydration은 μ„œλ²„κ°€ μ œκ³΅ν•œ κ±΄μ‘°ν•œ(Dehydrated) HTML μ»΄ν¬λ„ŒνŠΈμ— 생λͺ…을 λΆˆμ–΄λ„£μ–΄ λ°˜μ‘ν˜•μœΌλ‘œ λ§Œλ“œλŠ” ν•„μˆ˜ λ‹¨κ³„μž…λ‹ˆλ‹€ [1, 6]. * **μ„±λŠ₯에 λ―ΈμΉ˜λŠ” 뢀정적 영ν–₯:** 기본적으둜 ReactλŠ” 화면에 보이지 μ•ŠλŠ” μš”μ†ŒκΉŒμ§€ ν¬ν•¨ν•˜μ—¬ 전체 νŽ˜μ΄μ§€λ₯Ό ν•œ λ²ˆμ— Hydration ν•˜λ €κ³  μ‹œλ„ν•©λ‹ˆλ‹€ [7]. 이둜 인해 λΆˆν•„μš”ν•œ JavaScript 싀행이 λ°œμƒν•˜μ—¬ 메인 μŠ€λ ˆλ“œ(Main Thread)κ°€ μ°¨λ‹¨λ˜κ³ , 결과적으둜 TBT(Total Blocking Time), FID(First Input Delay), TTI(Time to Interactive)와 같은 핡심 μ„±λŠ₯ μ§€ν‘œκ°€ 악화될 수 μžˆμŠ΅λ‹ˆλ‹€ [7, 8]. μ‹œκ°μ  μš”μ†ŒλŠ” λ Œλ”λ§λ˜μ—ˆμœΌλ‚˜ 클릭해도 λ°˜μ‘ν•˜μ§€ μ•ŠλŠ” μ§€μ—° ν˜„μƒμ΄ λ°œμƒν•˜μ—¬ μ‚¬μš©μž κ²½ν—˜(UX)에 μ•…μ˜ν–₯을 λ―ΈμΉ˜κΈ°λ„ ν•©λ‹ˆλ‹€ [5, 7]. * **μ£Όμš” 문제 및 λ°œμƒ 원인:** * **Hydration μ—λŸ¬ (Mismatch):** μ„œλ²„μ—μ„œ λ Œλ”λ§λœ HTMLκ³Ό ν΄λΌμ΄μ–ΈνŠΈ λ Œλ”λ§ κ²°κ³Όκ°€ μΌμΉ˜ν•˜μ§€ μ•Šμ„ λ•Œ λ°œμƒν•©λ‹ˆλ‹€. 주둜 ν™˜κ²½ 쑰건에 λ”°λ₯Έ λ Œλ”λ§ 차이, μ‹œκ°„ 의쑴적 데이터 λ³€ν™”, μ„œλ“œνŒŒν‹° 라이브러리의 DOM μ‘°μž‘ 등이 μ›μΈμž…λ‹ˆλ‹€ [9]. * **λ²ˆλ“€ 크기 λΉ„λŒ€ν™”:** Hydration을 μœ„ν•΄μ„œλŠ” λͺ¨λ“  μ»΄ν¬λ„ŒνŠΈμ˜ JavaScript μ½”λ“œκ°€ ν•„μš”ν•˜λ―€λ‘œ, λ²ˆλ“€ 크기가 컀져 λ‹€μš΄λ‘œλ“œ 및 μ‹€ν–‰ μ˜€λ²„ν—€λ“œκ°€ μ¦κ°€ν•©λ‹ˆλ‹€ [10]. * **Hydration μ΅œμ ν™” μ „λž΅:** * **선택적 및 점진적 Hydration (Selective & Progressive Hydration):** `next/dynamic`κ³Ό 같은 동적 μž„ν¬νŠΈλ₯Ό μ‚¬μš©ν•˜μ—¬ μ€‘μš”ν•˜μ§€ μ•Šμ€ μ»΄ν¬λ„ŒνŠΈμ˜ Hydration을 μ§€μ—°μ‹œν‚€κ³  ν™”λ©΄ μœ„μͺ½(Above-the-fold) μ½˜ν…μΈ λ₯Ό μš°μ„  μ²˜λ¦¬ν•©λ‹ˆλ‹€ [10, 11]. React 18의 λ™μ‹œμ„± λ Œλ”λ§(Concurrent Rendering)은 μ‚¬μš©μžκ°€ μƒν˜Έμž‘μš©ν•˜λŠ” 뢀뢄을 μš°μ„ μ μœΌλ‘œ Hydration ν•  수 μžˆλ„λ‘ μ§€μ›ν•©λ‹ˆλ‹€ [12]. * **뷰포트 기반 μ§€μ—° (Lazy Hydration):** `IntersectionObserver` API 등을 ν™œμš©ν•˜μ—¬ μ»΄ν¬λ„ŒνŠΈκ°€ 화면에 보일 λ•Œλ§Œ Hydration을 μˆ˜ν–‰ν•¨μœΌλ‘œμ¨ 초기 TBTλ₯Ό λŒ€ν­ μ€„μž…λ‹ˆλ‹€ [11]. * **React Server Components (RSC) λ„μž…:** μ„œλ²„ μ»΄ν¬λ„ŒνŠΈλŠ” 였직 μ„œλ²„μ—μ„œλ§Œ μ‹€ν–‰λ˜λ©° ν΄λΌμ΄μ–ΈνŠΈλ‘œ JavaScriptλ₯Ό μ „μ†‘ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ μƒν˜Έμž‘μš©μ΄ ν•„μš” μ—†λŠ” 정적 UI의 경우 Hydration κ³Όμ • μžμ²΄κ°€ ν•„μš” μ—†μ–΄ λ²ˆλ“€ 크기 및 μ‹€ν–‰ μ˜€λ²„ν—€λ“œλ₯Ό 근본적으둜 μ œκ±°ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [13, 14]. ## πŸ”— Knowledge Connections - **Related Topics:** [[Server-Side Rendering (SSR)]], [[React Server Components (RSC)]], [[Time to Interactive (TTI)]], [[Total Blocking Time (TBT)]] - **Projects/Contexts:** [[Next.js λ Œλ”λ§ μ΅œμ ν™”]], [[React 18 λ™μ‹œμ„± λ Œλ”λ§ (Concurrent Rendering)]] - **Contradictions/Notes:** SSR은 초기 μ½˜ν…μΈ λ₯Ό μ¦‰μ‹œ λ Œλ”λ§ν•˜μ—¬ SEO와 FCP(First Contentful Paint)λ₯Ό ν–₯μƒμ‹œν‚€λŠ” μž₯점이 μžˆμ§€λ§Œ, Hydration μ™„λ£Œ μ „κΉŒμ§€ νŽ˜μ΄μ§€ μ‘°μž‘μ΄ λΆˆκ°€λŠ₯ν•˜μ—¬ TTIκ°€ μ§€μ—°λœλ‹€λŠ” λšœλ ·ν•œ νŠΈλ ˆμ΄λ“œμ˜€ν”„κ°€ μ‘΄μž¬ν•©λ‹ˆλ‹€ [5, 15, 16]. κ·ΈλŸ¬λ‚˜ React Server Components(RSC)λ‚˜ 선택적 Hydration 기법을 ν™œμš©ν•˜λ©΄ μΈν„°λž™ν‹°λΈŒν•œ λΆ€λΆ„μ—λ§Œ ν΄λΌμ΄μ–ΈνŠΈ μ½”λ“œλ₯Ό μ μš©ν•  수 μžˆμ–΄ μ΄λŸ¬ν•œ SSR의 ν•œκ³„λ₯Ό 상쇄할 수 μžˆμŠ΅λ‹ˆλ‹€ [12, 17]. --- *Last updated: 2026-04-25*