# [[CSS-in-JS]] ## πŸ“Œ Brief Summary CSS-in-JSλŠ” JavaScript 파일 λ‚΄μ—μ„œ CSSλ₯Ό 직접 μž‘μ„±ν•˜μ—¬ μ»΄ν¬λ„ŒνŠΈ λ‹¨μœ„λ‘œ μŠ€νƒ€μΌμ„ κ²°ν•©ν•˜λŠ” λͺ¨λ˜ μ›Ή μŠ€νƒ€μΌλ§ μ ‘κ·Ό λ°©μ‹μž…λ‹ˆλ‹€ [1, 2]. 기쑴의 전톡적인 CSSκ°€ κ°€μ§„ κΈ€λ‘œλ²Œ μŠ€μ½”ν”„(Global Scope) 문제λ₯Ό ν•΄κ²°ν•˜κ³ , μ»΄ν¬λ„ŒνŠΈμ˜ μƒνƒœ(State)λ‚˜ ν”„λ‘­μŠ€(Props)에 κΈ°λ°˜ν•œ 동적 μŠ€νƒ€μΌλ§μ„ κ°€λŠ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€ [1, 3, 4]. λŒ€ν‘œμ μΈ λΌμ΄λΈŒλŸ¬λ¦¬λ‘œλŠ” styled-components와 Emotion이 μžˆμ§€λ§Œ, 졜근 λŸ°νƒ€μž„ μ„±λŠ₯ μ˜€λ²„ν—€λ“œμ™€ ν”„λ ˆμž„μ›Œν¬ ν˜Έν™˜μ„± 문제둜 인해 λΉŒλ“œ νƒ€μž„μ— CSSλ₯Ό μΆ”μΆœν•˜λŠ” Zero-Runtime λ°©μ‹μœΌλ‘œ μ§„ν™”ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€ [5-8]. ## πŸ“– Core Content - **μ£Όμš” μž₯점:** - **μŠ€μ½”ν”„ 고립 및 좩돌 λ°©μ§€:** μžλ™μœΌλ‘œ κ³ μœ ν•œ 클래슀λͺ…을 μƒμ„±ν•˜μ—¬ μŠ€νƒ€μΌμ˜ μΆ©λŒμ„ 막아주며, BEMκ³Ό 같은 λ³΅μž‘ν•œ 넀이밍 μ»¨λ²€μ…˜ 없이도 μΊ‘μŠν™”λ₯Ό 달성할 수 μžˆμŠ΅λ‹ˆλ‹€ [9, 10]. - **동적 μŠ€νƒ€μΌλ§ 및 ν…Œλ§ˆ 적용:** μ»΄ν¬λ„ŒνŠΈμ˜ ν”„λ‘­μŠ€(Props)와 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μƒνƒœ(State)에 직접 μ ‘κ·Όν•˜μ—¬ μŠ€νƒ€μΌμ„ 생성할 수 μžˆμ–΄, λ³΅μž‘ν•œ ν…Œλ§ˆ(Theming) μ‹œμŠ€ν…œμ„ λ§€λ„λŸ½κ²Œ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [3, 4, 8]. - **응집도(Co-location):** μ»΄ν¬λ„ŒνŠΈμ˜ 둜직과 μŠ€νƒ€μΌμ΄ ν•œ νŒŒμΌμ— μœ„μΉ˜ν•˜λ―€λ‘œ, μœ μ§€λ³΄μˆ˜μ„±μ΄ λ†’κ³  μ»΄ν¬λ„ŒνŠΈλ₯Ό μ΄λ™ν•˜κ±°λ‚˜ μ‚­μ œν•  λ•Œ μŠ€νƒ€μΌ μ½”λ“œκ°€ λ²„λ €μ§€λŠ”(orphaned CSS) 문제λ₯Ό λ°©μ§€ν•©λ‹ˆλ‹€ [3, 4, 11]. - **개발자 κ²½ν—˜(DX):** TypeScript 톡합을 ν†΅ν•œ νƒ€μž… μ•ˆμ •μ„±, μžλ™ μ™„μ„±, μžλ™ 벀더 프리픽싱(Vendor prefixing) 등을 μ§€μ›ν•˜μ—¬ 버그λ₯Ό 쀄이고 개발 μ‹œκ°„μ„ λ‹¨μΆ•μ‹œν‚΅λ‹ˆλ‹€ [12, 13]. - **μ£Όμš” 단점 및 ν•œκ³„:** - **λŸ°νƒ€μž„ μ„±λŠ₯ μ˜€λ²„ν—€λ“œ:** λΈŒλΌμš°μ € λŸ°νƒ€μž„μ—μ„œ CSS λ¬Έμžμ—΄μ„ νŒŒμ‹±ν•˜κ³  DOM에 μ£Όμž…ν•΄μ•Ό ν•˜λ©°, ν”„λ‘­μŠ€ λ³€κ²½ μ‹œ μŠ€νƒ€μΌμ„ μž¬κ³„μ‚°ν•΄μ•Ό ν•˜λ―€λ‘œ λ Œλ”λ§ μ‹œκ°„μ΄ μ§€μ—°λ©λ‹ˆλ‹€ [4, 12, 14, 15]. - **λ²ˆλ“€ 크기 증가:** styled-components(μ•½ 12.7kb~30kb)λ‚˜ Emotion(μ•½ 7.9kb~12kb) λ“±μ˜ 라이브러리 μžμ²΄κ°€ JavaScript λ²ˆλ“€μ— μΆ”κ°€λ˜μ–΄ 초기 λ‘œλ”© 및 싀행에 뢀담을 μ€λ‹ˆλ‹€ [7, 14]. - **React Server Components (RSC) ν˜Έν™˜μ„± 문제:** React의 μ»¨ν…μŠ€νŠΈ(Context)에 μ˜μ‘΄ν•˜λŠ” λŸ°νƒ€μž„ CSS-in-JS λΌμ΄λΈŒλŸ¬λ¦¬λ“€μ€ μ„œλ²„ ν™˜κ²½μ—μ„œ κ΅¬λ™λ˜λŠ” React Server Components ν™˜κ²½κ³Ό 근본적으둜 ν˜Έν™˜λ˜μ§€ μ•Šμ•„, 2024~2025λ…„ 이후 ν˜„λŒ€μ μΈ ν”„λ ˆμž„μ›Œν¬(예: Next.js App Router) ν™˜κ²½μ—μ„œ 큰 문제둜 λŒ€λ‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€ [7, 8, 16]. - **미래 동ν–₯ 및 ν•΄κ²°μ±… (Zero-Runtime CSS-in-JS):** - λŸ°νƒ€μž„ μ˜€λ²„ν—€λ“œ 및 RSC ν˜Έν™˜μ„± 문제λ₯Ό κ·Ήλ³΅ν•˜κΈ° μœ„ν•΄, 개발 μ‹œμ—λŠ” CSS-in-JS의 문법을 μ‚¬μš©ν•˜λ˜ λΉŒλ“œ νƒ€μž„(Build time)에 정적인 CSS 파일둜 μΆ”μΆœν•˜λŠ” **Zero-Runtime** 접근법이 λ“±μž₯ν–ˆμŠ΅λ‹ˆλ‹€ [5, 6, 15, 16]. - Linaria, vanilla-extract, Panda CSS 등이 λŒ€ν‘œμ μ΄λ©°, 이듀은 λŸ°νƒ€μž„ νŽ˜λ„ν‹° 없이 νƒ€μž… μ•ˆμ •μ„±κ³Ό μ»΄ν¬λ„ŒνŠΈ 기반 μŠ€νƒ€μΌλ§μ˜ 이점을 μ œκ³΅ν•˜μ—¬ λŒ€κ·œλͺ¨ μ—”ν„°ν”„λΌμ΄μ¦ˆ μ‹œμŠ€ν…œμ—μ„œλ„ ꢌμž₯λ˜λŠ” λ°©μ‹μœΌλ‘œ 자리 작고 μžˆμŠ΅λ‹ˆλ‹€ [15, 17, 18]. ## πŸ”— Knowledge Connections - **Related Topics:** [[CSS Modules]], [[Tailwind CSS]], [[Zero-Runtime CSS-in-JS]], [[React Server Components]], [[Design Tokens]] - **Projects/Contexts:** [[μ»΄ν¬λ„ŒνŠΈ 기반 μ•„ν‚€ν…μ²˜]], [[Next.js App Router ν”„λ‘œμ νŠΈ]], [[λŒ€κ·œλͺ¨ μ—”ν„°ν”„λΌμ΄μ¦ˆ ν…Œλ§ˆ μ‹œμŠ€ν…œ]] - **Contradictions/Notes:** μ†ŒμŠ€ λ¬Έν—Œλ“€μ€ CSS-in-JSκ°€ κ°•λ ₯ν•œ 동적 μŠ€νƒ€μΌλ§κ³Ό μš°μˆ˜ν•œ 개발자 κ²½ν—˜μ„ μ œκ³΅ν•œλ‹€κ³  λ™μ˜ν•˜μ§€λ§Œ [3, 4, 8], μ„±λŠ₯ μ˜€λ²„ν—€λ“œμ™€ μ΅œμ‹  React Server Components의 λ“±μž₯μ΄λΌλŠ” 기술적 λ°°κ²½ λ³€ν™”λ‘œ 인해 μƒˆλ‘œμš΄ ν”„λ‘œμ νŠΈμ—μ„œλŠ” λŸ°νƒ€μž„ 기반의 CSS-in-JS(styled-components, Emotion λ“±)의 μ‚¬μš©μ„ ν”Όν•˜κ³ , λŒ€μ‹  [[Tailwind CSS]], [[CSS Modules]], ν˜Ήμ€ [[vanilla-extract]] 같은 Zero-runtime μ†”λ£¨μ…˜μœΌλ‘œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•  것을 κ°•λ ₯히 ꢌμž₯ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€ [8, 16, 19]. --- *Last updated: 2026-04-26*