# [[Server Components]] ## πŸ“Œ[[ brief]] Summary [[React Server Components]](RSC)λŠ” λΉŒλ“œ νƒ€μž„ λ˜λŠ” μš”μ²­ μ‹œμ— μ„œλ²„μ—μ„œλ§Œ λ…μ μ μœΌλ‘œ μ‹€ν–‰λ˜κ³  ν΄λΌμ΄μ–ΈνŠΈλ‘œ [[JavaScript]]λ₯Ό μ „μ†‘ν•˜μ§€ μ•ŠλŠ” React의 λ Œλ”λ§ μ•„ν‚€ν…μ²˜μž…λ‹ˆλ‹€ [1]. [[Next.js App Router]]와 ν•¨κ»˜ 본격적으둜 λ„μž…λ˜μ–΄ ν”„λ‘ νŠΈμ—”λ“œ μƒνƒœκ³„μ— 큰 λ³€ν™”λ₯Ό κ°€μ Έμ™”μœΌλ©°, 특히 [[React Context]]에 μ˜μ‘΄ν•˜λŠ” κΈ°μ‘΄ [[CSS-in-JS]] λΌμ΄λΈŒλŸ¬λ¦¬λ“€κ³Όμ˜ ν˜Έν™˜μ„± 문제λ₯Ό λ°œμƒμ‹œμΌœ [[Tailwind CSS]]와 같은 제둜 λŸ°νƒ€μž„(zero-runtime) λ˜λŠ” μœ ν‹Έλ¦¬ν‹° μš°μ„ (utility-first) μŠ€νƒ€μΌλ§ νŒ¨λŸ¬λ‹€μž„μœΌλ‘œμ˜ μ „ν™˜μ„ κ°€μ†ν™”ν•˜λŠ” 핡심 μš”μΈμ΄ λ˜μ—ˆμŠ΅λ‹ˆλ‹€ [2-4]. ## πŸ“– Core Content * **RSC의 λ™μž‘ 방식과 νŠΉμ§•:** Server ComponentsλŠ” λΈŒλΌμš°μ €λ‘œ JavaScriptλ₯Ό 보내지 μ•Šκ³  μ •μ μœΌλ‘œ λ Œλ”λ§λœ HTMLλ§Œμ„ μ „μ†‘ν•©λ‹ˆλ‹€ [1]. λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 직접 데이터λ₯Ό κ°€μ Έμ˜€λŠ” λ“±μ˜ μ„œλ²„ λ‘œμ§μ„ μ•ˆμ „ν•˜κ²Œ μ²˜λ¦¬ν•  수 있으며, μƒν˜Έμž‘μš©(μƒνƒœ 관리, 이벀트 ν•Έλ“€λŸ¬ λ“±)μ΄λ‚˜ λΈŒλΌμš°μ € APIκ°€ ν•„μš”ν•œ κ²½μš°μ—λ§Œ λͺ…μ‹œμ μœΌλ‘œ `'use client'` μ§€μ‹œμ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈ([[Client Components]])λ₯Ό λ Œλ”λ§ν•˜λŠ” μ»΄ν¬μ§€μ…˜ νŒ¨ν„΄μ„ μ‚¬μš©ν•©λ‹ˆλ‹€ [1, 5]. 이둜 인해 ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ λ²ˆλ“€ 크기가 λŒ€ν­ 쀄어듀고 μ„±λŠ₯이 ν–₯μƒλ©λ‹ˆλ‹€ [6]. * **CSS-in-JS μŠ€νƒ€μΌλ§ λΌμ΄λΈŒλŸ¬λ¦¬μ™€μ˜ ν˜Έν™˜μ„± ν•œκ³„:** RSC ν™˜κ²½μ—μ„œλŠ” λΈŒλΌμš°μ € ν™˜κ²½κ³Ό React Contextκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ [3, 7]. λ”°λΌμ„œ ν…Œλ§ˆ 관리λ₯Ό μœ„ν•΄ React Context에 κ°•ν•˜κ²Œ μ˜μ‘΄ν•˜λ˜ [[Styled Components]]λ‚˜ Emotionκ³Ό 같은 λŸ°νƒ€μž„ 기반 CSS-in-JS λΌμ΄λΈŒλŸ¬λ¦¬λ“€μ€ RSC와 근본적으둜 ν˜Έν™˜λ˜μ§€ μ•ŠλŠ” 문제λ₯Ό κ²ͺμŠ΅λ‹ˆλ‹€ [2, 3, 7]. [[Next.js]] App Router와 같은 ν™˜κ²½μ—μ„œ 기쑴의 λŸ°νƒ€μž„ CSS-in-JSλ₯Ό μ‚¬μš©ν•˜λŠ” 것은 ν•˜μ΄λ“œλ ˆμ΄μ…˜([[Hydration]]) 뢈일치 및 μ„±λŠ₯ 병λͺ© ν˜„μƒμ„ μœ λ°œν•  수 μžˆμŠ΅λ‹ˆλ‹€ [2, 8]. * **RSC ν™˜κ²½μ—μ„œμ˜ μŠ€νƒ€μΌλ§ λͺ¨λ²” 사둀:** * **제둜 λŸ°νƒ€μž„ μŠ€νƒ€μΌλ§ ꢌμž₯:** λŸ°νƒ€μž„ μ˜€λ²„ν—€λ“œκ°€ μ—†κ³  μ„œλ²„ μ»¨ν…μŠ€νŠΈλ₯Ό μš”κ΅¬ν•˜μ§€ μ•ŠλŠ” Tailwind CSSλ‚˜ [[CSS Modules]], [[vanilla-extract]] 같은 정적 CSS 생성 방식이 RSC와 μ™„λ²½ν•˜κ²Œ ν˜Έν™˜λ˜λ―€λ‘œ μƒˆλ‘œμš΄ ν”„λ‘œμ νŠΈμ—μ„œ κ°•λ ₯히 ꢌμž₯λ©λ‹ˆλ‹€ [3, 9, 10]. * **정적 μŠ€νƒ€μΌκ³Ό 데이터 속성(Data attributes) ν™œμš©:** ν”„λ‘œνΌν‹° 변화에 따라 맀번 μƒˆλ‘œμš΄ 클래슀λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•˜λŠ” λŒ€μ‹ , 정적 μŠ€νƒ€μΌμ„ μ„ μ–Έν•˜κ³  이산적인 λ³€ν˜•(variants)에 λŒ€ν•΄μ„œλŠ” `&[data-size='lg']`와 같은 데이터 속성(data attributes)을 ν™œμš©ν•˜μ—¬ μƒνƒœλ₯Ό ν† κΈ€ν•˜λŠ” 것이 RSC ν™˜κ²½μ˜ μ΅œμ ν™” λͺ¨λ²” μ‚¬λ‘€μž…λ‹ˆλ‹€ [8, 11]. * **Styled Components의 RSC 지원 λŒ€μ‘:** Styled ComponentsλŠ” v6.3.0 이상뢀터 λ³„λ„μ˜ `'use client'` μ§€μ‹œμ–΄ 없이도 RSC ν™˜κ²½μ„ μžλ™ κ°μ§€ν•˜κ³  ν˜Έν™˜μ„±μ„ μ œκ³΅ν•˜λ„λ‘ μ—…λ°μ΄νŠΈλ˜μ—ˆμŠ΅λ‹ˆλ‹€ [11]. * RSC ν™˜κ²½μ—μ„œλŠ” `ThemeProvider`와 `StyleSheetManager`κ°€ μ»¨ν…μŠ€νŠΈκ°€ μ—†κΈ° λ•Œλ¬Έμ— 아무 λ™μž‘λ„ ν•˜μ§€ μ•ŠλŠ”(no-op) 톡과 μ»΄ν¬λ„ŒνŠΈκ°€ λ©λ‹ˆλ‹€ [11, 12]. * ν…Œλ§ˆλ₯Ό μœ„ν•΄μ„œλŠ” React Context λŒ€μ‹  CSS μ»€μŠ€ν…€ 속성(CSS custom properties/variables)으둜 λ³€ν™˜ν•΄ μ£ΌλŠ” `createTheme` 헬퍼 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 ꢌμž₯λ©λ‹ˆλ‹€ [11, 13]. * Next.js App Router ν™˜κ²½μ—μ„œλŠ” λ Œλ”λ§ 쀑 CSS κ·œμΉ™μ„ μˆ˜μ§‘ν•˜μ—¬ HTML ν—€λ“œμ— μ£Όμž…ν•˜λŠ” '[[Style Registry]] νŒ¨ν„΄'(`useServerInsertedHTML` ν™œμš©)을 톡해 SSR ν•˜μ΄λ“œλ ˆμ΄μ…˜ 문제λ₯Ό ν•΄κ²°ν•©λ‹ˆλ‹€ [14]. ## πŸ”— Knowledge Connections - **Related Topics:** [[CSS-in-JS]], [[Tailwind CSS]], [[Styled Components]] - **Projects/Contexts:** [[Next.js App Router]] - **Contradictions/Notes:** μ†ŒμŠ€μ— λ”°λ₯΄λ©΄ κΈ°μ‘΄ CSS-in-JS의 ν…Œλ§ˆ 제곡 방식(`ThemeProvider`)은 React Contextλ₯Ό ν•„μˆ˜μ μœΌλ‘œ μš”κ΅¬ν•˜κΈ° λ•Œλ¬Έμ— μ„œλ²„ μ»΄ν¬λ„ŒνŠΈ ν™˜κ²½μ—μ„œλŠ” λ™μž‘ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ RSC ν™˜κ²½μ—μ„œ ν…Œλ§ˆλ₯Ό κ΅¬ν˜„ν•˜λ €λ©΄ Context 기반이 μ•„λ‹Œ 순수 CSS λ³€μˆ˜([[CSS Variables]]) 기반의 ν…Œλ§ˆ κ΅¬ν˜„ λ°©μ‹μœΌλ‘œ 접근법을 λ°”κΏ”μ•Ό ν•©λ‹ˆλ‹€ [11-13]. --- *Last updated: 2026-04-26*