# [[Zero-Runtime CSS-in-JS|Zero-runtime CSS-in-JS]] ## πŸ“Œ Brief Summary Zero-runtime [[CSS-in-JS|CSS-in-JS]]λŠ” λΈŒλΌμš°μ €μ—μ„œ μŠ€νƒ€μΌμ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ JavaScript λŸ°νƒ€μž„ μ˜€λ²„ν—€λ“œ 없이, λΉŒλ“œ νƒ€μž„μ— 정적 CSSλ₯Ό μƒμ„±ν•˜λŠ” μŠ€νƒ€μΌλ§ νŒ¨λŸ¬λ‹€μž„μ΄λ‹€ [1, 2]. λŒ€ν‘œμ μΈ 도ꡬ인 `vanilla-extract`λŠ” νƒ€μž… μ•ˆμ „(type-safe)ν•œ μŠ€νƒ€μΌλ§μ„ μ œκ³΅ν•˜λ©΄μ„œλ„ λŸ°νƒ€μž„ λΉ„μš©μ„ μ „ν˜€ λ°œμƒμ‹œν‚€μ§€ μ•ŠλŠ”λ‹€ [1]. μ΄λŠ” [[React Server Components|React Server Components]](RSC) ν™˜κ²½κ³Ό ν˜Έν™˜λ˜μ§€ μ•ŠλŠ” κΈ°μ‘΄ λŸ°νƒ€μž„ CSS-in-JS의 ν•œκ³„λ₯Ό κ·Ήλ³΅ν•˜κ³  λ„€μ΄ν‹°λΈŒ CSS μˆ˜μ€€μ˜ μ„±λŠ₯을 λ‹¬μ„±ν•˜κΈ° μœ„ν•œ 핡심 λŒ€μ•ˆμœΌλ‘œ ν‰κ°€λ°›λŠ”λ‹€ [1-3]. ## πŸ“– Core Content * **λ“±μž₯ λ°°κ²½ 및 RSC ν˜Έν™˜μ„± 문제:** 기쑴의 [[Styled Components|Styled Components]]λ‚˜ Emotionκ³Ό 같은 CSS-in-JS λΌμ΄λΈŒλŸ¬λ¦¬λ“€μ€ λΈŒλΌμš°μ €μ—μ„œ JavaScriptλ₯Ό μ‹€ν–‰ν•˜μ—¬ CSS λ¬Έμžμ—΄μ„ μƒμ„±ν•˜κ³  μ£Όμž…ν•˜λŠ” λŸ°νƒ€μž„ λΉ„μš©μ„ λ°œμƒμ‹œμΌ°λ‹€ [4, 5]. μ΄λŸ¬ν•œ 방식은 특히 React Context에 μ˜μ‘΄ν•˜κΈ° λ•Œλ¬Έμ—, Contextκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” React [[Server Components|Server Components]](RSC) ν™˜κ²½μ—μ„œλŠ” 근본적으둜 ν˜Έν™˜λ˜μ§€ μ•ŠλŠ”λ‹€λŠ” 큰 λ§ˆμ°°μ„ 빚게 λ˜μ—ˆλ‹€ [2, 3, 6]. μ΄λŸ¬ν•œ μ„±λŠ₯ 및 ν˜Έν™˜μ„± 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄, λŸ°νƒ€μž„ μ£Όμž… μ˜€λ²„ν—€λ“œ 없이 λΉŒλ“œ νƒ€μž„μ— 정적 CSSλ₯Ό μƒμ„±ν•˜λŠ” zero-runtime νŒ¨λŸ¬λ‹€μž„μœΌλ‘œμ˜ μ „ν™˜μ΄ μš”κ΅¬λ˜μ—ˆλ‹€ [2]. * **μ£Όμš” νŠΉμ§• 및 `vanilla-extract`:** Zero-runtime CSS-in-JSλŠ” JavaScript μ΅œμš°μ„  μŠ€νƒ€μΌλ§μ˜ 개발자 인체곡학적(ergonomics) 이점을 λˆ„λ¦¬λ©΄μ„œλ„ λ„€μ΄ν‹°λΈŒ CSS의 μ„±λŠ₯을 μ œκ³΅ν•˜λŠ” 것을 λͺ©ν‘œλ‘œ ν•œλ‹€ [7]. 이 λ°©μ‹μ˜ λŒ€ν‘œμ μΈ 라이브러리인 `vanilla-extract`λŠ” λΉŒλ“œ νƒ€μž„μ— [[CSS Modules|CSS Modules]]처럼 정적인 CSSλ₯Ό μƒμ„±ν•˜λ©°, TypeScriptλ₯Ό ν™œμš©ν•΄ μ™„μ „νžˆ νƒ€μž… μ•ˆμ „ν•œ(type-safe) μŠ€νƒ€μΌλ§μ„ 제둜 λŸ°νƒ€μž„ μ˜€λ²„ν—€λ“œλ‘œ μ§€μ›ν•œλ‹€ [1]. 결과적으둜 λΈŒλΌμš°μ €λŠ” 무거운 JavaScript μ‹€ν–‰ 없이 μŠ€νƒ€μΌμ„ 기본적으둜 νŒŒμ‹±ν•  수 있게 λœλ‹€ [2]. * **적용 μ‹œκΈ° 및 λͺ¨λ²” 사둀:** λ‹€μˆ˜μ˜ ν…Œλ§ˆλ₯Ό 관리해야 ν•˜λŠ” λŒ€κ·œλͺ¨ λ””μžμΈ μ‹œμŠ€ν…œμ„ ꡬ좕할 λ•Œ 제둜 λŸ°νƒ€μž„μ΄λ©΄μ„œ νƒ€μž… μ•ˆμ „μ„±μ„ 보μž₯ν•˜λŠ” `vanilla-extract`의 μ‚¬μš©μ΄ κ°•λ ₯히 ꢌμž₯λœλ‹€ [8]. 반면 [[Next.js App Router|Next.js App Router]]λ₯Ό μ‚¬μš©ν•˜λŠ” μ‹ κ·œ ν”„λ‘œμ νŠΈμ˜ 경우, λŸ°νƒ€μž„ λ°©μ‹μ˜ CSS-in-JS μ‚¬μš©μ€ μ§€μ–‘ν•΄μ•Ό ν•˜λ©° zero-runtime CSS-in-JS, [[Tailwind CSS|Tailwind CSS]] λ˜λŠ” CSS Modules 쀑 ν•˜λ‚˜λ₯Ό μ±„νƒν•˜λŠ” 것이 μ•„ν‚€ν…μ²˜ κ΄€μ μ—μ„œμ˜ λͺ¨λ²” 사둀이닀 [8]. ## πŸ”— Knowledge Connections - **Related Topics:** [[React Server Components (RSC)|React Server Components (RSC]], CSS-in-JS, Tailwind CSS, [[Design Tokens|Design Tokens]], [[Next.js App Router|Next.js App Router]] - **Projects/Contexts:** [[vanilla-extract|vanilla-extract]], λŒ€κ·œλͺ¨ λ””μžμΈ μ‹œμŠ€ν…œ(Large DesignSystems) - **Contradictions/Notes:** κΈ°μ‘΄ λŸ°νƒ€μž„ CSS-in-JS(예: [[styled-components|styled-components]])λŠ” μ»΄ν¬λ„ŒνŠΈ λ‹¨μœ„μ˜ κ°•λ ₯ν•œ 동적 μŠ€νƒ€μΌλ§ κΈ°λŠ₯κ³Ό νŽΈλ¦¬ν•œ 개발자 κ²½ν—˜μ„ μ œκ³΅ν•˜μ§€λ§Œ [4], [[Next.js|Next.js]] App Router와 같은 μ΅œμ‹  RSC ν™˜κ²½μ—μ„œλŠ” μ‹¬κ°ν•œ μ„±λŠ₯ μ €ν•˜μ™€ λŸ°νƒ€μž„ ν˜Έν™˜μ„± 문제λ₯Ό μ•ΌκΈ°ν•˜λ―€λ‘œ Zero-runtime CSS-in-JSλ‚˜ Tailwind CSS둜 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•˜λŠ” 것이 λŒ€μ•ˆμœΌλ‘œ μ œμ‹œλœλ‹€ [3, 8]. --- *Last updated: 2026-04-26*