# [[React Server Components|React Server Components]] ## πŸ“Œ Brief Summary React Server Components(RSC)λŠ” λΈŒλΌμš°μ €κ°€ μ•„λ‹Œ μ„œλ²„μ—μ„œλ§Œ λ…μ μ μœΌλ‘œ λ Œλ”λ§λ˜μ–΄ ν΄λΌμ΄μ–ΈνŠΈλ‘œ JavaScript λ²ˆλ“€μ„ μ „μ†‘ν•˜μ§€ μ•ŠλŠ” React의 ν˜μ‹ μ μΈ λ Œλ”λ§ μ•„ν‚€ν…μ²˜μž…λ‹ˆλ‹€ [1]. 이 ν™˜κ²½μ—μ„œλŠ” React Context에 λŒ€ν•œ 접근이 λΆˆκ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— 기쑴의 λŸ°νƒ€μž„ 기반 μŠ€νƒ€μΌλ§ λ„κ΅¬μ™€μ˜ ν˜Έν™˜μ„± 문제λ₯Ό μ•ΌκΈ°ν–ˆμœΌλ©°, ν”„λ‘ νŠΈμ—”λ“œμ˜ μŠ€νƒ€μΌλ§ νŒ¨λŸ¬λ‹€μž„μ— 큰 λ³€ν™”λ₯Ό κ°€μ Έμ™”μŠ΅λ‹ˆλ‹€ [2, 3]. 결과적으둜 ν™•μž₯ κ°€λŠ₯ν•œ ν”„λ‘ νŠΈμ—”λ“œ μ•„ν‚€ν…μ²˜λ₯Ό κ΅¬μΆ•ν•˜λ €λ©΄ μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈμ˜ 역할을 λͺ…ν™•νžˆ λΆ„λ¦¬ν•˜κ³  RSC ν™˜κ²½μ— μ΅œμ ν™”λœ μŠ€νƒ€μΌλ§ μ „λž΅μ„ μ±„νƒν•˜λŠ” 것이 ν•„μˆ˜μ μž…λ‹ˆλ‹€ [4, 5]. ## πŸ“– Core Content * **RSC의 λ™μž‘ 원리와 μ»΄ν¬λ„ŒνŠΈ ꡬ성**: μ„œλ²„ μ»΄ν¬λ„ŒνŠΈλŠ” μ™„μ „νžˆ μ„œλ²„μ—μ„œ μ‹€ν–‰λ˜μ–΄ λ°μ΄ν„°λ² μ΄μŠ€μ— 직접 μ ‘κ·Όν•  수 있으며, λ Œλ”λ§λœ 정적 HTMLλ§Œμ„ ν΄λΌμ΄μ–ΈνŠΈμ— μ „λ‹¬ν•˜λ―€λ‘œ μ„±λŠ₯ μ΅œμ ν™”μ™€ λ³΄μ•ˆ μœ μ§€μ— νƒμ›”ν•©λ‹ˆλ‹€ [1]. 반면, μ»΄ν¬λ„ŒνŠΈμ— μƒνƒœ(state)λ‚˜ 이벀트 ν•Έλ“€λŸ¬ 같은 λΈŒλΌμš°μ € μƒν˜Έμž‘μš©μ΄ ν•„μš”ν•œ κ²½μš°μ— ν•œν•΄ `'use client'` μ§€μ‹œμ–΄λ₯Ό λͺ…μ‹œν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈλ‘œ 뢄리해야 ν•©λ‹ˆλ‹€ [6]. λͺ¨λ²”적인 μ•„ν‚€ν…μ²˜ ꡬ성을 μœ„ν•΄μ„œλŠ” 데이터 νŒ¨μΉ­μ„ μ„œλ²„ μ»΄ν¬λ„ŒνŠΈμ—μ„œ μ²˜λ¦¬ν•˜κ³  μƒν˜Έμž‘μš©μ΄ ν•„μš”ν•œ μ΅œμ†Œν•œμ˜ μ˜μ—­λ§Œ ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈλ‘œ μœ μ§€ν•΄μ•Ό ν•©λ‹ˆλ‹€ [5, 7]. * **κΈ°μ‘΄ CSS-in-JS μ•„ν‚€ν…μ²˜μ™€μ˜ 마찰**: RSC의 μ„œλ²„ μ „μš© λ Œλ”λ§ ν™˜κ²½μ€ κΈ°μ‘΄ ν”„λ‘ νŠΈμ—”λ“œ μƒνƒœκ³„μ— 큰 영ν–₯을 λ―Έμ³€μŠ΅λ‹ˆλ‹€. 특히 `styled-components`λ‚˜ `Emotion`κ³Ό 같은 λŸ°νƒ€μž„ CSS-in-JS λΌμ΄λΈŒλŸ¬λ¦¬λŠ” ν…Œλ§ˆ μ£Όμž…μ„ μœ„ν•΄ λ‚΄λΆ€μ μœΌλ‘œ React Context에 크게 μ˜μ‘΄ν•˜λŠ”λ°, RSC ν™˜κ²½μ—λŠ” React Contextκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ ꡬ쑰적인 λΉ„ν˜Έν™˜μ„±(incompatibility)이 λ°œμƒν•©λ‹ˆλ‹€ [2, 3, 8]. * **ν˜„λŒ€μ μΈ μŠ€νƒ€μΌλ§ 및 λ Œλ”λ§ μ „λž΅**: μœ„μ™€ 같은 ν˜Έν™˜μ„± 문제둜 인해 ν˜„μž¬ Next.js App Routerλ₯Ό λΉ„λ‘―ν•œ RSC ν™˜κ²½μ—μ„œλŠ” λŸ°νƒ€μž„ μ˜€λ²„ν—€λ“œκ°€ μ—†λŠ” λΉŒλ“œ νƒ€μž„ μŠ€νƒ€μΌλ§ 방식이 κ°•λ ₯히 ꢌμž₯λ©λ‹ˆλ‹€ [2, 9]. 정적 CSSλ₯Ό μƒμ„±ν•˜λŠ” `Tailwind CSS`, `CSS Modules` λ˜λŠ” Zero-runtime CSS-in-JS인 `vanilla-extract`λ₯Ό λ„μž…ν•˜λŠ” 것이 μ„±λŠ₯을 ν–₯μƒμ‹œν‚€κ³  λ³΅μž‘μ„±μ„ μ€„μ΄λŠ” 핡심 μ „λž΅μž…λ‹ˆλ‹€ [3, 4, 9]. RSC ν™˜κ²½μ—μ„œλŠ” μˆ˜λ§Žμ€ 고유 클래슀λ₯Ό λŸ°νƒ€μž„μ— λ™μ μœΌλ‘œ μƒμ„±ν•˜κΈ°λ³΄λ‹€, 정적인 μŠ€νƒ€μΌμ„ μœ μ§€ν•˜λ˜ 데이터 속성(`data-*` attributes)을 λ³€κ²½ν•˜μ—¬ μƒνƒœ λ³€ν˜•μ„ μ œμ–΄ν•˜λŠ” 방식이 μ„±λŠ₯ μ΅œμ ν™”μ— μœ λ¦¬ν•©λ‹ˆλ‹€ [10]. * **Styled-components의 RSC 지원 및 우회 방식**: μ™„μ „ν•œ λŒ€μ•ˆμœΌλ‘œ μ „ν™˜ν•˜μ§€ λͺ»ν•˜λŠ” ν”„λ‘œμ νŠΈλ₯Ό μœ„ν•΄ `styled-components`λŠ” v6.3.0λΆ€ν„° RSC ν™˜κ²½μ„ μžλ™ κ°μ§€ν•˜λŠ” 패치λ₯Ό μ μš©ν–ˆμŠ΅λ‹ˆλ‹€ [11]. RSC ν™˜κ²½μ—μ„œλŠ” `ThemeProvider`κ°€ 아무 λ™μž‘λ„ ν•˜μ§€ μ•ŠλŠ” 패슀슀루(no-op)둜 λ³€ν•˜κΈ° λ•Œλ¬Έμ—, 이λ₯Ό λŒ€μ²΄ν•  수 μžˆλ„λ‘ CSS Custom Properties(λ³€μˆ˜) 기반의 ν…Œλ§ˆλ₯Ό μƒμ„±ν•˜λŠ” `createTheme` 헬퍼 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•  것을 ꢌμž₯ν•©λ‹ˆλ‹€ [12, 13]. λ˜ν•œ SSR μ‹œ μŠ€νƒ€μΌμ΄ μœ μ‹€λ˜μ§€ μ•Šλ„λ‘ μ„œλ²„μ—μ„œ λ Œλ”λ§ 쀑 CSSλ₯Ό μˆ˜μ§‘ν•˜μ—¬ μ‚½μž…ν•˜λŠ” `Style Registry` νŒ¨ν„΄μ„ ꡬ성해야 ν•˜λ©°, 인라인 μŠ€νƒ€μΌ νƒœκ·Έ μ‚½μž…μœΌλ‘œ 인해 깨질 수 μžˆλŠ” μžμ‹ 인덱슀 μ„ νƒμž 문제(`:first-child` λ“±)λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•œ `stylisPluginRSC` ν”ŒλŸ¬κ·ΈμΈλ„ ν•¨κ»˜ μ œκ³΅λ©λ‹ˆλ‹€ [14, 15]. ## πŸ”— Knowledge Connections - **Related Topics:** [[Tailwind CSS|Tailwind CSS]], [[Styled Components|Styled-components]], [[CSS-in-JS|CSS-in-JS]], Zero-runtime CSS - **Projects/Contexts:** [[Next.js App Router|Next.js App Router]] - **Contradictions/Notes:** μ†ŒμŠ€ [2, 3, 8]μ—μ„œλŠ” `styled-components` λ“± λŸ°νƒ€μž„ CSS-in-JSκ°€ React Context λΆ€μž¬λ‘œ 인해 RSC와 근본적으둜 ν˜Έν™˜λ˜μ§€ μ•ŠμœΌλ―€λ‘œ Next.js App Router ν™˜κ²½μ—μ„œ ν”Όν•΄μ•Ό ν•œλ‹€κ³  μ„€λͺ…ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ μ†ŒμŠ€ [11-14]에 λ”°λ₯΄λ©΄, `styled-components`λŠ” μ΅œμ‹  μ—…λ°μ΄νŠΈλ₯Ό 톡해 RSC ν™˜κ²½μ„ 슀슀둜 κ°μ§€ν•˜κ³  Context μ˜μ‘΄μ„ νƒˆν”Όν•˜μ—¬ CSS Custom Propertiesλ₯Ό μ‚¬μš©ν•˜λŠ” μƒˆλ‘œμš΄ API 및 μžλ™ μŠ€νƒ€μΌ 인라인 μ£Όμž… κΈ°λŠ₯으둜 RSC ν™˜κ²½μ—μ„œμ˜ μ‚¬μš©μ„ κ³„μ†ν•΄μ„œ μ§€μ›ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. --- *Last updated: 2026-04-26*