# [[Server Side Rendering (SSR)]] ## πŸ“Œ Brief Summary μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§(SSR)은 ν΄λΌμ΄μ–ΈνŠΈ(λΈŒλΌμš°μ €)μ—μ„œ μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό λ‹€μš΄λ‘œλ“œν•˜μ—¬ 빈 화면을 μ±„μš°λŠ” λŒ€μ‹ , μ„œλ²„ ν™˜κ²½μ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 초기 λ Œλ”λ§μ„ μˆ˜ν–‰ν•˜μ—¬ μ™„μ„±λœ HTML을 μƒμ„±ν•˜κ³  μ „μ†‘ν•˜λŠ” λ Œλ”λ§ μ „λž΅μž…λ‹ˆλ‹€ [1-3]. μ΄λŠ” μ‚¬μš©μžκ°€ μžλ°”μŠ€ν¬λ¦½νŠΈ λ²ˆλ“€μ΄ λ‘œλ“œλ  λ•ŒκΉŒμ§€ 빈 화면을 κΈ°λ‹€λ €μ•Ό ν•˜λŠ” μ„±λŠ₯ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ„μž…λ˜μ—ˆμŠ΅λ‹ˆλ‹€ [1, 4]. ν΄λΌμ΄μ–ΈνŠΈλŠ” 이 HTML을 전달받은 ν›„, 이벀트 ν•Έλ“€λŸ¬λ₯Ό μ—°κ²°ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μƒν˜Έμž‘μš© κ°€λŠ₯ν•˜κ²Œ λ§Œλ“œλŠ” 'ν•˜μ΄λ“œλ ˆμ΄μ…˜(Hydration)' 과정을 κ±°μΉ©λ‹ˆλ‹€ [5, 6]. ## πŸ“– Core Content * **SSR의 λ™μž‘ 방식 및 λ“±μž₯ λ°°κ²½:** κΈ°μ‘΄ ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ λ Œλ”λ§(CSR) 방식은 μ‚¬μš©μžμ˜ 기기에 λŒ€μš©λŸ‰μ˜ μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ λ‹€μš΄λ‘œλ“œλ˜κ³  싀행될 λ•ŒκΉŒμ§€ 빈 ν•˜μ–€ ν™”λ©΄λ§Œ λ…ΈμΆœλ˜λŠ” μ„±λŠ₯ 병λͺ© ν˜„μƒμ΄ μžˆμ—ˆμŠ΅λ‹ˆλ‹€ [1, 7]. 이λ₯Ό κ°œμ„ ν•˜κΈ° μœ„ν•΄ Next.js, Remix, Vue λ“±μ˜ 메타 ν”„λ ˆμž„μ›Œν¬λŠ” μ„œλ²„μ—μ„œ 초기 HTML을 미리 λ Œλ”λ§(Pre-render)ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈμ— μ œκ³΅ν•˜λŠ” SSR μ•„ν‚€ν…μ²˜λ₯Ό λ„μž…ν–ˆμŠ΅λ‹ˆλ‹€ [1, 2, 8]. * **ν•˜μ΄λ“œλ ˆμ΄μ…˜(Hydration) λ©”μ»€λ‹ˆμ¦˜:** μ„œλ²„κ°€ λ Œλ”λ§ν•œ HTML은 화면에 μ¦‰μ‹œ μ½˜ν…μΈ λ₯Ό λ³΄μ—¬μ£Όμ§€λ§Œ, μ΄ˆκΈ°μ—λŠ” μƒν˜Έμž‘μš©μ΄ λΆˆκ°€λŠ₯ν•œ μƒνƒœμž…λ‹ˆλ‹€ [9]. λΈŒλΌμš°μ €κ°€ μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό λ‹€μš΄λ‘œλ“œν•œ ν›„ Reactλ‚˜ Vue 같은 ν”„λ ˆμž„μ›Œν¬κ°€ κΈ°μ‘΄ DOM 트리λ₯Ό μˆœνšŒν•˜λ©° 이벀트 ν•Έλ“€λŸ¬λ₯Ό λΆ€μ°©ν•˜κ³  μƒν˜Έμž‘μš©μ„ ν™œμ„±ν™”ν•˜λŠ”λ°, 이 과정을 마λ₯Έ HTML에 생λͺ…λ ₯을 λΆˆμ–΄λ„£λŠ”λ‹€λŠ” μ˜λ―Έμ—μ„œ 'ν•˜μ΄λ“œλ ˆμ΄μ…˜'이라고 λΆ€λ¦…λ‹ˆλ‹€ [5, 6, 10]. * **React Server Components (RSC)μ™€μ˜ μ‹œλ„ˆμ§€:** SSR은 RSC(React Server Components)λ₯Ό λŒ€μ²΄ν•˜λŠ” 것이 μ•„λ‹ˆλΌ μ™„λ²½ν•˜κ²Œ μƒν˜Έ λ³΄μ™„ν•˜λŠ” λ Œλ”λ§ κΈ°μˆ μž…λ‹ˆλ‹€ [11, 12]. SSR은 초기 HTML을 μƒμ„±ν•˜λŠ” 데 μ‚¬μš©λ˜λ©°, RSCλŠ” μ»΄ν¬λ„ŒνŠΈλ₯Ό ν΄λΌμ΄μ–ΈνŠΈ μžλ°”μŠ€ν¬λ¦½νŠΈ λ²ˆλ“€μ— ν¬ν•¨μ‹œν‚€μ§€ μ•Šκ³  μ„œλ²„μ—μ„œλ§Œ μ‹€ν–‰ν•œ λ’€ 'RSC νŽ˜μ΄λ‘œλ“œ'둜 μ§λ ¬ν™”ν•©λ‹ˆλ‹€ [3, 11, 13]. 두 κΈ°μˆ μ„ κ²°ν•©ν•˜λ©΄ ν•˜μ΄λ“œλ ˆμ΄μ…˜ 단계가 μƒλž΅λ˜λŠ” μ„œλ²„ μ»΄ν¬λ„ŒνŠΈμ˜ 이점과 초기 ν™”λ©΄ λ‘œλ”© 속도λ₯Ό λ†’μ΄λŠ” SSR의 이점을 λ™μ‹œμ— λˆ„λ¦΄ 수 μžˆμŠ΅λ‹ˆλ‹€ [12, 14]. * **Vue 3.5의 μ΅œμ ν™” νŒ¨ν„΄:** λŒ€κ·œλͺ¨ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ§€μ›ν•˜κΈ° μœ„ν•΄ Vue 3.5λŠ” 뷰포트(Viewport) 내에 μ»΄ν¬λ„ŒνŠΈκ°€ 보일 λ•Œλ§Œ ν•˜μ΄λ“œλ ˆμ΄μ…˜μ„ ν™œμ„±ν™”ν•˜λŠ” 'μ§€μ—° ν•˜μ΄λ“œλ ˆμ΄μ…˜(Lazy Hydration)' κΈ°λŠ₯을 λ„μž…ν•˜μ—¬ 초기 λ‘œλ“œ μ‹œκ°„μ„ 획기적으둜 μ€„μ˜€μŠ΅λ‹ˆλ‹€ [15, 16]. λ˜ν•œ `useId()` APIλ₯Ό λ„μž…ν•΄ μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ λ Œλ”λ§ 간에 μΌκ΄€λœ 고유 IDλ₯Ό 보μž₯ν•¨μœΌλ‘œμ¨ ν•˜μ΄λ“œλ ˆμ΄μ…˜ 뢈일치(Mismatch) ν˜„μƒμ„ λ°©μ§€ν•©λ‹ˆλ‹€ [15, 17]. ## βš–οΈ Trade-offs & Caveats * **ν•˜μ΄λ“œλ ˆμ΄μ…˜ κ°­(Hydration Gap)κ³Ό 'Two-Trip' ν•œκ³„:** SSR은 초기 화면은 λΉ λ₯΄κ²Œ λ³΄μ—¬μ£Όμ§€λ§Œ, μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ λ‘œλ“œλ˜μ–΄ ν•˜μ΄λ“œλ ˆμ΄μ…˜μ΄ 끝날 λ•ŒκΉŒμ§€ μ‚¬μš©μžκ°€ λ²„νŠΌμ„ λˆŒλŸ¬λ„ λ°˜μ‘ν•˜μ§€ μ•ŠλŠ” 'ν•˜μ΄λ“œλ ˆμ΄μ…˜ κ°­'이 λ°œμƒν•©λ‹ˆλ‹€ [9, 10]. λ˜ν•œ μ„œλ²„μ—μ„œ λ Œλ”λ§μ„ λ§ˆμ³€μŒμ—λ„ λΆˆκ΅¬ν•˜κ³ , ν΄λΌμ΄μ–ΈνŠΈκ°€ λ‹€μ‹œ μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό λ‹€μš΄λ‘œλ“œν•˜κ³  μ‹€ν–‰ν•΄μ•Ό ν•˜λŠ” 쀑볡 μž‘μ—…(Two-Trip)이 μ—¬μ „νžˆ λ‚¨λŠ”λ‹€λŠ” ν•œκ³„κ°€ μžˆμŠ΅λ‹ˆλ‹€ [4]. * **트리 λΈ”λ‘œν‚Ή(Tree Blocking):** ν•˜μ΄λ“œλ ˆμ΄μ…˜μ€ DOM 트리λ₯Ό 순차적으둜 μ²˜λ¦¬ν•˜λ―€λ‘œ, 트리 상단에 무겁고 느린 μ»΄ν¬λ„ŒνŠΈκ°€ μ‘΄μž¬ν•  경우 트리 ν•˜λ‹¨μ˜ μƒν˜Έμž‘μš©κΉŒμ§€ μ§€μ—°λ˜λŠ” λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€ [10]. μ΄λŠ” React 18의 μ‚¬μš©μž μƒν˜Έμž‘μš©μ„ λ¨Όμ € μ²˜λ¦¬ν•˜λŠ” 선택적 ν•˜μ΄λ“œλ ˆμ΄μ…˜(Selective Hydration) λ©”μ»€λ‹ˆμ¦˜μ„ 톡해 μ™„ν™”ν•΄μ•Ό ν•©λ‹ˆλ‹€ [18]. * **μ„œλ²„ ν™˜κ²½μ—μ„œμ˜ μƒνƒœ μ˜€μ—Ό(State Pollution):** Vue λ“±μ—μ„œ μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§μ„ κ΅¬ν˜„ν•  λ•Œ, μ „μ—­ μŠ€ν† μ–΄λ₯Ό 싱글톀(Singleton)으둜 μ‚¬μš©ν•˜λ©΄ μ—¬λŸ¬ μš”μ²­ 간에 μƒνƒœκ°€ κ³΅μœ λ˜μ–΄ 데이터 유좜 λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€ [19, 20]. λ”°λΌμ„œ μš”μ²­λ§ˆλ‹€ λ³„λ„μ˜ μŠ€ν† μ–΄(예: Pinia) μΈμŠ€ν„΄μŠ€κ°€ μƒμ„±λ˜λ„λ‘ μ—„κ²©ν•˜κ²Œ μ•„ν‚€ν…μ²˜λ₯Ό 섀계해야 ν•©λ‹ˆλ‹€ [20]. * **μž…λ ₯ μœ νš¨μ„± 검사 λˆ„λ½μ— λ”°λ₯Έ λ³΄μ•ˆ 취약점:** SSR ν™˜κ²½μ—μ„œ μ„œλ²„ μ•‘μ…˜μ„ λ‚΄λΆ€ 둜컬 ν•¨μˆ˜μ²˜λŸΌ μƒκ°ν•˜μ—¬ μž…λ ₯κ°’ 검증을 μƒλž΅ν•  경우, λˆ„κ΅¬λ‚˜ μš”μ²­μ„ 보낼 수 μžˆλŠ” 곡용 HTTP μ—”λ“œν¬μΈνŠΈμ˜ νŠΉμ„±μƒ 원격 μ½”λ“œ μ‹€ν–‰(RCE) λ“±μ˜ 치λͺ…적인 취약점(예: React2Shell)에 λ…ΈμΆœλ  수 μžˆμŠ΅λ‹ˆλ‹€ [21, 22]. ## πŸ”— Knowledge Connections ### Related Concepts #### [λ Œλ”λ§ μ „λž΅ 및 λ©”μ»€λ‹ˆμ¦˜] - [[Hydration]] - μ—°κ²° 이유: SSR을 톡해 μ„œλ²„μ—μ„œ μƒμ„±λœ 정적 HTML을 ν΄λΌμ΄μ–ΈνŠΈ μΈ‘μ—μ„œ μƒν˜Έμž‘μš© κ°€λŠ₯ν•œ 동적 μƒνƒœλ‘œ λ§Œλ“œλŠ” ν•„μˆ˜μ μΈ μ—°κ²° 고리이기 λ•Œλ¬Έμž…λ‹ˆλ‹€ [5, 6]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: 초기 νŽ˜μ΄μ§€ λ‘œλ”© μ‹œ 화면은 λ³΄μ΄μ§€λ§Œ μƒν˜Έμž‘μš©μ΄ λΆˆκ°€λŠ₯ν•œ ν˜„μƒμΈ 'ν•˜μ΄λ“œλ ˆμ΄μ…˜ κ°­(Hydration Gap)'의 λ°œμƒ 원리와, 이λ₯Ό μ΅œμ ν™”ν•˜κΈ° μœ„ν•œ ν”„λ ˆμž„μ›Œν¬μ˜ λ‚΄λΆ€ λ©”μ»€λ‹ˆμ¦˜μ„ 이해할 수 μžˆμŠ΅λ‹ˆλ‹€ [9, 10]. - [[React Server Components]] - μ—°κ²° 이유: SSR의 Two-Trip 문제λ₯Ό ν•΄κ²°ν•˜κ³  ν•˜μ΄λ“œλ ˆμ΄μ…˜μ„ μƒλž΅ν•˜κΈ° μœ„ν•΄, ν΄λΌμ΄μ–ΈνŠΈ μžλ°”μŠ€ν¬λ¦½νŠΈ λ²ˆλ“€μ— ν¬ν•¨λ˜μ§€ μ•Šκ³  μ„œλ²„μ—μ„œλ§Œ λ Œλ”λ§λ˜λ„λ‘ μ„€κ³„λœ React의 μ΅œμ‹  μ•„ν‚€ν…μ²˜ νŒ¨ν„΄μ΄κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€ [11, 13, 14]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: SSR이 초기 HTML을 λ Œλ”λ§ν•˜λŠ” 방식과 RSCκ°€ νŽ˜μ΄λ‘œλ“œλ₯Ό μŠ€νŠΈλ¦¬λ°ν•˜λŠ” 방식이 μ–΄λ–»κ²Œ κ²°ν•©λ˜μ–΄ ν΄λΌμ΄μ–ΈνŠΈ μ„±λŠ₯을 μ΅œμ ν™”ν•˜λŠ”μ§€ λͺ…ν™•νžˆ κ΅¬λΆ„ν•˜κ³  μ‘μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [11, 12]. #### [μƒνƒœ 관리 및 μ΅œμ ν™” 도ꡬ] - [[Pinia]] - μ—°κ²° 이유: Vue 기반의 λŒ€κ·œλͺ¨ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ SSR 적용 μ‹œ, μƒνƒœ μ˜€μ—Ό(State Pollution)κ³Ό λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•œ 핡심 μƒνƒœ 관리 라이브러리이기 λ•Œλ¬Έμž…λ‹ˆλ‹€ [19, 20]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: SSR μ„œλ²„ ν™˜κ²½μ—μ„œ μ—¬λŸ¬ μ‚¬μš©μžμ˜ μš”μ²­μ„ μ²˜λ¦¬ν•  λ•Œ 독립적인 μŠ€ν† μ–΄ μΈμŠ€ν„΄μŠ€λ₯Ό μœ μ§€ν•΄μ•Ό ν•˜λŠ” μ„œλ²„ μΈ‘ λ Œλ”λ§μ˜ μ œμ•½ 사항과 μƒνƒœ 관리 νŒ¨ν„΄μ„ νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [20]. - [[Lazy Hydration]] - μ—°κ²° 이유: Vue 3.5 λ“± μ΅œμ‹  ν”„λ ˆμž„μ›Œν¬μ—μ„œ SSR의 초기 ν•˜μ΄λ“œλ ˆμ΄μ…˜ λΉ„μš©μ„ 쀄이기 μœ„ν•΄, μ»΄ν¬λ„ŒνŠΈκ°€ 뷰포트(Viewport)에 λ…ΈμΆœλ  λ•ŒκΉŒμ§€ ν•˜μ΄λ“œλ ˆμ΄μ…˜μ„ μ§€μ—°μ‹œν‚€λŠ” 핡심 μ΅œμ ν™” νŒ¨ν„΄μž…λ‹ˆλ‹€ [15]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: 동기적이고 순차적인 κΈ°μ‘΄ ν•˜μ΄λ“œλ ˆμ΄μ…˜μ˜ 병λͺ©μ„ κ·Ήλ³΅ν•˜κ³ , λŒ€κ·œλͺ¨ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 초기 λ Œλ”λ§ 퍼포먼슀λ₯Ό κ·ΉλŒ€ν™”ν•˜λŠ” μ‹€μ „ ν…Œν¬λ‹‰μ„ 이해할 수 μžˆμŠ΅λ‹ˆλ‹€ [15]. ### Deeper Research Questions - 단일 νŽ˜μ΄μ§€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜(SPA)의 CSR 방식과 SSR 방식을 κ²°ν•©ν•  λ•Œ, λΈŒλΌμš°μ €μ˜ TTI(Time to Interactive)와 FCP(First Contentful Paint)λŠ” 각각 μ–΄λ–»κ²Œ λ³€ν™”ν•˜λ©° 졜적의 νŠΈλ ˆμ΄λ“œμ˜€ν”„ 지점은 어디인가? - Vue의 μ§€μ—° ν•˜μ΄λ“œλ ˆμ΄μ…˜(Lazy Hydration)κ³Ό React 18의 선택적 ν•˜μ΄λ“œλ ˆμ΄μ…˜(Selective Hydration)은 λ‚΄λΆ€μ μœΌλ‘œ DOM을 νŒŒμ‹±ν•˜κ³  μš°μ„ μˆœμœ„λ₯Ό λΆ€μ—¬ν•˜λŠ” λ©”μ»€λ‹ˆμ¦˜μ— μžˆμ–΄μ„œ μ–΄λ–€ 차이가 μžˆλŠ”κ°€? - SSR ν™˜κ²½μ—μ„œ μ‚¬μš©μž μ„Έμ…˜ μ •λ³΄λ‚˜ μ „μ—­ μƒνƒœλ₯Ό λ‹€λ£° λ•Œ, μš”μ²­ κ°„ μƒνƒœ μ˜€μ—Ό(State Pollution)을 μ™„λ²½ν•˜κ²Œ κ²©λ¦¬ν•˜κΈ° μœ„ν•œ ν”„λ ˆμž„μ›Œν¬λ³„(예: Next.js vs Pinia) λ©”λͺ¨λ¦¬ 관리 νŒ¨ν„΄μ€ 무엇인가? - React Server Components와 SSR을 λ™μ‹œμ— μ μš©ν•˜λŠ” μ•„ν‚€ν…μ²˜μ—μ„œ, μ—λŸ¬ λ°”μš΄λ”λ¦¬(Error Boundaries)와 Suspenseλ₯Ό ν™œμš©ν•œ 슀트리밍 SSR의 μ‹€νŒ¨ 볡ꡬ(Fallback) λ©”μ»€λ‹ˆμ¦˜μ€ μ–΄λ–»κ²Œ μž‘λ™ν•˜λŠ”κ°€? - ν”„λ‘ νŠΈμ—”λ“œ μ„œλ²„κ°€ HTML을 미리 λ Œλ”λ§ν•˜λŠ” SSG(Static Site Generation) 방식과 μš”μ²­ μ‹œμ μ— λ Œλ”λ§ν•˜λŠ” μ˜¨λ””λ§¨λ“œ SSR 방식은 ν΄λΌμš°λ“œ ν™˜κ²½μ˜ μ½œλ“œ μŠ€νƒ€νŠΈ 및 캐싱 μ „λž΅μ— μ–΄λ–€ 영ν–₯을 λ―ΈμΉ˜λŠ”κ°€? ### Practical Application Contexts - **Implementation:** Next.jsλ‚˜ Vue(Nuxt) ν”„λ ˆμž„μ›Œν¬λ₯Ό ν™œμš©ν•˜μ—¬ 초기 λ‘œλ”©μ΄ μ€‘μš”ν•œ μ „μžμƒκ±°λž˜ μ‚¬μ΄νŠΈ, λ―Έλ””μ–΄ ν”Œλž«νΌ λ“±μ˜ 화면을 μ„œλ²„μ—μ„œ 미리 λ Œλ”λ§ν•˜μ—¬ μ œκ³΅ν•©λ‹ˆλ‹€. Vue 3.5 기반 ν”„λ‘œμ νŠΈμ—μ„œλŠ” `useId()`λ₯Ό μ‚¬μš©ν•΄ SSRκ³Ό ν΄λΌμ΄μ–ΈνŠΈ κ°„μ˜ ν•˜μ΄λ“œλ ˆμ΄μ…˜ ID 뢈일치λ₯Ό ν•΄κ²°ν•©λ‹ˆλ‹€ [15, 23]. - **System Design:** λ°±μ—”λ“œ λ°μ΄ν„°λ² μ΄μŠ€μ™€ ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄μ˜ λ Œλ”λ§ λΆ€ν•˜λ₯Ό μ‘°μœ¨ν•˜κΈ° μœ„ν•΄, 초기 UI μ…Έ(Shell)κ³Ό ν•„μˆ˜ 데이터λ₯Ό Node.js 같은 ν”„λ‘ νŠΈμ—”λ“œ μ„œλ²„μ—μ„œ κ²°ν•©ν•˜μ—¬ λ°˜ν™˜ν•˜λ„λ‘ μ„€κ³„ν•©λ‹ˆλ‹€ [2, 24]. - **Operation / Maintenance:** ν”„λ‘œλ•μ…˜ μ„œλ²„ 운영 μ‹œ SSR λŸ°νƒ€μž„μ˜ λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ‚˜ 응닡 μ§€μ—°(Latency)을 μ§€μ†μ μœΌλ‘œ λͺ¨λ‹ˆν„°λ§ν•΄μ•Ό ν•˜λ©°, μŠ€ν† μ–΄ μƒνƒœκ°€ μ‚¬μš©μž μš”μ²­ 간에 μ•ˆμ „ν•˜κ²Œ κ²©λ¦¬λ˜λ„λ‘ μ§€μ†μ μœΌλ‘œ ꡬ쑰λ₯Ό 관리해야 ν•©λ‹ˆλ‹€ [19, 20]. - **Learning Path:** μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ λ¬΄κ±°μ›Œμ§€λ©΄μ„œ λ°œμƒν•œ CSR의 ν•œκ³„λ₯Ό λ¨Όμ € μ΄ν•΄ν•œ λ’€, SSR의 λ„μž… λ°°κ²½ -> ν•˜μ΄λ“œλ ˆμ΄μ…˜ λ©”μ»€λ‹ˆμ¦˜ -> ν•˜μ΄λ“œλ ˆμ΄μ…˜ μ΅œμ ν™” 기술(선택적/μ§€μ—°) -> μ„œλ²„ μ»΄ν¬λ„ŒνŠΈ(RSC)둜 μ΄μ–΄μ§€λŠ” λ Œλ”λ§ νŒ¨λŸ¬λ‹€μž„μ˜ μ§„ν™” 과정을 ν•™μŠ΅ν•©λ‹ˆλ‹€ [5, 7, 8, 13]. - **My Project Relevance:** SEOκ°€ 맀우 μ€‘μš”ν•˜κ³  첫 ν™”λ©΄ νŽ˜μΈνŒ… 속도(FCP)κ°€ λΉ„μ¦ˆλ‹ˆμŠ€ μ „ν™˜μœ¨μ— μ§κ²°λ˜λŠ” ν”„λ‘œμ νŠΈλ‚˜, λŒ€κ·œλͺ¨ μžλ°”μŠ€ν¬λ¦½νŠΈ λ²ˆλ“€ μ‚¬μ΄μ¦ˆλ₯Ό μ€„μ΄λ©΄μ„œλ„ λ³΅μž‘ν•œ μΈν„°λž™ν‹°λΈŒ UIλ₯Ό λ Œλ”λ§ν•΄μ•Ό ν•˜λŠ” μ‹œμŠ€ν…œμ— μ΅œμš°μ„ μœΌλ‘œ λ„μž…μ„ κ²€ν† ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [1, 23, 25]. ### Adjacent Topics - [[Static Site Generation (SSG)]] - ν™•μž₯ λ°©ν–₯: SSR이 ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ΄ λ°œμƒν•œ μ‹œμ (On-demand)에 μ„œλ²„μ—μ„œ HTML을 λ Œλ”λ§ν•˜λŠ” 방식이라면, SSGλŠ” λΉŒλ“œ μ‹œμ (Compile-time)에 HTML을 사전 λ Œλ”λ§ν•˜μ—¬ 정적 파일둜 μ„œλΉ™ν•˜λŠ” μ „λž΅μž…λ‹ˆλ‹€. 두 λ°©μ‹μ˜ μž₯단점과 λ Œλ”λ§ μ‹œμ μ„ λΉ„κ΅ν•˜μ—¬ μ›Ή μ„±λŠ₯ μ΅œμ ν™”μ˜ 폭을 λ„“νž 수 μžˆμŠ΅λ‹ˆλ‹€ [24]. --- *Last updated: 2026-05-03*