# [[Client-Side Rendering (CSR) vs Server-Side Rendering (SSR)]] ## πŸ“Œ Brief Summary Client-Side Rendering (CSR)은 λΈŒλΌμš°μ €κ°€ μ΅œμ†Œν•œμ˜ HTML λΌˆλŒ€μ™€ JavaScript λ²ˆλ“€μ„ λ‹€μš΄λ‘œλ“œν•œ λ’€ ν΄λΌμ΄μ–ΈνŠΈ μΈ‘μ—μ„œ λ™μ μœΌλ‘œ UIλ₯Ό κ΅¬μ„±ν•˜λŠ” λ Œλ”λ§ λ°©μ‹μž…λ‹ˆλ‹€ [1]. 반면 Server-Side Rendering (SSR)은 μ‚¬μš©μžμ˜ μš”μ²­ μ‹œλ§ˆλ‹€ μ„œλ²„κ°€ 전체 HTML νŽ˜μ΄μ§€λ₯Ό λ Œλ”λ§ν•˜μ—¬ λΈŒλΌμš°μ €λ‘œ μ¦‰μ‹œ μ „μ†‘ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€ [2]. 이 두 κ°€μ§€ 접근법은 μ›Ήμ‚¬μ΄νŠΈμ˜ 초기 λ‘œλ“œ 속도, 검색 μ—”μ§„ μ΅œμ ν™”(SEO), μƒν˜Έμž‘μš©μ„± 및 μ„œλ²„ μ•„ν‚€ν…μ²˜μ— μ€‘λŒ€ν•œ 영ν–₯을 미치며, ν”„λ‘œμ νŠΈμ˜ λͺ©μ κ³Ό μš”κ΅¬μ‚¬ν•­μ— 따라 μ μ ˆν•œ λ Œλ”λ§ μ „λž΅μ„ μ„ νƒν•˜λŠ” 것이 ν•„μˆ˜μ μž…λ‹ˆλ‹€ [3]. ## πŸ“– Core Content * **λ™μž‘ 원리와 μ£Όμš” νŠΉμ§•** * **CSR**: μ„œλ²„λŠ” 빈 HTML(예: `
`)을 λ°˜ν™˜ν•˜κ³ , μ‹€μ œ μ½˜ν…μΈ λŠ” λΈŒλΌμš°μ €κ°€ JavaScriptλ₯Ό λ‹€μš΄λ‘œλ“œν•˜κ³  μ‹€ν–‰ν•œ 후에 λ Œλ”λ§λ©λ‹ˆλ‹€ [1, 4]. 이 방식은 SPA(Single Page Application)λ‚˜ λŒ€μ‹œλ³΄λ“œμ— μ ν•©ν•˜λ©°, νŽ˜μ΄μ§€ 전체λ₯Ό μƒˆλ‘œκ³ μΉ¨ν•˜μ§€ μ•Šκ³ λ„ λΉ λ₯΄κ³  λ§€λ„λŸ¬μš΄ ν™”λ©΄ μ „ν™˜μ„ μ œκ³΅ν•©λ‹ˆλ‹€ [1, 5]. ν•˜μ§€λ§Œ JavaScriptκ°€ λ‘œλ“œλ˜λŠ” λ™μ•ˆ μ‚¬μš©μžμ—κ²Œ 빈 ν™”λ©΄μ΄λ‚˜ λ‘œλ”© 화면이 λ…ΈμΆœλ˜μ–΄ 초기 체감 속도가 느릴 수 μžˆμŠ΅λ‹ˆλ‹€ [5]. * **SSR**: μš”μ²­μ΄ λ“€μ–΄μ˜¬ λ•Œλ§ˆλ‹€ μ„œλ²„κ°€ μ¦‰μ‹œ μ½˜ν…μΈ κ°€ ν¬ν•¨λœ μ™„μ„±λœ HTML을 생성해 λ°˜ν™˜ν•©λ‹ˆλ‹€ [2]. 초기 λ‘œλ“œ μ‹œκ°„μ΄ λΉ λ₯΄κ³  μ‚¬μš©μžμ—κ²Œ μ¦‰κ°μ μœΌλ‘œ μœ μ˜λ―Έν•œ μ‹œκ°μ  μ½˜ν…μΈ λ₯Ό μ œκ³΅ν•  수 μžˆμ–΄ λ§ˆμΌ€νŒ… νŽ˜μ΄μ§€λ‚˜ λΈ”λ‘œκ·Έ, 이컀머슀 μ‚¬μ΄νŠΈ λ“± μ½˜ν…μΈ  μ€‘μ‹¬μ˜ μ›Ήμ‚¬μ΄νŠΈμ— μ΄μƒμ μž…λ‹ˆλ‹€ [2, 6]. λ‹€λ§Œ, μ„œλ²„μ˜ λΆ€ν•˜κ°€ μ¦κ°€ν•˜κ³  μ•„ν‚€ν…μ²˜μ˜ λ³΅μž‘μ„±μ΄ 컀질 수 μžˆμŠ΅λ‹ˆλ‹€ [7]. * **검색 μ—”μ§„ μ΅œμ ν™” (SEO) κ΄€μ μ˜ 영ν–₯** * **CSR의 ν•œκ³„**: ꡬ글봇 λ“±μ˜ 검색 엔진이 전톡적인 React 앱을 크둀링할 λ•Œ μ΄ˆκΈ°μ—λŠ” ν…… 빈 HTML κ»λ°κΈ°λ§Œμ„ 보게 λ©λ‹ˆλ‹€ [4]. JavaScript 싀행이 μ§€μ—°λ˜κ±°λ‚˜ μ‹€νŒ¨ν•˜λ©΄ μ½˜ν…μΈ  인덱싱이 λˆ„λ½λ  수 있으며, λ Œλ”λ§μ„ μœ„ν•΄ 크둀링 μ˜ˆμ‚°μ„ λ‚­λΉ„ν•˜κ²Œ λ©λ‹ˆλ‹€ [8, 9]. * **SSR의 이점**: 검색 봇이 μ™„μ„±λœ HTMLκ³Ό 메타데이터, κ΅¬μ‘°ν™”λœ 데이터λ₯Ό μ¦‰μ‹œ μˆ˜μ‹ ν•˜λ―€λ‘œ, 크둀링 μ§€μ—° 없이 즉각적인 인덱싱이 κ°€λŠ₯ν•©λ‹ˆλ‹€ [10-12]. λ”°λΌμ„œ 높은 SEO μ„±κ³Όκ°€ ν•„μˆ˜μ μΈ ν”„λ‘œμ νŠΈμ—μ„œλŠ” SSR 채택이 ν•„μˆ˜μ μž…λ‹ˆλ‹€ [6]. * **μ›Ή μ„±λŠ₯ 및 Core Web Vitals μ΅œμ ν™”** * **LCP (Largest Contentful Paint)**: CSR ν™˜κ²½μ—μ„œλŠ” 큰 JavaScript λ²ˆλ“€μ˜ λ‹€μš΄λ‘œλ“œμ™€ μ‹€ν–‰, ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ 데이터 패칭 λ“±μœΌλ‘œ 인해 LCPκ°€ 크게 지연될 수 μžˆμŠ΅λ‹ˆλ‹€ [13-15]. SSR을 κ΅¬ν˜„ν•˜λ©΄ λ Œλ”λ§ 지연을 μ—†μ•  LCPλ₯Ό λŒ€ν­ κ°œμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€(사둀에 λ”°λ₯΄λ©΄ μ•½ 1,000ms κ°œμ„  κ°€λŠ₯) [16-19]. * **μˆ˜ν™”(Hydration)와 INP**: SSR을 μ‚¬μš©ν•΄ HTML을 λΉ λ₯΄κ²Œ μ œκ³΅ν•˜λ”λΌλ„, ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ JavaScriptκ°€ HTMLκ³Ό κ²°ν•©ν•˜μ—¬ μƒν˜Έμž‘μš©μ„ ν™œμ„±ν™”ν•˜λŠ” 'μˆ˜ν™”(Hydration)' κ³Όμ •μ—μ„œ 메인 μŠ€λ ˆλ“œκ°€ 차단될 수 μžˆμŠ΅λ‹ˆλ‹€ [15]. μ΄λŠ” μƒˆλ‘œμš΄ μ„±λŠ₯ μ§€ν‘œμΈ INP(Interaction to Next Paint) μ €ν•˜λ₯Ό μœ λ°œν•  수 μžˆμœΌλ―€λ‘œ 점진적 μˆ˜ν™”(Progressive Hydration) 같은 μ΅œμ ν™”κ°€ ν•„μš”ν•©λ‹ˆλ‹€ [15, 20]. * **λ³΄μ•ˆ 고렀사항 (Security)** * **CSR λ³΄μ•ˆ**: ν”„λ‘ νŠΈμ—”λ“œμ— λΉ„μ¦ˆλ‹ˆμŠ€ 둜직이 λ…ΈμΆœλ˜λ―€λ‘œ 크둜슀 μ‚¬μ΄νŠΈ μŠ€ν¬λ¦½νŒ…(XSS) 취약점에 λŒ€λΉ„ν•΄ μ½˜ν…μΈ  μ†Œλ…κ³Ό κ°•λ ₯ν•œ μ½˜ν…μΈ  λ³΄μ•ˆ μ •μ±…(CSP) 적용이 μ€‘μš”ν•©λ‹ˆλ‹€ [21, 22]. * **SSR λ³΄μ•ˆ**: μ„œλ²„μ—μ„œ λ™μ μœΌλ‘œ 데이터λ₯Ό μ²˜λ¦¬ν•˜λ―€λ‘œ 데이터 μ£Όμž…(SQLi λ“±)μ΄λ‚˜ μ„œλ²„ μΈ‘ μš”μ²­ μœ„μ‘°(SSRF), λ―Όκ°ν•œ λ‚΄λΆ€ API λ…ΈμΆœμ˜ μœ„ν—˜μ΄ μžˆμ–΄ λͺ¨λ“  μž…μΆœλ ₯에 λŒ€ν•œ μ² μ €ν•œ 검증과 κΆŒν•œ λΆ€μ—¬κ°€ ν•„μš”ν•©λ‹ˆλ‹€ [21, 23]. * **λͺ¨λ˜ μ›Ή μ•„ν‚€ν…μ²˜μ˜ μ§„ν™” (Hybrid Rendering)** * 졜근의 μ›Ή μ—”μ§€λ‹ˆμ–΄λ§μ€ SSRκ³Ό CSR, 그리고 λΉŒλ“œ νƒ€μž„μ— HTML을 μƒμ„±ν•˜λŠ” SSG(Static Site Generation)λ₯Ό κ²°ν•©ν•œ ν•˜μ΄λΈŒλ¦¬λ“œ λ Œλ”λ§μ„ μ§€ν–₯ν•©λ‹ˆλ‹€ [24]. * Next.jsλ‚˜ Remix 같은 ν”„λ ˆμž„μ›Œν¬λ₯Ό ν™œμš©ν•˜μ—¬, SEOκ°€ 덜 μ€‘μš”ν•œ 인증된 μ‚¬μš©μž λŒ€μ‹œλ³΄λ“œμ—λŠ” CSR을, μ‹€μ‹œκ°„ μ—…λ°μ΄νŠΈκ°€ ν•„μš”ν•œ νŽ˜μ΄μ§€μ—λŠ” SSR을, 정적 λ§ˆμΌ€νŒ… νŽ˜μ΄μ§€μ—λŠ” SSGλ₯Ό μ„ νƒμ μœΌλ‘œ μ μš©ν•˜λŠ” 방식이 ꢌμž₯λ©λ‹ˆλ‹€ [25-27]. ## πŸ”— Knowledge Connections - **Related Topics:** [[Core Web Vitals]], [[Single Page Application (SPA)]], [[Static Site Generation (SSG)]], [[Search Engine Optimization (SEO)]] - **Projects/Contexts:** [[ν•˜μ΄λΈŒλ¦¬λ“œ μ›Ή λ Œλ”λ§ μ•„ν‚€ν…μ²˜ 섀계]], [[Next.js 및 Remixλ₯Ό ν™œμš©ν•œ SEO μ΅œμ ν™” νŒŒμ΄ν”„λΌμΈ ꡬ좕]] - **Contradictions/Notes:** CSR 방식은 초기 λ Œλ”λ§ 속도가 느리고 SEO에 치λͺ…적인 약점이 μžˆμ§€λ§Œ [5, 8], JavaScript λ‘œλ“œκ°€ λλ‚œ μ΄ν›„μ—λŠ” ν™”λ©΄ κΉœλΉ‘μž„ 없이 λ§€λ„λŸ½κ²Œ νŽ˜μ΄μ§€ κ°„ 이동이 κ°€λŠ₯ν•΄ 'Time to Interactive(TTI)' μΈ‘λ©΄μ—μ„œλŠ” 높은 평가λ₯Ό λ°›μŠ΅λ‹ˆλ‹€ [28]. λ”°λΌμ„œ λͺ¨λ“  상황에 SSR이 정닡인 것은 μ•„λ‹ˆλ©°, νŽ˜μ΄μ§€λ³„ λΉ„μ¦ˆλ‹ˆμŠ€ λͺ©μ μ— 맞게 λ Œλ”λ§ μ „λž΅(Hybrid Rendering)을 ν˜Όν•©ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 것이 λͺ¨λ˜ μ›Ή μ•„ν‚€ν…μ²˜μ˜ ν•΅μ‹¬μž…λ‹ˆλ‹€ [24, 29]. --- *Last updated: 2026-04-26*